我正在使用新的inptu系统,我想要一种方法来查看是否执行了输入操作(只有一次,如GetButtonDown)。 如果我使用".ReadValue()",if 语句不仅返回 true 一次,而且只要按住"inventoryAction 按钮"就返回 true。
private void Awake()
{
playerInput = GetComponent<PlayerInput>();
inventoryAction = playerInput.actions["Inventory"];
}
private void Update()
{
if (inventoryAction.ReadValue<float>() == 1)
{
Debug.Log("inventory key was pressed");
}
}
如何仅在 if 语句中获取"执行"部分(使用新的输入系统)?新的输入系统中是否有类似 GetButtonDown 的东西?
从版本 1.1.1 开始,操作有一个WasPressedThisFrame
方法,基本上可以做到这一点。
文档(上面链接)包括以下代码片段:
var fire = playerInput.actions["fire"]; if (fire.WasPressedThisFrame() && fire.IsPressed()) StartFiring(); else if (fire.WasReleasedThisFrame()) StopFiring();
如代码示例所示,还有本质上分别GetButtonUp
和GetButton
的WasReleasedThisFrame
和IsPressed
。
请注意,需要注意一些特殊事项,使它们的行为与GetButtonX
调用不同,尤其是在按钮释放和按下阈值大不相同的情况下,或者在帧中多次按下和释放按钮的情况下。
1.1.1 压制文档:
此方法不同于简单地读取动作的当前
float
值并将其与压力机阈值进行比较,也不同于将activeControl
的当前驱动与其进行比较。这是因为当前的驱动水平可能已经低于压力机阈值,但可能尚未达到释放阈值。此方法适用于任何类型的操作,而不仅仅是按钮。
另请注意,由于它对
EvaluateMagnitude()
的结果进行操作,因此它适用于多种控件,而不仅仅是按钮。例如,如果一个动作绑定到一个StickControl
,一旦控件的Vector2
量级超过按下阈值,该控件将被视为"按下"。最后,请注意,控件的自定义按钮按下点(请参阅
pressPoint
)将优先于defaultButtonPressPoint
。
1.1.1 被按下这个框架文档:
此方法与
WasPerformedThisFrame()
不同,因为它是 不绑定到相位。相反,如果动作的驱动级别( 是,数量级 - 见EvaluateMagnitude()
- 的 绑定到操作的控件)超过压力阈值(请参阅defaultButtonPressPoint
) 在帧中的任何一点,此方法将 返回true
.即使有交互,它也会这样做 尚未执行该操作以响应媒体的操作。此方法适用于任何类型的操作,而不仅仅是按钮。
另请注意,因为这是对
EvaluateMagnitude()
,它适用于多种控件,而不仅仅是 按钮。例如,如果一个动作绑定到一个StickControl
,则 一旦达到Vector2
的大小,控制将被视为"按下" 的控件已超过压力机阈值。最后,请注意,自定义按钮按下控件的点(请参阅
pressPoint
)受到尊重,并将优先于"defaultButtonPressPoint
.
有关详细信息,请务必阅读您的版本的文档。