常见问题

开发环境

一、Unity开发知识点详解:

1.如何让陀螺仪的方向只控制左右不控制上下?

MojingSDK.headPose.Orientation是陀螺仪的位姿。如果你只需要控制一个轴上的分量,可以将VRHead的旋转分量分别赋值。rot是sdk获取的陀螺仪的信息,正常情况下赋给head。这一块可以看一下MojingVRHead脚本。

2.魔镜SDK获得的视角?

SDK获得的视角就是依据陀螺仪数据取得的标准视角,如果你觉得不是你想要的朝向,你可以改视角做坐标变换。

3.SetOverLayFPS在魔镜2上或者没有屏幕畸变的魔镜是不好用的?

是的。魔镜2无畸变不开TW的时候没有用我们底层的绘制,所以没有机会为你叠加这个图层。

4.视场角的获取?

通过接口函数GetFOV获取。(Unity_GetGlassesFOV())

5.在Unity里可以修改镜头转动的幅度大小吗?

理论上是可以,但是会导致严重的用户不良体验,建议不这么干。

6.魔镜相机头控陀螺仪的复位函数?

Unity_ResetSensorOrientation().

7.分左右屏后射线不准的问题?

分屏之后你需要把准星调到被碰撞物体同一深度的位置上。你的眼睛只有F2.0的光圈,距离太远就会失去焦平面。

8.魔镜SDK目录导入之后可以移动吗?

遵循Unity和C#的文件引用规范,你可以和我们部署的不一样,但是自己要重新指定到正确的位置上。

9.主界面绘制的准心是屏幕的中心吗?

是视口坐标系的中心。

10.魔镜SDK能在Unity编辑器中使用吗?

支持Unity5.3.6及以上,GraphicsAPI改为OpenGL2/OpenGLCore。支持Windows_x64发布。这个在文档上有说明。

11.为什么魔镜在生成web文件时会报unity_ISATW_ON错误?

我们不支持发布Web。

12.Unity直接运行Editor崩溃?

GraphicsAPI设置的是OpenGL2/OpenGLCore吗?

13.DllNotFoundException:Assets/Plugins/X64/bmojing.dll错误。

应该是dll文件丢失或者找不到。GraphicsAPI设置的是OpenGL2/OpenGLCore吗?是64位的编辑器吗?

14.MainCamera的作用?

非VR模式时使用的摄像机(VRModeEnabled=false就是用主摄像机),其实就是一个屏幕显示内容。VR模式是两个屏幕显示内容。

15.启动画面要做成VR分屏的话怎么处理?

可以做一个双屏的图片代替Unity logo。

16.Unity调用手柄遥感的函数CrossPlatformInputManager.GetAxis ("Vertical")没有大概是因为什么原因?

IntegrateInputManager.prefab加入场景了吗?

17.Unity旧版的SDK可以直接用新版的SDK覆盖吗?

如果原来的结构没有问题的话,覆盖应该不会有问题。

18.Unity UGUI界面用Unity_SetOverlay3D接口绘制出来该怎么做?

Unity_SetOverlay3D接口可以绘制动态生成的UGUI菜单栏。Texture.GetNativeTextureID 获取本地纹理ID。UIGUI界面的ID要拿UI相机的TargetTexture的ID。如果是一张图片 比如准心 可以自己拿2D资源的ID。具体的可以参考unitypackage里的SetOverlayFPS.cs脚本。

19.CommandInvok ationFailure:Unable to convert classes into dex format.C:/Program Files(x86)/Javak1.7.0_45\bin\java。Exe。。。/android-sdk-windows\tools"

换JDK1.8试试。这个是跟开发环境有关的,不是魔镜SDK需要1.8,是Android SDK需要1.8.

20.在编辑器下可以模拟头控效果吗?

目前pc上可模拟部分的头控效果。Alt + 鼠标模拟相机x,y轴的旋转,Ctl + 鼠标模拟相机z轴的旋转。

21.魔镜SDK加入vuforiaSDK后崩溃?

不推荐同时将多个与渲染有关的插件导入到一个工程中,很有可能会冲突。

22.魔镜Unity里边关于java的内容的编译对JDK有什么限制吗?

支持JDK1.7及以上。

二、Android开发或Unity发布安卓遇到的问题:

1.关于Android开发?

如果你是Android eclipse开发,而且觉得部署开发困难的话请先尝试编译我们的demo,然后改造成你需要的样子。不要修改我们的Activity和用法,如果你需要增加自己的方法,请继承我们的Activity。如果不按要求使用我们的SDK,我们不知道你的技术状态,也就无法给您提供技术支持。

