c# - 使用 Unity 的新输入系统:一个按钮可以做不同的事情吗?
问题描述
我正在使用新的输入系统制作游戏,但在尝试让按钮做两件事时遇到了困难。
目前,我有一个用于游戏的动作图,鼠标单击充当“开火”事件。当玩家点击一个 UI 元素(例如,一个物品栏位)时,我不希望发生“fire”事件,而是希望使用另一种合适的方法。
我尝试使用两个动作地图(游戏和 UI),但我不希望玩家停止移动(由于游戏输入没有在 UI 动作地图上被拾取)。
我确信有一个简单的解决方案,但缺乏关于新输入系统的大量信息。我在想我可能必须在 monobehaviour 脚本中添加一个 IPointer OnEnter、OnExit 接口,并让输入脚本在按下时决定哪个动作最适合。有没有更有效的方法来做到这一点?
解决方案
将责任放在 Firing 脚本上,以检查玩家状态是否有效。您可以公开播放器状态信息,以检查播放器是否处于菜单中或其他不允许 Fire 发生的状态。
CanFire
是玩家状态中的一个属性,由任意数量的检查组成。
public class PlayerState
{
.. other properties like IsInMenu, IsInCutscene, IsDead, etc..
public bool CanFire => !IsInMenu && !IsInCutscene && !IsDead;
}
然后在触发事件时的触发脚本中,检查播放器状态中的 CanFire 布尔值。
if (playerState.CanFire) Fire();
推荐阅读
- c# - 如何更新 SharePoint 目录中的“列表项”
- tcl - 用新行拆分 MySQL
- shell - 等待并行运行的 shell 脚本完成
- bash - SVN Pre Commit 搜索文件中的字符串
- php - 使用 PHP 代码执行带有 JSON 输入的存储过程后出现 4004 SQL Server 错误
- angular - 将服务数据显示到网格中时面临的问题
- oauth-2.0 - Identity Server 4 仅从请求的客户端注销用户
- node.js - 如何测试返回对象数组的函数,该数组的元素包含javascript Date 对象?
- ballerina - 芭蕾舞女演员中的表达是否有任何否定逻辑?
- scala - WrappedArray 集:类型参数 [Int] 不符合方法空的类型参数边界 [T <: AnyRef]