유니티에서는 Culling Mask기능을 통해 원하는 물체만 렌더링하고, 혼합시킬 수 있다.
활용 방도가 많을 것 같아 조금 찾아보았다.
정확한 정의는 다음과 같다
: 카메라가 렌더링 할 오브젝트의 레이어를 포함하거나 제외합니다. 오브젝트의 레이어를 인스펙터에 할당해야 합니다.
Unity Doc
즉, 내가 렌더링할 레이어를 골라주면, 해당 부분만 카메라에 표시될 수 있다는 것이다.

위 이미지에서 Cutting Mask에서 레이어를 설정해 줄 수 있다.
Clear Flags를 통해 어느 부분을 클리어 할지 그 여부를 결정할 수 있다.
여러 대의 카메라를 생성하여 각각 다른 Depth를 할당할 수 있다.Depth에 따라 카메라의 그려지지는 순서가 결정된다.
이를 통해 무기 장착 UI를 구현할 수 있다.
카메라 1

카메라 2

두 카메라를 합성하여 화면을 표시할 수 있다.
위 기능을 통해 분할 화면 2인 플레이를 만들 수 있을 것 같다.
플레이트가 이동할때, 플레이어가 그 위를 올라가고, 같이 자연스럽게 이동하는 코드를 만들어보았다.
기본적으로 플레이트는 animator를 통해 움직인다.
내가 작성한 코드는 아래와 같다
public class MovingPlate : MonoBehaviour
{
Vector3 plateFirstLoc;
Vector3 DeltaLocation;
private void OnEnable()
{
plateFirstLoc = this.transform.position;//현재 위치 저장
}
private void FixedUpdate()
{
DeltaLocation = plateFirstLoc - this.transform.position;//각 프레임마다 위치의 변화량 계산
plateFirstLoc = this.transform.position;
}
private void OnCollisionStay(UnityEngine.Collision collision)
{
//맞닿은 물체의 위치를 변화량만큼 이동 -> 발판과 같은 변화량을 지니게 됨
collision.transform.position += new Vector3 (-DeltaLocation.x,-DeltaLocation.y, 0.0f);
}
}
시작시 현재 위치를 작성한다
Fixed Update는 일정프레임마다 실행되는 부분이다
여기서 각 위치의 변화량을 계산한다. 이건 해당 플레이트의 위치 변화량이고, 시간단위가 있으므로 속도를 의미한다.
그렇다면 위에 있는 물체에 각 프레임마다 해당 변화량(1프레임간 움직인 거리 = 속도*시간(1프레임) )을 곱해주는 것으로 자연스러운 움직임을 만들 수 있다.
다만 실제로 실행하면서 걱정된 부분은, 위에 일반적인 물체를 올려놓았을때이다. 이때 물체의 y축이 진동하는 모습을 보았다.
중력에 대한 영향과 관련이 있는 것 같은데 해결하지는 못했다.