增强输入(Enhanced Input)
使用Enhanced Input插件
对比操作映射和轴映射系统,增强输入系统有着更多的灵活性和控制能力
增强输入系统有着高度定制的优点,可以定义输入的优先级和条件,可以控制更复杂的游戏输入
增强输入系统可以创建很多套(Input Mapping Context)
创建Input Action输入提供给Input Mapping Context进行绑定使用
Input Action的关键属性为值类型
在使用输入前,需要为蓝图的控制器类激活并指定一个输入映射情景:
获取控制器引用(需要cast)
获得该引用的增强输入本地玩家子系统(Enhanced Input Local Player Subsystem)
判断该子系统是否有效(Is Valid)
有效则添加映射上下文(Add Mapping Context)
触发的概念及顺序:
按下(started)-按住(triggered)-抬起(completed)
引脚:
Triggered:根据触发器的类型决定其触发行为(默认为tick),在Started执行完后才会开始执行
Started:按下时会触发一次,最先开始执行
Ongoing:在触发前执行,需要定义触发器
Canceled:在触发取消时执行,需要定义触发器
Completed:在触发完成后执行(按键抬起),最后执行
值类型引脚:分为Bool型、浮点型、向量型,其值的值与当前触发状态有关
Elapsed Seconds:触发按键后的计时,触发完成或中断后会停止
Triggered Seconds:触发按键后的计时,触发完成后会停止
Input Action:返回对于的Input Action引用
触发器(均可设置驱动阈值)
驱动阈值:用于有力反馈的输入设备,只有输入的力超出设定的驱动阈值时才会触发的限定值,一般范围为(0,1],超出范围时会出现错误
时间膨胀:时间的流动速度
下移:
先执行Started,后在按下时以tick的方式执行Triggered,松开时执行Completed。
已按下:
先执行Started,后只执行一次Triggered,随后立马执行Completed。
已松开:
先执行Started,后在按下时以tick的方式执行Ongoing,松开按键时只执行一次Triggered,随后执行Completed。
弦操作:
需要绑定一个输入行为作为弦操作,当弦操作触发时,才能执行该触发器的行为。
先执行Started,后在按下时以tick的方式执行Triggered,松开时执行Completed。
注意:当绑定的弦操作正在触发Triggered时,此时进行该修改器的触发行为会终止绑定的弦操作的触发行为,但是仍然保持其触发状态
点按:
先执行Started,会检测按键按下的时间是否小于设置的点按释放时间阈值,在检测期间会一直以tick的方式执行Ongoing,当在阈值内抬起按键则会执行一次Triggered,随后立马执行Completed(成功触发),否则不会执行Triggered,会直接执行Canceled(中断触发)。
点按受到时间膨胀的影响
组合(Beta):
分为组合操作和取消操作
可绑定多个输入行为,按下按键后先执行Started,会在该期间以tick的方式执行Ongoing,在该按键的规定时间内按下其他组合的按键(不能同时)则执行一次Triggered,随后执行一次Completed,否则执行Canceled
可设置按键的时间
脉冲:
按下后先执行Started,会根据设定的间隔间歇式地执行一次Triggered,在等待阶段会以tick的方式执行Ongoing,在Triggered执行完后松开按键则执行Completed,若在等待阶段松开按键则执行Canceled。
当设置了触发限制的次数后,该脉冲输入会在执行对应的Triggered次数后,自动执行Completed
脉冲受到时间膨胀的影响
长按:
按下后先执行Started
按下的时间在保存时间阈值以内时则会以tick的方式执行Ongoing
当按下的时间大于保存时间阈值时则会以tick的方式执行Triggered,此时松开按键则会执行Completed,若小于,则直接执行Canceled
当设置为一次性时,在按下的时间等于保存时间的阈值时,会执行一次Triggered,随后会执行Completed
长按受到时间膨胀影响
可设定保存时间阈值和为一次性
长按和松开:
按下后先执行Started
按下时则会以tick的方式执行Ongoing
松开时,当按下的时间大于保存时间阈值时,则会执行一次Triggered,随后会执行Completed;当按下的时间小于保存时间阈值时,则直接执行Canceled
长按和松开受到时间膨胀影响
可设定保存时间阈值
与操作映射的区别:
可以进行连续触发,可以获得值类型的值、触发后的状态
与轴映射的区别:
可以利用输入行为的值类型来将不同轴的输入集合起来,以不同类型的形式输出