如何查看是否执行了玩家输入操作?统一,新的输入系统



我正在使用新的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();

如代码示例所示,还有本质上分别GetButtonUpGetButtonWasReleasedThisFrameIsPressed

请注意,需要注意一些特殊事项,使它们的行为与GetButtonX调用不同,尤其是在按钮释放和按下阈值大不相同的情况下,或者在帧中多次按下和释放按钮的情况下。

1.1.1 压制文档:

此方法不同于简单地读取动作的当前float值并将其与压力机阈值进行比较,也不同于将activeControl的当前驱动与其进行比较。这是因为当前的驱动水平可能已经低于压力机阈值,但可能尚未达到释放阈值。

此方法适用于任何类型的操作,而不仅仅是按钮。

另请注意,由于它对EvaluateMagnitude()的结果进行操作,因此它适用于多种控件,而不仅仅是按钮。例如,如果一个动作绑定到一个StickControl,一旦控件的Vector2量级超过按下阈值,该控件将被视为"按下"。

最后,请注意,控件的自定义按钮按下点(请参阅pressPoint)将优先于defaultButtonPressPoint

1.1.1 被按下这个框架文档:

此方法与WasPerformedThisFrame()不同,因为它是 不绑定到相位。相反,如果动作的驱动级别( 是,数量级 - 见EvaluateMagnitude()- 的 绑定到操作的控件)超过压力阈值(请参阅defaultButtonPressPoint) 在帧中的任何一点,此方法将 返回true.即使有交互,它也会这样做 尚未执行该操作以响应媒体的操作。

此方法适用于任何类型的操作,而不仅仅是按钮。

另请注意,因为这是对EvaluateMagnitude(),它适用于多种控件,而不仅仅是 按钮。例如,如果一个动作绑定到一个StickControl,则 一旦达到Vector2的大小,控制将被视为"按下" 的控件已超过压力机阈值。

最后,请注意,自定义按钮按下控件的点(请参阅pressPoint)受到尊重,并将优先于"defaultButtonPressPoint.

有关详细信息,请务必阅读您的版本的文档。

最新更新