트리거 콜라이더
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 15번째.
Is Trigger가 체크된 콜라이더는 더 이상 단단한 물체가 아닙니다. 리지드바디는 그대로 통과하고, 대신 Unity는 두 오브젝트의 스크립트에서 OnTriggerEnter를 호출해 겹침을 알립니다. 결승선, 획득 아이템, 위험 구역은 트리거입니다. 코드에서 이 체크박스는 콜라이더의 isTrigger 속성입니다.
이 금고의 경보 구역은 게임이 시작될 때 콜라이더를 트리거로 전환합니다. 이는 체크박스를 체크하는 것과 같으며, 경비원이 안으로 들어오면 경보음을 울립니다.
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}트리거에도 충돌과 같은 규칙이 적용됩니다. Unity는 두 오브젝트 중 적어도 하나에 Rigidbody가 있을 때만 두 오브젝트의 쌍을 확인합니다. Rigidbody가 없는 두 오브젝트는 트리거인지 여부와 관계없이 서로를 감지하지 않습니다. 경비원은 스크립트로 순찰하므로, 각 경비원에게 키네마틱 Rigidbody를 추가합니다(Add Component, Rigidbody, Is Kinematic 체크). 중력과 충돌의 영향을 받지 않으면서도 Rigidbody로 간주됩니다. 경비원에게 Rigidbody가 없으면 경비원은 구역을 통과하고 Console은 비어 있습니다. isTrigger가 없으면 구역은 단단한 상자가 되고, 키네마틱 바디는 Rigidbody가 없는 콜라이더에 절대 닿지 않으므로 역시 아무것도 기록되지 않습니다. 쌍을 이루는 두 오브젝트 중 어느 한쪽에 Rigidbody 하나만 있어도 충분합니다. 다음 레슨에서는 들어온 콜라이더인 other를 살펴봅니다.
챌린지
쉬움드론이 링을 통과하게 하고, 각 링이 이를 보고하게 하세요.
Drone.cs의Start()에서body = gameObject.AddComponent<Rigidbody>();와body.isKinematic = true;를 설정해 드론이 수평으로 날게 하세요.Ring.cs의Start()에서GetComponent<Collider>().isTrigger = true;를 설정하세요.
‘플레이’를 누르세요. 드론이 링을 통과하고 Console에 Ring1 passed, Ring2 passed, Ring3 passed가 표시됩니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// 이 링의 collider를 trigger로 설정하세요
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드