일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Cartoon Rendering
- Rim Light
- ASW(Application SpaceWarp)
- URP
- VR
- 프로그래밍 기초
- Toon Shader
- Private Bytes
- 개인 바이트
- C언어
- Cell Look
- 가상 바이트
- 벡터
- Cell Shader
- Windows Build
- AppSW
- Specular
- URP로 변경
- Virtual Byte
- working set
- OculusMotionVectorPass
- 작업 집합
- ColorGradingLutPass
- 3d
- Three(Two) Tone Shading
- 게임 수학
- 메모리 누수
- Today
- Total
WinCNT
유니티 스크립트 게임 오브젝트의 레이어와 카메라의 컬링 마스크를 설정하기 본문
서론
스크립트 통해서 특정 카메라에 특정 오브젝트만 렌더링하기 위해 여러가지 조사하고 삽질한 내용을 정리하고자 한다
소스 코드
결론부터 말자하면 게임 오브젝트의 레이어(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
마무리
처음에는 레이어(Layer)와 컬링 마스크(CullingMask)가 다르다는 사실을 눈치 못 채고 삽질을 좀 했다
다행히 디버그로 금방 눈치채서 수정할 수 있었다
참고 사이트
[Unity]CameraのCulliingMask設定 - Qiita
'Unity > Unity 관련' 카테고리의 다른 글
유니티의 UI 시스템(uGUI)에 대해 조금 알아보기 (0) | 2023.07.24 |
---|---|
유니티의 Bakery(라이트 맵 생성 에셋) 적용기 (0) | 2023.06.20 |
유니티 에디터 모드에서 다이얼로그(Dialogue)창 띄우기 (0) | 2023.04.26 |
URP에서 특정 카메라의 렌더링 후에 호출되는 함수 (0) | 2023.04.25 |
Texture를 PNG파일로 저장하기 (0) | 2023.03.23 |