Menu
CoddyTech

진입과 이탈

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 20번째.

트리거는 메시지를 두 개 더 보냅니다. OnTriggerExit(Collider other)는 겹침이 끝나는 물리 단계에서, 겹침이 어떤 방식으로 끝나든 한 번 실행됩니다. OnTriggerStay(Collider other)는 겹침이 지속되는 동안 매 물리 단계마다 실행되며, 기본값은 초당 50회로 FixedUpdate()와 같습니다. 세 메서드 모두 같은 Collider를 받습니다.

이 상승 기류는 내부에 떠 있는 물체를 들어 올리고, 물체가 떠날 때 알려 줍니다.

public float lift = 15f;

void OnTriggerStay(Collider other)
{
    other.attachedRigidbody.AddForce(Vector3.up * lift);
}

void OnTriggerExit(Collider other)
{
    Debug.Log(other.name + " left the updraft");
}

힘은 물리 단계에서 적용해야 하므로 OnTriggerStay가 적합합니다. 공이 안에 있는 동안 단계마다 한 번씩 밀어 주고, 공이 떠나는 순간 멈춥니다. 상승 기류에는 Rigidbody가 없으므로 방문하는 물체마다 Rigidbody가 있어야 하며, 여기서 attachedRigidbody는 절대 null이 아닙니다. 초당 적용할 양을 OnTriggerStay에서 지정하려면 Time.deltaTime을 곱하세요. 물리 단계에서 이 값은 단계의 길이인 0.02입니다. 방문할 때마다 같은 콜라이더에 대해 OnTriggerEnter가 한 번 실행되고, 나중에 OnTriggerExit가 한 번 실행됩니다.

challenge icon

챌린지

쉬움

적재 구역에 물체가 하나라도 있으면 램프를 켜세요.

  1. int inBay; 필드를 추가하세요. Start()에서 lamp.enabled = false;로 설정하세요.
  2. OnTriggerEnter에서 inBay에 1을 더하고 lamp.enabled = true;로 설정하세요.
  3. OnTriggerExit에서 inBay에서 1을 빼고, 값이 0일 때만 램프를 끄세요.

‘플레이’를 누르고 상자를 안팎으로 밀어 보세요. 적재 구역이 비워질 때까지 램프가 켜져 있습니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // 적재 구역에 무엇이든 있으면 lamp가 켜지고, 적재 구역이 비면 꺼집니다
}

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

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