Menu
CoddyTech

진입과 이탈

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

트리거는 메시지를 두 개 더 보냅니다. 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

챌린지

쉬움

창고 바닥에 칠해진 노란색 Bay는 트리거이고, lamp는 그 옆 기둥에 있는 경고등입니다. 베이에 물체가 있는지 여부를 램프로 표시하도록 LoadingBay를 작성하세요.

  • 게임이 시작될 때 베이는 비어 있으므로 램프는 꺼져 있습니다(lamp.enabled = false).
  • 베이에 물체가 하나 이상 있는 동안 램프는 켜져 있습니다.
  • 마지막 물체가 나가면 램프가 다시 꺼집니다.

상자 두 개와 플레이어가 동시에 베이에 있을 수 있으므로, 하나가 나간다고 해서 베이가 비었다는 뜻은 아닙니다. Play를 누르고 화살표 키로 상자를 안팎으로 밀어 넣은 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // 적재 구역에 무언가가 있으면 램프가 켜지고, 비어 있으면 꺼집니다
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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