Unity新版InputSystem之实践篇

为什么要更新InputSystem?
Unity 之前设计的输入系统 UnityEngine.Input 使用起来并不舒适,在多设备和多平台输入处理时(尤其是VR和XR等)显得十分臃肿和复杂。
Unity 从 2016 年起开始逐步开发新一代输入系统 UnityEngine.InputSystem ,官方表示大概在 Unity 2020 版本推出新输入系统的正式版。
旧版是否下架也不确定,不过我们一定要学习一下新版的系统!!

如何使用?
简易的使用已经在上一个文章说明了,传送门
之前我们配置所有Input相关的东西都是在ProjectSetting里面配置的,但是导入新的InputSystem后,点击发现有个错误提示

现在配置可以在编辑器中定义各种动作,极具灵活性。
需要自己右键Create->Input Actions(在列表的最下面)

概念介绍:
InputAction:玩家的每一个输入都可以理解为是一个 InputAction(输入行为)
InputActionMap:就是管理所有的 InputAction 的一个集合
InputController:就是管理输入的具体控件(比如一个按钮)
InputBinding:用于绑定 InputAction 和 InputControl


最初创建完都是空的,我们需要自己添加案件绑定
1.先添加一个控制Player的,点击 ActionMaps 那一栏的加号即可,改名为 Player

2.然后把这个Action的名称改为Move,让他来负责移动
并且修改右边的 Properties 里面的 Action Type 为 Value,Control Type 选择 Vector2
(这个的意思就是,触发了这个Action,就会得到一个Vector2类型的值,后续看代码就知道了)

3.然后点击Move后面的➕,添加一个2D Vector Composite,名叫 WASD

然后给这下面的四个添加Binding,也就是键盘上的WASD键
在这里插入图片描述
4.这样一个 InputActions就创建完成了
接下来就通过这个配置进行移动操作处理,先添加一个组件 叫做 Player Input
其中的 Actions 就选择刚才配置好的 InputActions,可以看到下方出来回调函数叫做 OnMove

5.我们只需挂载一个脚本,这个脚本里面有一个 OnMove 这个函数,一旦点击刚才配置的输入(WASD)就会触发这个函数
并且会传给我们一个 InputValue 用作结果输出

void OnMove(InputValue value)
{
    Debug.Log("OnMove : " + value.Get<Vector2>());
}

这样我们就可以通过这个Vector2的坐标来控制,人物对应的坐标了。


这样做有什么好处呢?
比如说我们现在有一个需求,想通过手柄的摇杆也能控制移动,想通过虚拟的UI摇杆也想控制移动
那怎么办呢?
以前的 Unity 是需要写多套逻辑的,手机上大家经常会写 Touch 这个类 和 Input 这个类区分

现在就不用了,我们只需要给InputActions 多加个 Binding

这样的话,我们只需在对应的地方触发即可,比如这个就触发:Left Stick [Gamepad]

Demo:
我们可以自己实现摇杆的逻辑,然后 继承 OnScreenControl,指定一个 controlPathInternal,调用 SendValueToControl 方法

public class JoystickInputWriter : OnScreenControl
{
    [InputControl(layout = "Vector2")]
    [SerializeField]
    private string m_ControlPath;

    protected override string controlPathInternal
    {
        get => m_ControlPath;
        set => m_ControlPath = value;
    }

    public void Write(Vector2 axis)
    {
        SendValueToControl(axis);
    }
}
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值