Unity & C#

URP에서 VR + PC 두 화면 따로 출력하기

왼손잡이개발자 2021. 9. 15. 02:58

Unity Version: 2020.3.14f1

Platform: PC, Mac & Linux Standalone

Template: Universal Render Pipeline

VR Plugin: Oculus Integration (v32.0)

 

VR 헤드셋을 착용하고 있는 사람의 화면과 PC에서 나오는 화면을 각각 따로 나오게 하고 싶을 경우가 있다.

 

 

나의 경우는 VR 플레이어의 모습을 3인칭으로 보는 화면을 미디어아트 프로젝트로 활용하고 싶었다.

 

VR 카메라 화면이 아닌 일반 camera를 나오게 하는 방법은 어렵지않다. 씬에 VR camera와  일반 camera를 두 개 배치하고 일반 camera에 camera depth값을 VR Camera 보다 높여주면 된다.

 

3D 또는 HDRP template에서는 inspector 창에서 Camera Component를 보면 camera depth 값을 입력해줄수있다.

3D 또는 HDRP template에서는 camera depth값을 직접 입력해줄 수 있다.

하지만 이유는 모르겠지만 URP에서는 depth 값을 inspector에서 찾을 수 없었다. 그래서 CamDepth.cs 클래스를 하나 만들어서 일반 Camera의 Component로 추가하고 Start()에서 GetComponent<Camera>().depth 로 depth 값을 수정해 줄 수 있다. 

출력하고 싶은 화면의 camera에 CamDepth.cs를 component로 추가해준다.

[RequireComponent(typeof(Camera))]
public class CamDepth : MonoBehaviour
{
    Camera cam;
    public int depth;
    
    void Start()
    {
        cam = GetComponent<Camera>();
        cam.depth = depth;
    }
}

 

그리고 한가지 더 확인해야 할것은 VR Camera에서는 Target Eye를 Both로 하고 일반 Camera에서는 Target Eye를 none으로 설정해주어야한다.  (Target Display는 같아도 상관없다. 그냥 Game View에서 다른 화면을 확인해보고 싶다면 다르게 설정해주면 된다)

VR Camera에선 TargetEye를 Both로 설정
일반 Camera에서는 Target Eye를 None

 

위와 같이 설정해주면 VR플레이어는 HMD에서 VR 화면이 보이고, PC에서는 일반 Camera의 화면을 보여주게 된다.