您观察得非常仔细!这是一个非常典型的 “轴向转换”和“输入归一化” 的应用案例。
W和 S需要 Swizzle Input Axis Values(YXZ),而 A和 D不需要,核心原因在于 “移动输入的逻辑轴绑定方式” 和 “二维摇杆到键盘按键的映射策略”。简单来说:开发者正在用一套设置,同时适配“键盘(按键)”和“手柄(摇杆)”两种输入方式,并确保它们的行为一致。
核心原因解析
-
输入源的差异:
-
手柄左摇杆:是一个二维模拟输入设备,输出一个
(X, Y)向量。往前推,Y为正;往后拉,Y为负;往左推,X为负;往右推,X为正。 -
键盘 WASD:是四个独立的数字(二值)按键,每个按键通常只输出
0.0或1.0(按下时)。
-
-
UE增强输入的常见绑定模式:在增强输入系统中,开发者通常会为“移动”创建一个名为
Move 的Input Action,并将其类型设置为Value Type = Axis2D(二维向量)。-
这个
Move动作可以同时被多个输入源触发:-
绑定1:手柄左摇杆 -> 直接输出
(X, Y)向量。 -
绑定2:键盘 W 键 -> 期望输出
(0.0, 1.0)向量(表示向前)。 -
绑定3:键盘 S 键 -> 期望输出
(0.0, -1.0)向量(表示向后)。 -
绑定4:键盘 A 键 -> 期望输出
(-1.0, 0.0)向量(表示向左)。 -
绑定5:键盘 D 键 -> 期望输出
(1.0, 0.0)向量(表示向右)。
-
-
-
问题所在:轴向错位
-
对于
A和D键,它们很自然地被映射到了Move这个Axis2D动作的X分量上。按下D,X = 1.0;按下A,X = -1.0。Y分量保持为0.0。这非常直观,不需要任何修饰。 -
但对于
W和S键,按直觉应该映射到Move动作的Y分量。按下W,Y = 1.0;按下S,Y = -1.0。 -
然而,在底层,键盘的每个键默认可能被当作一个一维轴向(
Axis1D)输入来处理,并且这个默认轴向可能被关联为X。也就是说,当按下W键时,它默认产生的原始数据是(X=1.0, Y=0.0, Z=0.0),而不是我们期望的(X=0.0, Y=1.0, Z=0.0)。
-
-
解决方案:使用
Swizzle YXZ-
这就是
Swizzle Input Axis Values (Order=YXZ)发挥作用的时候了。 -
它的作用是:将输入向量的分量顺序进行交换。
YXZ意味着:-
新的 X 输出 = 原始的 Y 值
-
新的 Y 输出 = 原始的 X 值
-
新的 Z 输出 = 原始的 Z 值
-
-
应用到 W 键:
-
W 键按下,原始输出为
(X=1.0, Y=0.0, Z=0.0)。 -
经过
Swizzle YXZ转换后,输出变为(新的X=原始Y=0.0, 新的Y=原始X=1.0, Z=0.0),即(0.0, 1.0, 0.0)。 -
看!这正是我们想要的“向前”向量(Y轴为正)!
-
-
应用到 S 键:
-
S 键本身已经有了
Negate(取反),所以它的原始输出可能是(X=-1.0, Y=0.0, Z=0.0)或先取反再交换,具体取决于修饰器顺序。 -
但核心逻辑相同:通过
Swizzle,将X轴上的值(无论是正是负)搬到了Y轴上,从而正确地表示前后移动。
-
-
为什么 A 和 D 不用?
因为
A和 D键的默认轴向(X轴)已经和 Move动作期望的轴向(X轴)对齐了。-
按下
D,输出(X=1.0, Y=0.0)-> 直接就是“向右”的正确向量。 -
按下
A,只需要一个Negate修饰符,就能将默认的正向输出反转为(X=-1.0, Y=0.0)-> 这就是“向左”的正确向量。 -
它们不需要进行轴向的交换,所以用不到
Swizzle。
总结
|
按键
|
默认(错误)输出
|
期望输出
|
所需修饰器
|
解释
|
|---|---|---|---|---|
|
W
|
(1.0, 0.0) |
(0.0, 1.0) |
Swizzle (YXZ)
|
把默认的 X 轴正向输入,“旋转”到 Y 轴正向。
|
|
S
|
(-1.0, 0.0) |
(0.0, -1.0) |
Swizzle (YXZ) + Negate
|
同上,但需要反向。修饰器顺序可能调换以达到效果。
|
|
D
|
(1.0, 0.0) |
(1.0, 0.0) |
无
|
默认输出完全正确。
|
|
A
|
(1.0, 0.0) |
(-1.0, 0.0) |
Negate
|
默认轴向正确,只需取反方向。
|
所以,这并不是
WS比 AD更特殊,而是为了纠正键盘按键默认轴向与2D移动逻辑轴之间的不匹配。 Swizzle YXZ在这里充当了一个“适配器”,将上下按键的输入,巧妙地“拧”到了正确的轴上,使得键盘WASD的四个独立按键,能够与手柄摇杆的二维向量输入无缝地映射到同一个 Move动作上。这是一种非常优雅和高效的输入系统配置方法。
浙公网安备 33010602011771号