6.UGUI点击按钮时不响应其他Input

  1. 6.UGUI点击按钮时不响应其他Input
    1. 6.1 题目
    2. 6.2 深入解析
      1. 示例代码
    3. 6.3 答题示例
    4. 6.4 关键词联想

6.UGUI点击按钮时不响应其他Input


6.1 题目

UGUI中如何做到点击按钮时,不要响应其他Input相关的检测。


6.2 深入解析

可利用 EventSystem.current.IsPointerOverGameObject() 判断指针当前是否落在 可参与射线检测的 UI 上(不限于 Button)。返回 true 时跳过场景/角色的点击等逻辑即可。

注意:触摸设备上应在「按下」那一帧传入手指 id,例如 IsPointerOverGameObject(Input.GetTouch(0).fingerId);仅用无参重载在部分机型上可能不准。

示例代码

以下是一个示例代码,展示了如何在 Update 方法中使用 IsPointerOverGameObject 来实现该功能:

using UnityEngine;
using UnityEngine.EventSystems;

public class Example : MonoBehaviour
{
    void Update()
    {
        // 指针在 UI 上则不要处理场景中的点击(避免与按钮等冲突)
        if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject())
            return;

        // 否则再处理场景/角色等输入
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("处理其他输入检测逻辑");
        }
    }
}

当指针位于 UI 上方时提前 return,后续 GetMouseButtonDown 等逻辑不会执行,从而避免与 UI 点击叠加触发。若使用新 Input System,需用其射线/UI 检测结果与之一致地分流输入。


6.3 答题示例

“可以通过 UGUI 的事件系统来区分 UI 点击和其他输入。具体来说,在处理输入逻辑前,先调用 EventSystem.current.IsPointerOverGameObject() 进行判断——如果返回 true,说明当前点击落在了 UI 元素(比如按钮)上,这时候就跳过其他输入处理;反之再执行场景交互等逻辑。这样就能确保点击按钮时,不会触发额外的输入响应,避免冲突。”


6.4 关键词联想

  • EventSystem
  • IsPointerOverGameObject()
  • UI 射线检测(Raycast)
  • 输入优先级
  • 事件穿透
  • EventData
  • 交互组件(Button, Image 带 Raycast Target)
  • 输入处理流程(Update 中判断)
  • 多平台适配(触摸设备需传入触摸ID)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