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方法的参数会返回一个有关该操作的结构体,方法里的那个抛出可以不管,然后写要执行的代码。

    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>();
    }
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.新建脚本,声明并实例化控制器脚本

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();
    }

}


三.重要,重要,重要

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

  • 36
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值