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

文章目录

  • 前言
  • 一、认识PlayerInput
    • 1、PlayerInput是什么?
    • 2、主要工作原理:
    • 3、好处:
  • 二、添加PlayerInput组件
  • 三、PlayerInput参数相关
    • 1、Actions:行为
    • 2、Default Scheme:默认启用哪个控制方案
    • 3、Auto-Switch:自动切换控制方案
    • 4、Default Map:默认行为映射方案
    • 5、Ui Input Module:UI输入模块
    • 6、Camera:摄像机
    • 7、Behavior:行为执行模式
  • 四、PlayerInput行为执行模式(Behavior)
    • 1、Send Messages
    • 2、Broadcast Messages
    • 3、Invoke Unity Events
    • 4、Invoke C Sharp Events
      • 4.1 获取 PlayerInput 组件
      • 4.2 通过事件监听输入事件
      • 4.3 在update中一直监听输入
    • 最佳实践
  • 五、关键参数InputValue和InputAction.CallbackContext
    • 1、InputValue
    • 2、InputAction.CallbackContext
  • 专栏推荐
  • 完结

前言

前面我们学习了【通过事件和接口方式对输入配置文件(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)
   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958612.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android GLSurfaceView 覆盖其它控件问题 (RK平台)

平台 涉及主控: RK3566 Android: 11/13 问题 在使用GLSurfaceView播放视频的过程中, 增加了一个播放控制面板, 覆盖在视频上方. 默认隐藏setVisibility(View.INVISIBLE);点击屏幕再显示出来. 然而, 在RK3566上这个简单的功能却无法正常工作. 通过缩小视频窗口可以看到, 实际…

【2024 - 年终总结】叶子增长,期待花开

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言论博客创作保持2024的记录清单博客科研开源工作生活 总结与展望互动致谢参考 前言…

TangoFlux 本地部署实用教程:开启无限音频创意脑洞

一、介绍 TangoFlux是通过流匹配和 Clap-Ranked 首选项优化&#xff0c;实现超快速、忠实的文本到音频生成的模型。 本模型由 Stability AI 提供支持&#x1f680; TangoFlux 可以在单个 A40 GPU 上在 ~3 秒内生成长达 34.1kHz 的立体声音频。 二、部署 安装方式非常简单 1…

ThreeJS示例教程200+【目录】

Three.js 是一个强大的 JavaScript 库,旨在简化在网页上创建和展示3D图形的过程。它基于 WebGL 技术,但提供了比直接使用 WebGL 更易于使用的API,使得开发者无需深入了解 WebGL 的复杂细节就能创建出高质量的3D内容。 由于目前内容还不多,下面的内容暂时做一个占位。 文章目…

AIGC的企业级解决方案架构及成本效益分析

AIGC的企业级解决方案架构及成本效益分析 一,企业级解决方案架构 AIGC(人工智能生成内容)的企业级解决方案架构是一个多层次、多维度的复杂系统,旨在帮助企业实现智能化转型和业务创新。以下是总结的企业级AIGC解决方案架构的主要组成部分: 1. 技术架构 企业级AIGC解决方…

Blazo-Blazor Web App项目结构

让我们还是从创建项目开始&#xff0c;来一起了解下Blazor Web App的项目情况 创建项目 呈现方式 这里我们可以看到需要选择项目的呈现方式&#xff0c;有以上四种呈现方式 ● WebAssembly ● Server ● Auto(Server and WebAssembly) ● None 纯静态界面静态SSR呈现方式 WebAs…

我谈概率论与数理统计的知识体系

学习概率统计二十多年后&#xff0c;在廖老师的指导下&#xff0c;厘清了各章之间的关系。本来就是一条线两个分支&#xff0c;脉络很清晰。 分支一&#xff1a;从随机现象到样本空间到随机事件再到概率。 从随机事件到随机变量&#xff1a;为了进行定量的数学处理&#xff0…

检查w-form-select 组件是否正确透传了 visible-change 事件

文章目录 1. 下拉框的组件2. 点击下拉框时的逻辑&#xff08;1&#xff09;handleVisibleChange 方法&#xff08;2&#xff09;getIdentifies 方法 3. 选择关联识别点时的逻辑&#xff08;1&#xff09;onRelatedChange 方法 4. 相关 UI 更新5. 总结 在这段代码中&#xff0c;…

