当前位置:   article > 正文

Unity 使用新输入系统New Input System实现简单移动_unity new input system

unity new input system

源码:https://drive.aerwen.net/d/aerwen/unity%E6%BA%90%E7%A0%81/NewInputSystem/NewInputSystem_SimplyMove.unitypackage

使用Unity的新输入系统

【Unity动画系统详解 预备知识】使用Unity的新输入系统(New Input System)控制动画状态机【Unity开发入门教程21】_单机游戏热门视频 (bilibili.com)

要点:
1. 安装 New Input System

我们打开Unity上方工具栏中的Window =>Package Manager打开Unity插件包管理界面

img

2.点击右上角Package选项中Unity Registry,然后在右侧搜索栏中搜索Input

img

3.找到InputSystem插件,点击安装

img

2. 添加 Player Input 组件
  • 选择玩家角色(Player)为ta添加 Player Input组件

我们需要在场景中在我们需要的对象上添加PlayerInput组件

img

3. 新建输入配置文件
  • Assets文件夹下创建Setting文件夹

  • 点击 Create Actions 按钮,输入配置文件命名为Locomotion,存放在刚刚创建的Setting文件夹

  • 将组件选项Behavior选为Invoke Unity Events(系统检测到我们的输入即WASD时,就会调用我们写好的方法)

        

  1. 编写脚本(移动初尝试)

  • 创建一个PlayerMoveTest的脚本

  1. public class PlayerMove : MonoBehaviour
  2. {
  3. // 移动速度
  4. public float moveSpeed = 0.2f;
  5. // 角色控制器
  6. private CharacterController characterController;
  7. void Start()
  8. {
  9. characterController = GetComponent<CharacterController>();
  10. }
  11. void Update()
  12. {
  13. }
  14. /// <summary>
  15. /// 角色移动(按下时监听 按一下动一下)
  16. /// </summary>
  17. /// <param name="callbackContext"></param>
  18. public void PlayerMovement(InputAction.CallbackContext callbackContext)
  19. {
  20. // 获取 Horizontal(横向) 和 Vertical(纵向) 的值 --- 0到1
  21. Vector2 moveVector2 = callbackContext.ReadValue<Vector2>();
  22. // 移动方向
  23. Vector3 moveDir = new(moveVector2.x, 0, moveVector2.y);
  24. // 控制角色移动
  25. characterController.Move(moveDir * Time.deltaTime * moveSpeed);
  26. }
  27. }
  • Player Input组件展开Events再展开Player,在Move方法上挂载PlayerMovement脚本的方法

  1. 编写脚本(持续移动)

  • 勾选InputSystem 的 Generate C#Class

  • 新建一个`PlayerKeepMove`的脚本

  1. public class PlayerKeepMove : MonoBehaviour
  2. {
  3. public float moveSpeed = 0.2f;
  4. private MoveInputAction moveInputAction;
  5. private CharacterController characterController;
  6. private void Awake()
  7. {
  8. //实例化我们刚刚生成的moveInputAction脚本
  9. moveInputAction = new MoveInputAction();
  10. }
  11. void OnEnable()
  12. {
  13. //使用前需要将该moveInputAction开启
  14. moveInputAction.Enable();
  15. }
  16. void OnDisable()
  17. {
  18. //使用完需要将该moveInputAction关闭
  19. moveInputAction.Disable();
  20. }
  21. void Start()
  22. {
  23. characterController = GetComponent<CharacterController>();
  24. }
  25. void Update()
  26. {
  27. GetMoveInput();
  28. }
  29. private void GetMoveInput()
  30. {
  31. Vector2 moveVector2 = moveInputAction.Player.Move.ReadValue<Vector2>();
  32. if (moveVector2 != Vector2.zero)
  33. {
  34. PlayerMove(moveVector2.x, moveVector2.y);
  35. }
  36. }
  37. private void PlayerMove(float horizontal, float vetical)
  38. {
  39. characterController.Move(new Vector3(horizontal, 0, vetical) * Time.deltaTime * moveSpeed);
  40. }
  41. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/958924
推荐阅读
相关标签
  

闽ICP备14008679号