提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、InputSystem配置
- 二、GameInput 游戏输入脚本
-
- 1.实现思路
- 2.完整代码
- 三、Player 游戏人物移动脚本
-
- 1.实现思路
- 2.完整代码
- 四、场景脚本设置
-
- 1.组件设置
- 五、问题解决
-
- 1.人物一直下落
- 2.人物跳跃时,地面检测不到离开地面
- 总结
前言
上一篇我们一起学习并安装了新版InputSystem系统,接下来我们学习如何使用他们完成一些基础的功能开发。
该文章解决的问题:
- 如何使用Unity新版InputSystem系统实现人物按键WASD移动
- Input system 怎么调用监听和预留监听接口
- 过程中遇到的问题以及解决方案
安装原帖请参考:
【Unity 2023 新版InputSystem系统】新版InputSystem 如何进行项目配置并安装
一、InputSystem配置
接下来,我们先对Input System 进行配置
- 创建Move事件
我们在新建的Input Action 视图中,创建一个类型为Value,返回值为Vector2的参数,用来获取我们得到的移动方向。
- 创建WASD控制事件
点击Move末端的“+”,我们可以看到有以下四个选项,这里我们选择第二个,Up\Down\Left\Right。
完成创建后我们可以看到此时已经创建出4个绑定的事件,下面我们需要对这4个事件分别进行设置。
- 识别按键
点击Up,选择“Path”,这里我们可以看到图片中标红的位置,点击"Listen",获取键盘监听,这时,我们敲击键盘“W”按键,系统即可识别此按键。
- 其他按键
其他按键,以此按照步骤3进行配置,完成配置后,点击"Save Asset" 按钮,至此,完成移动的按键配置。
二、GameInput 游戏输入脚本
1.实现思路
- 获取我们创建的Action生成的脚本
gameControl = new GameControl();
- 激活设置人物移动键位输入状态
我们创建了一个方法,SetPlayerInputState,可以传入我们的激活状态,当需要使用到Player这个事件集合时,我们需要先对该控制集合进行激活,并为他添加我们所需要的监听事件,以便后续使用。
private void SetPlayerInputState(bool isEnable)
{
if (isEnable)
{
gameControl.Player.Enable();
gameControl.Player.Move.performed += MovePerformed;
}
else
{
gameControl.Player.Disable();
gameControl.Player.Move.performed -= MovePerformed;
}
}
- 读取input system所获得的移动向量
我们要获取的是Player事件集合下面的Move事件所返回的值,因此我们使用**gameControl.Player.Move.ReadValue()**方式读取到我们所需要的Vector2向量,并且返回一个我们所需要的向量值。后续我们需要用这个向量值,对人物的移动操作进行配置。
代码实现:
public Vector3 GetPlayerMoveNormalized()
{
Vector2 moveInput = gameControl.Player.Move.ReadValue<Vector2>();
Vector3 direction = new Vector3(moveInput.x, 0, moveInput.y);
return direction.normalized;
}
- 监听移动事件
此处预留了一个移动事件的监听,如果在人物移动的过程中,需要对其行为进行监听,后续可以为其进行事件的添加调用。
private void MovePerformed(UnityEngine.InputSystem