Unity InputSystem (二)

news2024/11/18 17:32:26

InputActionAssets 是包含输入操作以及其关联的绑定和控制方案的资源,文件以 .inputactions 文件扩展名存储,并且是以纯 json 文件存储的。
![[Pasted image 20230407135340.png]]

创建 InputActionAssets 文件

![[1680846629618.png]]

在 Assets 窗口内选择创建 InputActions 文件

ControlSchemes

控制的解决方案(个人的理解是针对平台来提高解决方案),用于关联Action同时对设备相对应的Action进行分类。InputSystem会根据设备类型自动切换方案。
![[Pasted image 20230407152526.png]]

InputActionAssets 编辑窗口分为三个窗格:
1. ActionMaps 列出了资产中的操作映射。每个操作映射都是可以批量启用或禁用的操作
2. 中间窗格包含当前所选操作映射中的操作,以及与每个操作关联的绑定。
3. 右窗格包含当前选定的操作或绑定的属性。

ActionMaps

行为集合,用于将输入信号转换为Action(配置某个行为),点击右侧加号可创建Action。
何时需要多个 ActionMaps
比如一个吃鸡游戏,有行走状态、驾驶汽车的状态、在界面上的状态。

这时我们就需要为这些状态各自配置独立的Action Map去控制操作。如,为行走状态配置ActionMap映射移动(wasd)、跳跃(空格),同时你又需要另一个Action Maps 用于控制驾驶 映射开车(wasd)、跳车(空格)。

这两种操作之间可能会发生按键冲突,你可以在不同的状态下切换Action Maps从而满足游戏需求。

Action

Add Binding:普通的绑定,可以绑定一个信号。
Add Positive \ Negatyite Binding 一维绑定,两个按钮的组合,返回值为float
Add Up\Down\Left\Right Composite 二维绑定, 四个按钮的组合,返回值为 vector2,例如WASD
ADD Up\Down\Left\Right\Forward\Backward Composite 返回值为 vector3.
Add Button With One Modifier Composite:需要同时按下两个按钮的组合,例如ctrl+1
Add Button With Two Modifier Composite:需要同时按下三个按钮的组合,例如shift+ctrl+1
![[1680852723753.png]]

Action Type

Value :主要用于状态连续变化的输入,例如鼠标的移动,遥感。
Button :用于每次按下时触发的Action
Pass-Through :类似于Value,区别在于多个设备都绑定这个Action,Pass-Through会发送执行所有设备的输入

Interactions

(交互)主要用于一些特殊的输入模式,例如其中的Hold模式,要求控件至少保持的时间。
可以在Action或者Binding下设置它,如果在Action下设置,那么该Action下的每个Binding都会在达成条件下触发这个Interaction。如果在同一个Action或Binding上绑定多个Interaction,则会按照其顺序进行检测。

Default

当Action Type为Value或Button时,当输入设备响应会调用started回调(例如按钮按下,或者鼠标开始拖动),当设备响应中时会调用performed回调(在started后触发,调用一次。若为Value的话,当值发生变化会再次触发,例如遥感,按住之后每次偏移位置都会触发一次),当输入设备结束响应会调用canceled回调(例如按钮松开,或者鼠标停止拖动)。当Action Type为PassThrough的时候,只会调用performed回调。

Press

可以实现类似按钮的操作
Press Only 按下的时候触发started和performed。不触发canceled
Release Only 按下的时候触发started,松开的时候触发performed。不触发canceled
Press And Release 按下的时候触发started和performed,松开的时候会再次触发started和performed。不触发canceled

Press Point

在Input System中,每个按钮都有对应的浮点值,例如普通的按钮,将会在0(未按下)和1(按下)之间。因此我们可以利用这个值(Press Point)来进行区分,当大于等于这个值则认为按钮按下了。

Hold

适用于需要输入设备保持一段时间的操作。当按钮按下会触发started,若在松开按钮前,按住时间大于等于Hold Time则会触发performed(时间一到就触发),否则触发canceled。

Tap

