OnCollisionEnter
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 8/71。
2つのコライダーが接触し始めると、Unityは両方のオブジェクトのスクリプトでOnCollisionEnter(Collision collision)を呼び出します。接触が始まった物理ステップで1回だけ呼び出され、接触し続けている間に再度呼び出されることはありません。そもそも衝突が起きるには、2つのうち少なくとも1つに、物理演算によって動かされるRigidbodyが必要です。Rigidbodyのない壁と床は、互いに何も通知しません。
この木箱は着地したときにログを出力します。Rigidbodyがあるので落下し、床に触れたステップでメッセージが届きます。
void OnCollisionEnter(Collision collision)
{
Debug.Log("Thud!");
}木箱は1回ログを出力し、床から離れて2回目に着地した後にだけ、もう一度出力します。床にもメッセージが届きます。床にRigidbodyがなくても、床に付いたスクリプトは木箱の着地を検知します。メソッド名とパラメーターは正確でなければなりません。onCollisionEnterという名前のメソッドは呼び出されず、エラーも出ません。Colliderを受け取るメソッドを指定すると、UnityはScript error: OnCollisionEnterとThis message parameter has to be of type: Collisionをログに出力し、そのメソッドを無視します。2つが接触している間、Unityは物理ステップごとにOnCollisionStayを呼び出し、離れるときにOnCollisionExitを1回呼び出します。
チャレンジ
簡単プレッシャープレートは、その上に乗ったものの数を数えます。
PressurePlateにフィールドprivate int presses;を追加します。void OnCollisionEnter(Collision collision)を追加します。pressesに1を加算し、"Pressed " + pressesをログに出力します。
「プレイ」を押します。木箱が着地すると、コンソールにPressed 1と1回表示されます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// 着地するたびに回数を数え、Pressed 1, Pressed 2, ... とログに記録する
}
物理演算とゲームプレイのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド