前言
前端技术更新速度很快,Unity也不例外,Unity推出新的输入系统InputSystem,网传在手机游戏开发上老的UnityEngine.Input其实用着还凑合,但随着VR的兴起,各种VR厂商各种设备输入都各不相同,各种VR设备都有自己的Unity SDK,并且SDK代码风格迥异,所以老的输入系统就不能很好的满足各种变化的需求,于是就有了新的InputSystem输入系统,下面我们来尝尝鲜。
优势和说明
既然推出新功能来取代现有的功能,那说明新功能肯定是有他优势的一面的,据官方介绍说新一代的输入系统具有简单易用、多平台一致和灵活的特性,github上介绍是:”Unity的高效多功能输入系统”,据说会随着2020.1版本正式推出,我们可以在2019.1版本上进行体验。
运行环境
Unity 2019.2.3 + .NET 4 runtime,注意不要选择.NET 3.5
安装
打开Window > Package Manager,确保选上Preview Packages,因为还是预览版,然后搜索Input System安装
在Unity的Edit->Project Setting->Player中设置使用新的输入系统,Unity会重启生效
使用
创建配置文件
只有添加了InputSystem模块之后才会在右击Create中创建出InputActions的配置文件,老的输入系统是我们在Unity的内置Editor中配置输入的参数,新的输入系统需要我们手动配置输入映射文件,我们可以在编辑器中定义各种动作,极具灵活性。
注意:记得点击上方的Auto-Save文件会帮我们自动保存
生成配置C#文件
查看生成的C#文件,其中给我们生成了一个OnJump事件,这个跟我们手写的配置文件Jump有什么关联呢?就是对应的关系,我们自定义了一个Jump事件绑定监听了键盘的Space键,当我们按下Space键的时候就会触发OnJump方法。
在主角身上添加上行为控制脚本
添加上Controller脚本,并且实现OnJump方法,并且要添加PlayerInput内置的组件才行。
同理,我们定义了Move事件绑定了WASD键,添加OnMove方法会发现当键盘按下这四个键会触发OnMove事件。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
private float MoveSpeed = 1f;
private Vector2 MoveValue;
private void OnJump()
{
transform.Translate(new Vector3(0, 1, 0));
}
private void OnMove(InputValue value)
{
MoveValue = value.Get<Vector2>();
transform.Translate(new Vector3(MoveValue.x, 0, MoveValue.y) * MoveSpeed);
Debug.Log("行走");
}
}
测试效果
当按下Space键的时候胶囊体就会跳跃了,按下WASD会上下左右移动。
说明
这篇只是作者入门InputSystem,更深入的学习还是看官方的demo,在下面第四个链接。
参考文档
- https://www.bilibili.com/video/av81666919?p=3
- https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/index.html
- https://connect.unity.com/p/unityxin-yi-dai-shu-ru-xi-tong-jie-shao
- https://github.com/Unity-Technologies/InputSystem