OnCollisionEnter
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 8번째.
두 충돌체가 서로 닿기 시작하면 Unity는 두 오브젝트의 스크립트에서 OnCollisionEnter(Collision collision)를 호출합니다. 접촉이 시작되는 물리 업데이트에서 한 번 호출되며, 접촉을 유지하는 동안에는 다시 호출되지 않습니다. 충돌이 발생하려면 둘 중 적어도 하나에 물리 시뮬레이션으로 움직이는 Rigidbody가 있어야 합니다. Rigidbody가 없는 벽과 바닥은 서로에게 아무런 메시지도 보내지 않습니다.
이 상자는 착지할 때 로그를 남깁니다. Rigidbody가 있으므로 떨어지고, 바닥에 닿는 물리 업데이트에서 메시지가 전달됩니다.
void OnCollisionEnter(Collision collision)
{
Debug.Log("Thud!");
}상자는 한 번 로그를 남기고, 바닥에서 떨어졌다가 두 번째로 착지한 뒤에야 다시 로그를 남깁니다. 바닥에도 메시지가 전달됩니다. 바닥에 스크립트가 있다면 Rigidbody가 없어도 상자의 착지를 감지할 수 있습니다. 메서드 이름과 매개변수는 정확해야 합니다. onCollisionEnter라는 이름의 메서드는 오류 없이 호출되지 않습니다. Collider를 매개변수로 받는 메서드는 Unity가 Script error: OnCollisionEnter와 This message parameter has to be of type: Collision을 로그에 남기게 하고, 해당 메서드는 무시됩니다. 두 충돌체가 계속 접촉하는 동안 Unity는 매 물리 업데이트마다 OnCollisionStay를 호출하고, 서로 떨어질 때는 OnCollisionExit를 한 번 호출합니다.
챌린지
쉬움압력판은 그 위에 떨어지는 물체의 수를 셉니다.
PressurePlate에 필드private int presses;를 추가하세요.void OnCollisionEnter(Collision collision)을 추가하세요.presses에 1을 더하고"Pressed " + presses를 로그에 기록하세요.
‘플레이’를 누르세요. 상자가 떨어지면 Console에 Pressed 1이 한 번 표시됩니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// 착지할 때마다 횟수를 세고 로그에 기록하세요: Pressed 1, Pressed 2, ...
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드