OnCollisionEnter
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 8/63。
2つのコライダーが接触し始めると、Unityは両方のオブジェクトのスクリプトでOnCollisionEnter(Collision collision)を呼び出します。呼び出されるのは接触が始まる物理ステップでの1回だけで、接触が続いている間は再度呼び出されません。そもそも衝突が起きるには、2つのうち少なくとも一方に、物理演算によって動かされる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回呼び出します。
チャレンジ
簡単プレッシャープレートは、その上に落ちてくるものを数えます。プレートにはRigidbodyがなく、その上の木箱にはRigidbodyがあり、プレートの上に落下します。
- 何かがプレートに触れ始めるたびに、カウントに1を加えてログに記録します:
Pressed 1、次にPressed 2、というように続きます。 - プレートの上に載っているものは、どれだけ長くそのままでも、1回だけ数えます。
Playを押してConsoleを確認し、次にCheckを押してください。
自分で試してみよう
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// 着地するたびに回数を数え、Pressed 1, Pressed 2, ... のようにログに記録する
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。