Unity3D for VR 学习 —— 如何调整好Camera

暴风魔镜PC Input小改造–自己动手、丰衣足食

在做手游的时候,80%时间是在PC调试的,例如业务逻辑、AI算法、核心玩法等。

拿到魔镜提供的demo,晕了,必须得安装到Android机器上,才能调试,究其原因,有三:

  1. 需要用到手机陀螺仪
  2. 需要用到蓝牙手柄
  3. 需要用到魔镜的凸透镜

这些都是客观原因,但是每次打包后,安装Android,再戴到头上,Debug、log啥的都看不清,呵呵。

故就着手改造一下输入快捷键,从而可以方便的模拟手机陀螺仪输入、模拟蓝牙输入、模拟非VR Mode切换。

模拟手机陀螺仪输入

这个在mojing.cs有现成隐藏代码,在UpdateState()函数中。

  • 快捷键F: ok键
  • 快捷键Alt:按住,鼠标模拟GazePostion位移
  • 快捷键Ctrl:按住,鼠标模拟GazePostion旋转
模拟蓝牙输入

在学习了MojingInputManager.OnButtonDown\OnButtonUp后,知道只要传递过去string即可,其中用/分隔,第一位暂时不用,第二位用MojingKeyCode预定定义的数字。

  • 快捷键WASD:模拟蓝牙
  • 快捷键Q:模拟蓝牙OK
模拟非VR Mode切换

VR Mode切换,是通过设置Mojing.SDK.VRModeEnabled实现的,原理是对Left、Right Camera和Center Camera可见性进行隐藏或者显示实现切换,找到了Demo.cs脚本中,已经封装好了切换和返回主菜单函数,调用即可:

GameObject.FindObjectOfType<Demo>().ToggleVRMode();

快捷键R:模拟切换VR Mode
快捷键B:模拟回到主菜单

借用网络一句话:VR开发,比App开发,多一个Camera。 搭建好调试环境,就会好很多。

源码下载:MojingInputManagerEditor.cs

使用:在MojingInputManager.prefab添加MojingInputManagerEditor脚本,然后点击Apply即可。

自绘摄像机的视口区域锥体

在Unity Editor下,当选择Camera组件后,可呈现出Camera视口区域锥体,非常方便。但是当选择其他物体,如Cube后,就无法得知是否在Camera市口区内了,这里我找到了雨松MOMO的一篇博客《Unity3D研究院之获取摄像机的视口区域》,他用Camera.fieldOfView和Camera.aspect算出屏幕比例,然后再得出width、height(摄像机)绘制了四边形,非常酷,可以解决这个痛点。

我在巨人肩膀上,做了一些拓展:

自动获得Camera的farClipPlane和nearClipPlane

void Start() 
{ 
    if (!theCamera) 
    { 
        theCamera = this.GetComponent<Camera>(); 
    }
    upperDistance = theCamera.farClipPlane; 
    lowerDistance = theCamera.nearClipPlane; 
    tx = theCamera.transform; 
}  

连线far和near ClipPlane

void FindLower2UpperCorners() 
{ 
    Vector3[] corners_upper = GetCorners(upperDistance); 
    Vector3[] corners_lower = GetCorners(lowerDistance);
    Debug.DrawLine(corners_lower[0], corners_upper[0], Color.blue); 
    Debug.DrawLine(corners_lower[1], corners_upper[1], Color.blue); 
    Debug.DrawLine(corners_lower[2], corners_upper[2], Color.blue); 
    Debug.DrawLine(corners_lower[3], corners_upper[3], Color.blue); 
}

挂接这个CameraViewEx.cs脚本到Camera组件同GameObject即可, 运行时有效:

源码下载地址:http://git.oschina.net/xifarm/VR_Mojing/


转自赛隆网 http://www.cylonspace.com/

标签: unity, vr, unity3d for vr 学习

?>