ブログを移設しました。
こんばんは。ひろし@Y.C.LABです。
更新が滞りまくっていましたが、実は、アプリのサーバーの移設など色々な作業をしていました。
その中で、このブログも移転します。
移転先↓↓
これからもY.C.LABをよろしくお願いします。
チームでいるということ
こんばんは。ひろし@Y.C.LABです。
久しぶりの更新になってしまいましたが、以前のように活動が止まっていたわけではありません。
継続して、アプリの開発・更新を行なっています。
最近では、目押しKINGのリール速度に「激ムズ」を追加しました。
3つのリールのスピードがランダムになります。
(今だけクリスマスバージョンの「目押しKING」 )
また、次のアプリの制作にも取り掛かっています。次はブロック崩しとシューティングゲームが融合した「Blosh」(ブロッシュ)をリリース予定です。
(次回リリース予定のアプリ「ブロッシュ」)
さて、こんな感じで色々作っている裏では、ココナラで今まで貯めてきた「知識」を売っています。
アプリ作成の疑問・質問にワンコインで答えます スマホアプリを自作していて困った時にご利用ください。
やっと売り上げも出せるようになってきて、いよいよ楽しくなってきました。
ここまでのことって、実は一人でもなんとかできちゃうんだけど(ってか最近は一人でやってるんだけど)やっぱりチームでやったほうが面白いと思うんです。
売り上げが出た時とかの喜びをいちいち共有したいです。
やっぱり人には向き不向きがどうしてもあって、でもほとんどのことは努力で乗り越えられるんだけど、努力をする時間があったら得意な人にそこは任せて、自分は自分の得意分野で勝負をする時間を多くした方がいいと思う。
まさにワンピースの世界。修行を繰り返して、自分の限界を超えて新しい敵に立ち向かっていくドラゴンボールの世界とは少し違う。
ここで間違えてはいけないのは、チームのメンバーはそれぞれ自分自身を高めていくことをやめてはいけないということ。寄りかかれるだけのチームはいらない。
そんな時に必要なのは間違いなく「リーダー」の存在。
リーダーの必須条件として、僕が好きというか、しっくりときている条件は次の2つ。
・よく笑うこと
・夢を語ること
よく笑っている人には、人が自然と集まるし、集まった人に夢を語ることでみんなが同じ方向を目指して頑張れる。
なんかまとまりがなくなってきたけど、今回言いたいことは、俺はチームで頑張るからな!一人でやってるんじゃねーぞってことです。
本気で池尻にオフィスを構えたいです。ってか構えます。
今日もココナラで依頼がきて少しドキドキしてます。
平成最後のクリスマスに向けて
こんばんは。ひろし@Y.C.LABです。
平成最後のクリスマスに向けてアプリの作成・更新を続けています。
まずは、目押しKINGのクリスマスバージョンを作っています。
具体的には、クリスマスバージョンのリール配置を作っています。
これ、なんでかというと、
すでにランキングがこんな状態なんですね。
かねねさんとちえさん半端ねー。
もちろんまだタイムを縮めることは可能なので、世界新を狙って欲しいのですが、ランキングの新陳代謝が悪くなることが容易に想像できるので、季節ごとのリール配置を作ってあげれば、その季節でのランキングということができそうだなと思ったんです。(天才!)
前はウォークリーとかマンスリーのランキングにしようかと思ったんだけど、この季節ごとってのがいいのかなと思ってます。
逆に言うと、季節ごとに目押しKINGはアップデートするぞ!っていう覚悟でもある。。
まぁ、アプリ開発のいいところは、こうやってリリースした後でもいくらでもやり直しがきくところですね。
これがファミコンのソフトとか完璧にパッケージ化されたものだと出来ないわけで、やっぱりこの方がいいやと思ったり、使ってくれた人の意見によってアップデートされたりできるのが今風でいい。
Y.C.LABがリリースしているアプリにご意見があればどしどし言ってください。可能な限り対応してアップデートをします。
しかし夜な夜なプログラミングをするのが寒くなってきた。
でもやるぞー。やるぞーって時はだいたい風邪ひかないし。
それでは!
ココナラで初めて質問を受け付けた話
こんばんは。ひろし@Y.C.LABです。
今日、目押しKINGがアップデートされました。
新たにランキング機能が追加されたので、世界チャンピオン目指して目押しを決めてください。
さて、そんな中、先日ココナラで初めて売り上げをあげることができました。
アプリ作成の疑問・質問にワンコインで答えます スマホアプリを自作していて困った時にご利用ください。
これ、人生の勝算を書いた前田裕二さんが言っていたことで、上達したいなら無理にでも教える側になってしまえということを見習って始めたことなんです。
ちなみに前田さんは英語が話せないのに英会話の先生になるというとんでもない方法で英語を習得したらしいです。
そんなことが書いてある人生の勝算めっちゃ面白いです。
で、本題だけど、今回ココナラで購入者の方とやり取りした内容を公開したいと思います。(了承を得ています)
「こんな感じでやり取りをしてるよ」ってのを見てもらえればココナラを使いやすくなるだろうし、何より、同じようなことで困っている人の助けになればいいなと思います。
それではスタート!
(購入者の方:Q、私の回答:A)
まずはスクリーンショットを送ってもらい、開発したいアプリの感じを確認。
Q:
何から始めればいいのかもいまいちわからないのですが、とりあえずキャラの立ち絵と背景のみは発注済みでしてその背景画像のサイズなどのご助言もいただきたく思います。
対応予定はiphonex系xmax系8系8plus系となっております。
A:
内容確認できました。
当初のご質問から順にお答えしたいと思います。
1.iosなどでいうuitabbarの様な物の実装方法やそれをシーンごとに共通して使う方法
unityでtabbarのようなものは、そのもので用意されていないと思いますので、私は、添付(回答1)のようにCanvas内にFooterというパネルを用意して、その中にボタンを子オブジェクトとして入れています。
このFooterを全てのシーンに入れることで、tabbarのような動作になります。
(回答1 ちなみにポスコレの開発画面)
2.アプリ全体で使用する画像のサイズやiphonex対応はどうすればいいのか
様々な画面サイズに対応させるため、Canvasの設定を添付(回答2)のようにあるサイズを指定し(今回の場合750x1334)Scale With Screen Sizeを指定し、Expandにしています。
色々なサイトでShirinkにしておけばいいという記述がありますが、iPhoneXのような縦長の画面に対応するにはExpandの方がいいと思います。
そして、そこに配置する画像は、全てCanvasのサイズに合わせて配置します。(今回の場合ですと750x1334です。)
あとは、配置した画像のInspector内の、Image内にあるPreserve Aspectにチェックを入れておけば、画像の縦横比が乱れることはありません。
(回答2 あとで追加説明してます)
3.ソシャゲの様なアプリの開発手順がよくわかりません(クライアントのみ)
今回、添付していただいたようなアプリですと、おみくじで出てくるものと、その先の画面の組み合わせを常に更新していかなければいけないと思いますので、unityのプロジェクト内に、その画面を登録していると、アップデートに追われることになると思います。
そこで、アプリ側は更新することなく、アプリから外部のサーバに問い合わせにいくようなシステムがいいと思います。(添付回答3少し雑ですみません。。)
(回答3 スピード重視のため雑です。。)
まずは上記ご確認いただき、さらにご質問あれば、よろしくお願いします。
A:
追加ですが、私の場合は、iPhone6のサイズで始めたために上記のような設定になっていますが、iPhone XのサイズでCanvasを作成(1125x2436)した場合は、Shrinkに設定すればいいと思います。
Q:
回答ありがとうございます。
1に関してはですがその子オブジェクト自体は画像をボタンにしたいのですが、設置時の方法はUIimageを使用してでしょうかそれともヒエラルキーに直接DDするのでしょうか?
またそのオブジェクト同士を等間隔かつ端末サイズが変わった時に自動で伸び縮みさせる方法はどうすればいいのでしょうか?
そしてそのできたパネル自体はそれぞれのシーンにコピペして使用するのでしょうか?
それだとシーンごとに毎回修正を入れないといけないのでしょうか?
2に関してはまだ理解が追いついていないので、質問が出てきたらまた後日伺ってもよろしいでしょうか??
3に関してはサーバ側のapiや処理は出来上がっています。
画像はイメージでしたので、ガチャ時の演出はlive2dとunityのエフェクト?でどうにかしようと思っていました。
ですので、先ほどのプロトタイプみたいな物をどうやって実装していけばいいのか検討もつきませんでした。
当方クライアント側は全くの素人なので、どうやって綺麗なUIに仕上げられるかそもそもunityでの開発手法などを教えていただけたらなと思いました。
お手数ですがご回答よろしくお願いいたします。
Q:
いま手元で試してみたのですが、パネルにbuttonオブジェクトを配置し、そのボタンに画像を設定してみたのですが、このパネルごと最前面に表示固定させる方法はどうすればいいのでしょうか?
作ったものを別のシーンにコピーしたらbuttonオブジェクトが背後の方に行ってしまいました。
A:
1についてですが、設置時の方法はGameObject→UI→ImageでもGameObject→UI→Buttonでもいいと思いますが、私の場合は、まずImageで配置した後に、Footerパネルの子オブジェクトとし、InspectorのAdd ComponentからUI→Buttonを追加しています。
オブジェクト同士を等間隔に配置するには、パネルオブジェクトのサイズから位置を計算して、Rect TransformのPos Xで調整しています。
端末サイズが変わった時の伸び縮みは、前述のCanvasの設定によるので、まずはFooter用のPanelを画面幅(Canvasの幅)いっぱいにしておいて、そこにボタンを均等配置しておけば、端末サイズに追従できます。
また、Footerオブジェクト自体はコピペして各シーンに貼り付けることはできるのですが、ご指摘の通り、この方法ですと、何か変更や修正が出た時に全てのシーンで修正するまたはコピペし直す必要が出てきます。
3についてですが、UIについては、1や2の内容をご確認していただくとして、unityからサーバ側とのやり取りの仕方はもうご存知でしょうか。
私はPOSTを利用してデータのやり取りをしています。以下に参考ソースを載せておきます。
[Serializable]
public class MyClass
{
public string test; //サーバ側から返ってくるデータ用
}
private IEnumerator data(){ //ここでデータのやり取りをする
string url="http://hogehoge.php"; //URL指定
//データ送信準備
WWWForm wwwForm = new WWWForm();
wwwForm.AddField( "data1", data1 );
wwwForm.AddField( "data2", data2 ); //以下wwwForm.AddFieldでPOSTで送信するものを追加できます
//データを取得しにいく
WWW result = new WWW(url,wwwForm);
// レスポンスを待つ
yield return result;
MyClass myObject = JsonUtility.FromJson<MyClass>(result.text); //Jsonで返ってくるので変換。これでmyObject.testにサーバ側からのデータが入る。
}
こんな感じでPOSTによるデータのやり取りをしています。
以上ご確認よろしくお願いします。
(クライアント側の質問をされているのに変な答えになってしまった。この時点でだいたい深夜1時過ぎ)
A:
ボタンやパネルの表示順序ですが、Hierarchyの下の方のオブジェクトが前面に表示されるので、パネルごとCanvas内の一番下に持って来れば前面に表示されると思います。
ご確認よろしくお願いします。
Q:
サーバとの通信に関してはとくに問題はありません。
どちらかというとuiと画面遷移周りの開発手法が知りたいです。
またフッターオブジェクトをコピペする以外に同じオブジェクトをシーンごとで使い回す方法はないのでしょうか?
よろしくお願いいたします。
A:
フッターについては、例えば、シーンを変えずに、フッター上の画面を全てPanelで作ってしまって、フッターのボタンが押された時にPanelの表示のON,OFFの切り替えで実装することも考えられます。
ちなみにアクティブになっていないオブジェクトをアクティブにするには、その親オブジェクトから探すとできます。
GameObject.Find ("Canvas").transform.Find("Panel1").gameObject.SetActive (true);
みたいな感じです。
こうすればシーンをまたがずにフッター上部の画面を切り替えることができます。
いかがでしょうか。ご確認よろしくお願いします。
Q:
なるほど、だいぶ理解できてきました
では例えばですがcanvasの中にheader、複数のbody、fotterを設置して
このbodyを表示非表示で切り替えるということでしょうか?
またサンプル画像にあるようにポップアップウィンドウなどを表示する場合はどうすればいいのでしょうか?
ちなみによくあるソシャゲなどの画面遷移みたいなものは一つのシーンで表示非表示で分けているものなのでしょうか?
それとiPhonexなどのセーフエリアの実装方法も軽く教えていただきたいです
A:
おっしゃる通り、bodyの表示非表示で切り替えるということで実装できると思います。
ポップアップウィンドウなどの表示はまさにPanelを使用すれば実装できます。
よくあるソシャゲというのがどのように作られているのかはわかりません。ただ、unityでシーン遷移せずにPanelで切り替えるというのは私はよくやります。シーンが多くなるとハンドリングも悪くなるので。
Q:
ポップアップを表示した時フェードインで表示させた場合ポップアップウィンドウ内の文字や画像などはそれぞれにコードを書いてフェードインさせるのでしょうか?
またその手法だと作成時のシーン内のがごちゃついて開発がしにくくなるような気がするのですがいい方法などないでしょうか?
A:
まず、セーフエリアについてですが、正直そこまで際どいところにUIを配置していないので、あまり気にしていませんでした。
ちなみにBuild Setting内にStatus Barを表示するかなどのオプションはあります。(ちょっと話が違いますが)
フェードインについては、文字や画像などをポップアップするPanelの子オブジェクトにしておけば、Panelのフェードインに追従すると思います。
開発時は確かにごちゃごちゃしてしまうので、原始的ですが、Inspectorのすぐ下のチェックボックスをオフにして見えないようにしたりしています。
Q:
なるほど、大変参考になりました!
今持つ疑問に大体回答していただけたのでとても助かりました。
500円という安い値段でここまで親切に教えていただいきありがとうございました。
また、分からないことがあった場合質問させていただければ幸いです。
どうもありがとうございました。
最終的には深夜2時を回っていました。
みんな遅くまで頑張ってるんだなーと、負けてられないなと。
こんな感じで500円という値段設定ながら、本気で質問に答えさせてもらってます。
是非アプリ作成で疑問・質問が出た際は、ココナラの出品をご利用ください。
また、今回の購入者の方とのやり取りの内容で、ここは違うんじゃない?ってとこがあればご指摘ください。
購入者の方にも展開させてもらいます。
よろしくお願いします!
目押しKINGがリリース一週間で100ダウンロード達成!!
こんばんは。ひろし@Y.C.LABです。
先週リリースした目押しを決めるまでのタイムトライアルアプリ「目押しKING」がリリースから一週間で100ダウンロードを達成しました!
よくある100万ダウンロードではないです。100ダウンロードです(注意!!)
いや大したことないじゃんって感じかもしれないけど、個人的にはすごいことなんです。
以前リリースしたポスコレは100ダウンロードまでに7ヶ月かかってるんです。
しかもポスコレの場合は、それなりに宣伝にも力を入れて、TwitterやらInstagramやらでグイグイ推してたんです。
それに比べて目押しKINGについてはほとんど宣伝せずに一週間で100ダウンロード達成。
その差30倍のスピード。
いやー、よかったねー!で終わってしまうと次に繋がらないので、その理由を少しだけ考える。
まず、
ポスコレのダウンロードが伸びなかった理由
・郵便番号を集める意味がわからない
・楽しさがわかるまでに時間が必要
おそらくこんなところ。実際に使ってくれている人がいるのはありがたいです!
ちなみに目押しKINGの2週間前にリリースしたイロドリは現在50ダウンロード。
イロドリもなかなかいいペースでダウンロードされているけど、その理由はおそらく次の2つ。
イロドリのダウンロードが伸びた理由
・超単純でわかりやすい
・オンデーズの奥野さんにいいねされた(←多分超でかい!ありがとうございます)
で、今回の目押しKINGなんだけど、まぁ想像がつくのは、
目押しKINGが1週間で100ダウンロードを達成した理由
・スロットアプリというカテゴリ
・わかりやすい
・意外と難しくてやりがいがある
こんなところかと。
特にスロットというカテゴリの強さに引き気味です。
というのもInstagramに#スロットと入れただけでフォロワーが増えましたw
いいねもたくさん押されます。
まぁ、、なんだか複雑。
しかも目押しKINGのことばかりツイートしているとスロット好きの人のTwitterだと思われてしまいそうw
まぁ、せっかくこんなスピードで100ダウンロードを達成したので、ちゃんと育てていきたいと思います。
まずはランキング機能を実装しました。(Apple審査中)
1位のアイコンだけちょっと凝ってみましたw
なんかいろんなスピードと難易度で目押しを決めてくれている人がいるみたいで、ランキングに変動がなくなってきたらWeeklyとか考えます。
そして、ただのスロット好きと思われないように次のアプリも来週にはリリースできるように制作に入ります。
再始動してから1週間ごとに新しいアプリをリリースするか、今までリリースしたアプリをアップデートするかを意識して行っていて、今回のランキング機能で5週連続達成となります。(Appleの審査に通れば)
今は走りながら次のアクションを考えています。
毎日寝不足だぜw
夢を実現させるために今日も走り続けます!!
フォローよろしくお願いします。
Unityでアプリ「イロドリ」を作る!
こんばんは。ひろし@Y.C.LABです。
今日はUnityを使って作ったアプリ「イロドリ」の作り方を書いていこうと思います。
イロドリでは、まず画面下に用意したImageオブジェクトにランダムで色を配置するところから始まります。
Unityで(C#で)ランダムな数を発生させるには、
UnityEngine.Random.Range (0f, 1.0f);
とします。()の中はランダムの数字の範囲。今回は、色を指定するから、0~1のfloat型。
あれ、255じゃないのって思った人、さすがです。
先日の記事にも書いたけど、RGBで色を表す時は0~255の数字を使うんです。
ただ、Unityでは、0~255を正規化して0~1として扱うんです。
で、作ったランダムな数字をred,green,blueに代入しておいて、画面の中のオブジェクトの色を変更させるのは、
GameObject.Find ("Canvas/pal1").GetComponent<Image> ().color = new Color (red, green, blue);
とします。ここでは、Canvasの中にpal1というImageオブジェクトを置いています。
これを5つ繰り返して、その5つの色からまたランダムで3つの色を選びます。
それを先日の記事の通り混ぜることで、お手本の色を作っているわけです。
//1色目
red[1] = UnityEngine.Random.Range (0f, 1.0f);
green[1] = UnityEngine.Random.Range (0f, 1.0f);
blue[1] = UnityEngine.Random.Range (0f, 1.0f);
GameObject.Find ("Canvas/pal1").GetComponent<Image> ().color = new Color (red[1], green[1], blue[1]);//2色目
red[2] = UnityEngine.Random.Range (0f, 1.0f);
green[2] = UnityEngine.Random.Range (0f, 1.0f);
blue[2] = UnityEngine.Random.Range (0f, 1.0f);
GameObject.Find ("Canvas/pal2").GetComponent<Image> ().color = new Color (red[2], green[2], blue[2]);//順次3色目から5色目までを繰り返す。
・・・//用意した5色の中からランダムな3色を選ぶ
i = UnityEngine.Random.Range (1, 5);
j = UnityEngine.Random.Range (1, 5);
k = UnityEngine.Random.Range (1, 5);
tar_red = (red[i]+red[j]+red[k])/3.0f;
tar_green = (green[i]+green[j]+green[k])/3.0f;
tar_blue = (blue[i]+blue[j]+blue[k])/3.0f;
GameObject.Find ("Canvas/target").GetComponent<Image> ().color = new Color (tar_red, tar_green, tar_blue);
これで、お手本となるtargetというオブジェクトにランダムで選んだ5色の中からさらにランダムで選んだ3色を混ぜた色がセットされたわけです。
ここで、混色の方法に先日の記事の方法を使っています。
次は、下に並べた5色のパレットをタッチすると選択できるところですが、ここは、Buttonコンポーネントを使っています。
Unityのオブジェクトを選択して、Inspectorの一番下にあるAdd Componentから、UI→Buttonを選択するとImageオブジェクトにButtonコンポーネントを追加できます。
先ほど作った5つの色をあてがったImageオブジェクトに追加していく感じですね。
Buttonの使い方は、スクリプトの中で、
public void OnClick1(){
・・・
}
のようにpublicの関数を作ってあげます。
この関数の中で、タッチされたら、上に用意した丸いオブジェクトの色をタッチしたオブジェクトの色に変更しているわけです。
スクリプトを用意したら、InspectorのButtonコンポーネントの中のこの部分で、Runtime Onlyの下の窓で、そのスクリプトを当てているオブジェクトを選択し、右の選択肢の中からさっき作成したpublicの関数を選択します。
これで、そのオブジェクトがタップされた時にスクリプトで記述した動作をするようになります。
set [1] = GameObject.Find ("Canvas/set1");
set [2] = GameObject.Find ("Canvas/set2");
set [3] = GameObject.Find ("Canvas/set3");
set [set_no].GetComponent<Image> ().color = new Color (red [1], green [1], blue [1]);
set [set_no].transform.Find ("sentaku").gameObject.SetActive (false);
set_no++;
if (set_no > 3) {
set_no = 1;
}
set [set_no].transform.Find ("sentaku").gameObject.SetActive (true);
ちなみにスクリプトの中身はこんな感じ。選択した色が表示される丸いオブジェクトはCanvas/set1~3というオブジェクトにしました。そこにタッチされたパレットの色を反映しています。
また、今アクティブになっている選択肢を表示するためにsentakuというオブジェクトを表示したり消したりしています。
アプリの中では緑の丸で今変更できる選択肢を示しています。
ここまでできれば、あとは、決定ボタンを押した時に選択されている3色を混ぜ合わせた色とお手本にしていた色の一致率を計算すれば完成です。
一致率は単純にRGBがそれぞれどれだけずれているかを計算してそれを掛け合わせています。
ittiritu = (1.0f - Mathf.Abs (set_red - tar_red)) * (1.0f - Mathf.Abs (set_green - tar_green)) * (1.0f - Mathf.Abs (set_blue - tar_blue)) * 100.0f;
Unityで絶対値を扱いたい時は、上記の通り、Mathf.Absでできます。
とまぁ、こんな感じでとても簡単に「イロドリ」はできています。
って、全部中身書いちゃってるじゃん!って感じだけど、そんな難しいことしてるわけでもないし、この記事のどこかが参考になってもっと面白いアプリを作る人がいたらいいなと思って全部書きました。
参考になればいいなと思います。
また、ここはもっとこうした方がいいんじゃね?ってことがあれば是非是非連絡ください。
また近いうちに新しいアプリもリリースします!
それでは、おやすみなさい。。
努力と行動の先にワンチャンがあるはず
こんばんは。ひろし@Y.C.LABです。
今日はオリエンタルラジオの中田さんの講演会に行ってきました。
常にトライアンドエラーの実験を繰り返す日々を送っていて、お金ともちゃんと向き合っている姿はカッコ良かったです。あっちゃんカッコいーです。
で、その講演会の前にツイッターをのぞいたら、オンデーズの方からいいねが押されてたんです。
オンデーズ知らない人はこの本読むべし!(めちゃくちゃ面白いです)
しかも、オンデーズに関係していないツイートなのに。で、間違いだよなーってツイートして、講演会が終わってからまたツイッターを覗くと、、
全てに目を通すのは難しいですけど、フォロワーさんの投稿は頻繁にチェックしてますよ (^O^) https://t.co/GJBJkFR2ZW
— ヨシオクノ🌤️奥野良孝 (@YoshitakaOkuno) 2018年11月2日
いや、嘘でしょ!って感じでした。
よく、発売された本とかのツイートしているのをいいねしたりリツイートしている人は見かけるんですけど、フォロワーの投稿までチェックできる人います!?
しかも本に登場するNo2の方ですよ!
中田さんの話もそうだし、奥野さんのツイッターもそうですけど、やっぱり人以上に努力と行動をしていないとそこまで辿り着けないんだなと改めて思い知らされました。
と同時に、なんかすごいきっかけをもらった気がして、やるぞー!って感じになってます。
中田さんの講演会の最後の質疑応答で、どこを目指してるんですかって質問があって、その答えが1つのゴールを目指していないってことでした。
なんか決められたルールの中で継続してその先にあるゴールを目指すのではなく、常に楽しいと思えることに挑戦しているのだと。
いい!めっちゃいい!
てか俺もそうしているつもりです。
その先にゴールなんてないかもしれないけど、常に行動しよう。今日もこれからアプリまた作るぞー!
で、奥野さんがいいねしてくれたアプリ「イロドリ」よろしくお願いします。
ポスコレも地味にユーザー増えてます。
やるぞ!