1. 문제점
오늘 팀원이 제작한 코드 중 끊임없이 나오는 몬스터들을 미리 감지하는 기능이 있었다.
이 코드를 이해하고 여기서 기능을 더 추가하려고 했지만 처음보는 기능들이 있어서 이해가 어려웠다.
그래서 오늘은 어떤 방식으로 상대방을 감지하는지 알아보려고한다.
2. LayerMask란?
32비트의 int형으로 구성되있다.
예를 들어 000000000000~.....0, 총 32개의 비트로 나타낼 수 있다.
쉽게 설명하자면 만약에 Enemy라는 Layer값을 가진 Prefab이 있다면 Enemy정보를
총 32개의 비트 중 하나에 넣는 것이다.
3. RaycastHit란?
게임오브젝트의 위치에서 인자값을 넣어준 방향과 설정한 범위 내에서 물체가 있는지 없는지 충돌감지를 해주는 기능이다. 캐스트는 Layer로 관리하기 때문에 그에 맞는 값이 필요하다.
4. 사용법
앞서 말했듯이 RaycastHit는 레이어를 필요로한다. 그렇기에 LayerMask로 내가 감지하고 싶은 물체를 비트에 저장해 놓고
인자값으로 넘겨준다.
RaycastHit를 target이란 이름으로 선언했다고 가정하면 target = Physics.2D.CircleCastAll(Vector2원점, (float) 범위반경, Vector2 방향, (float) 거리, LayerMask); 이러한 형식으로 값을 넘겨주면 된다.
5. 알게된 것
처음 LayerMask와 RaycastHit를 봤을 때는 왜 둘이 같이 쓰여져 있는지 궁금했고 알 수도 없었다. 하지만 이렇게 개념과 사용법을 알고나니 LayerMask와 RaycastHit는 서로 필요한 인자였다는 것을 알 수 있었고 어떤 값들로 상대방을 탐지하는지 이해할 수 있었다. 그리하여 팀원의 코드에 대한 전체적인 흐름을 파악하고 수정하는데 도움이됐다. 예전부터 플레이어가 자동공격을 하면서 몬스터를 죽이는 게임이 굉장히 유행했었고 지금까지도 큰 인기를 얻고있다. 본인도 이러한 게임을 한번 만들어보고 싶다면 오늘 설명한 기능을 가지고 상대방 탐지 기능을 만들어보면 좋을 것 같다.
'TIL > Unity' 카테고리의 다른 글
Unity 지연함수 Invoke, Coroutine 의 차이점 (0) | 2023.09.15 |
---|---|
Unity 효율적인 데이터 관리 (ScriptableObject) (0) | 2023.09.14 |
[Unity] 충돌체크 기능 OnCollision, OnTrigger (0) | 2023.09.12 |
Unity deltaTime (0) | 2023.09.11 |
Unity 2D 캐릭터 카메라이동 (0) | 2023.09.05 |