You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D RTS游戏点击UI按钮时UI消失问题解决方案求助

解决Unity RTS中点击UI导致UI禁用且OnClick不触发的问题

问题核心是当前点击逻辑没有区分UI与场景对象,点击UI时会先触发场景的射线检测,执行DeselectAll()禁用UI,导致UI按钮的OnClick事件因对象被禁用无法执行。

修复步骤:

  1. 添加UI点击判断
    在处理鼠标左键点击的逻辑中(通常是Update方法里检测Input.GetMouseButtonDown(0)的代码块),先判断是否点击到UI元素,若是则直接跳过单位选择/取消选择逻辑:
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        // 判断是否点击到UI,是则跳过后续逻辑,让UI自身事件正常触发
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }

        // 原有的射线检测单位逻辑
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out RaycastHit hit))
        {
            GameObject target = hit.collider.gameObject;
            // 假设你的单位有"Unit"标签,判断是否点击到单位
            if (target.CompareTag("Unit"))
            {
                OnLeftMouseClickSelect(target);
            }
            else
            {
                // 点击场景非单位区域,取消所有选择
                DeselectAll();
            }
        }
        else
        {
            // 点击空白区域,取消所有选择
            DeselectAll();
        }
    }
}
  1. 确保UI组件完整
    检查UI所在的Canvas是否添加了Graphic Raycaster组件,没有的话手动添加,这是EventSystem检测UI点击的必要组件。

  2. 触摸设备适配(可选)
    如果需要支持触摸设备,将UI判断逻辑改为:

if (Input.touchCount > 0 && EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
{
    return;
}

原方法说明

你现有的OnLeftMouseClickSelect和DeselectAll方法逻辑本身没问题,只需在触发前加上UI判断即可,确保点击UI时不会执行取消选择的逻辑,UI按钮的OnClick事件就能正常触发。

内容的提问来源于stack exchange,提问作者Dark Pompeii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:46:27