CREATE YOUR WORLD
Players & Characters : Advance...
Camera Collision Layer
7min
ZepetoCamera는 ZepetoPlayers를 통해 생성되며, 카메라 충돌 설정을 통해 카메라와 게임 객체 간의 물리적 충돌을 제어할 수 있습니다.
카메라 충돌은 카메라가 장면의 객체와 충돌할 때 발생합니다.
카메라 충돌이 설정되면, 카메라가 객체와 충돌할 때 그 객체 앞에서 움직일 수 없게 되어 카메라가 객체를 통과하는 대신 그 앞에 머무르게 됩니다.
다음 두 가지 예를 살펴보겠습니다.
- 왼쪽 화면에서는 카메라 충돌이 설정되지 않아 카메라가 캐릭터 주변의 객체나 바닥에 영향을 받지 않고 자유롭게 움직일 수 있습니다.
- 오른쪽에서는 카메라 충돌이 활성화되어 있어 카메라가 이동할 때 벽과 바닥을 관통할 수 없습니다.
카메라 충돌을 활성화하면 카메라의 움직임이 물리적으로 영향을 받게 되어, 플레이어가 볼 수 없는 위치는 카메라에 의해 조명될 수 없으며, 이는 보다 현실적인 묘사를 가능하게 합니다.
![Document image Document image](https://archbee-image-uploads.s3.amazonaws.com/fCt3n1oCa8rgNJ8fw9I2N-TC9-06uQFRIS9udSLPYzv-20240904-102420.gif)
1) 카메라가 각 레이어에서 감지하는 충돌을 설정할 수 있습니다.
- 사용자 레이어를 설정하거나 추가하려면, 검사기 창의 레이어 드롭다운 메뉴를 눌러 '레이어 추가'를 선택하세요.
- 사용자가 추가할 수 있는 레이어는 Layer3 및 Layer6 이상으로 번호가 매겨질 수 있습니다. Layer0 ~ 2 및 Layer6 ~ 7은 Unity의 기본 레이어입니다.
![Document image Document image](https://images.archbee.com/fCt3n1oCa8rgNJ8fw9I2N-bWINrxYxvUmhX9uIw_2MA-20240904-102416.png?format=webp)
2) 카메라가 충돌 판단을 적용할 객체를 선택한 다음, 설정한 레이어를 선택하세요.
![Document image Document image](https://images.archbee.com/fCt3n1oCa8rgNJ8fw9I2N-0fGCLecHz4calLE2GZ3nd-20240904-102416.png?format=webp)
3) 이제 ZepetoPlayers의 카메라 부분에서 충돌로 등록할 레이어를 선택하려면 충돌 드롭다운 버튼을 눌러주세요. 추가한 레이어를 확인하세요.
![Document image Document image](https://images.archbee.com/fCt3n1oCa8rgNJ8fw9I2N-IcJdP4B9ONHisBvZMfbMD-20240904-102416.png?format=webp)
4) 이제 재생 버튼을 눌러 런타임을 실행하면 Zepeto 카메라가 바닥과 벽을 통과하지 않고 이동하는 것을 볼 수 있습니다.
![Document image Document image](https://images.archbee.com/fCt3n1oCa8rgNJ8fw9I2N-hVF6T0MIbUVKr0zTfWLXP-20240904-102416.png?format=webp)
- 런타임에서 카메라 충돌을 동적으로 지정할 수 있습니다.
- 아래는 런타임에서 공용 변수로 등록된 collisionLayer 번호를 레이어 마스크로 설정하는 스크립트입니다.
- 핵심은 ZepetoPlayers.instance.cameraData.layer에서 선택할 레이어 마스크를 지정하는 것입니다.
3. 스크립트 설명
- 레이어를 스크립트하고 카메라에 적용하기 위해서는 LayerMask를 사용해야 합니다.
- LayerMask는 비트 연산을 통해 입력된 값을 가집니다.
- LayerMask는 정수 값으로 표현되며, 각 비트는 해당 레이어가 포함되어 있는지를 나타냅니다.
- 예를 들어, LayerMask의 값이 5(이진수로 00000101)라면, 레이어 0과 레이어 2가 포함되어 있다고 말할 수 있습니다.
- layerMaskValue |=: 이 비트 연산은 기존의 layerMaskValue와 새로 계산된 값을 OR 연산으로 결합합니다.
- 기존의 layerMaskValue가 이진수로 00000001이고, 새로 계산된 값이 00000100이라면, 두 값을 OR 연산하면 이진수로 00000101이 됩니다.
- 이것은 레이어 0과 레이어 2가 LayerMask에 포함되도록 보장합니다.
- EnhancedCamera의 경우, 플레이어 레이어가 카메라의 충돌 레이어로 설정되지 않아 카메라가 캐릭터와 교차하지 않도록 합니다.