校验收货地址是否超出配送范围实战3(day09)

优化用户下单功能&#xff0c;加入校验逻辑&#xff0c;如果用户的收货地址距离商家门店超出配送范围&#xff08;配送范围为5公里内&#xff09;&#xff0c;则下单失败。 提示&#xff1a; ​ 1. 基于百度地图开放平台实现&#xff08;https://lbsyun.baidu.com/&#xff09…

Linux应用编程(五)USB应用开发-libusb库

一、基础知识 1. USB接口是什么&#xff1f; USB接口&#xff08;Universal Serial Bus&#xff09;是一种通用串行总线&#xff0c;广泛使用的接口标准&#xff0c;主要用于连接计算机与外围设备&#xff08;如键盘、鼠标、打印机、存储设备等&#xff09;之间的数据传输和电…

【优选算法】7----三数之和

来了来了&#xff0c;他来了&#xff0c;又是学习算法的一天~ 今天的嘉宾是中等难度的算法题----三数之和&#xff01; ------------------------------------------begin------------------------------------ 题目解析&#xff1a; 哇趣&#xff01;又是给了一个数组&#…

深度学习|表示学习|卷积神经网络|参数共享是什么?|07

如是我闻&#xff1a; Parameter Sharing&#xff08;参数共享&#xff09;是卷积神经网络&#xff08;CNN&#xff09;的一个重要特性&#xff0c;帮助它高效地处理数据。参数共享的本质就是参数“本来也没有变过”。换句话说&#xff0c;在卷积层中&#xff0c;卷积核的参数&…

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展

DeepSeek-R1&#xff1a;性能对标 OpenAI&#xff0c;开源助力 AI 生态发展 在人工智能领域&#xff0c;大模型的竞争一直备受关注。最近&#xff0c;DeepSeek 团队发布了 DeepSeek-R1 模型&#xff0c;并开源了模型权重&#xff0c;这一举动无疑为 AI 领域带来了新的活力。今…

递归的本质

字节面试题叠罗汉&#xff0c;很遗憾没想出来&#xff0c;看了答案挺巧妙的&#xff0c;但是居然是个案例题。。。 复习一下递归的本质 正面解决问题 利用子问题来解决 可以通过规约推导的&#xff0c;基本可以用递归解决&#xff01; 在写这道算法题时&#xff0c;我想规…

【力扣:新动计划,编程入门 —— 题解 ②】

—— 25.1.23 1512. 好数对的数目 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j &#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1,1,3] 输出&#xff1a;4 解释&#xff…

K8S 快速实战

K8S 核心架构原理: 我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图: K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave…

Redis 集群模式入门

Redis 集群模式入门 一、简介 Redis 有三种集群模式&#xff1a;主从模式、Sentinel 哨兵模式、cluster 分片模式 主从复制&#xff08;Master-Slave Replication&#xff09;: 在这种模式下&#xff0c;数据可以从一个 Redis 实例&#xff08;主节点 Master&#xff09;复…

Vue2 项目二次封装Axios

引言 在现代前端开发中&#xff0c;HTTP请求管理是构建健壮应用的核心能力之一。Axios作为目前最流行的HTTP客户端库&#xff0c;其灵活性和可扩展性为开发者提供了强大的基础能力。 1. 为什么要二次封装Axios&#xff1f; 1.1 统一项目管理需求 API路径标准化&#xff1a;…

Ceisum无人机巡检直播视频投射

接上次的视频投影&#xff0c;Leader告诉我这个视频投影要用在两个地方&#xff0c;一个是我原先写的轨迹回放那里&#xff0c;另一个在无人机起飞后的地图回显&#xff0c;要实时播放无人机拍摄的视频&#xff0c;还要能转镜头&#xff0c;让我把这个也接一下。 我的天&#x…

AI Agent:深度解析与未来展望

一、AI Agent的前世&#xff1a;从概念到萌芽 &#xff08;一&#xff09;早期探索 AI Agent的概念可以追溯到20世纪50年代&#xff0c;早期的AI研究主要集中在简单的规则系统上&#xff0c;这些系统的行为是确定性的&#xff0c;输出由输入决定。随着时间的推移&#xff0c;…