(Unity)着弾時に爆風を発生させる方法

(1)準備

  • 爆風で吹き飛ばしたいオブジェクトを作成
  • このオブジェクトに「Rigidbody」を追加する(ポイント)

 

(2)スクリプトの作成

  • 新規にC#スクリプトを作成
  • 名前を「Blast」に変更
  • 下記のコードを書いてチェック

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Blast : MonoBehaviour
{
    public GameObject effectPrefab;
    public AudioClip sound;

    // 爆風の力
    private float power = 10f;

    // 爆風が及ぶ範囲(半径)
    private float radius = 10f;

    private void OnCollisionEnter(Collision collision)
    {
        GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
        Destroy(effect, 0.5f);
        AudioSource.PlayClipAtPoint(sound, transform.position);

        // 着弾点を爆心地にする
        Vector3 explosionPos = collision.transform.position;

        // 爆心地から『指定した半径内』にあるオブジェクトのcolliderを取得する。
        Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);

        foreach (Collider hit in colliders)
        {
            Rigidbody rb = hit.GetComponent<Rigidbody>();

            if (rb)
            {
                // 爆風の発生
                rb.AddExplosionForce(power, collision.transform.position, radius, 1.0f, ForceMode.VelocityChange);
            }
        }
    }
}

(3)設定

  • 今回は、このスクリプトを発射する「砲弾サイド」に追加します。
  • エフェクトとサウンドを設定(自由)

 

(4)再生&確認

  • 設定が完了したらゲーム再生
  • 砲弾がぶつかった瞬間、Rigidbodyを追加した周囲のオブジェクトも吹き飛べば成功です。