OnCollisionEnter
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 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를 한 번 호출합니다.
챌린지
쉬움압력판은 그 위에 떨어지는 물체의 횟수를 셉니다. 압력판에는 Rigidbody가 없고, 그 위의 상자에는 Rigidbody가 있어 압력판 위로 떨어집니다.
- 무언가 압력판에 닿기 시작할 때마다 횟수를 1씩 더하고 기록합니다:
Pressed 1, 그다음Pressed 2등으로 이어집니다. - 압력판 위에 놓인 물체는 얼마나 오래 머물든 한 번만 셉니다.
Play를 눌러 Console을 확인한 다음, Check를 누르세요.
직접 해보기
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// 착지할 때마다 횟수를 세고 로그에 기록하세요: Pressed 1, Pressed 2, ...
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.