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