如何使用Unity的new input system

前言:之前网上搜索的教程杂七杂八的,感觉很烧脑,对于只用过Input.GetKeyDown的人来说太过陌生了

工作环境:Unity2021.3.21f1c1

【万事先有头】安装new input system:

弹窗重启,确认:

【废话少说,实现一个Input.GetKeyDown(KeyCode.Space)一样的操作】:

旧操作系统在Update里操作,不多赘述。在new input system里,我们想要获取这个按键状态首先需要创建一个input action事件。


双击打开我们的input action,我们可以看到一个面板

首先添加一个action maps,当你添加成功后会自动给你创建一个action,我们给这个action命名为space

这时候我们看这个action的type类型为button,错不了,就是我们想要的,这时候我们点击space左边那个三角形展开这个action,可以看到no binding,意思是我们这个事件还没有绑定任何东西呢,也监测不出来任何东西的按下。

这时我们看到右边的Binding里有一栏Path,选择我们想要的space。

【至此,我们一个类似在update里创建的事件就已经被我们在面板里被创建了。】此时我们已经完成了50%的工作了,莫急,再使用它就行了,嗷,记得点保存:

此时我们看看project里这个input action被我们添加了一个space按键事件。

【有了家伙,该如何使用呢】创建一个脚本TestInputSystem.cs,随你叫啥:

  1. .started:当输入动作开始时触发。例如,当用户按下键盘上的一个键或者点击鼠标按钮时。

  2. .performed:当输入动作执行时触发。这通常发生在输入动作的激活阶段,比如键盘按键按下的期间或者鼠标按钮按下的期间。

  3. .canceled:当输入动作取消时触发。例如,当用户释放键盘上的一个键或者松开鼠标按钮时。

using UnityEngine;

using UnityEngine.InputSystem; // 添加new input system的命名空间

public class TestInputSystem : MonoBehaviour

{

    public InputActionProperty spaceKey; // 定义的space事件需要被添加进来

    void Start()

    {

        // input.getkeydown

        spaceKey.action.started += ctx => Debug.Log("Space key started");

        spaceKey.action.performed += ctx => Debug.Log("Space key pressed");

        // input.getkeyup

        spaceKey.action.canceled += ctx => Debug.Log("Space key started");

    }

}

把代码拖到你的测试场景去。

这个input action reference就选择我们刚才space action啦。

【别心急,你以为这样就好了嘛,99%了,还差1%】:再创建一个TestInputAction.cs脚本用来激活我们的input action事件。
 

using UnityEngine;

using UnityEngine.InputSystem;

public class TestInputAction : MonoBehaviour

{

    public InputActionAsset testAction;

    void OnEnable()

    {

        testAction.Enable();

    }

}

至此已完成操作。


---------------------------------------------------------------------------------------------------------------------------------

【还是嫌太麻烦了?一个脚本也能搞定】

using UnityEngine;

using UnityEngine.InputSystem;

public class TestInputAction : MonoBehaviour

{

    // public InputActionAsset testAction;

    void OnEnable()

    {

        // testAction.Enable();

        // 假设有一个名为 "Jump" 的输入动作

        InputAction jumpAction = new InputAction("Jump", binding: "<keyboard>/space");

        jumpAction.started += OnJumpStarted;

        jumpAction.performed += OnJumpPerformed;

        jumpAction.canceled += OnJumpCanceled;

        jumpAction.Enable();

    }

    private void OnDisable()

    {

        // 当禁用组件时,确保注销回调并禁用输入动作

        Debug.Log("jump out");

    }

    private void OnJumpStarted(InputAction.CallbackContext context)

    {

        // 处理跳跃开始的逻辑

        Debug.Log("jump");

    }

    private void OnJumpPerformed(InputAction.CallbackContext context)

    {

        // 处理跳跃执行期间的逻辑

        Debug.Log("jumping");

    }

    private void OnJumpCanceled(InputAction.CallbackContext context)

    {

        // 处理跳跃取消的逻辑

        Debug.Log("jumped");

    }

}

将这一个脚本拖拽到你的测试场景即可。

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值