本文仅作笔记学习和分享,不用做任何商业用途
本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正
首先你应该了解新输入系统的构成结构:Unity新输入系统结构概览-CSDN博客
Input System - Unity 手册
1.InputAction概览
还是需要强调,InputAction中定义了所有的输入手势,是用来配置输入的基本单位
声明一个变量
public InputAction inputaction;
2.预配置选项(齿轮)
Unity's new Input system Beginners Guide - VionixStudio
2.1 Action Type
动作类型可以自己选择响应方式,我也理解为模拟量化方式
比如键盘上的案件你总不可能用value来处理,显然是buttron表示一次的按键事件,而鼠标的点击肯定是用value来模拟,不然怎么处理连续的拖动呢?
2.2 Control Type
2.3 Interactirons
交互方式,非常简单就是长按,多按,压按,慢按,点按触发
如果想要设置详细信息或者配置更多的内容,可以open input settings里有一大堆可以设置的参数
2.4 Processors
后处理,该处就是将动作类型设置的返回值通过一定方式处理并再次返回出去
3.Binding(绑定按键)
当然添加绑定方式也受到Acrtion Type和Control Type影响
当我如下设置时,会出现上下左右键的组合绑定
如下设置时,则会前后左右键的组合绑定
双击空的绑定事件,可以自己选择输入方式的具体内容,比如我就拿键盘的wasd举例
双击2D vector可以看到其部分参数
4.代码与事件
Class InputAction | Input System | 1.6.1 (unity.cn)
为了举例我绑定了一个button的鼠标左键事件
最最开始,可以使用Enable方法启用输入检测
开始,触发与结束事件
查看源码可以看到started事件类型是一个泛型的有参无返回值的Action
(C# 事件-CSDN博客)
so,我们可以创建一个CallbackContext参数的函数,或者直接lambda表达式
public class inputContral : MonoBehaviour
{
public InputAction mouseClick;
public InputAction inputaction;
void Start()
{
mouseClick.Enable();
mouseClick.started+=(cacllbake)=>
{
print("进入事件,鼠标点下去了");
};
mouseClick.performed += func;
mouseClick.canceled += (cacllbake) => {
print("结束事件,鼠标抬起来了");
};
}
private void func(CallbackContext callbackContext) {
print("触发了事件,鼠标按下途中");
}
下面则是之前的wasd的vector2的栗子
移动控制ReadValue<>();
public class InputControl : MonoBehaviour {
public InputAction inputaction;
private void Start() {
inputaction.Enable();
inputaction.performed += OnInputPerformed;
}
private void OnInputPerformed(InputAction.CallbackContext context) {
Vector2 inputVector = context.ReadValue<Vector2>();
float ws = inputVector.y;
if (ws > 0) {
Debug.Log("W key pressed");
}
else if (ws < 0) {
Debug.Log("S key pressed");
}
}
}