admin管理员组

文章数量:1589823

XR Interaction Toolkit 使用 新输入系统 自定义按钮事件

在网上找了好久,讲新输入系统的没几个,使用XR Interaction Toolkit的更少,自己来一个吧

第一件事,导包


完整版
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.InputSystem;
using DG.Tweening;
using Unity.VisualScripting;
using UnityEngine.UIElements;

简洁版
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using Unity.VisualScripting;

DG.Tweening是Dotween的包,可以不管他,
如果没用到UI的话,UI类的包也别导入了

第二件事,增加新输入系统变量

public InputActionProperty AActionProperty;
private InputAction AAction;

在Start中

 void Start()
    {
        pinchAction = pinchActionProperty.action;
        AAction= AActionProperty.action;
    }

最后在Update中做处理

直接举例子好了
下面以Select事件做完整版例子

public class A : MonoBehaviour
{
    public InputActionProperty AActionProperty;
    private InputAction AAction;
    bool isSelectOK = true;
    // Start is called before the first frame update
    void Start()
    {
        AAction= AActionProperty.action;
    }

    // Update is called once per frame
    void Update()
    {
        if (isSelectOK)
        {
            if (AAction.ReadValue<float>() == 1)
            {
                isSelectOK = false;
                StartCoroutine(setSelectOkValue(0.6f));
                aabbcc();
            }
        
        }
     }
         public void aabbcc()
    {
	}
         IEnumerator setSelectOkValue(float a)
    {
        yield return new WaitForSeconds(a);
        isSelectOK = true;
    }
    }
    

在Unity编辑器里

上面代码的意思是当isSelectOK为true时,接收AAction的数据,当接收到AAction的输入时(值为1)
将isSelectOk设置为负,取消接收AAction的数据
然后启动协程,等待0.6秒后,再将isSelectOK设置为true,继续接收AAction的数据,相当于是给输入增加了个0.6秒的冷却时间

将需要的功能加入到aabbcc()里面就好

本文标签: 自定义按钮事件系统xR