如何用Oculus Quest 2扳机键控制Unity中手电筒开关?
问题排查与解决方案
1. 启用输入动作映射
你的脚本创建了PlayerControls实例,但未启用输入动作映射,导致输入系统无法接收设备输入。需要在生命周期方法中添加动作映射的启用/禁用逻辑:
private void Awake() { playerActions = new PlayerControls(); } private void OnEnable() { playerActions.Player.Enable(); } private void OnDisable() { playerActions.Player.Disable(); }
2. 修正手电筒状态切换逻辑
当前代码未更新flashlightOn的状态值,导致后续触发逻辑失效。同时triggered是仅在输入触发的单帧为true,可以简化为触发时直接切换状态:
private void Update() { if(playerActions.Player.RightHandTrigger.triggered) { flashlightOn = !flashlightOn; flashlight.SetActive(flashlightOn); Debug.Log(flashlightOn ? "On" : "Off"); } }
3. 检查Player Input组件配置
- 确认XR Origin上的Player Input组件,动作映射(Action Map)选择你自定义的PlayerControls对应的映射
- 打开Input Actions窗口,检查RightHandTrigger动作的绑定:确保其关联到Oculus Touch Controller的
Right Trigger输入项(可通过添加绑定,选择Oculus控制器的扳机输入)
4. 验证输入是否正常接收
可以先在Update中打印扳机的实时输入值,确认设备输入是否被正确捕获:
private void Update() { Debug.Log($"Trigger Value: {playerActions.Player.RightHandTrigger.ReadValue<float>()}"); if(playerActions.Player.RightHandTrigger.triggered) { flashlightOn = !flashlightOn; flashlight.SetActive(flashlightOn); Debug.Log(flashlightOn ? "On" : "Off"); } }
如果打印值能随扳机按压从0变化到1,说明输入已被接收,问题出在状态逻辑;如果值始终为0,说明动作映射绑定错误或设备未被Unity正确识别。
内容的提问来源于stack exchange,提问作者CloakedWren
相关产品推荐
相关产品推荐

