【unity游戏开发之InputSystem——02】InputAction的使用介绍(基于unity6开发介绍)
文章目录
- 前言
- 一、InputAction简介
- 1、InputAction是什么?
- 2、示例
- 二、监听事件started 、performed 、canceled
- 1、启用输入检测
- 2、操作监听相关
- 3、关键参数 CallbackContext
- 4、结果
- 三、InputAction参数相关
- 1、点击齿轮
- 1.1 Actions 动作
- (1)动作类型(Action Type)
- (2)初始状态检查(Initial State Check)
- (3)控制类型(Control Type)
- 1.2 Interactions 交互方式设置
- 监听事件started 、performed 、canceled
- 相互作用设置参数
- (1)Hold 长按
- (2)Multi Tap 连击
- (3)Press 按下
- (4)SlowTap 缓慢点击
- (4)Tap 单击
- 1.3 Processors 值加工处理设置
- 2、绑定监听的输入设备按钮
- 2.1 打开绑定输入界面
- 2.2 绑定输入界面参数
- 2.3 常用的监听绑定
- 3、点击+号
- 3.1 Add Binding
- 3.2 Add Positive\Negative Binding Or Add 1D Axis Composite
- 点击1DAxis的参数
- (1)Composite Type
- (2)Which Side Wins
- 实例
- 3.3 Add Up\Down\Left\Right Composite Or Add 2D Vector Composite
- 点击2DVector的参数
- (1)Composite Type:同上
- (2)Mode:处理模式
- 实例
- 3.4 Add Up\Down\Left\Right\Forward\Backward Composite
- 3.5 Add Binding With One Modifier Composite
- 点击One Modifier参数
- (1)Composite Type:同上
- (2)Override Modifiers Need To Be Pressed First:需要首先按下覆盖修饰符
- 实例
- 3.6 Add Binding With Two Modifier Composite
- 三、Input System Package全局设置
- 1、打开Input System Package配置
- 2、参数介绍
- 2.1 UpdateMode:更新模式
- 2.2 Background Behavior:后台行为
- 2.3 Scroll Delta Behavior 滚动增量行为
- 2.4 Compensate Orientation:定向补偿
- 2.5 Default Deadzone Min:默认死区最小值
- 2.6 Default Deadzone Max:默认死区最大值
- 2.7 Default Button Press Point:默认按钮按下点
- 2.8 Button Release Threshold:按钮释放阈值
- 2.9 Default Tap TIme:默认点击时间
- 2.10 Default Slow Tap Time:默认慢速点击时间
- 2.11 Default Hold Time:默认保持时间
- 2.12 Tap Radius:点击半径
- 2.13 MultTap Delay TIme:多次点击延迟时间
- 2.14 Supported Devices:支持的设备
- 2.15 Motion Usage:动作使用
- 2.16 Description:描述
- 2.17 Play Mode Input Behavior:播放模式输入行为
- 2.18 Improved Shortcut Support:改进的快捷方式支持
- 2.19 Enable Input Consumption:启用输入消耗
- 五、补充
- 专栏推荐
- 完结
前言
在前面的学习中,我们探讨了如何通过代码监听 InputSystem 的输入,发现它的用法与旧的 InputManager 系统有很多相似之处。虽然这种方法可以直接控制和响应输入事件,但在实际开发中,直接编写大量代码来处理输入并不是最高效或最灵活的做法。
为了提供一种更加方便、直观且易于维护的方式,Unity 提供了 Input Actions 系统。它允许开发者通过配置文件(.inputactions 文件)定义和管理输入映射,并使用可视化编辑器进行调整。这种方式不仅简化了输入逻辑的实现,还提高了项目的可扩展性和团队协作效率。
不过学习Input Actions 之前,本篇先来介绍InputAction的使用。
一、InputAction简介
1、InputAction是什么?
顾名思义,InputAction是InputSystem帮助我们封装的输入动作类。
它的主要作用是不需要我们通过写代码的形式来处理输入,而是直接在Inspector窗口编辑想要处理的输入类型。当输入触发时,我们只需要把精力花在输入触发后的逻辑处理上。
我们在想要用于处理输入动作的类中,申明对应的InputAction类型的成员变量(注意:需要引用命名空间UnityEngine.InputSystem)。
2、示例
比如创建移动和开火两个输入动作
public InputAction move;
public InputAction fire;
把脚本挂载到空对象上,可以在inspector窗口编辑InputAction
二、监听事件started 、performed 、canceled
InputAction提供了三个监听事件。
1、启用输入检测
一定不要忘记了要先启用输入
public InputAction move;move.Enable();
2、操作监听相关
开始操作
move.started += StartedTestFun;private void StartedTestFun(InputAction.CallbackContext context)
{print("开始事件调用");
}
真正触发
move.performed += (context) =>
{print("触发事件调用");
};
结束操作
move.canceled += (context) =>
{print("结束事件调用");
};
3、关键参数 CallbackContext
//真正触发
move.performed += (context) =>
{print("触发事件调用");//当前状态//没有启用 Disabled//等待 Waiting//开始 Started//触发 Performed//结束 Canceled//context.phaseprint("当前状态"+context.phase);//动作行为信息 print("动作行为信息" + context.action.name);//控件(设备)信息print("控件(设备)信息" + context.control.name);//获取值//context.ReadValue<float>//持续时间print("持续时间"+context.duration);//开始时间print("开始时间"+context.startTime);
};
4、结果
三、InputAction参数相关
1、点击齿轮
1.1 Actions 动作
输入动作设置,设置检测哪些输入
(1)动作类型(Action Type)
动作类型 | 翻译 | 介绍 |
---|---|---|
Value | 值 | 监测按键数值的持续变化,例如鼠标的移动,手柄的遥感。它可以返回连续的数值,范围内的任意值都可以,比如从-1到1。 |
Button | 按钮 | 按钮类型,对按下按键做出响应。这种类型的动作很简单,只关心按钮是否被按下。它通常返回两个值:按下(1)或抬起(0)。适用于处理单一的按钮事件。 |
Pass Through | 直通 | 和Value一样,它用于持续变化的输入数据。区别在于如果有多个设备绑定这个Action,Pass Through会发送所有设备的输入。在Value和Button这两个模式下,当一个Action有多个设备的Bindings同时输入的时候,Action只会被触发程度最高的输入设备触发。(比如Move Action绑定了两个手柄的摇杆,当一个手柄向左,一个手柄向右的时候,Move Action只会响应摇杆偏移更大的手柄,忽略另一个手柄的输入。) |
关于Pass Through直通类型还有一个很重要的点,我们看看官方的解释
大概就是Value or Button比如按钮按下和抬起会先后触发started 、performed 、canceled
三个事件,但是Pass Through类型有点区别,每个值变化只会触发performed,比如按钮按下和抬起都只会触发1次performed事件
比如
这里Move就是Value or Button动作类似,Click是Pass Through类似,通过上图你应该可以明显看到区别。
(2)初始状态检查(Initial State Check)
Button和Pass Through模式下会多出一个Initial State Check选项
Action只有在Enabled之后才能被触发,但Action的Bindings可能在Enabled之前就处在非默认状态(比如在Action Enabled之前,绑定的按键已经被按下),这时候:
- 开启了Initial State Check:在Action Enabled后的下一个Update循环中Action被触发
- 未开启Initial State Check:Action不被触发
例子:
我们增加两个Action:Test1和Test2,Action Type都为Button,其中Test1不勾选Initial State Check,Test2勾选
在游戏物体上挂载以下代码
using UnityEngine;public class InitialCheckTest : MonoBehaviour
{private MyAction inputActions;private int i;void Start(){inputActions = new MyAction();}void Update(){if(i == 250){inputActions.Player.Enable();Debug.Log("Enabled!");}if(i == 251){Debug.Log("Test1:" + inputActions.Player.Test1.triggered);Debug.Log("Test2:" + inputActions.Player.Test2.triggered);}i++;}
}
点击运行并按着K和L键,5秒后,控制台输出结果如下:
Test1未勾选Initial State Check,所以无法识别出在Enable()
之前已经按下的按键
(3)控制类型(Control Type)
在使用Value或者Pass Through Types时,你会看到一个额外的选项 Control Type,表示该Value的返回值类型
控制类型 | 翻译 | 介绍 |
---|---|---|
Any | 任意 | 表示控制器返回任何类型的数据。用于处理不确定类型的数据,可以根据实际情况解析为其他具体类型。 |
Analog | 模拟 | 通常用于表示一个范围内的连续数值。适合处理模拟输入设备的数据,如摇杆或滑块,通常返回一个浮点数。 |
Axis | 一维轴浮点数 | 表示一个连续的数值范围,通常用于表示方向或力度。适合于需要表示方向或位置的输入设备,如游戏手柄的摇杆。 |
Bone | 骨骼 | 用于表示骨骼动画系统中的骨骼数据。常用于角色动画中,表示骨骼的状态或位置。 |
Delta | 增量 | 表示与前一个帧相比的变化量。用于处理需要跟踪增量变化的输入数据,如鼠标的移动量。 |
Digital | 数字 | 表示离散的状态,通常是0和1。用于处理简单的开关状态,比如按钮按下或释放的状态。 |
Double | 双精度浮点数 | 表示一个双精度浮点数,精度比普通浮点数更高。用于需要高精度数值的输入数据,如精确的位置或速度数据。 |
Dpad | 方向键 | 4四向按钮,表示方向键的状态,通常为一个离散的方向(上、下、左、右)。例如:摇杆上的D-pad |
Eyes | 眼睛 | 表示眼睛位置或方向的数据。VR相关数值,用于眼动追踪或虚拟现实中的眼睛跟踪。 |
Integer | 整数 | 表示一个整数值。用于处理离散的、可计数的输入数据,比如选择的选项编号。 |
Pose | 姿势 | 表示对象的姿态或位置。常用于虚拟现实或增强现实中,表示用户或物体的姿态数据。 |
Quaternion | 四元数 | 用于表示旋转的四元数数据。常用于3D空间中的物体旋转,避免了欧拉角的万向节死锁问题。 |
Stick | 摇杆 | 表示摇杆的输入数据,通常为二维或三维向量。用于获取摇杆的位移数据,可以表示方向和力度。 |
Touch | 触摸 | 表示触摸输入的数据。用于处理触摸屏或触摸板上的输入,通常包括触摸点的位置和压力。 |
Vector2 | 二维向量 | 表示一个二维坐标的向量。用于处理需要两个维度数据的输入,例如2D游戏中的位置或方向。 |
Vector3 | 三维向量 | 表示一个三维坐标的向量。用于处理需要三个维度数据的输入,例如3D空间中的位置或方向。 |
在这里选择对应的类型,之后在选择对应设备按键相关属性时。会根据你选择内容的不同,筛选对应内容。
比如控制类型选择了Vector2,那么在点击加号添加绑定,点击选择号设备后,只能选择返回Vector2变量类型的输入设备,比如手柄摇杆,鼠标位置等,因为进行了筛选。
假如选择了按钮类型,那么只能选择按钮返回值的输入设备,比如鼠标左键,手柄按键等。
1.2 Interactions 交互方式设置
用于特殊输入,比如点击,长按,双击等等,当满足条件时才会触发这个行为(用于设置长按时间、点击次数等等)
监听事件started 、performed 、canceled
Interactions 交互方式设置会影响三个事件Started、Performed、Canceled的触发时机,它们的使用息息相关,所以这里再强调一下。
started
:开始事件。比如点击按钮就触发该事件。performed
:触发事件。比如长按,长按1秒后就触发该事件,表示真正触发了点击按钮。canceled
:结束事件。比如松开按钮就触发该事件
举一个明显的例子,长按(手指按住1秒以上认为是长按):在按下去的瞬间触发Started,在任意时间松开触发Canceled,如果连续按压时间达到1秒触发Performed。目前了解一下就行,下面具体介绍。
相互作用设置参数
(1)Hold 长按
需要保持按压一段时间才算完成这个动作。就像前面举得例子一样。适用于需要输入设备长按执行一些特殊操作,比如长按查看物品详情信息等等。
添加完 Hold 后,看一下它的两个变量。如果默认值不能满足你的需求,取消勾选 Default 可自定义变量值。修改 Hold Time 变量一般即可满足需求。
-
Press Point
:表示一个临界点,只有过了这个值才算按下,成功按下会触发started事件,抬起触发canceled事件。取值通常在0~1
之间。如果是Button按钮,将简单地在 0(未按下)和 1(按下)之间切换,如果按钮的值等于或大于PressPoint,则认为该按钮已按下。如果是摇杆类的按钮,则表示需要推动幅度大于或大于PressPoint,则认为该摇杆被推动。默认值取0.5,通常不需要修改。 -
Hold Time
:长按时间,按下时间达到Hold Time后会立刻触发Performed。 -
Default
:如果勾选则会采用Unity提供的默认值,如果想要自定时间和临界值,请取消勾选。 -
Open Input Settings
:默认值可以点击Open Input Settings进行查看并修改,也可以“Edit→Project Settings→Input System Package
”打开查看并修改。
Default和Open Input Settings后面功能都是一样,这两项功能后续不会再讲述。
比如设置长按1秒才会触发performed事件,
(2)Multi Tap 连击
可以用于实现比如双击选中物体的功能等等。
-
Tap Count
:连击次数。 -
Max Tap Spacing
:两次点击之间的时间间隔。 -
Max Tap Duration
:每次点击的持续时间,即按下和松开按钮的这段时间。 -
Press Point
:和前面一样。
只有每次点击时间小于Max Tap Duration,且点击间隔时间小于Max Tap Spacing,点击Tap Count次,才会触发Performed。
比如前面默认情况下表示的就是,需要连击2次,且每次点击的持续时间小于0.2秒,点击之间的时间间隔小于0.75秒才算成功点击,触发Performed。
(3)Press 按下
控制按钮不同阶段的触发行为
Trigger Behavior
: 触发行为
- Press Only:在按下的时候触发Started和 Performed,在抬起的时候触发Canceled。
- Release Only:在按下的时候触发Started,在抬起的时候触发Performed和Canceled。
- Press And Release:在按下的时候触发Started和 Performed,在抬起的时候触发Performed和Canceled。
Press Point
:和前面一样。
(4)SlowTap 缓慢点击
类似Hold,他与Hold的区别是,在按住时间大于等于Max Tap Duriation的时候,并不会立刻触发performed,而是会在松开的时候才触发performed
Min Tap Duration
:按压的最短时间。Press Point
:和前面一样。
比如当前按下时间要大于0.6秒后,松开鼠标,才会触发performed事件
(4)Tap 单击
可以看做只点击一次的Multi Tap,也可以看作和前面的Hold相反。需要在一段时间内按下松开来触发。当按钮按下时,若在Max Tap Duriation时间内(小于)松开按钮,才会触发performed。
选项在Multi Tap中也有讲述。
比如要在按下后0.2秒内抬起,才算做一次点击,执行performed事件。
1.3 Processors 值加工处理设置
对返回的Value值进行加工处理,就是输入设备的值传过来后进行二次处理。如取反,限定范围等等。
这个地方会因为上边选择的Control Type不同,从而导致出现的选项也不同。
值处理加工设置 | 解释 |
---|---|
Axis Deadzone | 轴死区处理,处理浮点数值。绝对值小于最小值的任何值为 0,绝对值大于最大值的任何值为 1 或 -1。 |
Clamp | 将输入值钳制在[min,max] 之间,值类型为Float。 |
Invert | 将输入值取反(乘以-1)。应用场景,如果某方向控制键,左输入1右输入-1,我们日常的坐标系都是左为负数,右为正数,为了符合习惯可以取反。 |
Invert Vector 2 | 同上Invert。可以单独选择取反XY轴。 |
Invert Vector 3 | 同上Invert。可以单独选择取反XYZ轴。 |
Normalize | 如果最小值>=0,则将[min,max] 范围内的输入值规格化为无符号规格化形式[0,1] ,如果最小值<0,则将输入值规格化为有符号规格化形式[-1,1] 。 |
Normalize Vector 2 | 将输入向量归一化为单位向量,模长为1。比如使用摇杆控制人物移动时,我们往右前方移动,如果值为(1,1)那么就会比单纯前进(1,0)速度要快。这不是我们想要的,所以就要将输入值的模长限制为1。设置后可能会返回(0.71,0.71)其他角度类似。虽然我们通常都是通过代码.normalized 进行归一化操作,这里通过直接限制输入归一化也是一种办法。 |
Normalize Vector 3 | 同上,这是针对Vector 3数据。 |
Scale | 将输入值进行缩放。也就是将输入值乘以Scale配置的数值(Factor)。 |
Scale Vector 2 | 同上。将输入值x轴乘以x,y轴乘以y。 |
Scale Vector 3 | 同上。将输入值x轴乘以x,y轴乘以y,z轴乘以z。 |
Stick Deadzone | 摇杆死区处理,和前面的Axis Deadzone类似,不过这个处理的是Vector2值。任何幅度小于 min 的输入向量都会变为 (0,0) ,任何幅度大于 max 的输入向量都被标准化为长度 1 。摇杆或者其他设备可能存在轻微误触 或者其他原因造成的信号问题,在边缘地区不准确。处理比如将摇杆拉满到底,也就是长度为1时,人物切换为奔跑,但是因为某些原因(比如设备老旧)输入值永远在0.99f,达不到1等情况。 |
2、绑定监听的输入设备按钮
2.1 打开绑定输入界面
比如点击+号
,点击Add Binding创建一个单键输入,下面会出现一条绑定数据(ps
:这里点击+号
后的每个选择的含义下面会再具体介绍)
双击进行绑定输入
2.2 绑定输入界面参数
-
Binding
:是此处的核心,它的作用是用来对输入信号进行绑定。输入系统将Action与Control之间的连接抽象为Binding。Binding包含一条指向Control的控件路径,多个Binding可以指向同一个Control,一个Action可包含多个Binding。系统收到某个控件输入的数据时,会驱动所有绑定了该控件的Action进行响应。设备 解释 Listen 点击监听输入,快捷绑定对应不同输入 Usages 常用用法 GamePad 游戏手柄 Joystick 操纵杆 Keyboard 键盘 Mouse 鼠标 Pen 笔 Pointer 指针 Sensor 传感器 TouchScreen 触屏 Tracked Device 履带装置 XR Controller XR 控制器 XR HMD XR 头戴显示器 Other 其它 -
Interactions
和Processors
:这里的Interactions和Processor是针对当前Binding的特别设置,与前面介绍的功能一致。如果此处未进行设置,就使用上级的Interactions/Processor设置;如果进行了设置,以此处Interactions/Processor的设置为准。
2.3 常用的监听绑定
键盘按键
鼠标的移动量
鼠标屏幕位置坐标
鼠标左键
鼠标XY轴滚轮
鼠标Y轴滚轮
手柄左摇杆
3、点击+号
3.1 Add Binding
添加新的输入绑定(单按键输入)比如鼠标左右键按下
调用
public InputAction btn;void Start()
{btn.Enable();//启动输入btn.performed += (context) =>{print("触发");};
}
3.2 Add Positive\Negative Binding Or Add 1D Axis Composite
添加1D轴组合(类似Input中的水平竖直热键,返回-1~1之间的一个值)。它可以用于简单的轴输入,例如游戏中的一个方向键。
Negative
:负面按键,例如 0~-1Positive
:正向按键,例如 0~1
点击1DAxis的参数
(1)Composite Type
复合类型,不要修改,和你点击+号
添加的组合对应,下面一样的参数就不介绍了。
(2)Which Side Wins
哪一方获胜(当同时按下时如何处理 比如同时按下前进后退ws时,看ws谁获胜,可能打平)
Neither
:双方没有优先权,返回MinValue和MaxValue的中间值Positive
:正面优先,返回maxValueNegative
:负面优先,返回minValue
实例
双击下面的条可以选择监听的按键,比如下面 按S代表-1,W代表1
代码开启1D轴后,可以在Update中实时打印选择按下的值
public InputAction axis;void Start()
{axis.Enable();//启动输入
}void Update()
{print(axis.ReadValue<float>());
}
结果,因为选择了Neither,0代表不按或者ws一起按,-1代表按s,1代表按w
3.3 Add Up\Down\Left\Right Composite Or Add 2D Vector Composite
复合输入用于将两个输入轴(例如水平和垂直轴)组合成一个 Vector2。这是常用的输入类型,例如用来处理方向控制。它通常用于需要二维方向输入的场景,比如控制角色移动或视角。
Up
:上 ( 0 , 1 )Down
:下 ( 0 , -1 )Left
:左 ( -1 , 0 )Right
:右 ( 1 , 0 )
点击2DVector的参数
(1)Composite Type:同上
(2)Mode:处理模式
默认值为 Mode.DigitalNormalized。
Analog
:处理模拟输入信号,如游戏控制器的摇杆或模拟触摸输入。输入值通常是浮点数,范围在 -1 到 1 之间。可以实现按手柄摇杆的力度控制移动速度,类似带加速减速过程的效果。可能只有使用手柄才能测出效果。Digital Normalized
:处理数字输入,但以归一化形式输出,输入值在-1、0 或 1
。和前面Processors 加工处理设置的Normalize类似。比如将输入向量归一化为单位向量,模长为1,比如使用摇杆控制人物移动时,我们往右前方移动,设置后可能会返回(0.71,0.71)其他角度类似。虽然我们通常都是通过代码.normalized进行归一化操作,这里直接选择归一化输出也是一种办法。Digital
:同上,但是不进行归一化,输入值也是在-1、0 或 1
。比如使用摇杆控制人物移动时,我们往右前方移动,设置后会返回(1,1)。
实例
双击点击下方条选择监听的按键,比如键盘的上下左右键
代码开启2D轴后,可以在Update中实时打印选择按下的值
public InputAction vector2D;void Start()
{vector2D.Enable();//启动输入
}void Update()
{print(vector2D.ReadValue<Vector2>());
}
3.4 Add Up\Down\Left\Right\Forward\Backward Composite
添加3D向量组合,3d向量组合用的不多,比如获取像VR头盔在3d空间的位置
和前面2d其实用法差不多,只是得到的是xyz数据
3D和2D类似,无非是多了一维的参数,要关联多两个键而已
3.5 Add Binding With One Modifier Composite
添加带有一个复合修改器的绑定(可以理解为双组合键)。比如游戏内实现Ctrl+C、Ctrl+V功能或者实现tps游戏中按住鼠标右键再移动才能控制相机视野旋转功能。
点击One Modifier参数
(1)Composite Type:同上
(2)Override Modifiers Need To Be Pressed First:需要首先按下覆盖修饰符
如果勾选Override Modifiers Need To Be Pressed First
,则需要严格按照顺序,首先按下修饰按钮(Modifier)再按绑定按钮(Binding)才会触发。
实例
比如实现前面说的,tps游戏中按住鼠标右键再移动才能控制相机视野旋转功能,可以像下面这么绑定。
Delta[Mouse]
获取的是鼠标与前一个帧相比的变化量。即鼠标的移动量。
可以在Update中实时打印选择按下的值
public InputAction vector2D;void Start()
{vector2D.Enable();//启动输入
}void Update()
{print(vector2D.ReadValue<Vector2>());
}
效果,按住鼠标右键再移动鼠标,会打印鼠标的移动量。往上右移动是正数。
3.6 Add Binding With Two Modifier Composite
添加带有两个复合修改器的按钮(可以理解为三组合键)。实现在游戏中比如Ctrl+K+U组合键
三、Input System Package全局设置
1、打开Input System Package配置
点击按钮或手动找到InputSystem默认值的设置
可以点击创建InputSystem默认值的设置文件按钮
会创建出设置文件,可以修改设置文件的值
2、参数介绍
Input System Package全局设置一般都不会修改,做了解就行了
2.1 UpdateMode:更新模式
- Process Events In Dynamic Update:在动态更新中处理事件
- Process Events In Fixed Update:在固定更新中处理事件
- Process Events Manually:手动处理事件
2.2 Background Behavior:后台行为
注意只有在播放器设置中启用“在后台运行”时,才能更改焦点更改行为。
- Reset And Disable Non Background Devices:重置和禁用非后台设备
- Reset And Disable All Devices:重置和禁用所有设备
- Ignore Focus:忽略焦点
2.3 Scroll Delta Behavior 滚动增量行为
- Uniform Across All Platforms:所有平台统一
- Keep Platform Specific Input Range:保留平台特定的输入范围
2.4 Compensate Orientation:定向补偿
2.5 Default Deadzone Min:默认死区最小值
2.6 Default Deadzone Max:默认死区最大值
2.7 Default Button Press Point:默认按钮按下点
2.8 Button Release Threshold:按钮释放阈值
2.9 Default Tap TIme:默认点击时间
2.10 Default Slow Tap Time:默认慢速点击时间
2.11 Default Hold Time:默认保持时间
2.12 Tap Radius:点击半径
2.13 MultTap Delay TIme:多次点击延迟时间
2.14 Supported Devices:支持的设备
-
如果希望输入系统支持其可以识别的所有输入设备,请将支持的设备保留为空。
-
但是,如果您只对某一组设备感兴趣,那么在此处添加它们将缩小编辑器中显示的范围,并避免从与项目无关的设备获取输入。
-
在此处添加设备时,任何未被分类为受支持的设备都将显示在输入调试器的“不受支持的设备”下
2.15 Motion Usage:动作使用
2.16 Description:描述
2.17 Play Mode Input Behavior:播放模式输入行为
- Pointers And Keyboards Respect Game View Focus:指针和键盘遵守游戏视图焦点
- All Devices Respect Game View Focus:所有设备都遵守游戏视图焦点
- All Device Input Always Goes To Game View:所有设备输入始终进入游戏视图
2.18 Improved Shortcut Support:改进的快捷方式支持
2.19 Enable Input Consumption:启用输入消耗
五、补充
获取2d输入,我们也可以直接绑定摇杆,摇杆返回值本来就是vector2,所以我们不一定要添加2d组合键。
比如下面这种Add Binding
和 Add Up\Down\Left\Right Composite Or Add 2D Vector Composite
组合使用。实现了键盘wasd左右上下方向键和手柄摇杆都能触发输入事件响应,一般用于人物移动控制。
专栏推荐
地址 |
---|
【零基础入门unity游戏开发——C#篇】 |
【零基础入门unity游戏开发——unity通用篇】 |
【零基础入门unity游戏开发——unity3D篇】 |
【零基础入门unity游戏开发——unity2D篇】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架/工具集开发】 |
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
相关文章:
【unity游戏开发之InputSystem——02】InputAction的使用介绍(基于unity6开发介绍)
文章目录 前言一、InputAction简介1、InputAction是什么?2、示例 二、监听事件started 、performed 、canceled1、启用输入检测2、操作监听相关3、关键参数 CallbackContext4、结果 三、InputAction参数相关1、点击齿轮1.1 Actions 动作(1)动…...
Alfresco Content Services docker自动化部署操作
Alfresco Content Services docker部署文档 前提条件 在开始之前,需要确保已经安装了 Docker 和 Docker Compose。Docker 用于创建和管理容器,Docker Compose 则用于定义和运行多容器的 Docker 应用。 步骤 1. 创建目录结构 首先,创建一个…...
侧边导航(Semi Design)
根据前几次的导航栏设计,从最简单的三行导航栏到后面响应式的导航栏,其实可以在这个的基础上慢慢优化,就可以得到一个日常使用设计的导航栏。设计步骤也和之前的类似。 一、实现步骤 1、先下载安装好npm install douyinfe/semi-icons 2、引…...
Ubuntu下让matplotlib显示中文字体
文章目录 安装中文字体显示matplotlib库的字体文件夹删除matplotlib 的缓存文件(可选) matplotlib中设置字体,显示! 参考文章: https://zodiac911.github.io/blog/matplotlib-chinese.html Ubuntu下python的matplotli…...
Linux 磁盘管理
Linux 磁盘管理 引言 磁盘管理是操作系统管理中的一项重要内容,对于Linux系统而言,磁盘管理更是基础中的基础。随着数据量的不断增加,合理地管理和利用磁盘资源显得尤为重要。本文将详细介绍Linux磁盘管理的基本概念、工具和策略,旨在帮助Linux用户和系统管理员更好地掌握…...
解决CentOS9系统下Zabbix 7.2图形中文字符乱码问题
操作系统:CentOS 9 Zabbix版本:Zabbix7.2 问题描述:主机图形中文字符乱码 解决方案: # 安装字体配置和中文语言包 sudo yum install -y fontconfig langpacks-zh_CN.noarch # 检查是否已有中文字体: fc-list :lan…...
Spring MVC (三) —— 实战演练
项目设计 我们会将前端的代码放入 static 包下: 高内聚,低耦合 这是我们在实现项目的设计思想,一个项目里存在很多个模块,每一个模块内部的要求类与类、方法与方法要相互配合紧密联系,这就是高内聚,低耦合…...
地下排水管道损害缺陷检测数据集VOC+YOLO格式2051张6类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2051 标注数量(xml文件个数):2051 标注数量(txt文件个数):2051 …...
读写和解析简单的 nc 文件
NetCDF 文件格式在气象数据工程领域占据着举足轻重的地位,其结构灵活、强兼容性等优势使其成为该领域的一个标准。无论是从事学术研究还是工程实践,掌握这种数据格式变得越发重要。其次,我注意到目前社区中气象编程大多数课程都聚焦于某个特定…...
【北京大学 凸优化】Lec1 凸优化问题定义
【北京大学 凸优化】Lec1 凸优化问题定义 前言优化问题的分类连续优化问题离散优化问题组合优化问题变分(Variational)优化问题基于限制条件的分类基于凸性的分类 前言 马上快要过年了,天气自然寒冷起来,空气中也理所当然的弥漫着…...
Spring Boot Actuator 集成 Micrometer(官网文档解读)
目录 概述 实现 Observation 可观测性 Observation 功能核心类 ObservationPredicate GlobalObservationConvention ObservationFilter ObservationHandler ObservationRegistryCustomizer Observation 相关注解 多线程处理机制 配置上下文传播 常用标签配置 Open…...
图的矩阵表示
一、邻接矩阵 长度为k的通路条数:A的k次方矩阵的所有元素和 长度为k的回路条数:A的k次方矩阵的对角线元素和 二、可达矩阵 计算使用布尔乘积 三、关联矩阵...
SpringCloud两种注册中心
SpringCloud 基本概念 系统架构 我们之前做的所有的项目都属于单体架构,下面我们将要学习更适合大型项目的分布式架构 单体架构: 将业务的所有功能几种在一个项目中开发,打成一个包部署。 优点:架构简单、部署成本低 缺点&am…...
【中间件快速入门】什么是Redis
现在后端开发会用到各种中间件,一不留神项目可能在哪天就要用到一个我们之前可能听过但是从来没接触过的中间件,这个时候对于开发人员来说,如果你不知道这个中间件的设计逻辑和使用方法,那在后面的开发和维护工作中可能就会比较吃…...
Pandas基础02(DataFrame创建/索引/切片/属性/方法/层次化索引)
DataFrame数据结构 DataFrame 是一个二维表格的数据结构,类似于数据库中的表格或 Excel 工作表。它由多个 Series 组成,每个 Series 共享相同的索引。DataFrame 可以看作是具有列名和行索引的二维数组。设计初衷是将Series的使用场景从一维拓展到多维。…...
适配Android16
Android16新特性 Android 16带来了许多新特性和改进,提升了系统的流畅度、用户体验和安全性。对于应用开发者来说,适配Android 16可以确保应用在该版本上的兼容性和性能,同时也可以利用其新特性为用户提供更好的服务。以下是Android 16的一些…...
.NET MAUI进行UDP通信(二)
上篇文章有写过一个简单的demo,本次对项目进行进一步的扩展,添加tabbar功能。 1.修改AppShell.xaml文件,如下所示: <?xml version"1.0" encoding"UTF-8" ?> <Shellx:Class"mauiDemo.AppShel…...
生信软件管家——conda vs pip
pip vs conda: 安装过python包的人自然两种管理软件都用过, Pip install和Conda install在Python环境中用于安装第三方库和软件包,但它们在多个方面存在显著的区别 总的来说: pip是包管理软件,conda既是包管理软件&…...
从替代到覆盖:暴雨信创服务器打开市场新局面
进入2025年,全球局势更加变幻莫测,高科技领域越来越受到全球局势影响。美国前任总统拜登在卸任前,特别颁布限制GPU产品出口法案。新任总统特朗普上任第一天,废除了多项之前法案,但显示技术交流的内容一条没变。 在如此艰难的局面下,我国信创市场的发展显得尤为重要,国家也从政策…...
HTML5 常用事件详解
在现代 Web 开发中,用户交互是提升用户体验的关键。HTML5 提供了丰富的事件机制,允许开发者监听用户的操作(如点击、拖动、键盘输入等),并触发相应的逻辑处理。本文将详细介绍 HTML5 中的常用事件,包括鼠标…...
使用 Pipeline 提高 Redis 批量操作性能
使用 Pipeline 提高 Redis 批量操作性能 在 Redis 中,Pipeline(管道) 是一种用于提高批量操作性能的技术。它允许客户端一次性发送多个命令到 Redis 服务器,而不需要等待每个命令的单独响应,从而减少了**网络往返&…...
ElasticSearch-文档元数据乐观并发控制
文章目录 什么是文档?文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES,最近在检索资料的时候翻阅到了 ES 的官方文档,里面对 ES 的基础与案例进行了通俗易懂的解释,读下来也有不少收获࿰…...
每日一题--合并二叉树
合并二叉树 问题描述 已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:如果节点存在于两棵树中,则将节点值相加;如果某个节点在一棵树中不存在,则直接使用另一棵树的节点值。例如: 两颗二叉树如下&a…...
【喜讯】海云安荣获“数字安全产业贡献奖”
近日,国内领先的数字化领域独立第三方调研咨询机构数世咨询主办的“2025数字安全市场年度大会”在北京成功举办。在此次大会上,海云安的高敏捷信创白盒产品凭借其在AI大模型技术方面的卓越贡献和突出的技术创新能力,荣获了“数字安全产业贡献…...
数字转中文大写JAVA
一般在收据打印过程中,可能会要求展示中文大写金额,以下提供两种实现。 1正常代码逻辑处理 优点:易理解,好维护 缺点:代码较长 package com.test;import java.math.BigDecimal;public class NumberToChinese {priv…...
如何使用 pytest-html 创建自定义 HTML 测试报告
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 测试 Python 代码对于提高代码质量、检测漏洞或意外行为至关重要。 但测试结果又该…...
思科交换机telnet配置案例
目录 1.telnet简述2.网络拓扑3.设备说明4.网络配置4.1 电脑PC ip设置4.2 网络交换机telnet配置 5.小结 1.telnet简述 Telnet是远程登录服务的一个协议,该协议定义了远程登录用户与服务器交互的方式。它允许用户在一台联网的计算机上登录到一个远程分时系统中&#…...
LabVIEW进行可靠性测试时有哪些常见的问题
在进行LabVIEW开发和测试时,尤其是用于可靠性测试,可能会遇到一些常见的问题。以下是一些常见问题及其解决方法: 1. 数据采集卡与硬件兼容性问题 问题描述:某些数据采集卡(DAQ)与硬件设备的兼容性问题可能…...
三年级数学知识边界总结思考-下册
目录 一、背景二、过程1.位置与方向小学三年级课本上位置与方向的知识点、由来、作用和意义一、位置与方向的知识点二、位置与方向的由来三、位置与方向的作用和意义 2.复试统计表小学三年级课本上复式统计表的知识点、由来、作用和意义一、复式统计表的知识点二、复式统计表的…...
假期学习【Java程序】的实施方案
一、前期准备 1.1 设定明确的学习目标 在假期开始之前,明确学习Java的具体目标至关重要。这些目标应该具体、可衡量且符合实际。例如,如果你是初学者,可以设定目标为掌握Java的基础语法、理解面向对象编程的核心概念,并能够编写…...
Java 大视界 -- Java 大数据中的知识图谱构建与应用(62)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Macos下交叉编译安卓的paq8px压缩算法
官方没有android的编译方法,自己编写脚本在macos下交叉编译. 下载源码: git clone https://github.com/hxim/paq8px.git 稍旧的ndk并不能编译成功,需要下载最新的ndkr27c, 最后是使用clang来编译。 编译build.sh export ANDROID_NDK/Vol…...
npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported
vue 启动项目时,npm run serve 报下面的错: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at FSReqCallback.readFileAfterClose [as on…...
设计模式-建造者模式、原型模式
目录 建造者模式 定义 类图 优缺点 角色 建造者模式和工厂模式比较 使用案例 原型模式 定义 类图 优缺点 应用场景 应用类型 浅克隆 深克隆 建造者模式 定义 将一个复杂的对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,…...
Android vendor.img中文件执行权问题
问题 Android 9、11往vendor.img增加文件,烧写到设备后发现增加的可执行文件没有执行权限。经过漫长查找,终于找到了问题的根源,谨以此篇献给哪些脚踏实地的人们。 根本原因 system/core/libcutils/fs_config.cpp文件,fs_confi…...
MATLAB 如何避免复杂shp文件对inpolygon的影响
**任务描述:**当我想用inpolygon函数将属于非洲的pixel选出来时,发现因为周边小岛的影响,pixel选取有问题,如下图。 第一种解决办法: 首先将复杂shp文件查分成简单的shp文件,即将不相交的元素分离开 [QGIS…...
Golang Gin系列-8:单元测试与调试技术
在本章中,我们将探讨如何为Gin应用程序编写单元测试,使用有效的调试技术,以及优化性能。这包括设置测试环境、为处理程序和中间件编写测试、使用日志记录、使用调试工具以及分析应用程序以提高性能。 为Gin应用程序编写单元测试 设置测试环境…...
【论文阅读】Equivariant Diffusion Policy
Northeastern University 2Boston Dynamics AI Institute 摘要 近期研究表明,扩散模型是一种有效的方法,可用于在行为克隆中学习由演示数据产生的多模态分布。然而,这种方法的一个缺点是需要学习去噪函数,这比学习显式策略要复杂…...
[ACTF2020 新生赛]BackupFile1
题目 翻译,尝试找出源文件! 扫目录使用参数-e * python dirsearch.py -u http://0c3b21c0-d360-4baa-8b97-aa244f4c4825.node5.buuoj.cn:81/ -e * 最终扫描到一个文件名为:/index.php.bak的文件,把备份文件下载下来 源码 <?…...
手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)
手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍) 目录 手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)DDPM 原理图Stable Diffusion 原理Stable Diffusion的原理解释Stable Diffusion 和 Diffus…...
ASP.NET Core WebAPI的异步及返回值
目录 Action方法的异步 Action方法参数 捕捉URL占位符 捕捉QueryString的值 JSON报文体 其他方式 Action方法的异步 Action方法既可以同步也可以异步。异步Action方法的名字一般不需要以Async结尾。Web API中Action方法的返回值如果是普通数据类型,那么返回值…...
doris: CSV导入数据
本文介绍如何在 Doris 中导入 CSV 格式的数据文件。Doris 支持灵活的 CSV 格式配置,包括自定义分隔符、字段包围符等,并提供多种导入方式以满足不同场景的数据导入需求。 导入方式 Doris 支持以下方式导入 CSV 格式数据: Stream LoadBro…...
数据标注开源框架 Label Studio
数据标注开源框架 Label Studio Label Studio 是一个开源的、灵活的数据标注平台,旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据(如文本、图像、音频、视频等)以及复杂的标注任务(如分类、命名实体…...
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
什么是中间件? 在 Next.js 中,中间件(Middleware)是一种用于处理每个传入请求的功能。它允许你在请求到达页面之前对其进行修改或响应。 通过中间件,你可以实现诸如日志记录、身份验证、重定向、CORS配置、压缩等任务…...
js/ts数值计算精度丢失问题及解决方案
文章目录 概念及问题问题分析解决方案方案一方案二方案其它——用成熟的库 概念及问题 js中处理浮点数运算时会出现精度丢失。js中整数和浮点数都属于Number数据类型,所有的数字都是以64位浮点数形式存储,整数也是如此。所以打印x.00这样的浮点数的结果…...
Linux之Tcp粘包笔记
目录 一.网络传输四层模型 二.数据传输中数据包传输的两个限制概念 三.数据传输的中粘包问题 四.数据组装的原因 Nagle算法原理: 五.关闭Nagle优化处理粘包问题吗? 六.粘包处理方法 a.设置消息边界: b.定义消息长度: 七.UDP是否会出…...
StarRocks 安装部署
StarRocks 安装部署 StarRocks端口: 官方《配置检查》有服务端口详细描述: https://docs.starrocks.io/zh/docs/deployment/environment_configurations/ StarRocks架构:https://docs.starrocks.io/zh/docs/introduction/Architecture/ Sta…...
【深度学习|迁移学习】渐进式学习策略 (Progressive Learning Strategy)详述(一)
【深度学习|迁移学习】渐进式学习策略 (Progressive Learning Strategy)详述(一) 【深度学习|迁移学习】渐进式学习策略 (Progressive Learning Strategy)详述(一) 文章目录 【深度学习|迁移学习】渐进式学习策略 (Progressive L…...
关注搜索引擎蜘蛛压力
以前在建站的时候,他们说蜘蛛来抓取的频率越多越好,因为蜘蛛来抓取说明了网站更新速度快,受搜索引擎的欢迎,但是在最近的网站统计中,发现很多蜘蛛爬取的频次非常的高,比如有的蜘蛛一天能来网站几万次&#…...
Windows上通过Git Bash激活Anaconda
在Windows上配置完Anaconda后,普遍通过Anaconda Prompt激活虚拟环境并执行Python,如下图所示: 有时需要连续执行多个python脚本时,直接在Anaconda Prompt下可以通过在以下方式,即命令间通过&&连接,…...