Unity3D中导入SteamVR Plugin资源包报错汇总:
HmdError_None (0) - 无错误
HmdError_Unknown (1) - 未知错误
HmdError_Init_InstallationNotFound (100) - 在路径注册表中指定的安装文件夹不存在
HmdError_Init_InstallationCorrupt (101) - 在路径注册表中指定的安装文件夹没有bin文件夹
HmdError_Init_VRClientDLLNotFound (102) - bin文件夹中没有vrclient.dll 或系统对应的动态库
HmdError_Init_FileNotFound (103) - 驱动不能加载
HmdError_Init_FactoryNotFound (104) - vrclient.dll中的工厂方法找不到,是vrclient.dll出现异常吗?
HmdError_Init_InterfaceNotFound (105) - VR_Init或VR_GetGenericInterface 请求的接口不存在,是使用的SDK版本比安装的runtime版本更新吗?
HmdError_Init_InvalidInterface (106) - 错误码当前没有被使用
HmdError_Init_UserConfigDirectoryInvalid (107) - 路径注册表中的配置目录不可写
HmdError_Init_HmdNotFound (108) - HMD没有添加到系统或者HMD没有初始化
HmdError_Init_NotInitialized (109) - 如果VR_GetGenericInterface在VR_Init之前或者在VR_Shutdown之后被调用会返回这个错误
HmdError_Init_PathRegistryNotFound (110) - VR路径注册文件不能被读。重新安装OpenVR runtime或Steam上的SteamVR应用程序
HmdError_Init_NoConfigPath (111) - 配置路径没有在路径注册表中指定
HmdError_Init_NoLogPath (112) - log路径没有在路径注册表中指定
HmdError_Init_PathRegistryNotWritable (113) - VR路径注册表不可写
HmdError_Driver_Failed (200) - 驱动初始化失败,内部错误
HmdError_Driver_Unknown (201) - 驱动由于位置原因失败,内部错误
HmdError_Driver_HmdUnknown (202) - 驱动未检测到HMD,内部错误
HmdError_Driver_NotLoaded (203) - 在该驱动发出请求前,还没有加载,内部错误
HmdError_Driver_RuntimeOutOfDate (204) - 如果一个驱动自带runtime,那么需要更新它的runtime.
HmdError_Driver_HmdInUse (205) - 另外一个非OpenVR的应用程序正在使用HMD
HmdError_IPC_ServerInitFailed (300) - OpenVR不能够启动vrserver.
HmdError_IPC_ConnectFailed (301) - 多次尝试后,OpenVR不能链接到vrserver或vrcompositor.
HmdError_IPC_SharedStateInitFailed (302) - vrserver或vrcompositor的共享内存不能够打开
HmdError_IPC_CompositorInitFailed (303) - OpenVR不能够启动vrcompositor.
HmdError_IPC_MutexInitFailed (304) - OpenVR不能够创建互斥量来与vrcompositor通信.
HmdError_VendorSpecific_UnableToConnectToOculusRuntime (1000) - 由于未知原因导致到Oculus runtime的连接失败.
HmdError_Steam_SteamInstallationNotFound (2000) - 当前没有使用的错误码.
报错原因:
Unity3D中内置的OpenVR和SteamVR驱动版本不对应导致。
OpenVR初始化原理简介:
OpenVR为VR游戏提供统一的数据接口,从而使得VR游戏不用直接与厂商的SDK打交道。因此,它可独立于游戏来添加扩展新外设。也就是说假如要添加一个新手柄或者头显时,只需要修改OpenVR端即可,而不用再去改已经开发好的VR游戏,如果直接使用厂商SDK的话,则每添加一个厂商的外设就需要改一下VR游戏内的接口。
OpenVR的API都是以C++接口类方式呈现的,而且都是纯虚函数。当应用程序初始化系统时,它会返回该应用程序所使用到的SDK头文件内相匹配的接口。新发布的接口版本会兼容以前的接口版本,因此,应用程序不必更新到最新的SDK也可正常使用。
初始化与注销:
由于OpenVR API使得游戏能够连接任何添加的外设,因此它不是自动初始化。调用函数vr::VR_Init来初始化OpenVR API以及访问接口vr::IVRSystem;调用vr::VR_Shutdown来断开游戏与外设的连接以及释放vr::IVRSystem接口。
- vr::IVRSystem *vr::VR_Init( vr::HmdError*peError, vr::EVRApplicationType eApplicationType )
eApplicationType 参数项有:
1.VRApplication_Scene:一个3D应用程序用来画一个虚拟环境
2.VRApplication_Overlay:一个应用程序只是用来与Overlay或者面板进行交互
3.VRApplication_Background:该应用程序不会启动SteamVR,如果它没有运行VR_Init,将会返回错误VRInitError_Init_NoServerForBackgroundApp
4.VRApplication_Utility
该函数将返回一个vr::IVRSystem类型指针,游戏可通过它来调用其他的OpenVR API方法。如果调用失败,则将返回NULL并且赋给peError一个错误码用来指示错误内容。peError为产生的错误代码或者没有错误时为vr::VRInitError_None。