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

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

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

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

前回の記事でプレイヤーの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