和Hold相反,需要在一段时间内按下松开来触发。当按钮按下会触发started,若在Max Tap Duriation时间内(小于)松开按钮,触发performed,否则触发canceled。

SlowTap

类似Hold,但是它在按住时间大于等于Max Tap Duriation的时候,并不会立刻触发performed,而是会在松开的时候才触发performed

MultiTap

用作于多次点击,例如双击或者三连击。Tap Count为点击次数,Max Tap Spacing为每次点击之间的间隔(默认值为 2 * Max Tap Duration)。Max Tap Duration为每次点击的持续时间,即按下和松开按钮的这段时间。当每次点击时间小于Max Tap Duration,且点击间隔时间小于Max Tap Spacing,点击Tap Count次,触发performed。

Processors

输入处理器获取一个值并为其返回处理结果。接收的值和结果值的类型必须相同

Unity 提供的预定义处理器有以下几类

Clamp

将输入值固定在 […] 范围内。min max

Invert

反转 action 中的值(即,将值乘以 -1)。

Invert Vector 2

反转 Vector2 X,Y 取反

Invert Vector 3

反转 Vector3 X,Y,Z 取反

Normalize

归一化

Normalize Vector 2

将输入向量规范化为单位长度,与 Vector2.normalized 相同

Normalize Vector 3

将输入向量规范化为单位长度,与 Vector3.normalized 相同

Scale Vector 2

将所有输入值乘以倍数

Scale Vector 3

将所有输入值乘以倍数

Axis deadzone

限定轴的范围,

Stick deadzone

自定义 Processors

自定义类型继承 InputProcessor<TValue> 类,并实现 Process 方法 ,并将 自定义Processors 注册进 InputSystem 中

# if UNITY_EDITOR
[InitializeOnLoad]
# endif
public class MyValueShiftProcessor : InputProcessor<float>
{
    public float valueShift = 0;

	#if UNITY_EDITOR
    static MyValueShiftProcessor()
    {
        Initialize();
    }
    #endif
    
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    static void Initialize()
    {
        InputSystem.RegisterProcessor<MyValueShiftProcessor>();
    }

    public override float Process(float value, InputControl control)
    {
        return value + valueShift;
    }
}

如果需要将自定义 Processors 用于 InputActionAssets 面板,需要为 Processors 创建 Editor 代码

// No registration is necessary for an InputParameterEditor.
// The system will automatically find subclasses based on the
// <..> type parameter.
#if UNITY_EDITOR
public class MyValueShiftProcessorEditor : InputParameterEditor<MyValueShiftProcessor>
{
    private GUIContent m_SliderLabel = new GUIContent("Shift By");

    public override void OnEnable()
    {
        // Put initialization code here. Use 'target' to refer
        // to the instance of MyValueShiftProcessor that is being
        // edited.
    }

    public override void OnGUI()
    {
        // Define your custom UI here using EditorGUILayout.
        target.valueShift = EditorGUILayout.Slider(m_SliderLabel,
            target.valueShift, 0, 10);
    }
}
#endif

PlayerInput

Actions:InputActions配置文件

Default Scheme:一个默认的控制方案

Auto-Switch:运行过程中自动根据设备输入选择方案

Default Map:默认的映射集合

Behavior:事件调用方式类型

  1. SendMesssages
    使用Unity自带的SendMessage消息机制,查找并回调当前游戏对象所挂脚本中的回调函数。对应Action的回调函数为On+”Action的名字“。
  2. BroadcastMessages
    使用Unity自带的SendMessage消息机制,向当前游戏对象及层次结构中向下的所有游戏对象查找并回调所挂脚本中的回调函数。回调函数规则同SendMessages
  3. Invoke UnityEvents
    采用UnityEvent配置每个Action的回调函数,允许你自定义回调函数方法名
  4. Invoke C Sharp Events
    与UnityEvents类似,只是这些事件是 API 上可用的普通 C# 事件。无法从 editor 配置这些。相反,必须在脚本中的手动为事件注册回调。

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

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

相关文章

上市公司杰创智能携手甄云,启动供应链采购数字化升级

