Unity之新版InputSystem如何自定义InputActions

news2024/12/25 13:05:12

前言

上一篇文章,我们介绍了如何使用新版本的InputSystem,我们知道了InputActionsAsset给我们提供了更多的灵活性,扩展性和复用性。那么这篇文章我们就来介绍一下如何创建自定义InputActionAsset

创建InputActionAssets

Input Action Asset 是包含Input Actions及其关联的Bindings和Control Schemes 的资源。这些资源文件扩展名是.inputactions,并以纯 JSON 格式存储。

创建InputActionAssets:在“Projects”窗口中单击鼠标右键,或从 Unity 的主菜单转到“Assets”>“Create”>“Input Action” 。

编辑InputAssets

在Project面板,双击.inputactions资源,或在Inspector面本中选择“Edit Asset”按钮。就可以打开InputAction编辑器窗口,

如下所示:
请添加图片描述
InputAction编辑器窗口分为三个窗格:
1.左窗格列出了资产中的动作图。每个 Action Map 都是您可以批量启用或禁用的 Action 的集合。
2.中间的窗格包含当前选中的 Action Map 中的 Action,以及与每个 Action 关联的绑定。
3.右窗格包含当前选定的操作或绑定的属性。

编辑ActionMaps

在ActionMaps面板可以添加删除指定的ActionMaps,一个Map就是一个动作组,比如:Player操作的都放到Player的Map下,UI操作的都放到UI的Map下。
请添加图片描述

编辑动作

在Actions面板可以增加和删除指定的Action了。
一个Action可以添加多个动作绑定,比如跳跃可以是A键和B键等等。
在这里插入图片描述
Add Binding:添加普通按键绑定
Add Positive、Negative Binding:添加正负值的1维复合绑定
Add Up、Down、Left、Right Composite:添加上下左右的2维复合绑定
Add Up、Down、Left、Right、Forward、Backward Composite:添加上下左右前后的3维复合绑定
Add Binding With One Modifiler:添加一个组合按键的绑定,如Shift+A
Add Binding With Two Modifiler:添加两个组合按键的绑定,如Shit+Ctrl+A
Add Interger Fallback Composite:整形的回退组合
Add Quaternion Fallback Composite:四元数的回退组合
Add Vector3 Fallback Composite:向量的回退组合

Add 1D Axis Composite:添加一维的轴复合动作绑定
Add 2D Vector Composite:添加2维的向量复合动作绑定
Add Pointer Input Composite:添加指针类型复合动作绑定

如果选中一个动作,我们就可以在右侧窗格中编辑它的属性了,如下图所示:
请添加图片描述

编辑绑定Binding

如果选择绑定,则可以在窗口的右侧窗格中编辑其属性:

1.绑定控制器
任何绑定最重要的属性是它绑定到的控制路径。要编辑它,请打开路径下拉列表。这将显示一个控件选择器窗口。
在控件选择器窗口中,我们可以浏览InputSystem识别的输入设备(如VR设备,PS设备等)和控件树(手柄的按键等),并绑定到这些控件。
绑定有三种方法:
1).浏览查找绑定
设备和控制树按从通用到特定的层次结构进行组织。例如,游戏手柄控制路径/buttonSouth与任何游戏手柄上的下方操作按钮相匹配。或者,如果您导航到Gamepad > More Specific Gamepads并选择PS4 Controller,然后选择 Control path /buttonSouth,这只会匹配 PlayStation 游戏手柄上的“Cross”按钮,而不匹配任何其他游戏手柄。
2).监听按键绑定
与其浏览树来查找所需的控件,不如让输入系统侦听输入更容易。为此,请选择“Listen”按钮。起初,控件列表是空的。一旦您开始在要绑定到的设备上按下按钮或启动控件,控件选择器窗口就会开始列出与您按下的控件匹配的所有绑定。选择这些绑定中的任何一个以查看它们。
3).手动编辑绑定
最后,您可以选择手动编辑绑定路径,而不是使用控件选择器。为此,请选择“控制路径”弹出窗口旁边的T按钮。这会将弹出窗口更改为文本字段,您可以在其中输入任何绑定字符串。这还允许您在绑定中使用通配符 ( )。例如,您可以使用绑定路径,例如/touch/press绑定到触摸屏上按下的任何手指,而不是手动绑定到/touch0/press,/touch1/press等等。
请添加图片描述

编辑复合绑定

要创建复合绑定,请在 Input Action Asset 编辑器窗口中,选择要将其添加到的 Action 上的添加 (+) 图标,然后从弹出菜单中选择一个 Composite Binding 类型。
请添加图片描述

