c# - Unity:按下 UI 按钮时如何停止使用“Input.GetMouseButton(0)”?
问题描述
玩家是一名魔法师,按下鼠标左键可以用火球攻击敌人。
我使用的代码非常简单(在Update
函数内部):
if (Input.GetMouseButton(0) && canShoot)
{
canShoot = false;
Invoke("AllowCanShoot", fireBreak);
Attack();
}
canShoot
是一个bool
阻止玩家每帧攻击一次。
AllowCanShoot
是一个设置为 的canShoot
函数true
。
Attack()
是处理攻击的函数,与这个问题无关。
当玩家靠近交易者时,我还有一个 UI 按钮出现在屏幕上。当玩家按下 UI 按钮时,他会攻击交易者。
我想要的是,他可以在不攻击他的情况下按下按钮。
我不能为玩家禁用攻击,因为敌人也可以找到商人,然后玩家可能不得不战斗。
我尝试的是:
- 设置
canShoot
bool
为false
,当UI Button
按下时,但这不起作用,玩家仍在攻击,也许该Update
函数在函数之前执行UI Button
?!
解决方案
您可以使用该EventSystem.IsPointerOverGameObject()
函数确保在攻击之前鼠标不在 UI 对象上:
if (Input.GetMouseButton(0) && canShoot && !EventSystem.current.IsPointerOverGameObject())
{
canShoot = false;
Invoke("AllowCanShoot", fireBreak);
Attack();
}
推荐阅读
- python - 使用python创建一个xml文件
- java - 为什么 Java Unix 时间和日历计算准确时间?
- mysql - Docker 镜像在 m1 处理器中运行
- flutter - 在 null 上调用了方法“*” - Flutter
- java - 将 Instant 转换为 LocalDateTime 时的不同值
- php - PHP - 如果调用函数而不提供默认值,我可以选择使用默认值作为参数吗
- javascript - 使用 .prototype 向类添加方法
- c# - 以静态方式引用非静态方法
- apache - 在运行 Apache Web App 的浏览器中打印 PHP 代码
- oracle - 如何获取有关具有未关闭事务的所有数据库会话的信息?