Unityで爆発を物理で表現する方法

投稿者: | 2020-01-18

Unityでは爆発を表現できる関数が用意されているので使ってみます。
https://docs.unity3d.com/jp/460/ScriptReference/Rigidbody.AddExplosionForce.html


細長いCubeをプレハブ化して、シーンにたくさん配置しました。

Cubeのプレハブには、BoxコライダーとRigidbody、スクリプトを付けました。

スクリプトでは、Bキーを押すと、AddExplosionForce()でシーン上のCube一つ一つに爆発の力が加わって物理的に動くようにしています。

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

public class BombScript : MonoBehaviour
{
    public float power;
    public float radius;
    public float upwardsModifier;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.B))
        {
            GetComponent<Rigidbody>().AddExplosionForce(power, new Vector3(0f, 0f, 0f), radius, upwardsModifier,ForceMode.Impulse);    
        }
    }
}

AddExplosionForce()の引数は、爆発の力と位置、半径、そして、upwardsModifierとForceModeです。瞬時に一度だけ力を加えたいのでForceModeはImpulseにしています。

爆発の位置は床の真ん中です。力を100、半径を60で爆発させてみます。


効果範囲内の全てのCubeに、中心からの力が瞬時に加わっているのがわかります。

半径を小さくすると効果範囲が狭まります。

ところで、両方とも力が水平方向にしか加わっていません。Cubeが少し上向きに飛んだほうが爆発をうまく表現できると思います。
垂直方向へ力の向きを動かしたいときにupwardsModifierを使います。

upwardsModifierを変える

upwardsModifierに正の値を入れると、爆発の中心のY軸がその分下に移動した方向から力が加わります。

upwardsModifierを少し上げると、Cubeは少し上方向に飛びます。

実際に爆発の位置が移動したわけではなく、効果範囲はupwardsModifierが0のときと変わりません。

upwardsModifierをもっと上げて、ほとんど真上に飛ばす事もできます。

upwardsModifierを負の数にするとCubeは下方向に飛びます。

爆発と同時に床を消してみます。

upwardsModifierが10のとき

コメントを残す

メールアドレスが公開されることはありません。