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のとき