Menu
CoddyTech

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를 한 번 호출합니다.

challenge icon

챌린지

쉬움

압력판은 그 위에 떨어지는 물체의 수를 셉니다.

  1. PressurePlate에 필드 private int presses;를 추가하세요.
  2. void OnCollisionEnter(Collision collision)을 추가하세요. presses에 1을 더하고 "Pressed " + presses를 로그에 기록하세요.

‘플레이’를 누르세요. 상자가 떨어지면 Console에 Pressed 1이 한 번 표시됩니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class PressurePlate : MonoBehaviour
{
    // 착지할 때마다 횟수를 세고 로그에 기록하세요: Pressed 1, Pressed 2, ...
}

물리와 게임플레이의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드