1223 エフェクトをつけよう! - mishimatsu/AdventCalendar2014 GitHub Wiki
前回は、Asset Storeについて説明しました。
今回は、Asset StoreのAssetを使って、エフェクトを付けたいと思います。
今回使用するAssetは、
Sky FX Pack
Free SFX Package
どちらも無料のAssetです。
今回は、この中からゲームに合いそうなエフェクトをシーンに追加していきたいと思います。
Asset StoreからAssetをダウンロードして、Unityに登録してみましょう。
ダウンロードが終わったら、Importをクリックして、UnityへAssetを追加します。
これも前回やりましたね。
他のAssetも同様にUnityへ追加します。
Assetの追加するとProjectには、AssetsとSky FX Packのフォルダが追加れていると思います。
今回、やりたいことは、ボールが円柱や板に当たった場合に、ボールの位置にエフェクトを表示する。
今回やりたいことを実現するためには、次のことが必要なります。
1.ボールが円柱、板との衝突判定
2.ボールの位置にエフェクトの表示
まず、ボールと円柱、板との衝突判定について、スクリプトを追加したいと思います。
Ballとの衝突判定を行おう!
衝突判定は、Ballのスクリプトに記述します。
BallスクリプトをMonoDevelopを開きます。
12行目
public GameObject effect;
UnityのInspectorからエフェクトの種類を変更できるように、GameObjectの変数を追加します。
ボールがオブジェクトに当たった時の処理
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "Block") {
Instantiate(effect, transform.position, Quaternion.identity);
}
}
47行目
void OnCollisionEnter(Collision collision)の関数は、物体に衝突した際に呼び出される関数です。
引数collisionには、衝突した物体の情報が渡されています。
48行目
if (collision.gameObject.tag == "Block") {
ここでは、GameObjectのタグがBlockかどうかの判定をしています。
これは、地面と壊れる物体(円柱、板)との区別をするためのキーワードです。
あとで、UnityのInspectorから設定します。
49行目
Instantiate(effect, transform.position, Quaternion.identity);
シーン上の指定した位置へGameObjectを発生させる関数です。
今回は、エフェクトの発生に使っています。
transform.positionは、ボールの位置です。
Quaternion.identityは、回転量0の状態を表します。
これで、ボールが当たった場所に、エフェクトを発生させることができます。
タグという仕組みを使って、地面と壊れるものを判別する。
通常、ボールが地面にあたったのか、それとも配置した壊れるものに当たったのかわかりません。
何に当たったかを判別するために、タグという仕組みを使います。
まずは、判別に利用する新しいタグを追加します。
タグを追加する。
InspectorのTagをクリックして、Add Tagを選択します。
Blockという名前でタグを追加します。
タグを変更する。
Hierarchyで、円柱と板を複数選択します。
タグをUntaggedからBlockへ変更します。
発生されるエフェクトを登録
Ballを選択して、Ball(Script)の部分を見てみましょう。
Ballスクリプトで定義したeffectが表示されていると思います。
ここに発生させたいエフェクトを登録します。
今回は、None(Game Object)の横にあるボタンを押して、発生させるエフェクトを選択してみましょう。
SandStormを選択します。
実行してみよう!
エフェクトは、表示されましたか?
エフェクトが表示されない場合、いくつかの原因が考えられます。
1.当たったオブジェクトのTagにBlockが設定されていない。
2.OnCollisionEnter()の関数が間違っている。
よく見なおしてみましょう。
衝突判定自体は、Unityがやってくれます。
当たった時に何をするかという処理を記述するだけで良いのは、非常に簡単ですね。
練習問題
1.別のエフェクトに変更してみよう。
次回は、SEを追加したいと思います。
それでは、楽しいUnity Lifeを!
コラム
今回は、タグを使って、何に衝突したか判別しました。
ほかにもLayer Collision Matrixを使ったやり方などもあります。