クマに弾が当たったら爆発エフェクトを起動させる
前回の記事でプレイヤーの3Dモデルをプロ生ちゃんに変更しましたが、
Detonator Explosion Frameworkをダウンロード&セットアップする
メニューの
アセットストアのウィンドウが表示されるので、

Detonator Explosion Frameworkが検索結果に表示されるので、

Detonator Explosion Frameworkを使うにはUnity4.
「Needs Unity upgrade to version 4.
と表示されます。その場合、
DownloadボタンをクリックするとImporting packageダイアログが表示されるので

ProjectにDetonator
Explosion Frameworkが追加されました

爆発エフェクトを起動するコードを追加する
続いて、

MonoDevelopが起動してBear.
public class Bear : MonoBehaviour {
public GameObject detonator;
続いてOnCollisionEnterを以下のように変更します。
bool hitFlag = false;
void OnCollisionEnter(Collision collision) {
if (avatar != null) {
if (hitFlag == false && collision.collider.tag == "Bullet") {
hitFlag = true;
GameObject exp = (GameObject)Instantiate(detonator.gameObject, transform.position, Quaternion.identity);
var currentState = avatar.GetCurrentAnimatorStateInfo(0);
var nextState = avatar.GetNextAnimatorStateInfo(0);
if (!currentState.IsName("Base Layer.Dying") && !nextState.IsName("Base Layer.Dying")) {
avatar.SetBool("Dying", true);
Destroy(this.gameObject, 3.0f);
}
}
}
}
以下の部分が爆発エフェクト関連のコードです。
if (hitFlag == false && collision.collider.tag == "Bullet") {
hitFlag = true;
GameObject exp = (GameObject)Instantiate(detonator.gameObject, transform.position, Quaternion.identity);
if文のcollision.
で弾と当たった時を判定しています。hitFlagは接触判定を一度だけに限定するためにフラグ制御をしています。GameObject exp = (GameObject)Instantiate(detonator.
で爆発エフェクトをインスタンス化しています。これにより爆発エフェクトが作動します。
爆発エフェクトの大きさを調整する
Unityに戻ってProjectの
Inspectorの

爆発エフェクトの参照をスクリプトに設定
続いてHierarchyのTeddyをクリックします。Inspectorの

弾オブジェクトにBulletタグを追加する
続いてHierarchyのBulletをクリックします。InspectorのTagの横に

Inspectorの

再びHierarchyのBulletをクリックします。InspectorのTagの横のUntaggedをクリックして表示されたドロップダウンから

ここで一度ゲームを実行してみましょう!

弾を消去する
今のままだと弾がクマに当たって爆発エフェクトが発生しても、
クマオブジェクトにTeddyタグを追加する
HierarchyのTeddyをクリックします。InspectorのTagの横にあるUntaggedをクリックし、

Inspectorの

HierarchyのTeddyをクリックします。InspectorのTagの横のUntaggedをクリックしてコンテキストメニューの

弾を消去するスクリプトを作成する
ProjectのScriptフォルダを右クリックして

Bullet.
void OnCollisionEnter(Collision collision) {
if (collision.collider.name == "Plane") {
Destroy(this.gameObject, 2.5f);
} else if (collision.collider.tag == "Teddy") {
Destroy(this.gameObject);
}
}
if (collision.
は弾が地面に当たった時の判定です。Destroy(this.
で2.
} else if (collision.
は、
Unityに戻ってProjectの

爆発音を追加
続いて、
Detonator Explosion Frameworkには爆発音の素材が添付されているため、
サウンド管理用クラスの作成
まず、
ProjectのScriptフォルダを右クリックして

SoundManager.
using UnityEngine;
using System.Collections;
public class SoundManager : MonoBehaviour {
private static SoundManager instance;
public AudioClip explosionAudio;
public static SoundManager Instance {
get {
if (instance == null) {
instance = (SoundManager)FindObjectOfType(typeof(SoundManager));
if (instance == null) {
Debug.LogError("SoundManager Instance Error");
}
}
return instance;
}
}
public void PlayExplosionAudio() {
audio.PlayOneShot(explosionAudio);
}
}
public AudioClip explosionAudio;
は音声ファイルへの参照です。Unity上から音声ファイルをドラッグアンドドロップで指定します。
public static SoundManager Instance {
はこのクラスのインスタンスを返すメソッドです。Singletonパターンというデザインパターンを使用しています。Singletonパターンを使うとインスタンスが一つしか生成されないようにすることができます。サウンド管理クラスはインスタンスが一つあれば十分なのでこのパターンを使用しています。public void PlayExplosionAudio() {
は爆発音を発生させるメソッドです。audio.
で爆発音性を再生しています。
爆発音再生処理を呼び出す
爆発音はクマに弾が命中した時に鳴らすのでBearクラスのOnCollisionEnterメソッドのhitFlag = true;
の下に以下のコードを追加します。
SoundManager.Instance.PlayExplosionAudio();
Audio Sourceを作成する
Unityに戻ってメニュー
表示された検索ボックスに

Audio Sourceは簡単に言うと音を鳴らす人です。ここに音素材であるAudio Clipを指定すると音を鳴らすことができます。
続いて、

音管理クラスにAudio Clipの参照を設定する
Projectの

Projectの

これでSoundManagerクラスからAudio Clipを参照することができるようになりました。このようにクラスのpublicフィールドにIDEから参照を設定できるのがUnityの特徴の一つです。今回のケースだと別のAudio Cllipをドラッグアンドドロップすれば、
3Dサウンドを無効化する
Unityには3Dサウンド機能があります。3Dサウンドとは音源の位置によって音の聞こえ方が変わる仕組みです。遠くで音が鳴ったら小さく聞こえる等、
Projectの

これにより3Dサウンドが無効化されてどこで音を鳴らしても同じように聞こえるようになります。
それではゲームを実行していましょう。弾が熊に当たった際に爆発音が再生されるようになりました!
いかがだったでしょうか? エフェクトやサウンドを追加することでゲームの臨場感がグッと増しました。しかも、
次回はタイムトライアル機能を追加してゲーム性を強化していきたいと思います。お楽しみに!