前言:之前网上搜索的教程杂七杂八的,感觉很烧脑,对于只用过Input.GetKeyDown的人来说太过陌生了
工作环境:Unity2021.3.21f1c1
【万事先有头】安装new input system:
![](https://img-blog.csdnimg.cn/direct/8c54c957b2c245e5b2d8683eadbb606f.png)
弹窗重启,确认:
【废话少说,实现一个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,随你叫啥:
-
.started:当输入动作开始时触发。例如,当用户按下键盘上的一个键或者点击鼠标按钮时。
-
.performed:当输入动作执行时触发。这通常发生在输入动作的激活阶段,比如键盘按键按下的期间或者鼠标按钮按下的期间。
-
.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");
}
}
将这一个脚本拖拽到你的测试场景即可。