UnityではRigidbodyを使うことで重力を表現できます。
モノが落ちたり、ぶつかったときの衝撃などの計算が自動で行われます。
この記事では、爆弾の爆発は表現できるのか、どうやって実装するのか調べてみました。
作ってみたゲームは以下の通りです。
爆弾が爆発すると、木箱が吹っ飛びます。
爆弾はBlenderで作成し、エフェクトは以下のアセットを利用しました。
Effect Example→Fire & Explosion Effect→Prefabの中にあるBigExplosionをシーンに配置して、全てのParticleSystemのLoopと起動時実行のチェックを外します。
爆弾に使用しているスクリプトは以下の通りです。
public class Bomb : MonoBehaviour { public float power; public float radius; // Update is called once per frame void Update() { } private void OnCollisionEnter(Collision collision) { if(collision.gameObject.tag == "Ball") { Vector3 explosionPos = transform.position; // 爆発のエフェクトを再生 var ex = GameObject.Find("BigExplosion"); ex.transform.position = explosionPos; ex.GetComponent<ParticleSystem>().Play(); Collider[] colliders = Physics.OverlapSphere(explosionPos, radius); foreach (Collider hit in colliders) { Rigidbody rb = hit.GetComponent<Rigidbody>(); if (rb != null) rb.AddExplosionForce(power, explosionPos, radius, 3.0F); } } } }
肝となるのは「AddExplosionForce」です。
取得した木箱のRigidbodyに対して爆発効果を与えています。
木箱の積み上げには以下のサイトのスクリプトを利用させていただきました。