まず、Hierarchyから「Obstacle」を選択する。Unityメニューの「Component」→「Effects」→「Particle System」と選択する(図4)。
すると、Inspector内に「Particle System」の項目が追加される。Scene画面とGame画面上では図5のように「Obstacle」からパーティクルが発生する。
「Obstacle」の、Inspector内の「Particle System」の値を図6のように設定する。「Looping」のチェックは外す。「Start Color」には赤系統色を指定しておく。「Play On Awake」のチェックは外す。ここにチェックが入っていると、常にパーティクルが表示され続ける。また、下の方にある「Emission」にはチェックを入れておく。「Shape」を展開して「Shape」に「Circle」を指定しておく。ここの「Shape」で放出するパーティクルの形状を変更させることができる。
「Obstacle2」についても同じ設定をするが、「Start Color」だけ青系統色を選択しておく。
Hierarchy内の「DefaultAvatar」を選択し、Inspector内の「Add Component」ボタンをクリック。「New Script」から、「Name」に「ParticleScript」と指定し、「Language」に「C Sharp」を選択して「Create and Add」をクリックする。
すると、「DefaultAvatar」の「Inspector」内に「ParticleScript(Script)」の項目が追加される(図7)。
「Script」項目内の「ParticleScript」をダブルクリックすると、Visual Studioが起動するので、障害物を判定するObstacleCheck関数を作成するリスト1のコードを記述する。
void ObstacleCheck(GameObject obj) { if (obj.name=="Obstacle" || obj.name=="Obstacle2") { (obj.gameObject.GetComponent<ParticleSystem>() as ParticleSystem).Play(); } }
GameObjectの名前が「Obstacle」または「Obstacle2」であった場合は、PlayメソッドでParticleSystemを実行する。
また、キャラクターとアイテム(障害物)が接触した場合の処理には、「OnControllerColliderHit」を使用する。
void OnControllerColliderHit(ControllerColliderHit hit) { ObstacleCheck(hit.collider.gameObject); }
キャラクターがアイテム(障害物)と接触した場合は、接触したGameObjectを引数にして、ObstacleCheck関数を実行する。これで、DefaultAvatarが障害物に接触するとパーティクルが発生するようになる。
コードが書けたら、必ずVisual Studioのメニューからビルドを実行して、エラーがないか確認しておく。エラーがなければVisual Studioを閉じる。
なお、JavaScriptのUpdate()のコードも記載しておく、コードの解説はC#と同じだ。JavaScriptで書きたい場合は、連載第5回のコラム「スクリプトエディタの切り替え」を参照されたい。
function ObstacleCheck(obj:GameObject) { if (obj.name=="Obstacle" || obj.name=="Obstacle2") { (obj.gameObject.GetComponent("ParticleSystem") as ParticleSystem).Play(); } } function OnControllerColliderHit(hit:ControllerColliderHit) { ObstacleCheck(hit.collider.gameObject); }
これで、実行すると動画1のように表示される。
今回も「DefaultAvatar」が「floor」からはみ出て落下したときの処理は追加していない。落下処理は連載第5回で紹介した手順と、Scriptもそのまま使用できるので、各自が実装してみてほしい。
このように、一度作っておいたScriptの使い回しができる点もUnityの良いところだろう。単にコピー&ペーストするだけでいいから楽だ。
Copyright © ITmedia, Inc. All Rights Reserved.