如何使用VR触发按钮打开/关闭手电筒?

问题描述 投票:0回答:1

我正在尝试制作一个可以使用右手触发按钮打开和关闭的手电筒(我正在使用 Oculus Quest 2)。但当我按下扳机时什么也没有发生。

我使用的是unity 2022.2.0f1,我有XR交互工具包(2.1.1)和XR插件管理(4.2.1)。我制作了一个动作图,并使用动作图将玩家输入组件附加到 XR 原点。打开和关闭手电筒的脚本也在 XR 上。我知道有一个 XRI 默认动作图,但当我尝试引用它时,脚本无法识别它,经过一段时间的尝试后,我刚刚制作了一个不同的动作图。

这是我放入脚本中的代码:

public PlayerControls playerActions;
    public bool flashlightOn;

    public GameObject flashlight;


    private void Awake()
    {
        playerActions = new PlayerControls();
    }

    private void Start()
    {
        flashlightOn = false;
    }

    private void Update()
    {
        if(playerActions.Player.RightHandTrigger.triggered && flashlightOn == false)
        {
            Debug.Log("On");
            flashlight.SetActive(true);
        }
        else if (playerActions.Player.RightHandTrigger.triggered && flashlightOn == true)
        {
            Debug.Log("Off");
            flashlight.SetActive(false);
        }
    }

我完全不知道该怎么做才能让它发挥作用。任何帮助或建议将不胜感激。如果写得不好,我很抱歉,这是我第一次在这里发帖。

unity-game-engine controller user-input virtual-reality
1个回答
0
投票

我会使用InputActionReference而不是整个playerControl:

public InputActionReference triggerPressedRef;

在检查器中,将“XRI RightHand Interaction/Activate”放入triggerPressedRef。然后,为了避免在更新方法中监听输入,您可以通过这种方式分配操作来输入:

private void Start()
{
    triggerPressedRef.action.performed += SwitchFlashLight;
}

private void SwitchFlashLight(InputAction.CallbackContext ctx)
{
    flashlightOn = !flashlightOn;
    flashlight.SetActive(flashlightOn);
}

如果不起作用,请检查您的 XR 原点是否已正确设置,方法是将其与 XR Interaction Toolkit 给出的预制件进行比较:Assets/Samples/Xr Interaction Toolkit/2.1.1/Starter Assets/Prefabs(确保您在包管理器中导入了入门资源示例)。

© www.soinside.com 2019 - 2024. All rights reserved.