一、背景
在 Unity 中进行 VR 开发时,我们通常需要通过 InputDevice API 获取控制器(Controller)的输入信息。
然而,当项目引入 OpenVR 模块 后,很多开发者会遇到一个奇怪的问题:
- 在
Start()
或Awake()
阶段尝试获取设备列表时,InputDevices.GetDevices()
返回的device list count
一直为 0; - 但在进入游戏后,控制器的按钮交互居然能正常工作。
这种现象让人很困惑:既然能交互,说明设备是存在的,为何启动时就是获取不到呢?
二、原因分析
经过调试和观察,可以发现问题其实出在 生命周期的时机差异 上:
-
Unity 脚本执行顺序
- 在
Start()
阶段,游戏对象和脚本初始化完成,但 VR 模块的底层设备枚举过程还没结束; - 此时调用
InputDevices.G
- 在