オブジェクトが衝突したときのイベント発生については、OnCollisionEnterとOnTriggerEnter、2つの設定があります。
両方の動きを見ながら、2つの違いについて見ていきましょう。
関連記事:
領域に入っている間と離れたときに発生
オブジェクトから離れるとイベント発生
触れている間はイベントを発生させる
触れた相手のオブジェクト名を取得
ぶつかったオブジェクトと同じカラーにする
ぶつかると逆方向に向きを変えて進む
OnCollisionやOnTriggerで複数オブジェクトを指定
コライダーのサイズを変えるスクリプト
isTriggerをスクリプトから切り替え
プレーヤーがひっくり返らないようにする
オブジェクトの準備
平面、Cube、Sphereのオブジェクトを用意します。
オブジェクトに色をつけて配置を変更。
カメラを動かして、斜めからのアングルにしました。
Sphereにリジッドボディを追加します。
Sphereを動かすために、スクリプトを作成します。
PlayerMove.csを作成して、Sphereに追加しましょう。
PlayerMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + dx, 0.5f, transform.position.z + dz ); } } |
プレイして動きを確認します。
十字キーの操作で、Sphereをコントロールできています。
次は、CubeにぶつかればSphereが黄色になるようにしましょう。
OnCollisionEnter
OnCollisionEnterから試してみます。
PlayerMove.csを開いて、コードを追加しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + dx, 0.5f, transform.position.z + dz ); } //OnCollisionEnter void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Cube" ) { GetComponent<Renderer>().material.color = Color.yellow; } } } |
プレイしてみましょう。
キューブにぶつかれば、黄色に変わります。
このように、OnCollisionEnterは、オブジェクト同士がぶつかったときに発生します。
OnTriggerEnter
次は、OnTriggerEnterを試してみましょう。
Cubeを選択し、「トリガーにする」にチェックを入れます。
PlayerMove.csを開いて、コードを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + dx, 0.5f, transform.position.z + dz ); } //OnTriggerEnter void OnTriggerEnter(Collider other) { if (other.gameObject.name == "Cube" ) { GetComponent<Renderer>().material.color = Color.yellow; } } } |
プレイしてみましょう。
キューブを通過したとき、黄色に変わります。
このように、OnTriggerEnterは、トリガーとなるオブジェクトに侵入したときに、発生します。
コライダーの「トリガーにする」は、侵入される側にチェックを入れます。
場面によって使い分けできる便利な仕組みです。
関連記事:
領域に入っている間と離れたときに発生
オブジェクトから離れるとイベント発生
触れている間はイベントを発生させる
触れた相手のオブジェクト名を取得
ぶつかったオブジェクトと同じカラーにする
ぶつかると逆方向に向きを変えて進む
OnCollisionやOnTriggerで複数オブジェクトを指定
コライダーのサイズを変えるスクリプト
isTriggerをスクリプトから切り替え
プレーヤーがひっくり返らないようにする