自機や敵に爆発エフェクトをつける方法

前回までの作業で今回のシューティングゲームが一通り遊べるようになりました。ただ、隕石を撃墜したときに何のエフェクトも出ないので爽快感がなく寂しい感じがします。

そこでここでは隕石を撃ち落としたときや、プレイヤーが撃破されてしまったときに爆発エフェクトが出るようにしてみましょう。

スポンサーリンク

爆発エフェクトのアセットのインポート

では、まずは爆発エフェクトのアセットを用意する必要があるのでアセットストアから適当なものを探してインポートします。

無料のエフェクトは色々あると思いますが、ここではいつもお世話になっている「War FX」というアセットを使わせていただくことにしました。

War FX | VFX Particles | Unity Asset Store
Add depth to your next project with War FX from Jean Moreno (JMO). Find this & more VFX Particles on the Unity Asset Store.

プレイヤーや敵のC#スクリプトの変更

次にプレイヤーや敵のC#スクリプトを変更して、撃破されたときにエフェクトをInstantiateするようにします。変更部分は次の通りです。

プレイヤーのC#スクリプト(抜粋)

「★追加その2」という部分が追加したコードです。

public class PlayerController : MonoBehaviour
{

  public bool isActive = true;

  [Header("必要なコンポーネントを登録")]
  [SerializeField]
  Rigidbody2D rigidBody = null;
  [SerializeField]
  Transform bulletSpawn = null;
  [SerializeField]
  AudioSource audioSource = null;
  [SerializeField]
  GameManager gameManager = null; // ★追加
  [SerializeField]
  GameObject explosionPrefab = null; // ★追加その2

  // -- 省略 --

  // ★追加
  void OnCollisionEnter2D(Collision2D collision)
  {
    if (collision.gameObject.CompareTag("Enemy"))
    {
      // ★追加その2
      Instantiate(explosionPrefab, thisTransform.position, Quaternion.identity);

      gameManager.GameOver();
      gameObject.SetActive(false);
    }
  }

}

隕石のC#スクリプト(抜粋)

こちらは「★追加」という部分が追加したコードになっています。

public class MeteorController : MonoBehaviour
{

  [SerializeField]
  Rigidbody2D rigidBody = null;
  [SerializeField]
  GameObject explosionPrefab = null;	 // ★追加

  // -- 省略 --

  void Damage(int value)
  {
    if(value <= 0)
    {
      return;
    }

    hp -= value;

    if(hp <= 0)
    {
      // ★追加
      Instantiate(explosionPrefab, transform.position, Quaternion.identity);

      Destroy(gameObject);
    }
  }

}

テストプレイして動作を確認しよう

スクリプトを変更できたら、PlayerプレハブとMeteorプレハブをそれぞれインスペクタで開いて「Explosion Prefab」の欄にWar FXの適当な爆発エフェクトを登録しましょう。

実際にテストプレイして下のGIFのように爆発エフェクトが出れば成功です。

爆発エフェクトの実装例

(クリックで再生)

補足:
ちなみに今回使わせていただいているWar FXのエフェクトは自動的に消滅するようになっているので、エフェクトのゲームオブジェクトを消去するスクリプトを書く必要はありません(※当然ながらエフェクトを自作する場合はエフェクト再生後にそのゲームオブジェクトを消去する処理を書く必要があります)。

次のページ→簡単なスコアシステムの作り方