【Unity3d】新输入系统New InputSystem 0.1.2版本简介

版权声明:本文为博主原创文章,未经博主允许不得转载。出自 游戏开发实验室 https://blog.csdn.net/u010019717/article/details/86358975

          Unity又弄了新的输入系统, https://github.com/Unity-Technologies/InputSystem 论坛: https://forum.unity.com/forums/new-input-system.103/ 16年4月开始公开,到现在还没有弄完???

文档:

https://docs.unity3d.com/Packages/[email protected]/manual/index.html

https://github.com/Unity-Technologies/InputSystem/blob/develop/Packages/com.unity.inputsystem/Documentation~/InputSystem.md

视频讲解: https://www.youtube.com/watch?v=Pzd8NhcRzVo

为什么要弄新的输入系统?

GitHub上介绍是: “Unity的高效多功能输入系统”

可以将输入设备和 动作逻辑分离开。 通过映射的配置类关联。

这个帖子的声明包含挺多信息的: https://forum.unity.com/threads/input-system-update.508660/

提到为什么延期?, 是不是依然基于事件的? 可扩展性! 还有性能提升! 将来新旧系统共存等问题?

安装,设置, 自己看文档! 测试还不能选Both, 会报错。

使用试一试 :

下面的代码会输出Log 显示是否按下鼠标位置和 空格键。

using UnityEngine;
using UnityEngine.Experimental.Input;
public class InputTest : MonoBehaviour
{
    private void Update()
    {
        Debug.LogFormat("Mouse Position : {0}", Mouse.current.position.ReadValue());
        Debug.LogFormat("Press Space Key: {0}", Keyboard.current.spaceKey.isPressed);
    }
}

Mouse.current获取当前鼠标,position.ReadValue()使用当前鼠标坐标。

Keyboard.current得到键盘, spaceKey.isPressed它是否被按下。除了isPressed之外,您还可以获取诸如是否wasPressedThisFrame按下,是否 wasReleasedThisFrame (在当前帧中释放)等信息。

在这个例子中是访问鼠标和键盘,用相同的方法可以测试 Joystick,Accelerometer,Gamepad,Gyroscope,Joystick,Pen,Touchscreen 的API也是可用的。

InputAction

InputAction是基于新输入系统的输入采集。 与之前的 Input Manager系统不同了 。这是每次输入完成时调用事件的地方,必须事先在委托中注册处理。

这个过程有趣的是每帧可以接收多个输入。由于它可以独立于帧接收输入,那就可以期望不会跳过输入。

例如,在较低的Gif动画中,在低帧率和高帧率环境中获得鼠标的位置,Input Manager(现在系统)与 新 Input System 绘制线。Input Manager由于只获取了帧开始处的鼠标,因此只能绘制非常简单的图形, 那么两者绘制的线条精细度是不一样的!!!

是否可以异步获取输入取决于 平台。

新旧输入系统。 即使帧率下降,新输入系统依然正常

准备InputAction字段 并使用 inputAction.performed 接收输入时的行为。在下面的示例中,mouseInput 在鼠标坐标进行 响应处理(假设它在您移动鼠标时有效),fireInput 在按下按钮时进行响应(假设您按下按钮)。

由于输入不能仅定义它,还要使用 inputAction.Enable() 激活。

using UnityEngine;
using UnityEngine.Experimental.Input;

public class InputTest2 : MonoBehaviour
{
    public InputAction mouseInput;  //鼠标输入
    public InputAction fireInput;   //按键输入

    private void OnEnable()
    {
        mouseInput.Enable();
        fireInput.Enable();
    }

    private void OnDisable()
    {
        mouseInput.Disable();
        fireInput.Disable();
    }

    private void Awake()
    {
        mouseInput.performed += _ =>
        {
            var value = _.ReadValue<Vector2>();
            Debug.LogFormat("pos:{0}, time:{1}", value, _.time);
        };

        fireInput.performed += _ =>
        {
            Debug.Log("Fire");
        };
    }

}

需要做设置:

确保仅在按下期间调用事件 ,这样处理:

InputActions

Input Actions 除了组合多个输入和绑定信息之外,还有一个生成代码的功能,以便在输入时简化行为的实现。

生成一个代码来获取鼠标位置并再次单击输入。

  1. Assets > Create > Input Actions 创建 资产。名为: MyInputSample。
  2. MyInputSample 双击打开,Action Maps 在+ 上点击的创建 名为: Player 。
  3. Actions在+ 上点击,将继续注册绑定的输入。
  4. Save Asset 按x关闭绑定界面 。
  5. 选中 MyInputSample资产, 在Inspector 面板上 勾选 Generate C# Class 和 Generate Interface然后单击。
  6. Apply按按钮。

按“Apply” 按钮 会自动生成同名的 MyInputSample.cs 文件

然后实现代码, 来测试生成的内容:

using UnityEngine;
using UnityEngine.Experimental.Input;

public class MyInputSampleTest : MonoBehaviour, ISampleActions
{
    [SerializeField] MyInputSample input;

    private void Awake()
    {
        input.Sample.SetCallbacks(this);
    }

    private void OnEnable()
    {
        input.Enable();
    }

    private void OnDisable()
    {
        input.Disable();
    }

    public void OnFire(InputAction.CallbackContext context)
    {
        Debug.Log("Fire");
    }

    public void OnMousePosiiton(InputAction.CallbackContext context)
    {
        var value = context.ReadValue<Vector2>();
        Debug.Log(value);
    }
}

声明 MyInputSample 类型字段 , 设置 监听。

运行, 移动鼠标将会显示日志。

添加 Control Schema

作用就是可以针对不同的输入设备进行设置。 前面都是鼠标键盘。 你可以设置 添加针对游戏手柄的设置。

绑定实际上是文本,所以可以代码动态修改。

例如,Fire要将 PC Schema 中 从鼠标单击更改为Space键,请编写如下所示的代码。

input.Sample.Fire.ApplyBindingOverride("<Keyboard>/space", input.PCScheme.bindingGroup);

字符串从哪里来的? WIndow > Input Debuger 中 点击... 可以看到

Input Debug

Window -> Input Debugger 点击

猜你喜欢

转载自blog.csdn.net/u010019717/article/details/86358975
今日推荐