赞
踩
【Unity动画系统详解 预备知识】使用Unity的新输入系统(New Input System)控制动画状态机【Unity开发入门教程21】_单机游戏热门视频 (bilibili.com)
我们打开Unity上方工具栏中的Window =>Package Manager打开Unity插件包管理界面
2.点击右上角Package选项中Unity Registry,然后在右侧搜索栏中搜索Input
3.找到InputSystem插件,点击安装
选择玩家角色(Player)
为ta添加 Player Input
组件
我们需要在场景中在我们需要的对象上添加PlayerInput组件
在Assets
文件夹下创建Setting
文件夹
点击 Create Actions
按钮,输入配置文件命名为Locomotion
,存放在刚刚创建的Setting
文件夹
将组件选项Behavior
选为Invoke Unity Events
(系统检测到我们的输入即WASD时,就会调用我们写好的方法)
创建一个PlayerMoveTest
的脚本
- public class PlayerMove : MonoBehaviour
- {
- // 移动速度
- public float moveSpeed = 0.2f;
- // 角色控制器
- private CharacterController characterController;
-
-
- void Start()
- {
- characterController = GetComponent<CharacterController>();
- }
-
- void Update()
- {
-
- }
-
- /// <summary>
- /// 角色移动(按下时监听 按一下动一下)
- /// </summary>
- /// <param name="callbackContext"></param>
- public void PlayerMovement(InputAction.CallbackContext callbackContext)
- {
- // 获取 Horizontal(横向) 和 Vertical(纵向) 的值 --- 0到1
- Vector2 moveVector2 = callbackContext.ReadValue<Vector2>();
-
- // 移动方向
- Vector3 moveDir = new(moveVector2.x, 0, moveVector2.y);
-
- // 控制角色移动
- characterController.Move(moveDir * Time.deltaTime * moveSpeed);
- }
-
- }
在Player Input组件
展开Events
再展开Player
,在Move
方法上挂载PlayerMovement脚本的方法
勾选InputSystem 的 Generate C#Class
新建一个`PlayerKeepMove`的脚本
- public class PlayerKeepMove : MonoBehaviour
- {
- public float moveSpeed = 0.2f;
-
- private MoveInputAction moveInputAction;
- private CharacterController characterController;
-
-
- private void Awake()
- {
- //实例化我们刚刚生成的moveInputAction脚本
- moveInputAction = new MoveInputAction();
- }
- void OnEnable()
- {
- //使用前需要将该moveInputAction开启
- moveInputAction.Enable();
- }
- void OnDisable()
- {
- //使用完需要将该moveInputAction关闭
- moveInputAction.Disable();
- }
-
-
- void Start()
- {
- characterController = GetComponent<CharacterController>();
- }
-
- void Update()
- {
- GetMoveInput();
- }
-
-
- private void GetMoveInput()
- {
- Vector2 moveVector2 = moveInputAction.Player.Move.ReadValue<Vector2>();
-
- if (moveVector2 != Vector2.zero)
- {
- PlayerMove(moveVector2.x, moveVector2.y);
- }
- }
-
-
- private void PlayerMove(float horizontal, float vetical)
- {
- characterController.Move(new Vector3(horizontal, 0, vetical) * Time.deltaTime * moveSpeed);
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。