在开发 SteamVR 项目时,很多开发者会遇到 VR 项目在运行时不显示手柄控制器的问题。
出现该问题的主要原因,多数是因为 VR 项目路径存在于中文路径下(包括项目名称)所致。
自 SteamVR 2.0 发布以来,SteamVR SDK 所需的手柄控制器模型不再包含在开发包内,而是在 SteamVR 客户端的安装目录下,具体路径为(以 HTC VIVE 为例):
(Steam安装目录)\steamapps\common\SteamVR\resources\rendermodels\vr_controller_vive_1_5
在此文件夹下,可以看到包含了多种文件,包括 obj 模型、mtl 材质、png 贴图和一个名称为 vr_controller_vive_1_5.json 的文件。其中,json 文件负责记录手柄控制器的各个部件信息,通过它提供的信息,可以将各个部件组织为一个完整的手柄控制器,以下为该文件部分内容:

"trigger": {
"filename": "trigger.obj",
"motion": {
"type": "rotate",
"controller_axis": 1,
"controller_axis_component": 0,
"trigger_path": "/input/trigger",
"value_mapping": [0.0, -17.0],
"pivot": [0.0000, -0.016, 0.039],
"axis": [1.0, 0.0, 0.0]
},
"component_local": {
"origin": [0.0, -0.039, 0.051],
"rotate_xyz": [-83.885, 0.0, 0.0]
}
}
当程序运行时,会按照路径先找到 json 文件,然后基于 json 文件提供的信息找到这些部件。
当路径中存在中文时,系统可能因编码问题生成乱码路径,导致 json 文件解析失败,模型部件引用路径生成乱码(如 vr_controller_vive_1_5_æ§å¶å¨.obj),最终导致手柄控制器不能顺利加载呈现。同时可能伴随如下错误日志:
[SteamVR] Could not load render model vr_controller_vive_1_5! Error: File not found: E:\Steam\...\vr_controller_vive_1_5_æ§å¶å¨.obj
因此,在日常开发过程中,要养成英文命名的习惯,无论是项目、变量、资源还是路径,可从根本上规避因路径解析失败导致的资源加载异常问题。
| 正确示例 | 错误示例 |
|---|---|
E:\UnityProject\MuseumVR | E:\Unity项目\VR博物馆 |
D:\VR_Dev\PICOVR | D:\虚拟现实项目\PICOVR交互项目 |
最后,SteamVR 手柄模型不显示的问题,是中文命名在技术开发中引发问题的典型案例。实际上,中文命名在其它技术场景下也可能带来兼容性或功能性问题。例如,在文件系统中,中文路径可能导致资源加载失败;在编程中,中文变量名可能引发编译错误;在数据库中,中文字段名可能导致查询失败;在网络中,URL 包含中文可能导致解析错误。
更多系统性的 SteamVR 开发技术,可参考我在 B 站的《SteamVR 2.x 交互开发指南》课程。
本文首发于微信公众号「XR技术研习社」:阅读原文