当前位置:   article > 正文

Unity学习笔记_新版输入系统(基础)_unity 新版输入系统

unity 新版输入系统

目录

零.安装与创建

一.面板介绍

1.Action Maps(侧栏黄色):

2.Actions(侧栏绿色) And Action Properties:

        (1).Action Type:决定动作的具体作用

             ①.Button        

              ②.Value

               ③.Pass Through

        (2).Interactions:决定如何触发

        (3).Processors:决定数据的处理形式

3.Binding(Button下侧栏蓝色)

二.代码编写(以移动为例)

        1.先勾选Generate C# Class并应用(可设置名字以及保存位置等)

        2.新建脚本,声明并实例化控制器脚本

        3.对其进行启用

        4.启用Move

        5.获取Move的返回值

        6.创建并获取玩家刚体并声明速度

        7.实现移动

        8.整体代码展示

三.重要


零.安装与创建

        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并下载导入。

1
2(我是已经弄好的)

        3.在Project-Assets(位置随便,在Assets里就行)新建一个Input Actions.

一个新建的Input Actions

一.面板介绍

大体结构

1.Action Maps(侧栏黄色):

       是 一个行动地图,也是一个组,也是一个集合。

2.Actions(侧栏绿色) And Action Properties:

        (1).Action Type:决定动作的具体作用

             ①.Button        

                  让动作变成一个事件的容器,如下图;跳跃作为一个事件出现;Start中的语句的目的是将Jump_performed(这个只是个名字,可以自己起)这个事件注册进去(注册就是把这个事件放进这个容器里),然后在特定情况下,被注册的事件将被触发。Jump_performed方法的参数会返回一个有关该操作的结构体,方法里的那个抛出可以不管,然后写要执行的代码。

  1. private void Start()
  2. {
  3. InputSystem.Player.Jump.performed += Jump_performed;
  4. }
  5. private void Jump_performed(InputAction.CallbackContext obj)
  6. {
  7. throw new System.NotImplementedException();
  8. }
              ②.Value

                   让动作变成一个值,会根据所绑定的键以及所勾选的选项返回值;在Control Type为Vector2的情况下,可以创建一个上下左右的操作(具体如何使用见后),返回值由于Composite()中的Mode勾选了单位化,所以返回的二维向量的长度为1.

  1. Vector2 value_Get;
  2. private void Update()
  3. {
  4. //获取value的返回值
  5. value_Get = InputSystem.Player.Move.ReadValue<Vector2>();
  6. }
Composite的位置
               ③.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,然后敲击所要的按键,然后选中即可。(这里的按键就是上文的特定情况)

listen在箭头处(我的不知道为什么被挡住了)

        PS:这三项都可以通过各自框框右上角的加号添加。上下左右的需要在Value或者Pass Through的前提一,以及Control Type为Vector2的前提二下,选择+中的Add Up/Down/Left/Right Composite实现。


二.代码编写(以移动为例)

        1.先勾选Generate C# Class并应用(可设置名字以及保存位置等)

控制器面板

        2.新建脚本,声明并实例化控制器脚本

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. //这一行记得加上
  5. using UnityEngine.InputSystem;
  6. public class NewThing : MonoBehaviour
  7. {
  8. //PlayerController是我的控制器脚本名字
  9. private PlayerController inputSystem;
  10. private void Awake()
  11. {
  12. inputSystem = new PlayerController();
  13. }
  14. }

        3.对其进行启用

  1. //在所挂物体启用时执行
  2. public void OnEnable()
  3. {
  4. //启用所实例化的控制器
  5. InputSystem.Enable();
  6. }
  7. public void OnDisable()
  8. {
  9. InputSystem.Disable();
  10. }

        4.启用Move

  1. private void Start()
  2. {
  3. inputSystem.Player.Move.Enable();
  4. }

        5.获取Move的返回值

        

  1. private Vector2 value;
  2. private void Update()
  3. {
  4. value = inputSystem.Player.Move.ReadValue<Vector2>();
  5. }

        6.创建并获取玩家刚体并声明速度

  1. private Rigidbody2D rb;
  2. //在外面赋值
  3. public float moveSpeed;
  4. private void Start()
  5. {
  6. rb = GetComponent<Rigidbody2D>();
  7. //inputSystem.Player.Move.Enable();
  8. }

        7.实现移动

  1. //在Update中
  2. rb.velocity = new Vector2(value.x * moveSpeed, rb.velocity.y);

        8.整体代码展示

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. //这一行记得加上
  5. using UnityEngine.InputSystem;
  6. public class NewThing : MonoBehaviour
  7. {
  8. //PlayerController是我的控制器脚本名字
  9. private PlayerController inputSystem;
  10. private void Awake()
  11. {
  12. inputSystem = new PlayerController();
  13. }
  14. private Rigidbody2D rb;
  15. public float moveSpeed;
  16. private void Start()
  17. {
  18. rb = GetComponent<Rigidbody2D>();
  19. inputSystem.Player.Move.Enable();
  20. }
  21. private Vector2 value;
  22. private void Update()
  23. {
  24. value = inputSystem.Player.Move.ReadValue<Vector2>();
  25. //在Update中
  26. rb.velocity = new Vector2(value.x * moveSpeed, rb.velocity.y);
  27. }
  28. private void OnEnable()
  29. {
  30. inputSystem.Enable();
  31. }
  32. private void OnDisable()
  33. {
  34. inputSystem.Disable();
  35. }
  36. }


三.重要,重要,重要

        如有错误或者不足还请指出,诸位的指正对我而言非常重要。

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

闽ICP备14008679号