初心者でもできる! 7日間で作るUnityゲーム開発

Day3:Unityなら爆発エフェクトも簡単!

この記事を読むのに必要な時間:およそ 4 分

クマに弾が当たったら爆発エフェクトを起動させる

前回の記事でプレイヤーの3Dモデルをプロ生ちゃんに変更しましたが,今回は爆発エフェクトを追加していきます。フリーの爆発エフェクト「Detonator Explosion Framework」を使えば簡単に爆発エフェクトを追加することができます。では早速アセットストアからダウンロードしていきましょう!

Detonator Explosion Frameworkをダウンロード&セットアップする

メニューの[Window][Asset Store]をクリックします。

アセットストアのウィンドウが表示されるので,右上の検索ボックスに「Detonator Explosion Framework」と入力してエンターを押します図1)。

図1

図1

Detonator Explosion Frameworkが検索結果に表示されるので,クリックするとDetonator Explosion Frameworkのページが表示されますので[Download]ボタンを押します図2)。

図2

図2

Detonator Explosion Frameworkを使うにはUnity4.5.3が必要です。古いバージョンのUnityでアセットストアのDetonator Explosion Frameworkのページにアクセスすると,

「Needs Unity upgrade to version 4.5.3」

と表示されます。その場合,最新版のUnityにアップデートをしてください。

DownloadボタンをクリックするとImporting packageダイアログが表示されるので[Import]ボタンをクリックします図3)。

図3

図3

ProjectにDetonator Explosion Frameworkが追加されました図4)。

図4

図4

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

続いて,HierarchyのTeddyをクリックし,Inspectorの「Bear」をダブルクリックします図5)。

図5

図5

MonoDevelopが起動してBear.csがオープンされます。Bear.csのpublicフィールドにdetonatorのGameObjectを追加します。

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.collider.tag == "Bullet"で弾と当たった時を判定しています。hitFlagは接触判定を一度だけに限定するためにフラグ制御をしています。GameObject exp = (GameObject)Instantiate(detonator.gameObject, transform.position, Quaternion.identity);で爆発エフェクトをインスタンス化しています。これにより爆発エフェクトが作動します。

著者プロフィール

やまろう

フリーランスITエンジニア。

業務系SIerに10数年勤務後独立。現在はUnityでスマートフォンのネイティブゲーム開発に従事。仕事の傍ら,個人でフリーゲームを開発している。

URL: http://mikumikuplay.com/

ニコニコ生放送にてプログラミングに関する生放送を配信中。
http://com.nicovideo.jp/community/co2268886

コメント

  • 捕捉ありがとうございます

    wrb様の方法で音がならせるようになりました
    ありがとうございました

    Commented : #5  Unity5 3日目 (2015/10/24, 23:15)

  • Unity5用

    Unity4用の記事だと思われますが、Unity5で動かない箇所かありましたので、直した部分をメモとして残しておきます。
    (ただし、当方Unityは初心者ですので、これが最適解かはわからないです)

    爆発音再生のPlayExplosionAudio()メソッドで使用している"audio"プロパティですが、Unity5では非推奨のため使用できません。
    http://answers.unity3d.com/questions/927274/
    そのため、GetComponent()でAudioSourceコンポーネントを取得する必要があります。

    1. SoundManagerクラスにメンバ変数"sound"(任意の名前)を宣言。
    public class SoundManager : MonoBehaviour
    {
    AudioSource sound;

    2. SoundManagerクラスにStart()イベント関数を追加し、"sound"に取得したAudioSourceコンポーネントを格納。
    public void Start()
    {
    sound = GetComponent<AudioSource>();
    }

    3. PlayExplosionAudio()メソッドにて爆発音のオーディオクリップを再生。
    public void PlayExplosionAudio()
    {
    //audio.PlayOneShot(explosionAudio);
    sound.PlayOneShot(explosionAudio);
    }

    もしくは1と2を省略して、
    GetComponent<AudioSource>().PlayOneShot(explosionAudio);

    Commented : #4  wrb (2015/04/25, 17:51)

  • ご指摘ありがとうございます

    ノーザラントさま,いこみきさま

    ご指摘の通り,記述が抜けておりました。申し訳ございません。記事を修正いたしましたので,追記してお試しください。

    このたびはありがとうございました。

    Commented : #3  技術評論社 (2015/01/27, 15:18)

  • Re: 音が鳴りません

    どうも呼び出し元の記事が抜けているっぽいです。
    Bear.csのOnCollisionEnter()中、fitFlag=true;のあるブロック内に以下の行を追加すればよさそうです。
    SoundManager.Instance.PlayExplosionAudio(); //この行を追加

    Commented : #2  いこみき (2015/01/10, 15:45)

  • 音が鳴りません

    Unityを始めるにあたって、ここの記事を最初にトレースしてみようと思い、楽しく学習しています。

    しかし、音を鳴らす部分で詰まってしまいました。
    SoundManagerで音を鳴らしたいのですが、音を鳴らすトリガーをどこで引いているのか理解できず、音が鳴りません。
    FarExplosionAは試聴すれば聞こえるのですが、玉が当たったので音を鳴らせという処理をどこでさせればいいか、理解できずにいました。

    Commented : #1  ノーザラント (2014/12/28, 19:49)

コメントの記入