目录
2.Actions(侧栏绿色) And Action Properties:
1.先勾选Generate C# Class并应用(可设置名字以及保存位置等)
零.安装与创建
1.在unity中的Edit-Project Settings-Player-Other Settings-Configuration-Active Input Handing中勾选Input System Package或者Both.
2.在Unity中的Window-Package Manager中的Packages中选择Unity Registry然后搜索Input,选择Input System并下载导入。
![](https://img-blog.csdnimg.cn/direct/d8b7d6fe7468498d86ddee20725d438f.png)
![](https://img-blog.csdnimg.cn/direct/631af0606bbb4d178e4f47ae94255893.png)
3.在Project-Assets(位置随便,在Assets里就行)新建一个Input Actions.
![](https://img-blog.csdnimg.cn/direct/36b8edfaee804871a440404d2aa5d31b.png)
一.面板介绍
![](https://img-blog.csdnimg.cn/direct/5888007c12ca456394f4967ebe5d0bb5.png)
1.Action Maps(侧栏黄色):
是 一个行动地图,也是一个组,也是一个集合。
2.Actions(侧栏绿色) And Action Properties:
(1).Action Type:决定动作的具体作用
①.Button
让动作变成一个事件的容器,如下图;跳跃作为一个事件出现;Start中的语句的目的是将Jump_performed(这个只是个名字,可以自己起)这个事件注册进去(注册就是把这个事件放进这个容器里),然后在特定情况下,被注册的事件将被触发。Jump_performed方法的参数会返回一个有关该操作的结构体,方法里的那个抛出可以不管,然后写要执行的代码。
private void Start()
{
InputSystem.Player.Jump.performed += Jump_performed;
}
private void Jump_performed(InputAction.CallbackContext obj)
{
throw new System.NotImplementedException();
}
②.Value
让动作变成一个值,会根据所绑定的键以及所勾选的选项返回值;在Control Type为Vector2的情况下,可以创建一个上下左右的操作(具体如何使用见后),返回值由于Composite()中的Mode勾选了单位化,所以返回的二维向量的长度为1.
Vector2 value_Get;
private void Update()
{
//获取value的返回值
value_Get = InputSystem.Player.Move.ReadValue<Vector2>();
}
![](https://img-blog.csdnimg.cn/direct/de5a4b24193746ef8f3bfb245c6c5eda.png)
③.Pass Through
与value类似。
(2).Interactions:决定如何触发
五个选项分别为:
Hold(按住):按住指定时间后触发;
Muti-Tap(连按):连续按指定次数;
Press(按下):按下即可,可以选择Press Only,Release Only以及Press And Release;
Slow-Tap(短按):按住指定时间后松开触发;
Tap:按住一定时间内松开触发。
(3).Processors:决定数据的处理形式
3.Binding(Button下侧栏蓝色)
一个按键,可通过右边属性栏中的Path绑定所要的按键;如果找不到,可按下listen,然后敲击所要的按键,然后选中即可。(这里的按键就是上文的特定情况)
![](https://img-blog.csdnimg.cn/direct/afb939a0191048f5b25b3111d9aed19d.png)
PS:这三项都可以通过各自框框右上角的加号添加。上下左右的需要在Value或者Pass Through的前提一,以及Control Type为Vector2的前提二下,选择+中的Add Up/Down/Left/Right Composite实现。
二.代码编写(以移动为例)
1.先勾选Generate C# Class并应用(可设置名字以及保存位置等)
![](https://img-blog.csdnimg.cn/direct/e7920c209ea84e48b775c8d42d74e476.png)
2.新建脚本,声明并实例化控制器脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//这一行记得加上
using UnityEngine.InputSystem;
public class NewThing : MonoBehaviour
{
//PlayerController是我的控制器脚本名字
private PlayerController inputSystem;
private void Awake()
{
inputSystem = new PlayerController();
}
}
3.对其进行启用
//在所挂物体启用时执行
public void OnEnable()
{
//启用所实例化的控制器
InputSystem.Enable();
}
public void OnDisable()
{
InputSystem.Disable();
}
4.启用Move
private void Start()
{
inputSystem.Player.Move.Enable();
}
5.获取Move的返回值
private Vector2 value;
private void Update()
{
value = inputSystem.Player.Move.ReadValue<Vector2>();
}
6.创建并获取玩家刚体并声明速度
private Rigidbody2D rb;
//在外面赋值
public float moveSpeed;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
//inputSystem.Player.Move.Enable();
}
7.实现移动
//在Update中
rb.velocity = new Vector2(value.x * moveSpeed, rb.velocity.y);
8.整体代码展示
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//这一行记得加上
using UnityEngine.InputSystem;
public class NewThing : MonoBehaviour
{
//PlayerController是我的控制器脚本名字
private PlayerController inputSystem;
private void Awake()
{
inputSystem = new PlayerController();
}
private Rigidbody2D rb;
public float moveSpeed;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
inputSystem.Player.Move.Enable();
}
private Vector2 value;
private void Update()
{
value = inputSystem.Player.Move.ReadValue<Vector2>();
//在Update中
rb.velocity = new Vector2(value.x * moveSpeed, rb.velocity.y);
}
private void OnEnable()
{
inputSystem.Enable();
}
private void OnDisable()
{
inputSystem.Disable();
}
}
三.重要,重要,重要
如有错误或者不足还请指出,诸位的指正对我而言非常重要。