裏鍵.dump

自分用備忘録。内容に脈絡を求めてはいけない。

Unity5 3D/2Dゲーム開発 実践入門 読了

ストア登録やAppendix等の一部を除いて、全部のコードを書き写しつつ読み終えた。

書かれている内容や操作方法がヒヨコ本ほど手取り足取りではないうえに、最後にはゲームらしい作品が出来上がるので、今の自分にとってはステップアップとしてちょうどいい本だった。コルーチン、Character Controller、Animator周りの内容が自分には物足りず特に理解できていないので今後の課題にしよう。

あとアザラシかわいいよアザラシ。

 

一通り書き写して感じたのだけど、Unityを使って物を作るときには独特なセンスが必要になりそう。

やりたいことを実現するのにスクリプトをどのGameObjectにアタッチするのが効率が良いかとか、空のGameObjectの使い方とか、スクリプト内から別のGameObjectやComponentへのアクセスの仕方とか。

書き写しながら「これはこうするのかな」と思って読み進めると、ほぼ予想が当たることはなかった・・・。

勉強になることがたくさんあるので、何度も読み返そう。

 

 

さて、Chapter6の「Flappy Azarashi」の最後、P343の「6-9 カメラクラッシュエフェクト」の解説が紙面の都合なのかほとんど触れられていないので、なんとか読み解いた内容を書き残しておく。

 

やりたいのは、アザラシが何かにぶつかったときに画面が一瞬真っ白になって震動する、というもの。

f:id:cores0316:20160511035105g:plain

これは痛い・・・。

 

MainCameraに追加したCameraアニメーターコントローラーは、下記のようになっている。

f:id:cores0316:20160511032645p:plain

 「shake」というトリガーが用意されており、それがONになるとCamera@shakeが実行されてCamera@normalに戻るという仕組みのようだ。Camera@shakeには、カメラをガクブルさせるために細かな座標移動がたくさん定義されている。

そして、MainCameraにアタッチしたスクリプトClashCamera.csには、shakeトリガーをONにするClashというメソッドがあるので、アザラシの衝突判定のところでこれを呼び出すようにすればOK。なるほど。

待て、画面が白くなる件はどうした。

 

Clashメソッドの中に

    FlashEffect.Play();

 と1行書かれたこいつが鍵。

とはいえ、アセットの中にFlashEffect.csはあるけどGameObjectにアタッチした覚えは無いしどうやって動いているのか。

 

仕組みは以下の通り。

ソースを丸ごと記載するのはマズイ気がするので、わかりにくいけど言葉だけの説明で・・・。

 

ソースを開いてみると、Playメソッドはstaticと定義されている。

つまり、Hierarchyビュー上に存在しない、Scene上に存在しない状態でもClashメソッドに記載の通りPlayメソッドを呼び出すことができる。

ここでは、Flashという空のオブジェクトを作成し、それにAddComponentでFlashEffect.csをアタッチしている。これでScene内に画面を白くするための実体が出現したわけだ。

実体が出現した後は、Awakeメソッドで最初に真っ白なテクスチャを用意して、各フレーム毎にOnGUIメソッドでアルファ値を減算しながら表示していき、アルファ値が0になった時点で自分自身を破棄する、となっている。

 

アザラシが「ごんっ」となったときのHierarchyビューを見ると、確かにFlashというオブジェクトが一瞬生成されてすぐ破棄されていた。

これは素晴らしい。いろいろ応用に使えそうなので覚えておきたい。