인프런 커뮤니티 질문&답변

PGmz님의 프로필 이미지
PGmz

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

Raycast하고 레이어 부분 궁금한거 질문드려요

해결된 질문

작성

·

478

0

충돌체크 성능 부하 관련 야기하다가 레이어로 넘어가셨는데 레이어 쓰는게 성능 때문에 쓰는건가요?

아님 그냥 충돌 개체 그룹화 때문에 쓰는건가요?

레이어로 구분 해놔도 어차피 collider 있으면 충돌 체크는 일단 다 하고 처리만 레이어로 해놓은거만 되는거 같아서요

답변 4

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

아 그렇군요.
<레이어가 배열로 개체 주소를 갖고 있는> 형태는 아니고,
거꾸로 <개체마다 자신의 Layer 리스트를 bitFlag로 들고 있는 형태>입니다.
따라서 Raycast할 때 우리가 원하는 layer 목록을 bitFlag로 넘겨주면,
Unity 엔진에서 일단 주변 오브젝트 후보군들을 추려서
지정된 레이어가 아닌 애들은 충돌 테스트를 아예 하지도 않고,
바로 쿨하게 Skip하게 됩니다.

0

PGmz님의 프로필 이미지
PGmz
질문자

아 그렇군요 일단 우선적으로 비트플래그로 먼저 체크하고 맞는 것들은 그뒤에 체크할 레이어의 개체들만 충돌 처리하는군요 이해했습니다^^

0

PGmz님의 프로필 이미지
PGmz
질문자

충돌체크를 다하고 레이어단에 하겠다는게 아니라 레이어 구분해도 내부적으로 돌아가는게 그렇게 돌아가는 것이 아닌가 해서 질문드린건데

레이어가 따로 배열 같은걸로 개체 주소 가지고 있으면서 충돌을 배열만 도는 형태인건가요?

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

안녕하세요,
레이어를 사용하는 가장 큰 목적은  성능입니다.
[충돌 체크를 일단 다 하고 컨텐츠 단에서 레이어로 구분]하면 어떨까 의문을 주셨는데
사실 이 충돌 체크를 다 하는 부분이 매우 부하가 심할 수 있습니다.
그나마 실린더나 구형 모양의 collider는 양호한 편이지만,
mesh collider의 경우 충돌 자체를 계산하는데 많은 연산이 필요합니다.
게다가 raycast할 때 가장 먼저 앞에서 충돌한 collider를 뽑아오는 경우가 많은데,
layer로 구분을 해놓지 않으면 현재 raycast에서 충돌하고 싶지 않은 엉뚱한 애가 걸릴 수 있습니다.
감사합니다.

PGmz님의 프로필 이미지
PGmz

작성한 질문수

질문하기