近日&#xff0c;A股上市企业杰创智能科技股份有限公司&#xff08;以下简称“杰创智能”&#xff09;联合甄云科技举办数字化采购管理项目启动会&#xff0c;双方企业高层、相关部门负责人及项目团队成员参加了此次活动。 会上&#xff0c;就杰创智能的数字化采购管理系统建设…

Flink Table API 和 Flink-SQL使用详解

Flink Table API 和 Flink-SQL使用详解 1.Table API & Flink SQL-核心概念 ​ Apache Flink 有两种关系型 API 来做流批统一处理&#xff1a; Table API Table API 是用于 Scala 和 Java 语言的查询API&#xff0c;它可以用一种非常直观的方式来组合使用选取、过滤、join…

2023-04-21 学习记录--C/C++-实现升序降序(冒泡法/沉底法)

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、冒泡法(沉底法) —— 升序 ⭐️ &#xff08;一&#xff09;、思路 从左到右&#xff1a; 1、第一个与第二个比较&#xff0…

Ceph入门到精通-Ceph之对象存储网关RADOS Gateway(RGW)

一、Ceph整体架构及RGW在Ceph中的位置 1.Ceph的整体架构 Ceph是一个统一的、分布式的的存储系统&#xff0c;具有优秀的性能、可靠性和可扩展性。Ceph支持对象存储&#xff08;RADOSGW&#xff09;、块存储&#xff08;RBD&#xff09;和文件存储&#xff08;CephFS&#xff…

asp.net+C#医院人事办公自动化OA系统设计

3.3.2 普通用户 普通用户只能查看自己的信息&#xff0c;修改登录密码&#xff0c;查看通知公告信息&#xff0c;公文发送信息&#xff0c;下载办公文件&#xff0c;邮件发送接收&#xff0c;会议记录信息管理&#xff0c;留言交流等功能。办公OA系统主要的功能是实现员工资料的…

【OS实验】【学习笔记】

文章目录 零、实验参考实验1 熟悉实验环境实验2 操作系统的引导实验3 系统调用实验4 进程运行轨迹的跟踪与统计实验5 基于内核栈切换的进程切换实验6 信号量的实现和应用实验7 地址映射与共享实验8 终端设备的控制实验9 proc文件系统的实现Reference 零、实验参考 &#x1f52…

SpingBoot使用Mybatis-Plus操作多数据源,同时操作sqlserver和mysql

目录 需求场景 需求逻辑&#xff1a; 难点&#xff1a; 说明&#xff1a; 代码 pom.xml依赖只贴sqlserver的 文件目录 yml配置文件 DataSource自定义注解 DataSourceAspect类文件 DruidConfig类 DruidProperties类 DynamicDataSource DynamicDataSourceContextHo…

03-java数组的使用

概念 数组就是存储数据长度固定的容器&#xff0c;存储多个数据的数据类型要一致。 数组的定义格式 // 第一种格式 // 数据类型[] 数组名 int[] arr; double[] arr; char[] arr;// 第二种格式 // 数据类型 数组名[] int arr[]; double arr[]; char arr[];数组…

记录解决Maven依赖冲突导致的NoSuchMethodError问题的过程

摘要 本文记录了解决 Maven 依赖冲突导致的 NoSuchMethodError 问题的过程。问题出现的原因是多个库包含了 Jackson 库&#xff0c;导致 Jackson 序列化与反序列化时出现 NoSuchMethodError 异常。通过查看依赖树&#xff0c;排除冲突库的方法&#xff0c;最终成功解决了该问题…

在职读研理论结合实践,社科院与杜兰大学金融管理硕士助你完成质的飞跃

我们知道&#xff0c;学习不能停留在理论层面&#xff0c;要用于实践才能真正的消化吸收。学习的目的在于运用&#xff0c;实践是检验学习成果的练兵场。社科院与杜兰大学金融管理硕士项目的课程中美授课教师在项目管理委员会的指导下&#xff0c;负责制订金融管理硕士教学方案…

