You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:51:04