OnTriggerEnter
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 16번째.
void OnTriggerEnter(Collider other)는 다른 콜라이더가 트리거와 겹치기 시작하는 물리 스텝에서 한 번 실행됩니다. other는 해당 콜라이더이므로, other.name, other.gameObject, other.CompareTag("Player")를 통해 무엇이 들어왔는지 알 수 있습니다. Unity는 두 오브젝트 모두의 스크립트에서 이 메서드를 호출합니다. 트리거에서는 other가 방문자이고, 방문자에서는 other가 트리거입니다.
이 결승선은 플레이어에만 반응하므로, 공이 굴러와 결승선을 지나도 아무것도 기록되지 않습니다:
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log(other.name + " crossed the finish line");
}
}매개변수는 Collider여야 합니다. void OnTriggerEnter(Collision collision)로 작성해도 C#에서는 일반 메서드이므로 스크립트는 여전히 컴파일됩니다. Unity는 매개변수 자체를 확인하고, This message parameter has to be of type: Collider라고 알리는 Script error: OnTriggerEnter를 기록한 뒤 메서드를 호출하지 않습니다. Collision은 두 개의 단단한 물체가 접촉 지점에서 만나는 OnCollisionEnter에 사용됩니다. 트리거는 보고할 접촉 지점 없이 콜라이더만 있으므로 Collider를 받습니다.
챌린지
쉬움차량은 트리거인 요금소 Gate를 통과합니다. 차량을 움직이는 Driver 스크립트는 완성되었습니다. 요금소의 TollGate 스크립트를 작성하세요:
Car태그가 지정된 모든 차량은toll(3)을 지불합니다. 이를collected에 더하고 합계를 로그에 출력하세요. 첫 번째 차량은Toll: 3, 그다음은Toll: 6이 됩니다.- Cyclist와 같은 그 밖의 모든 것은 요금을 내지 않고 지나가며 아무것도 로그에 출력하지 않습니다.
먼저 Play를 누르세요. Console에는 메서드가 작성된 방식과 관련된 스크립트 오류가 이미 표시되어 있습니다. 이를 수정한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class TollGate : MonoBehaviour
{
public int toll = 3;
int collected;
void OnTriggerEnter(Collision collision)
{
// 자동차는 통행료를 내고, 그 외의 것은 무료로 통과합니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.