진입과 이탈
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가 한 번 실행됩니다.
챌린지
쉬움적재 구역에 물체가 하나라도 있으면 램프를 켜세요.
int inBay;필드를 추가하세요.Start()에서lamp.enabled = false;로 설정하세요.OnTriggerEnter에서inBay에 1을 더하고lamp.enabled = true;로 설정하세요.OnTriggerExit에서inBay에서 1을 빼고, 값이 0일 때만 램프를 끄세요.
‘플레이’를 누르고 상자를 안팎으로 밀어 보세요. 적재 구역이 비워질 때까지 램프가 켜져 있습니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class LoadingBay : MonoBehaviour
{
public Light lamp;
// 적재 구역에 무엇이든 있으면 lamp가 켜지고, 적재 구역이 비면 꺼집니다
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드