
기본적으로 유니티에서 Collider 컴포넌트를 추가한다면, 사용 방법에따라 OnTriggerEnter(2D)나 OnCollisionEnter(2D) 같은 메서드들을 통해 충돌 했을 시의 동작을 구현할 수 있다.
그러나 모든 충돌에 반응하는 경우도 있겠지만, 특정 오브젝트 충돌에만 반응하게 만들고 싶은 경우도 분명 존재할 것이다.
그럴 때 Layer를 통해 충돌한 대상을 판별할 수 있다.
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.layer == LayerMask.NameToLayer("Enemy"))
{
Debug.Log("Enemy Hit");
}
}
위 코드는 충돌한 물체의 레이어가 "Enemy" 일 때만 내부의 Debug 로그를 출력할 수 있다.
예시에선 편의상 "Enemy"라고 직접 문자열을 입력했지만, 따로 변수로 받아 사용하는 것도 좋다.
[SerializeField] private string targetLayerName;
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.layer == LayerMask.NameToLayer(targetLayerName))
{
Debug.Log($"{targetLayerName} Hit");
}
}
위 코드에서 'collision.gameObject.layer' 는 int값으로 반환이 된다.

따라서 레이어를 비교한다고 'collision.gameObject.layer == targetLayerName' 같은 식으로 사용하면 다음과 같은 컴파일 오류가 발생한다.

LayerMask.NameToLayer(String string)은 string 값에 맞는 레이어 번호를 반환하기에, 비교를 위해서는 해당 메서드를 이용해야한다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 내일배움캠프 27일차 TIL "오브젝트 풀링" (0) | 2024.10.22 |
|---|---|
| 내일배움캠프 26일차 TIL "UI에서의 Anchor" (0) | 2024.10.21 |
| 내일배움캠프 24일차 TIL "화면 내 좌표 구하기" (0) | 2024.10.17 |
| 내일배움캠프 23일차 TIL "Input System을 사용하는 여러 방법" (0) | 2024.10.16 |
| 내일배움캠프 22일차 TIL "캐릭터를 뒤집는 방법" (0) | 2024.10.15 |