首页 > 解决方案 > 使用 Unity 的新输入系统:一个按钮可以做不同的事情吗?

问题描述

我正在使用新的输入系统制作游戏,但在尝试让按钮做两件事时遇到了困难。

目前,我有一个用于游戏的动作图,鼠标单击充当“开火”事件。当玩家点击一个 UI 元素(例如,一个物品栏位)时,我不希望发生“fire”事件,而是希望使用另一种合适的方法。

我尝试使用两个动作地图(游戏和 UI),但我不希望玩家停止移动(由于游戏输入没有在 UI 动作地图上被拾取)。

我确信有一个简单的解决方案,但缺乏关于新输入系统的大量信息。我在想我可能必须在 monobehaviour 脚本中添加一个 IPointer OnEnter、OnExit 接口,并让输入脚本在按下时决定哪个动作最适合。有没有更有效的方法来做到这一点?

标签: c#unity3d

解决方案


将责任放在 Firing 脚本上,以检查玩家状态是否有效。您可以公开播放器状态信息,以检查播放器是否处于菜单中或其他不允许 Fire 发生的状态。

CanFire是玩家状态中的一个属性,由任意数量的检查组成。

public class PlayerState
{
    .. other properties like IsInMenu, IsInCutscene, IsDead, etc..

    public bool CanFire => !IsInMenu && !IsInCutscene && !IsDead;
}

然后在触发事件时的触发脚本中,检查播放器状态中的 CanFire 布尔值。

if (playerState.CanFire) Fire();

推荐阅读