comment無限に登場するまるとらをクリックしたら、隣接する同種を巻き込んで消滅するツムツムクローンを製作中。ツムツムやってことないけどルールは多分同じ。クリックしても隣接虎が消えない時があるんだよね、再現性は無くランダム。隣接判定にミス?クリックしたら消える虎たちをマウスオーバー時に半透明処理を施すと...。わけが分からなくて解決できず困った。Unityから呼び出される関数の順番によるエラー。各オブジェクトのUpdateが呼び出される順序は原則ランダム。優先順位が付けられるが、クラス単位での順位。インスタンス同士の順序はどうやるんだろ。相互に依存していて情報をやり取りしているとまずい場合があるね。通常のUpdateと物理エンジンのUpdateは別物だったことも原因。文字で説明すると面倒なので省略。解決したからOK虎消滅時に小さい虎を多数登場させて分裂消滅させようと思ってパーティクル機能のお勉強を開始。パーティクルにアニメーションを設定できるから、絵の切り替えなしアニメを設定したら想定の動作をするはず、っていうか動作成功。虎の種類によって絵を切り替えようとしたところで絶望。startframeの数値を変えればできるはずだが、設定が反映されない。コードからの変更は出来ないの?まったくわからないから放置。最悪、手間ひまかけて数十個のプレハブに個別設定すれば解決...。パーティクルは無視して次へ。虎消滅後即座に他の虎たちが落下するけど、消滅時はすべてを一時停止したいよね。物理エンジン止めると全部止まってあかん。(:3[kanのメモ帳]あったわ。速度と回転量を保持して復帰かー。ついでにプロパティと拡張メソッドを覚えたぞ!一時停止と再開が出来るようになった。コレを利用して、消滅時に演出を表示しつつスコア表示してからゲーム再開の処理を組み込んでみよう。テラシュールブログ消えるときに一時停止させることに成功。効果音も鳴らせたし、最低限の機能は把握できたのかしら?シーン遷移時にデータの受け渡しはどうやるのだろう。WebGL版ぽち潰しフォントが無いらしく、スタード画面でタイトル文字が表示されない。comment他のチュートリアルも見ておこう。Essentials。これ超基本だけど知らない操作もあるだろうから全部見た!見終わった!これで!私!うにちーますたー!!チュートリアルでちゃんと学べたのか試すために、ゼロからゲームを作れるか試してみましょ。すべてのオブジェクトをコードから生み出そうとしたけど、そんな方法わからんがな。諦めて別の方法を取ろう。すべてのオブジェクトはシーンに配置しましょう。動的生成なんて後回しだ。まるとらずを配置して、重力の作用で、画面外へ落下。床を作るためにイカちゃん海の家を配置。当たり判定をどうやって作ろうかと思っていたら、線分配置も対応してんのな。輪郭をなぞってコリジョン完成。ゲームだから、まるとらずがどんどん増えていって欲しい。わけでプレハブ作って動的生成だー!イカちゃんがまるとらずを投げる感じ?下にどんどん積み重なる。クリックしたら消えて欲しい。マウス位置とクリック検知を仕込み、まるとらずとコリジョン取ってDestroy(this)を記述したらあら不思議、バグ!Destroy(gameObject)にしないとダメなんだってさ。thisだとC#コードだけ外れる。隣り合うとらも消えてほしいけど、隣り合ってるって判定どうすんの?判定時にコリジョンを大きくしたらいいのかしら。衝突時に相手のIDを保存させる方が楽かな?って、コリジョン判定してくれない。collision)このように2D指定しないとダメだってさ!気づかんわ!!修正したけど永久ループでUnityフリーズ。あー、相互に呼びあって終わらんわコレ。処理を修正して解決したけど別の問題が発覚。見た目では接触して隣り合ってるようにみえるけど、隙間があって接触してないから消えない。ゲームとして作り込むと、見た目との相違でプレイにストレス溜まる?コリジョン大きく取って判定したほうが良いのかな。コリジョンだけスケール変更できたら良いのに...。exe、apk、ブラウザ上の3つで動作確認OK。このサーバにUPしての動作もOKであった。C#のコード量は50行程度なんだよね。commentアンドロでの動作確認をいちいち実機でやるの面倒だよね。Studioのエミュレータで動かすエミュ動かせるまでにはなったけどさ、Unityでビルド&ランを実行したらビルドは瞬時に終わるんだけど、エミュへのインストールに5分以上かかってまじうざい。実機へファイル転送してからのインストするほうが時間が短いってどういうことだよ。エミュの出番ないじゃん!複数解像度試せる利点はあるから良いのか。level.InitGame();}OnLevelWasLoadedが非推奨になって将来廃止予定だよって警告がでるの。代替案があるんだろ?って探したらSceneManager.sceneLoadedを使えば良いらしい。深く考えずに書き換えてみよう。sceneMode){level++;}これで解結すると思ったらバグ発生。ローグライクでlevel1(1階層目)から始まるはずが2でスタート。次のlevelへ移動したら数値が+1ではなく+2される。Awakeが複数回呼ばれてsceneLoadedへ関数2回登録したとか?調べたけどそんなことはない。Loadedがゲーム開始時に1回呼び出され、レベル変更時には二回呼び出されてる。なんで?そもそも、Levelは1で初期化してんだよね。呼び出し時に+1されるのだから、2から始まるのは当然か。最初のサンプルコードでは何故+1されず1でスタートしてんの?OnLevelWasLoadedが呼び出されてないんじゃね?調べてみるとAwakeOnEnableOnLevelWasLoadedStartの順番で呼び出される。Awake,Startはひとつのオブジェクトについて、一度しか呼ばれない。OnEnableは、Enableされるたびに呼ばれる。OnLevelWasLoadedが呼び出されてないんだがどういうことだよ。調べてみると、最初のシーンロード時はOnLevelWasLoadedが呼び出されないんだってさ。名前見たらロード後に呼び出すとしか思わんわ。2回目からのロード時に関数が呼び出されるのなら、OnLevelWasLoadedの話は解決。次はsceneLoadedの仕様を解かねばならぬ。解説ブログをぐぐりAwakeSceneManager.sceneLoadedStartの順番で呼び出しが発生すると判明。Startでメソッドを登録すると最初のシーンでは実行されずAwakeでメソッドを登録すると最初のシーンでも実行されますあーなるほど、そういうことか。sceneMode){level++;InitGame();}こう書けば良いのでした。comment2Dサンプルなローグゲームチュートリアルを無事に完遂。本当に基本だけのチュートリアルだから、色々いじって使い方を覚えていくのが妥当。イカちゃんローグの絵を持ってきて貼り替えるところからやってみる?それはともかく、Winデスクトップアプリ以外にAndroidなAPK出力にも成功。スマホとガラホに入れて動作確認もOK。WebGLが選べたのでやってみたけど、ビルドに30分近くかかったんだよ。この規模が小さいソフトでこれって...。ブラウザで正常動作しないオチがついてきた。chromeとfirefoxどちらもアウト。オフィシャルサイトエロもOKらしいよ。commentUnityの書籍は手元に2冊あるけど、今作りたいゲームとは方向性が違うので封印。Unity入門や学習個人サイトがたくさんあるけど、ちょっと肌に合わぬ。公式サイトにあるチュートリアルで学んで全体を把握するのが最初は良いかしら?ってことで全部英語でござる。すべての動画に字幕を付けてる人が居るらしく、聞き取れなくても安心。一時停止して英文読めば何とかなる程度のレベル。英語わからなくてもコードと操作方法を見ればわかるよ。んなわけで2Dの基礎とローグタイプを題材に簡単なものを模写なう。日本語訳は無いけどポルトガル語はあるんだよ!何故ゆえに...Unityの中の人はもうちょっと頑張っていただきたいであります。みんな書籍出してるからそれ買ってくれ、で済ませる姿勢はわからんでもない。