日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity中Oculus分屏相机和普通相机一键切换

發布時間:2024/4/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity中Oculus分屏相机和普通相机一键切换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文章由cartzhang編寫,轉載請注明出處。 所有權利保留。
文章鏈接:http://blog.csdn.net/cartzhang/article/details/50462157
作者:cartzhang

Unity中Oculus分屏相機和普通相機一鍵切換

一、OCulus 分屏相機介紹

在VR開發工程中,總會覺得OC分屏的處理太慢,嚴重浪費時間啊!
但是不使用有不好調試,來回切換相機就成為了一個必須。

近來常用,所以就寫了一個小功能來實現它。用tab來實現OC分屏相機和普通相機的切換。
說明:過于頻繁切換,會導致Unity崩潰,所以限制了2秒的最短切換頻率。

二、具體怎么實現呢?

首先,
新建一個工程吧。我使用的Unity版本為5.1.1f,64位版本。當然32位也是可以的。
然后,
導入了2013插件,導入了OC的0.4.4版本,使用順手了。要是使用Unity5.3版本,并且不需要對OC相機進行控制處理的,只需所要縮放renderScale等功能的,5.3版本已經集成了,更多請參考 蠻牛的Untiy5.3 翻譯

網址:http://www.manew.com/thread-45174-1-1.html?_dsign=ad0f20e3。

最后,
都導入以后,如下圖:

三、相機

創建了一個相機的預制體,包括一個正常的相機,一個是OC的分屏相機。名字為Player。
如下圖:

四、代碼:

代碼很簡單,就是切換顯示而已:
如下:

using UnityEngine; using System.Collections;namespace SLQJ_VR {public class ShiftCamera : MonoBehaviour{[Header("相機類型")]public CameraType cameraType;[Header("旋轉速度")]public float Speed = 100;public KeyCode ShiftKey = KeyCode.Tab;private float shiftStartTime;private float shiftDelayTime = 2.0f;private Transform XRotateObject;private Transform YRotateObject;private string nomalCamera = "NormalCamera";private string stereoCamera = "OVRCameraRig";private GameObject mCurrentCamera = null;void Awake(){shiftStartTime = Time.time;XRotateObject = this.transform;CameraChoose();}public GameObject GetCurrentCamera(){CameraChoose();return mCurrentCamera;}// Update is called once per framevoid Update(){CameraYaw();CameraPitch();//ShiftCameraUseKey();ShowLookDirect();}/// <summary>/// 鍵盤控制相機的旋轉。/// </summary>private void CameraPitch(){ if(null != YRotateObject)// Vertical{YRotateObject.Rotate(new Vector3(Speed * Time.deltaTime * Input.GetAxis("Vertical"), 0, 0));}}private void CameraYaw(){if (null != XRotateObject)//Horizontal {XRotateObject.Rotate(new Vector3(0, Speed * Time.deltaTime * Input.GetAxis("Horizontal"), 0));}}/// <summary>/// 使用tab鍵,來切換相機/// </summary>private void ShiftCameraUseKey(){if (Input.GetKey(ShiftKey) && Time.time - shiftStartTime >= shiftDelayTime){shiftStartTime = Time.time;cameraType++;cameraType = (CameraType)((int)cameraType % (int)CameraType.Size);CameraChoose();}}/// <summary>/// 在編輯器模式下,顯示條方向線/// </summary>private void ShowLookDirect(){#if !UNITY_ANDROID || UNITY_EDITORif (Input.GetKey(KeyCode.Escape)){Application.Quit();}Vector3 StartPt = mCurrentCamera.transform.position;Vector3 TmpDirector = mCurrentCamera.transform.forward;Debug.DrawRay(StartPt, TmpDirector * 1000); #endif}/// <summary>/// 相機選擇/// </summary>void CameraChoose(){if (CameraType.Normal == cameraType){YRotateObject = transform.FindChild(nomalCamera);mCurrentCamera = YRotateObject.gameObject;mCurrentCamera.SetActive(true);transform.FindChild(stereoCamera).gameObject.SetActive(false);}else{YRotateObject = transform.FindChild(stereoCamera);mCurrentCamera = YRotateObject.gameObject;mCurrentCamera.SetActive(true);transform.FindChild(nomalCamera).gameObject.SetActive(false);}}}public enum CameraType{/// <summary>/// 正常相機/// </summary>Normal = 0, /// /// <summary>/// OC相機/// </summary>Stereo = 1,/// <summary>/// 總類型個數/// </summary>Size = Stereo + 1} }

代碼基本都帶了注釋,不多說了。
不過,要說的一點,就是代碼中,把相機對象的旋轉,X方向和Y方向的旋轉也就是Pitch和Yaw給分開了,很明顯這好處大大的。

五、結論

按下tab 鍵,不要著急,因為從正常相機切換到雙屏渲染,要稍微費些時間。
當然,切換到正常模式相機還是很迅速的。這個切換時間問題,只能這樣。

六、源碼工程

源碼工程地址—Csdn免分下載地址: http://download.csdn.net/detail/cartzhang/9390722

就這樣!!
———-THE END—————————
若有問題,請隨時聯系!!!
非常感謝!!

轉載于:https://www.cnblogs.com/qitian1/p/6461929.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的Unity中Oculus分屏相机和普通相机一键切换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。