Unity 的OCulus VR开发遇到的坑---OC版本差异
2015-12-28 16:14
603 查看
本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:/article/3612352.html
作者:cartzhang
针对Unity的Oculus开发,Oculus官方给出了官方插件,不同的Unity版本,对应不同的插件版本,但是在使用中,发现有些不同或是bug.
Oculus的Unity 插件官方地址:https://developer.oculus.com/doc/0.1.0.0-unity/index.html
我作为Unity新人,没有用过Unity5之前的任何版本,不熟悉任何操作。所以,就根据官方推荐,使用了5.1.1版本,然后根据官方版本对应推荐,果断选择下载了PC端的OC的0.6.0.1版本,对应的Unity开发工具当时是下载的0.010beta版本。
官方推荐的各个版本对应的runtime表:
https://developer.oculus.com/documentation/game-engines/latest/concepts/unity-sdk-version-compatibility/
问题是,根据游戏情节要求,需要在某个时刻或场景下锁定头盔,不能让它转动了。(先说需要,关于需求是否合理,这个下次接着再说)。
二、初步了解插件
首先,先初步了解下插件啊。
下载完毕插件,建立个Unity空项目,拖拽到工程下,可以看到导入后,在资源目录下如图:
在prefabs下有三个预制,而在0.4.4或0.4.2版本下有两个预制。
就是实现不让头盔来回旋转,这个锁定相机就好了嘛,很简单啊。关键是找对地方,代码修改一下,就搞定了。结果并不如我想象。
三、说的容易
要找的代码速度找到,OC插件的重要使用脚本文件有三个,
要实现锁定相机,并不是要在Update中实时的给相机的旋转角度赋值为某个值的过程。
要是真这么实现,会有什么影响么?
答案是肯定的。锁不住,你动下,它就动下,来回晃。
我只需要OVRCameraRig.cs文件的一个函数就可以,找到函数:
在OVRCameraRig.cs文件的122行附近。
怎么办呢?写个变量来控制,就是在外面加个if判断,屏蔽掉所有代码即可。
结果,是然并卵。
四、做着难,咋就不行呢
我迅速的郁闷了。
各种纠结和尝试之后,卸载OC,重新安装0.4.4版本。我回退了我的OC插件版本,重建工程,使用了0.4.4版本的插件,同样的文件,同样的函数,同样操作,奇迹就发生了。
附0.4.4版本的OVRCameraRig.cs文件的UpdateAnchors函数:
那还有什么好说的。轻松实现了,锁定头盔,在场景中,你不可以乱看的效果(非常规的反人类的操作!)
就只好使用0.4.4来凑合吧!!
五、实践是检验标准
总结:
在OC开发工程中,要时刻记得OC runtime版本与插件版本相配套。
上面这个结果的出现,可能是OC runtime版本的问题,但是也排除不了插件实现问题,比方说,用错了接口,使用了当前OC版本之前的兼容版本接口,而OC内部怎么实现的,我一概不知啊!
“0.1.0”–对应的OC 0.6 .0版本有19个接口,不算兼容的老的接口。
0.4.4—对应OC的0.4.4版本,接口实现有57个左右。
我只能说,接口对0.6.0,精简了,但是我相信大的基础功能肯定都是有的。
怎么才能避免跳入这样的坑呢?没有办法,只有尝试。
六、其他
遇到老板提这么怪异的VR问题怎么解决?
下回再说吧!!
若有问题,请随时联系!
非常感谢!!!
文章链接:/article/3612352.html
作者:cartzhang
Unity 的OCulus VR开发遇到的坑—OC版本差异
一、关于Unity和Oculus插件版本针对Unity的Oculus开发,Oculus官方给出了官方插件,不同的Unity版本,对应不同的插件版本,但是在使用中,发现有些不同或是bug.
Oculus的Unity 插件官方地址:https://developer.oculus.com/doc/0.1.0.0-unity/index.html
我作为Unity新人,没有用过Unity5之前的任何版本,不熟悉任何操作。所以,就根据官方推荐,使用了5.1.1版本,然后根据官方版本对应推荐,果断选择下载了PC端的OC的0.6.0.1版本,对应的Unity开发工具当时是下载的0.010beta版本。
官方推荐的各个版本对应的runtime表:
https://developer.oculus.com/documentation/game-engines/latest/concepts/unity-sdk-version-compatibility/
问题是,根据游戏情节要求,需要在某个时刻或场景下锁定头盔,不能让它转动了。(先说需要,关于需求是否合理,这个下次接着再说)。
二、初步了解插件
首先,先初步了解下插件啊。
下载完毕插件,建立个Unity空项目,拖拽到工程下,可以看到导入后,在资源目录下如图:
在prefabs下有三个预制,而在0.4.4或0.4.2版本下有两个预制。
就是实现不让头盔来回旋转,这个锁定相机就好了嘛,很简单啊。关键是找对地方,代码修改一下,就搞定了。结果并不如我想象。
三、说的容易
要找的代码速度找到,OC插件的重要使用脚本文件有三个,
[code]OVRCameraRig head tracking and stereo rendering. Exposes the user's head pose with "anchor" bones. OVRPlayerController Represents a standing user and enables locomotion in the world. OVRManager A singleton that exposes the VR configuration and status to Unity.
要实现锁定相机,并不是要在Update中实时的给相机的旋转角度赋值为某个值的过程。
要是真这么实现,会有什么影响么?
答案是肯定的。锁不住,你动下,它就动下,来回晃。
我只需要OVRCameraRig.cs文件的一个函数就可以,找到函数:
[code]private void UpdateAnchors() { bool monoscopic = OVRManager.instance.monoscopic; OVRPose tracker = OVRManager.tracker.GetPose(0d); trackerAnchor.localRotation = tracker.orientation; centerEyeAnchor.localRotation = VR.InputTracking.GetLocalRotation(VR.VRNode.CenterEye); leftEyeAnchor.localRotation = monoscopic ? centerEyeAnchor.localRotation : VR.InputTracking.GetLocalRotation(VR.VRNode.LeftEye); rightEyeAnchor.localRotation = monoscopic ? centerEyeAnchor.localRotation : VR.InputTracking.GetLocalRotation(VR.VRNode.RightEye); trackerAnchor.localPosition = tracker.position; centerEyeAnchor.localPosition = VR.InputTracking.GetLocalPosition(VR.VRNode.CenterEye); leftEyeAnchor.localPosition = monoscopic ? centerEyeAnchor.localPosition : VR.InputTracking.GetLocalPosition(VR.VRNode.LeftEye); rightEyeAnchor.localPosition = monoscopic ? centerEyeAnchor.localPosition : VR.InputTracking.GetLocalPosition(VR.VRNode.RightEye); if (UpdatedAnchors != null) { UpdatedAnchors(this); } }
在OVRCameraRig.cs文件的122行附近。
怎么办呢?写个变量来控制,就是在外面加个if判断,屏蔽掉所有代码即可。
结果,是然并卵。
四、做着难,咋就不行呢
我迅速的郁闷了。
各种纠结和尝试之后,卸载OC,重新安装0.4.4版本。我回退了我的OC插件版本,重建工程,使用了0.4.4版本的插件,同样的文件,同样的函数,同样操作,奇迹就发生了。
附0.4.4版本的OVRCameraRig.cs文件的UpdateAnchors函数:
[code]private void UpdateAnchors() { OVRPose leftEye = OVRManager.display.GetEyePose(OVREye.Left); OVRPose rightEye = OVRManager.display.GetEyePose(OVREye.Right); leftEyeAnchor.localRotation = leftEye.orientation; centerEyeAnchor.localRotation = leftEye.orientation; // using left eye for now rightEyeAnchor.localRotation = rightEye.orientation; leftEyeAnchor.localPosition = leftEye.position; centerEyeAnchor.localPosition = 0.5f * (leftEye.position + rightEye.position); rightEyeAnchor.localPosition = rightEye.position; }
那还有什么好说的。轻松实现了,锁定头盔,在场景中,你不可以乱看的效果(非常规的反人类的操作!)
就只好使用0.4.4来凑合吧!!
五、实践是检验标准
总结:
在OC开发工程中,要时刻记得OC runtime版本与插件版本相配套。
上面这个结果的出现,可能是OC runtime版本的问题,但是也排除不了插件实现问题,比方说,用错了接口,使用了当前OC版本之前的兼容版本接口,而OC内部怎么实现的,我一概不知啊!
“0.1.0”–对应的OC 0.6 .0版本有19个接口,不算兼容的老的接口。
0.4.4—对应OC的0.4.4版本,接口实现有57个左右。
我只能说,接口对0.6.0,精简了,但是我相信大的基础功能肯定都是有的。
怎么才能避免跳入这样的坑呢?没有办法,只有尝试。
六、其他
遇到老板提这么怪异的VR问题怎么解决?
下回再说吧!!
若有问题,请随时联系!
非常感谢!!!
相关文章推荐
- Unity树木生成器
- Unity Shader 学习笔记(九) UV动画Shader实例
- 【Unity编辑器】面板中显示Private修饰的变量
- Unity学习过程(二)——创建第一个工程
- unity kinect2 怎么使用姿势或者使用你自己的How to Use Gestures or Create Your Own Ones
- 今天开始进驻CSDN博客,记录自己unity3d学习的每一步。
- Unity水效果
- Unity3D 自定义地形插件(支持FBX导入模型的编辑)
- Unity 自定义地形(可刷地形、材质和种树)(一)
- Unity中更改文件夹名
- Unity中UGUI输入信息框
- Unity串口通讯
- Unity两个手指放大图片的方法
- Unity窗口化无边框模式
- Unity获取游戏对象
- Unity调用外部EXE和启动浏览器(手机端也可以启动IE内核)
- unity中宏定义平台
- Unity3D AssetStore下载的文件保存位置
- Unity3D 摄像机
- Unity3D 2D游戏开发 官方教程。(二)