Composite Bindings是由多个部分组成的Bindings,它们共同组成一个Control。例如,2D Vector Composite使用四个按钮(左、右、上、下)来模拟 2D 摇杆输入。
请添加图片描述Composite 本身没有 Binding 路径属性,但它的各个子部分有,我们可以像编辑任何其他 Binding 一样编辑这些子部分。一旦绑定了 Composite 的所有子部分,Composite 就可以协同工作,就像将单个控件绑定到 Action 一样。

注意:
(+)号菜单中显示的复合集是根据 操作的值类型 进行过滤的。这意味着,例如,如果将 Action 设置为类型“Button”,则只会float显示能够返回类型值的 Composites。
要追溯更改组合的类型,请选择组合,然后从“属性”窗格的“组合类型”下拉列表中选择新类型。
请添加图片描述
要更改分配给特定绑定的复合部分,请使用绑定属性中的复合部分下拉列表。请添加图片描述
可以将多个绑定分配给同一部分。您还可以复制单个部件绑定:右键单击绑定,然后选择复制为合成创建新的部件绑定。例如,这可用于为“WASD”样式控件和箭头键创建单个复合。请添加图片描述

绑定类型

1.一维轴

由两个按钮组成的复合材料:一个将 1D 轴拉向负方向,另一个将其拉向正方向。
请添加图片描述
请添加图片描述

2.二维矢量

代表 4 向按钮设置的 Composite,例如游戏手柄上的 D-pad。每个按钮代表一个主要方向。
此 Composite 最适用于表示上下左右控件,例如 WASD 键盘输入。
请添加图片描述
请添加图片描述

3.3D矢量

请添加图片描述
请添加图片描述
一个 Composite,表示一个 6 向按钮,其中两个组合分别控制 3D 矢量的一个轴。

4.一个修改键

一个 Composite,它要求用户按住“修改器”按钮以及另一个控件,从中确定 Binding 的实际值。例如,这可用于诸如“SHIFT+1”之类的绑定。
请添加图片描述
请添加图片描述

5.两个修改键

一个 Composite,它要求用户按住两个“修改器”按钮以及另一个控件,从中确定 Binding 的实际值。例如,这可以用于诸如“SHIFT+CTRL+1”之类的绑定。
请添加图片描述
请添加图片描述

6.自定义复合类型

我们可以定义新的复合类型,并使用 API 注册它们。Unity 将这些视为预定义类型,输入系统在内部以相同的方式定义和注册这些类型。

要定义一种新的 Composite 类型,创建一个继承InputBindingComposite类,并实现接口即可。

Interactions交互设置

Interactions交互代表特定的输入模式。例如,长按,轻击,双击等操作。

交互有一组不同的阶段,它可以响应接收到的输入而经历。

阶段描述
Waiting交互正在等待输入
Started交互已经开始(也就是说,它收到了一些预期的输入),但还没有完成。
Performed交互完成。
Canceled交互被中断并中止。例如,用户按下然后松开一个按钮保持互动去完成。

并非每个交互都会触发每个阶段,特定交互触发阶段的模式取决于交互类型。

多个交互
如果单个绑定或操作上存在多个交互,则输入系统会按照交互在绑定上出现的顺序检查交互。

交互类型

1.默认交互
输入系统包附带了一组您可以使用的基本交互。如果 Action 没有设置 Interactions,系统将使用其默认的 Interaction。

2.Press交互
您可以使用 PressInteraction来明确强制执行类似按钮的交互。使用该behavior参数来选择交互是否应在按下、释放或同时触发按钮时触发。

3.Hold交互
要求用户在输入系统触发操作之前HoldInteraction按住控件几秒钟。

4.Tap交互
TapInteraction要求用户在几秒钟内按下并释放一个 Controlduration以触发 Action。

5.SlowTap交互
SlowTapInteraction要求用户按住控件至少几duration秒钟,然后松开,以触发操作。

6.多次点击
要求用户在几秒钟MultiTapInteraction内按下并释放一个控件,点击之间的时间不超过几秒钟,以便触发交互。您可以使用它来检测双击或多次单击手势。

7.自定义交互
我们可以编写自定义交互以在项目中使用。添加一个实现IInputInteraction接口的类即可。

Processor处理器

Input Processor接受一个值并为其返回处理后的结果。接收值和结果值必须是同一类型。
请添加图片描述

处理器类型