【工程化】之5分钟发布一个Npm包

NPM是一个包管理器&#xff0c; 为js开发人员提供可以在项目中使用的模块&#xff0c;业界有很多流行的开源库&#xff0c;如Lodash&#xff0c;在我们内部也免不了通过对能力的封装打包&#xff0c;快速复用到其他地方去&#xff0c;使用NPM包很简单。您只需使用NPM安装包&…

SHELL中for循环和IF判断的使用

1。编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如: test1、test2、test3、.....、 test10 2.编写脚本for2.sh,使用for循环,通过ping命令测试网段的主机连通性&#xff0c;网段前3段由用户输…

stable- diffusion新版本V2效果有提升吗?

之前版本是最初版本&#xff0c;不是V2&#xff0c;那么这里就新版本V2进行系列试验&#xff0c;如下&#xff0c;附代码及link 1、text2img from diffusers import StableDiffusionPipeline, DPMSolverMultistepSchedulermodel_id "stabilityai/stable-diffusion-2-1&…

在android项目上集成libyuv库以及使用libyuv库完成camera的缩放,旋转,翻转,裁剪操作

目录 一、下拉google官方的libyuv库代码 二、在android项目中集成libyuv库 1.环境配置 2.拷贝libyuv源码文件 ​编辑3.配置cmake libyuv相关的链接编译等 三、使用libyuv库 1.libyuv库完成camera的旋转 2.libyuv库实现翻转 3.libyuv库实现缩放 4.libyuv库实现裁剪 一…

九龙证券|多巨头竞相布局这个热门赛道,机构一致看好的概念股

华为高阶智能驾驭体系ADS 2.0版本发布。 早前&#xff0c;华为在2023华为智能轿车解决方案发布会上&#xff0c;发布了高阶智能驾驭体系 ADS 2.0。新体系将由 AITO 问界 M5 高阶智能驾驭版首发&#xff0c;并已适配阿维塔 11 全系列以及极狐阿尔法 S 全新 Hi 版等车型。 最近&…

JDBC(java数据库连接)—MySQL

文章目录 1.定义2.优势3.环境准备4.使用jdbc&#xff08;java程序操作数据库&#xff09;5.使用jdbc的操作步骤 1.定义 jdbc是一种用于执行SQL语句的java api&#xff0c;它是java中的数据库连接规范&#xff0c;为java开发人员操作数据库提供了一个标准的api&#xff0c;可以…

【Linux】系统文件接口

目录 一、C文件接口 1、fopen 2、fprintf 3、snprintf 二、系统文件IO 1、open 2、write 3、read 4、C文件接口与系统文件IO的关系 一、C文件接口 1、fopen FILE *fopen(const char *path, const char *mode); fopen 函数返回值类型为 FILE 。参数列表中&#xff0c…

优加DaaS背后,看见新的营销潮

DaaS、融合开放&#xff0c;这是京东云优加对外传递出来的两个最清晰的声音。前者对应的是能力和边界&#xff0c;后者对应的是态度和打法。两者结合&#xff0c;恰构成了京东云优加&#xff0c;或者说京东在营销侧的未来想象力。 作者|皮爷 出品|产业家 “今年我们有接近60%以…

第五章 工厂模式

文章目录 一、简单工厂模式1、传统方式实现披萨订购( 可以忽略)披萨父类 Pizza子类胡椒披萨 PepperPizza子类印度披萨 GreekPizza订购披萨 OrderPizza订购披萨的 客户端 PizzaStore运行结果传统的方式的优缺点&#xff0c;新增子类需要修改的地方牵扯太多传统方式的究极耦合 2、…

YOLOv8 更换骨干网络之 MobileNetV3

论文地址:https://arxiv.org/abs/1905.02244 代码地址:https://github.com/xiaolai-sqlai/mobilenetv3 我们展示了基于互补搜索技术和新颖架构设计相结合的下一代 MobileNets。MobileNetV3通过结合硬件感知网络架构搜索(NAS)和 NetAdapt算法对移动设计如何协同工作,利用互…