Unity 新的输入系统Input System(二)

前面一篇大致简单的介绍了下Input System,并且通过官方的 SimpleDemo_UsingPlayerInput 来了解了PlayerInput组件的使用。接下来让我们通过其他几个Demo来了解下Input System的其他几种使用方法。

 

SimpleDemo_UsingActionAsset Demo

这个Demo,相比SimpleDemo_UsingPlayerInput,会发现在这个Demo中并没有使用到Player Input组件,而在SimpleController_UsingActionAsset.cs中,多了一个SimpleControls的类。

我们来看下SimpleControls内部,首先有个Json格式的字符串,大致看下内容会发现其就是SimpleDemo_UsingPlayerInput中PlayerInput通过Create Action生成的SimpleControls.inputactions文件的内容。再往后便是声明inputactions文件中配置的Actions等等。

使用起来也不需要在Player Input组件中去绑定事件,只需要使用代码来绑定即可,例如:

m_Controls = new SimpleControls();

m_Controls.gameplay.fire.performed +=
    ctx =>
{
    //to something
};
m_Controls.gameplay.fire.started +=
    ctx =>
{
    //to something
};

而要读取输入设备的值也很方便,例如

public void Update()
{
    var look = m_Controls.gameplay.look.ReadValue<Vector2>();
    var move = m_Controls.gameplay.move.ReadValue<Vector2>();
    //todo something
}

需要注意的是我们必须手动的设置其Enable和Disable,来启动或关闭InputAction

public void OnEnable()
{
    m_Controls.Enable();
}
public void OnDisable()
{
    m_Controls.Disable();
}

那么这个SimpleControls.cs脚本是如何生成的呢,我们点击SimpleControls.inputactions,在Inspector面板中,我们可以发现可以将其生成C#文件,设置好参数后点击Apply即可生成对应的C#文件。

 

SimpleDemo_UsingActions Demo

这个Demo中同样没有使用到Player Input组件,而是在脚本中添加了几个InputAction事件。在Inspector面板中,我们可以看见这几个InputAction的设置。

可以看见demo中绑定的都是手柄GamePad的输入,我们可以在Fire Action中点击 + 号,选择Add Binding,然后绑定鼠标左键。这样运行的时候可以通过点击左键来触发开火功能。

    

具体的代码实现也很简单,通过给InputAction绑定事件,以及通过ReadValue方法来读取值即可。

除了InputAction外,我们还可以在MonoBehaviour中添加InputActionMap,同样的,和上个Demo一样,在MonoBehaviour 中添加的Action,InputActionMap都需要我们手动设置Enable和Disable。

 

SimpleDemo_UsingState Demo

这个Demo和上一篇文章中,最初的方法一样,通过Gamepad.current来获取输入设备并且绑定事件等,这里就不在复述了。

随着Input System的更新,官方的Demo可能也会有所出入,文章用的版本是1.0.0 preview.4。

 

通过demo我们可以发现,.inputactions文件中的Action Maps即对应的是C#中的InputActionMap,Actions中的每项数据对应的即是InputAction。关于这一块的详解大家可以看https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Actions.html

其中:

1.每个Action都有started, performed, 和canceled 三个回调。

2.每个都有ActionMap都有actionTriggered的回调。

3.新的输入系统有个全局的InputSystem.onActionChange的回调。

4.你可以在需要的时候去查看Action的状态,例如在Update方法中使用InputAction.ReadValue<>()。

5.InputActionTrace可以用来纪录Action的改变。

 

每个Action的状态如下(可以通过 InputAction.phase 来获取):

阶段含义
Disable

被禁用,无法接收到输入

Waiting被启用,并且等待设备的输入
Started接收到设备的输入,并且形成交互
Performed交互完成
Canceled取消交互

其中started, performed, 和canceled三个阶段,会有回调,参数为InputAction.CallbackContext。我们可以从中读取一些有用的数据,例如InputAction.CallbackContext.ReadValue。

var action = new InputAction();
action.started += ctx => /* Action was started */;
action.performed += ctx => /* Action was performed */;
action.canceled += ctx => /* Action was canceled */;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值