Clamp:将输入值限制在 [ min… max] 范围内。
Invert:反转控件中的值(即,将值乘以 -1)。
InvertVector2:反转控件中的值(即,将值乘以 -1)。如果为真,则反转向量的 x 轴,如果为真invertX,则反转 y 轴
InvertVector3:反转控件中的值(即,将值乘以 -1)。如果为真,则反转向量的 x 轴invertX,如果为真,则反转 y 轴invertY,如果为真,则反转 z 轴invertZ。
Normalize:min将 [ … ]范围内的输入值规范化max为无符号规范化形式 [0…1](如果min>=)zero,并规范化为有符号规范化形式 [-1…1](如果min< zero)。
NormalizeVector2:将输入向量标准化为单位长度 (1)。这与调用相同Vector2.normalized。
NormalizeVector3:将输入向量标准化为单位长度 (1)。这与调用相同Vector3.normalized。
Scale:将所有输入值乘以factor。
ScaleVector2:将所有输入值x沿 X 轴和y沿 Y 轴乘以。
ScaleVector3:将所有输入值沿xX 轴、y沿 Y 轴和z沿 Z 轴乘以。
AxisDeadZone:缩放控件的值,以使绝对值小于min的任何值都是 0,而绝对值大于max的任何值都是 1 或 -1。
StickDeadzone:缩放 Vector2 控件(例如棒)的值,以便幅度小于min的任何输入向量结果为 (0,0),幅度大于max的任何输入向量max都归一化为长度 1。
自定义Processor
我们还可以编写自定义处理器以在项目中使用。添加派生自 的类InputProcessor,并实现该Process方法:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5/v7 改进实战 | 目录 | 使用教程

YOLOv5/v7 改进实战 | 目录 | 使用教程 本专栏包含超多YOLO算法改进使用教程&#xff1b;全专栏阅读量50 w&#xff0c;改进YOLO必看教程&#xff0c;所有改进都提供详细手把手教程&#xff0c;欢迎大家订阅~ 专栏地址&#xff1a;点击跳转 整体目录如下&#xff1a; 使用教程系…

React脚手架搭建

介绍 react提供了一个用于创建 react项目的脚手架库: create-react-app 全局安装react脚手架 npm i -g create-react-app 创建项目 create-react-app 项目包名 静等一会儿 创建成功 切换到创建的目录 输入 npm start或yarn start启动项目 项目基本结构介绍 自定义简单组件 p…

数影周报:三星核心技术遭泄露,阿里宣布多业务启动融资上市计划

本周看点&#xff1a;三星再次发生核心技术信息泄露事件&#xff1b;领英职场将停止服务&#xff1b;阿里宣布多业务启动融资上市计划&#xff1b;Bolttech获得2亿美元B轮融资...... 数据安全那些事 三星再次发生核心技术信息泄露事件 2023年5月17日消息&#xff0c;据Business…

智能二狗机器人使用攻略,微信群活跃助手

群里聊天的人来来去去就那几个&#xff1f;聊来聊去都是一样的话题&#xff1f; 要怎么才能丰富社群的玩法体验&#xff0c;提高成语的积极性&#xff0c;打造99社群呢&#xff1f; 别慌&#xff0c;让二狗机器人来拯救你的无聊&#xff01; 数十款互动玩法&#xff0c;轻松…

Token 常用的加解密算法

常用的 Token 加密算法包括对称加密算法和非对称加密算法。对称加密算法使用相同的密钥来进行加密和解密&#xff0c;加密速度快&#xff0c;但是密钥传输和管理较为复杂。非对称加密算法使用一对公钥和私钥来进行加密和解密&#xff0c;加密速度慢&#xff0c;但是密钥传输和管…

基于html+css的图展示79

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

西安石油大学上机作业2023.5.19

上机的一次作业 上机作业&#xff1a; 编写一个基本帐户类。成员变量包括&#xff1a;帐号、储户姓名和存款余额&#xff0c;成员函数包括&#xff1a;存款和取款。编写一个测试程序对该类功能进行测试。 要求&#xff1a;上传源码及运行结果截图。 分析思路&#xff1a; 针…

面试造航母,入职拧螺丝,工资离了个大谱...

有粉丝跟我吐槽说&#xff1a;金三银四去面试软件测试岗&#xff0c;真的是面试造航母&#xff0c;入职拧螺丝&#xff0c;工资还低 这种现象很正常&#xff0c;因为找一个测试员&#xff0c;当然希望他能做的业务越多越好&#xff0c;最好像机器猫一样&#xff0c;啥事儿都能…

数据结构与算法(四)

一、链表 线性表&#xff1a;0个或者是多个数据元素有限序列 物理的存储结构&#xff1a; 顺序存储&#xff1a;用一段连续的存储单元依次存储线性表的数据元素。链式存储&#xff1a;内存地址可以是连续的&#xff0c;也可以是不连续的。把数据元素存放在任意的存储单元里&…

