유니티 카메라 culling Mask사용해보기

2020. 7. 7. 22:15유니티실습

반응형

안녕하세요 유니티 비기너입니다.

이번 시간에는 카메라 컴포넌트에 포함되는 Variable 중

하나인 culling Mask를 사용방법에 대해 알아보겠습니다.

유니티 안에서는 다양한 오브젝트(캐릭터, 몬스터 등등)들을 포함하고 있으며

그 오브젝트들을 화면에 보이게 하기 위해선 카메라가 필수적으로 필요합니다.

 

카메라의 기능 중에는 Culling mask라는 것이 존재하는데

이 부분을 제어하여 특정 Layer만 카메라에 비치게 하는 것이 가능합니다.

 

결과 화면

한 번에 보기

1. 스프라이트 이미지를 준비합니다.

2. 오브젝트를 생성합니다.

3. User Layer를 추가합니다.

4. 스크립트를 작성합니다.

5. 버튼컴포넌트를 추가하고 layer를 변경해주고 스크립트를 할당합니다.

 

1. 스프라이트 이미지를 준비합니다.

 

간단하게 2가지 정도의 스프라이트를 준비합니다.

우클릭으로 복사하셔도 무관합니다.

 

 

2. 오브젝트를 생성합니다.

스프라이트를 적용시킬 2개 정도의 오브젝트를 생성합니다.

3. User Layer를 추가합니다.

아무 오브젝트를 선택한 뒤 우측 상단의 Layer에서 Add Layer를 통해 User Layer를 추가합니다.

 

전부 추가할 필요 없이 2가지 정도 추가하고 해당하는 Layer의 번호를 확인합니다.

4. 스크립트를 작성합니다.

public class CullingMaskController : MonoBehaviour
{
    public Camera myCamera;

    public void OnlyLayerMask(int layerIndex) {
        myCamera.cullingMask = 1 << layerIndex;
    }

    public void OffLayerMask(int layerIndex) {
        myCamera.cullingMask = ~(1 << layerIndex);
    }

    public void Everything() {
        myCamera.cullingMask = -1;
    }

    public void Nothing() {
        myCamera.cullingMask = ~-1;
    }
}

cullingMask = -1은 everything과 같은 역할을 하며 기본 layer와, 추가한 모든 user layer를 활성화시킵니다.

 

~는 역 조건의 기능을 수행하는데 ~를 부착하게 되면 모든 Layer가 비활성화되어 모든 이미지가 보이지 않게 됩니다.

 

1 << layerIndex는 해당하는 Index의 Layer만 활성화시키고 나머지는 전부 비활성화시킵니다.

 

반대로 ~(1 << layerIndex)는 Index의 Layer만 비활성화시키고 나머지는 전부 활성화시킵니다.

 

 

5. 버튼 컴포넌트를 추가하고 layer를 변경해주고 스크립트를 할당합니다.

버튼 컴포넌트를 추가하고 스크립트를 할당하여 함수를 연결해줍니다.

Parameter는 int형 인자 값을 넘기며 해당 int는 UserLayer를 변경

 

이상으로 culling mask를 활용하는 방법에 대해 알아보았습니다.

해당 기능을 이용하여 다양한 용도로 사용하셨으면 좋겠습니다.

감사합니다.

 

반응형