How to implement a Side-by-Side Stereo Camera Setup in Unity如何在Unity中实现并排立体相机设置

using UnityEngine;

public class CameraSetup : MonoBehaviour
{
    private Transform cameraHeadTransform;
    private GameObject monoCamera;
    private GameObject leftEyeCamera;
    private GameObject rightEyeCamera;

    public float EyeSeparation = 0.08f;
    public float NearClipPlane = 0.01f;
    public float FarClipPlane = 100.0f;
    public float FieldOfView = 60.0f;

    private bool isStereo;

    void Start()
    {
        // Get the transform of the CameraHead gameobject
        cameraHeadTransform = gameObject.transform;

        // create mono camera
        monoCamera = new GameObject("monoCamera");
        monoCamera.transform.SetParent(cameraHeadTransform.transform);
        var camera = cameraHeadTransform.gameObject.AddComponent<Camera>();
        camera.nearClipPlane = NearClipPlane;
        camera.farClipPlane = FarClipPlane;

        // create stereo camera setup
        leftEyeCamera = new GameObject("leftEyeCamera");
        leftEyeCamera.transform.SetParent(cameraHeadTransform.transform);
        leftEyeCamera.transform.localPosition -= new Vector3(0.04f, 0, 0);
        var cameraLE = leftEyeCamera.AddComponent<Camera>();
        cameraLE.rect = new Rect(0, 0, 0.5f, 1);
        cameraLE.fieldOfView = FieldOfView;
        cameraLE.aspect *= 2;
        cameraLE.nearClipPlane = NearClipPlane;
        cameraLE.farClipPlane = FarClipPlane;
        leftEyeCamera.SetActive(false);

        rightEyeCamera = new GameObject("rightEyeCamera");
        rightEyeCamera.transform.SetParent(cameraHeadTransform.transform);
        rightEyeCamera.transform.localPosition += new Vector3(0.04f, 0, 0);
        var cameraRE = rightEyeCamera.AddComponent<Camera>();
        cameraRE.rect = new Rect(0.5f, 0, 0.5f, 1);
        cameraRE.fieldOfView = FieldOfView;
        cameraRE.aspect *= 2;
        cameraRE.nearClipPlane = NearClipPlane;
        cameraRE.farClipPlane = FarClipPlane;
        rightEyeCamera.SetActive(false);

        isStereo = false;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            isStereo = false;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            isStereo = true;
        }

        monoCamera.SetActive(!isStereo);
        leftEyeCamera.SetActive(isStereo);
        rightEyeCamera.SetActive(isStereo);
    }
}

How to implement a Side-by-Side Stereo Camera Setup in Unity – Dr.-Ing. Anton Sigitov

GitHub - asigitov/SideBySideCamera: An example of the Side-by-Side stereo camera setup in Unity Engine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值