寻找人工智能工具?警惕散布红线恶意软件的流氓网站

针对OpenAI ChatGPT和Midjourney等生成式人工智能服务的恶意谷歌搜索广告被用来将用户引导到一些粗糙的网站&#xff0c;这是BATLOADER活动的一部分&#xff0c;旨在传播红线窃取软件。 eSentire在一份分析报告中表示:“这两种人工智能服务都非常受欢迎&#xff0c;但缺乏第一…

Windows环境下pcl点云库 安装配置教程

本文为Windows配置点云库pcl步骤&#xff0c;具体win10、visual studio 2017、pcl1.11.1。 【1】下载安装包 Releases PointCloudLibrary/pcl GitHub 其中&#xff0c;AllInOne是一个包含了PCL库所有模块的单独下载包&#xff0c;方便快速获取整个PCL库&#xff0c;而pdb则…

【腾讯云 Finops Crane 开发者集训营】浅谈Crane的核心概念和原理

一、Crane是什么&#xff1f; FinOps&#xff08;Financial Operations&#xff09;是一种管理云计算成本的方法&#xff0c;它强调将云计算资源的成本与使用情况及业务需求相匹配&#xff0c;从而提高企业的效率和效益。在当前云计算环境下&#xff0c;FinOps已经成为了越来越…

如何理解工业互联网与智能制造,怎么共建智慧工厂?

第六届数字中国建设峰会26日在福州开幕&#xff0c;在这个数字化新技术的变革风口&#xff0c;企业如何把握机遇&#xff0c;借工业互联网和智能制造实现智慧工厂建设&#xff1f; 探讨三个问题&#xff1a; 什么是工业互联网、智能制造、智慧工厂&#xff1b;它们三者之间的…

Vm2沙箱逃逸漏洞复现(CVE-2023-32314)

0x01 产品简介 Node.js Node.js 是一个基于 V8 引擎的开源、跨平台的 JavaScript 运行环境&#xff0c;它可以在多个操作系统上运行&#xff0c;包括 Windows、macOS 和 Linux 等。Node.js 提供了一个运行在服务器端的 JavaScript 环境&#xff0c;使得开发者可以编写并发的、…

Flask框架总结

python的web框架 Flask 参考: https://dormousehole.readthedocs.io/en/2.1.2/tutorial/factory.html 一、启动脚本 随便编写一个py文件,如test.py from flask import Flaskapp Flask(__name__)app.route("/") def hello_world():return "<p>Hello Fla…

SpringBoot开发实用篇1

一、热部署 1.手工启动热部署 经过测试当前是没有启动热部署的&#xff1a; 再将sout的信息多复制几份&#xff0c;刷新功能&#xff0c;发现控制台还是只打印一行信息。说明当前热部署是没有生效的。 手动开启热部署&#xff1a; 在pom.xml文件中加入开发者工具配置热部署…

springBoot-Mybatis-Plus 多数据源切换实现

前言&#xff1a;本文主要通过AbstractRoutingDataSource&#xff0c;实现根据 http 访问携带的标识动态切换数据源&#xff1b; 1 AbstractRoutingDataSource 介绍&#xff1a; AbstractRoutingDataSource 是 Spring 框架中的一个抽象类&#xff0c;它可以用来实现动态数据源…

2023年数据分析的就业薪资水平情况

2023年数据分析的就业薪资水平情况 数据已经成为我们工作生活不可缺少的一部分&#xff0c;也成为企业提高竞争力的有效支撑。随着越来越的企业进行数字化转型&#xff0c;对于数据的需求也将越来越大&#xff0c;那么对于正在学习数据分析或者想学习数据分析的小伙伴来说&…

浅析基于AI视频智能识别技术的医疗废弃物智能监管及风险预警方案

一、方案背景 医疗废弃物含有大量的细菌、病毒、化学污染物等&#xff0c;若是回收处置不当、工作人员防护不到位等&#xff0c;会严重影响公众及个人的健康及周围环境。 对医疗废弃物的规范管理&#xff0c;也成为医疗废弃物处置行业的重要一环。传统视频监控方案主要依靠监…

漏电保护插座插排真的有用吗?同为科技(TOWE)漏保系列PDU产品

所谓漏电保护&#xff0c;是指当电气设备绝缘发生故障&#xff0c;电线和地之间、线路和线路之间、工作回路与不能带电的金属壳体形成电流通路&#xff0c;叫做漏电&#xff1b;为预防漏电对人体造成伤害&#xff0c;就产生了各种漏电保护装置&#xff0c;当电路中的漏电流超过…