2.android头控时能获取当前视角欧拉角的频率吗?

我们的SDK里面不是用的欧拉角,是用的旋转矩阵。欧拉角有方向节锁的问题,不要去用。其次获取当前视角的旋转矩阵是调用时发生的事情,不用额外的处理。也就是说虽然后台线程可能是以100Hz频率在刷新陀螺仪数据,你可以按照60Hz获取一次来使用。我们提供了欧拉角的接口但是不建议您使用。欧拉角简单直观,但是当你的视角正好平行于某个轴的时候,会出现严重的抖动。

3.不用插件里的AndroidManifest.xml可以吗?

要用AndroidManifest.xml,否则无法识别你的APPID、开发者ID,无法和我们的支付平台接口对接。在这个文件里,需要把申请的信息填进去。有示例。

4.魔镜SDK如何切换镜片?

魔镜SDK程序中镜片切换下拉菜单有两种方式切换镜片:1.手柄摇杆切换点击OK键确定。2.准心瞄准屏幕中间的位置的button,触屏单击确定。(也就是可用蓝牙手柄操作,GazePointer射线检测选中button)

5.Unity打包的安卓apk放到安卓开发环境二次开发?

我们不推荐混着用Android和Unity。

6.Unity 发布安卓遇到“Unable to convert classes into dex format.See the Console for details.”

有类重名。一般要看一下Assets\Plugins\Android下面的文件,有没有重复。

7.针对6.0以上特殊权限的适配

魔镜SDK需要的特殊权限:读写存储卡、获取手机状态,调用SDK前请确保权限已获取。

三、IOS开发或Unity发布IOS遇到的问题:

1.魔镜SDK可以在模拟器上运行吗?

不可以,必须在真机上运行。PC上不调用魔镜SDK的接口文件。真机上会调用。

2.Unity发布IOS是黑屏?

可能勾选了AutoGraphicsAPI。

3.为什么拍好的全景图片替换demo的图片看不出效果? 

IOS显示全景图片不显示首先需要考虑的是图片的大小。最大的纹理宽高要求,宽和高不能超过4096.Opengl的采样规则为:width为指定纹理图像的宽度,必须是2的N次方。纹理图片至少要支持64个材质的宽度。height为指定纹理图像的高度,必须是2的M次方。纹理图片至少要支持64个材质的高度。

4.使用Unity发布的IOS在iPad上崩溃问题。

我们没有对iPad、iPod做适配。5S 屏幕太小,不能满足魔镜的光学模型需求我们也不考虑。请在iPhone6/6s上运行。

5.Undefined symbols for architecture x86_64:  "_UnitySendMessage", referenced from:____Z26Unity_RegisteriCadeGamepadP16UIViewController_block_invoke in MojingSDK(UnityIOSAPI.o)

X86架构的库文件没有找到,你是真机运行的吗?必须真机运行的。

四、UE4开发时遇到的问题及解答:

1.UE4打包闪退?

请确认把MojingSDKVR目录放在plugins目录下,路径是plugins/MojingSDKVR。

2.UE4打包的时候是不是要安装VS2015?

是的,需要VS2015,而且必须要装VC。

3.UE4 打包安卓,手机上运行,不分屏是什么原因?

UE4 SDK默认就是双屏。手机上运行没有分屏可能是你没有打开MojingVRSDK,勾选MojingVRSDK插件,去掉其他VR插件,什么接口不调进去就是双屏。

4.import org.apache.http.NameValuePair;原因是:Android SDK版本过高,此接口已经被弃用。

解决办法:使用较低版本的Android SDK编译。

5.魔镜的SDK能够控制UE4播放Matinee时所使用的摄像机吗?

SDK为UE4的HMD摄像机提供姿态数据,Matinee是UE4里面用来控制摄像机特定运动轨迹的,如果Matinee播放时的摄像机使用了这个SDK的姿态数据就可以,这要看UE4的实现。

五、关于开发中视频播放的解答:

1.魔镜sdk支持全景视频吗?

开发者可以实现立体视频功能,可考虑采用第三方插件EasyMovieTexture(可从Unity Store中获取)实现移动端视频播放, 参数Target Material为渲染的两个球面,属性设置与StereoPhoto场景中设置相同。文档里对这块有说明。

2.IOS或Android如何将视频通过魔镜SDK进行播放?

视频通过解码可以得相应的纹理,通过魔镜sdk绘制就可以了。解码的话苹果官方有这方面的例子。获得相应的纹理后使用m_pSphere->DrawToTexture()函数绘制就可以了。