요약
-Tag는 단일 게임 오브젝트를 관리하기 위해 사용
-Layer는 그룹으로 묶어 관리하기 위해서 사용
-Sorting Layer는 게임 오브젝트의 렌더링 순서를 정의하기 위해 사용
Tag
Tag는 각 게임 오브젝트를 식별하는 용도로 사용합니다.
많이 사용하는 방식으로는, 충돌을 검사하는 OnCollision, OnTrigger 함수에서 CompareTag()함수를 사용합니다.
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.transform.CompareTag("PlayerAttack"))
{
OnDamage(collision.transform);
}
}
위 방식 외에도 단순 문자열 비교등으로도 사용 가능한데, 이렇게 한다면 해당 문자열을 가져오기 위해 문자열의 복사본을 생성하게되고 유니티 시스템상 복사본을 생성할때 GC(가비지콜렉터)가 호출되기 때문에 성능상 손해를 볼 수 있습니다.(약 27%의 성능 손해) (링크)
if (collision.tag == "PlayerAttack"){ ... }
if (collision.tag.Equals("PlayerAttack")){ ... }
Layer
Layer는 오브젝트 그룹을 만들고 관리하는 용도입니다.
- 기본 레이어는 Default로 설정되어 있습니다.
- 상위 오브젝트와 하위 오브젝트는 서로 다른 레이어를 가질 수 있습니다.
Layer를 사용하는 방법
1) 선택적 렌더링
:카메라로부터 특정 레이어만을 렌더링하게 설정 가능합니다.
2) 레이어 충돌 매트릭스 (Layer Collision Matrix)
:서로 충돌할 수 있는 레이어를 정의할수있습니다.
주의) Layer Collision Matrix는 프로젝트 세팅의 Physics와 Physics2D에 각각 존재하는데, 서로의 설정이 서로에게 영향을 주지 못합니다.
3) 레이 캐스팅 충돌 (Raycasting Collision)
레이캐스팅은 레이저를 쏴서 모든 오브젝트에 대해 충돌을 판단하는것이 기본인데, 비효율적이기 때문에,
Layer Mask를 사용하면 특정 레이어와의 충돌을 판정할 수 있습니다.
예를 들면 바닥 레이어로 설정된 곳만 마우스로 클릭할 수 있게 한다던지...등등
//특정 Layer만 raycast하기
RaycastHit hit;
float distance = 10f;
int layerMask = 1 << LayerMask.NameToLayer("Player"); // Player 레이어만 충돌 체크함
//(레이어마스크는 비트플래그 방식이기때문에 위처럼 사용)
Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), out hit, distance ,layerMask);
또는
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
float distance = 10f;
Physics.Raycast(ray, out hit,distance, LayerMask.GetMask("Wall"));
//위처럼 LayerMask.GetMask()를 이용할수도있음
Sorting Layer
게임 오브젝트 내에서 렌더링 순서를 정의합니다.
주로 2D 시스템에서 스프라이트를 정렬하는데 유용합니다.
Sorting Layer나 Order in Layer를 조절해줘야지 위 캐릭터의 그림자분이 캐릭터뒤로 가게 설정할 수 있습니다.
'유니티' 카테고리의 다른 글
[Unity] 오브젝트를 이동시키는 방법들 (2) | 2023.01.22 |
---|---|
[Unity] Update(), FixedUpdate() 그리고 Physics Loop (0) | 2023.01.21 |
[Unity] Rigidbody의 Gravity의 기준은? (0) | 2023.01.21 |
[Unity] 방해되는 3d 아이콘 크기 줄이기 (0) | 2023.01.21 |
[Unity] Sprite Atlas (스프라이트 아틀라스) (0) | 2023.01.21 |