LoginSignup
4
1

More than 1 year has passed since last update.

オブジェクトが破壊されたらその周辺を吹き飛ばす

Last updated at Posted at 2022-01-02

1.はじめに

地雷・機雷で爆発させるのはいいが、爆風などで周辺を巻き込むことはできないかと思い調べたら方法があったので、アウトプットする

2.やり方

赤Cube:爆発の中心
白Cube:障害物。RigidbodyをAddComponent・TagをCubeに設定

という形で配置をした。白CubeにはRigidBodyをコンポーネント

image.png

3.スクリプト

以下のスクリプトを作成して赤CubeにAddComponentする。

public class Explosion : MonoBehaviour
{
    public float radius = 5;
    public float upwardModifier = 0f; 
    public float explosionPower = 100; 

    void Start()
    {
        Destroy(gameObject);
    }

    private void OnDestroy()
    {
        Collider[] col = Physics.OverlapSphere(gameObject.transform.position, radius);

        foreach (var colliders in col)
        {
            if (colliders.gameObject.tag == "Cube")
            {
                colliders.gameObject.GetComponent<Rigidbody>().AddExplosionForce(explosionPower, gameObject.transform.position, radius, upwardModifier, ForceMode.Force);
            }
        }
    }
}

4.OverlapSphere

Collider[] col = Physics.OverlapSphere(gameObject.transform.position, radius);

transform.position(中心)から半径radius(m)の球体にあるColliderを配列で返す

実際に配列に入っているのかわからないので、すぐ下に以下を追加して確認してプレイしてみる

for (int i = 0; i < col.Length; i++)
{
      Debug.Log(col[i].transform.position);
}

プレイした結果しっかりと配列に格納されていることがわかる(原点はTerrain)

image.png

5. AddExplosionForce

foreach (var colliders in col)
{
      if (colliders.gameObject.tag == "Cube")
      {
          colliders.gameObject.GetComponent<Rigidbody>().AddExplosionForce(explosionPower, gameObject.transform.position, radius, upwardModifier, ForceMode.Force);
      }
}

名前のとおりRigidbodyを使って爆発を再現する。配列なのでForeach・For等を使う。
AddExplosionForceの中身は以下を参照

AddExplosionForce(爆発力(float), 爆発の中心(Vector3), 爆発の半径(float), 爆発による上昇値(float), ForceMode)

Tagは周辺にRigidbodyが付いていないオブジェクトがある場合MissingComponentExceptionが出る。

6.結果

ice_video_20220102-152433_edit_0.gif

7.まとめ

爆発させるアセットと組み合わせれば、かなり見栄えの良いものができると思う。ただ遮蔽物を通した場合に影響されないケースも考慮しないといけないので、それらも今後加筆しておく。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1