Unityで当たり判定を追加する流れ
今回は、物体と物体の当たり判定の追加の仕方について、共有します。
モデルの作成
MayaやMetasequoiaをお使いの人は、
それらのソフトウェアから出力されるモデルを利用するとリッチな見栄えになります。
今回はモデルがないものとして、モデルを作成するところから説明します。
まず以下の図のように、「Cube」と「Sphere」を選び、四角柱と球体を作成します。
作成後、以下の図のように四角柱と球体の位置を遠ざけます。
位置を調整するには、Transformの座標を変更してください。
そしてこちらのモデルについて、
Unity上で判別できるように、名前を変更します。
- 四角柱→Cube
- 球体→Sphere
衝突判定特性の追加
上記モデルの生成では、モデルを作成した際に、合わせて衝突判定特性が追加されています。
「Collider」が衝突判定特性になります。
Colliderのサイズを変更することで、当たり判定のサイズも変更されます。
また1つゲームオブジェクトに複数の子ゲームオブジェクトを追加し、それぞれにColliderを追加すると、それぞれに対する当たり判定を追加できます。
つまり、「敵の攻撃に対する主人公への当たり判定」と「主人公の攻撃に対する敵への当たり判定」を使い分けるといった、Colliderで当たり判定の役割の分担もできます。
※GameObjectとTransformを正しく理解すれば、様々なシミュレーションができます。
モデルに物理特性の追加
前項で作成したモデルに、物理特性を追加します。
ここでの物理特性とは、衝突や落下といった「モノ」と「モノ」との相互作用を指します。
以下の図のように、モデルに「rigitbody」を追加します。
この時注意点として、【「Use Gravity」のチェックを外す】という作業を忘れないで下さい。
※チェックの解除を忘れると、本手続きでは地面を作成していないため、実行時にモデルが自由落下します。
スクリプトの追加
最後に、四角柱に衝突判定のスクリプトを追加します。
using UnityEngine; using System.Collections; public class Cube : MonoBehaviour { private Transform sphere; // Use this for initialization void Start() { this.sphere = GameObject.Find("Sphere").transform; } // Update is called once per frame void Update() { // 球体めがけて四角柱を移動させます。 var spherePos = this.sphere.position; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(spherePos - transform.position), 1f); transform.position += transform.forward * 0.05f; } /// <summary> /// 他のオブジェクトと衝突した際のイベントです。 /// </summary> /// <param name="other"></param> void OnTriggerEnter(Collider other) { Debug.Log(other.gameObject.name + "と衝突しました!!!"); } }
そして実行すると、以下の図のようにデバッグログに衝突時のメッセージが表示されます。
モデルとモデルとの当たり判定を検知する手段として、
Unityでは以下のメソッドが予め用意されています。
- OnTriggerEnter
他のオブジェクトと接触した瞬間に1回だけ実行されます。
- OnTriggerStay
他のオブジェクトと触れている間、何度も実行されます。
- OnTriggerExit
他のオブジェクトと接触し、離れた瞬間に1回だけ実行されます。
総括
今回は、ゲームで必要不可欠な「当たり判定」について、共有しました。
当たり判定を利用することで、
アクションゲームで見受けられる、敵の攻撃を受けた時のダメージモーションを実装することができます。
それではまた。