【unity游戏开发之InputSystem——05】PlayerInput组件的介绍(基于unity6开发介绍)

发布于:2025-02-10 ⋅ 阅读:(36) ⋅ 点赞:(0)

前言

前面我们学习了【通过事件和接口方式对输入配置文件(Input Actions)生成的C#代码进行输入监听】,使用起来确实很方便,但是你发现还得生成对应的C#代码,有没有更加方便的方式呢?

当然有,unity提供了PlayerInput组件,可以进一步简化我们的操作,本篇就来介绍一下。

一、认识PlayerInput

1、PlayerInput是什么?

PlayerInput 是 Unity 新输入系统 (InputSystem) 中的一个组件,专门用于处理玩家的输入并将这些输入映射到游戏中的行为。它简化了开发者的工作流程,使得我们可以专注于定义输入逻辑和响应行为,而不是编写大量的代码来检测和处理输入。

2、主要工作原理:

  • 配置输入文件(InputActions 文件)
    使用 Unity 提供的可视化编辑器 Input Actions 来创建和编辑 .inputactions 文件。
    在这个文件中定义多个 InputAction,每个 InputAction 可以代表一个具体的游戏行为(如“移动”、“跳跃”等),并为这些行为关联具体的输入动作(如键盘按键、鼠标点击或手柄按钮)。
  • 通过 PlayerInput 关联配置文件
    将生成的 .inputactions 文件与场景中的 PlayerInput 组件关联起来。这可以通过将资产直接拖放到 PlayerInput 组件上的 Actions 字段来完成,或者通过脚本动态加载。
  • 自动解析配置文件
    PlayerInput 组件会自动解析关联的 .inputactions 文件,并在检测到相关输入时触发相应的事件。
  • 关联对应的响应函数
    你可以为每个 InputAction 分配一个或多个回调方法(即事件处理器)。当特定的输入被触发时,PlayerInput 会调用这些回调方法来执行相应的逻辑。
    这些回调方法可以是 C# 脚本中的普通方法,也可以是匿名函数或 lambda 表达式。
  • 处理对应逻辑
    开发者只需关心输入事件触发后的逻辑处理,而不需要手动检查每一个可能的输入组合。这样不仅提高了开发效率,还减少了出错的可能性。

3、好处:

  • 不需要自己进行相关输入的逻辑书写。
  • 通过配置文件即可配置想要监听的对应行为。让我们专注于输入事件触发后的逻辑处理。
  • 不需要像前面生成代码了。
  • 也不需要像前面一样使用前一定要先启用输入

二、添加PlayerInput组件

我们可以选择先删除前面生成的InputSystem映射代码(如果有的话),使用PlayerInput就不需要再生成代码了
在这里插入图片描述
选择任意对象(一般为一个玩家对象),为其添加PlayerInput组件。
在这里插入图片描述

三、PlayerInput参数相关

在这里插入图片描述

1、Actions:行为

关联一套InputSystem输入动作的配置文件,帮助我们监听一些按键的输入。可以看到默认关联了unity6系统为我们创建的输入映射文件。
在这里插入图片描述
如果没有,或者想自己生成,可以点击Actions下面的CreateActions按钮来创建配置文件。
在这里插入图片描述
创建出来的配置文件默认会自动设置好一些默认的行为并关联按键。
在这里插入图片描述

2、Default Scheme:默认启用哪个控制方案

在这里插入图片描述

3、Auto-Switch:自动切换控制方案

4、Default Map:默认行为映射方案

默认情况下,在 Actions 中启用哪个 Action Map。如果设置为 None,则播放器开始时不启用 Action。不过unity6好像这里设置None,运行后也会自动变成默认开启第一个Action Map。
在这里插入图片描述

5、Ui Input Module:UI输入模块

PlayerInput 组件可以与 InputSystemUIInputModule 一起工作,以驱动 UI 系统。

要设置这一点,请在PlayerInput组件的UI输入模块字段中分配对InputSystemUIInputModule组件的引用。也就是这里关联EventSystem里的InputSystemUIInputModule 组件。
在这里插入图片描述
但是要注意的是,UI的InputSystemUIInputModule 组件一般默认关联的可能不是我们创建的InputActionAsset。
在这里插入图片描述
PlayerInput和InputSystemUIInputModule组件应该配置为与相同的InputActionAsset一起工作,这样才能起作用。
在这里插入图片描述
完成此设置后,当PlayerInput组件为特定播放器配置动作时,它会将相同的动作配置分配给InputSystemUIInputModule。换句话说,控制播放器的动作和设备配置现在也控制UI。

6、Camera:摄像机

关联摄像机,这仅在使用分屏设置时是必需的。后面介绍PlayerInputManager时会再具体介绍如何使用它。

7、Behavior:行为执行模式

在这里插入图片描述

  • SendMessage:将逻辑脚本挂载在和PlayerInput同一对象上,会通过SendMessage通知执行对应函数。
  • BroadcastMessage:将逻辑脚本挂载在其自身或子对象上,会通过BroadcastMessage通知执行对应函数。
  • Invoke UnityEvent Actions:通过拖拽脚本关联函数指明想要执行的函数逻辑。
  • Invoke C Sharp Events:通过C#事件监听处理对应逻辑,通过获取PlayerInput进行事件监听。

四、PlayerInput行为执行模式(Behavior)

在这里插入图片描述

1、Send Messages

在自定义脚本中申明名为 “On+行为名” 的函数,没有参数或者参数类型为 InputValue。将该自定义脚本挂载到 PlayerInput 依附的对象上,当触发对应输入时会自动调用函数。

并且还有默认的 3 个和设备相关的函数可以调用:

  • OnDeviceRegained(PlayerInput input):设备注册(当控制器从设备丢失中恢复并再次运行时会触发)
  • OnDeviceLost(PlayerInput input):设备丢失(玩家失去了分配给它的设备之一,例如,当无线设备耗尽电池时)
  • OnControlsChanged(PlayerInput input):控制器切换

比如

using UnityEngine;
using UnityEngine.InputSystem;

public class Test : MonoBehaviour
{
   
    public void OnMove(InputValue value)
    {
   
        print("Move" + value.Get<Vector2>());
    }

    public void OnLook(InputValue value)
    {
   
        print("Look" + value.Get<Vector2>());
    }

    public void OnAttack(InputValue value)
    {
   
        print("Attack");
        if (value.isPressed)
   

网站公告

今日签到

点亮在社区的每一天
去签到