WinCNT

유니티 스크립트 게임 오브젝트의 레이어와 카메라의 컬링 마스크를 설정하기 본문

Unity/Unity 관련

유니티 스크립트 게임 오브젝트의 레이어와 카메라의 컬링 마스크를 설정하기

WinCNT_SSS 2023. 5. 19. 19:16

서론

스크립트 통해서 특정 카메라에 특정 오브젝트만 렌더링하기 위해 여러가지 조사하고 삽질한 내용을 정리하고자 한다


소스 코드

결론부터 말자하면 게임 오브젝트의 레이어(GameObject.layer)와 카메라의 컬링 모드(Camera.cullingMask)는 다르게 설정해야 한다

예를 들어 게임 오브젝트의 레이어와 카메라의 컬링 모드를 스크립트를 통해 4: Water(기본 설정 중 하나)로 설정하려면 다른 방식을 사용해야 한다

// GameObject
gameObject.layer   = LayerMask.NameToLayer("Water"); // LayerMask 사용
gameObject.layer   = 4;                              // 하드 코딩

// Camera
camera.cullingMask = LayerMask.GetMask("Water"); // LayerMask 사용
camera.cullingMask = 16;                         // 하드 코딩

레이어(Layer)와 컬링 마스크(CullingMask)

처음에는 아무 생각 없이 하드 코딩으로 같은 숫자를 설정했다가 삽질을 했다

 

사실 잘 생각보면 하드 코딩 시의 숫자가 다른 이유는는 단순한데,

게임 오브젝트의 레이어(GameObject.layer)는 하나만 설정하면 되지만, 카메라의 컬링 마스크(Camera.cullingMask)는 렌더링할 레이어들을 선택할 수 있기 때문이다

(그래서 LayerMask.GetMask()도 1개 이상의 파마리터를 넣을 수 있음)

게임 오브젝트의 레이어 선택 / 카메라의 컬링 마스크 선택

컬링 마스크는 비트로 플래그를 관리하는 것으로 보인다

참고로 4: Water가 4번째인데도 불구하고 8(비트로는 0000 1000)이 아니라

16(비트로는 0001 0000)인 이유는 Water가 실제 설정에서는 5번째의 위치였기 때문일 것이다…


비트 연산으로 컬링 마스크 설정하기

번외로 비트 연산을 통해서 컬링 마스크를 변경하는 방법이 있다

// x, y는 레이어의 번호를 의미한다
// x레이어만 설정
camera.cullingMask = 1 << x;
// 여러 레이어 설정
camera.cullingMask = 1 << x + 1 << y + 1 << z;
// x레이어 추가
camera.cullingMask |= (1 << x);
// x레이어 삭제
camera.cullingMask &= ~(1 << x);
// x이외의 레이어를 전부 유효로 변경
camera.cullingMask = ~(1 << x);
// 모든 레이어를 유효로 변경
camera.cullingMask = -1;

해당 소스 코드는 아래의 사이트에서 찾아왔다

[Unity]CameraのCulliingMask設定 - Qiita

 

[Unity]CameraのCulliingMask設定 - Qiita

新しく、記事を下のリンク先に移行しましたので、よろしかったら、参考になってください。 [Unity]CameraのCulliingMask設定

qiita.com


마무리

처음에는 레이어(Layer)와 컬링 마스크(CullingMask)가 다르다는 사실을 눈치 못 채고 삽질을 좀 했다

다행히 디버그로 금방 눈치채서 수정할 수 있었다


참고 사이트

Unity - Scripting API:

 

Unity - Scripting API:

Searching Script Reference, please wait.

docs.unity3d.com

[Unity]CameraのCulliingMask設定 - Qiita

 

[Unity]CameraのCulliingMask設定 - Qiita

新しく、記事を下のリンク先に移行しましたので、よろしかったら、参考になってください。 [Unity]CameraのCulliingMask設定

qiita.com