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

Unity技术问题:如何判断屏幕空间画布中的UI元素是否可见

判断屏幕空间画布中UI元素的可见性

一、快速确认元素是否处于激活层级

无需手动遍历所有父物体,Unity提供了GameObject.activeInHierarchy内置属性——它会自动检查整个父物体链的激活状态,只要任意父节点未激活,该属性就返回false,性能远高于手动遍历。

二、判断元素是否在屏幕可视范围内

即使元素处于激活层级,也可能因位置超出屏幕而不可见,需结合UI元素的屏幕空间矩形与屏幕范围做判断:

方法1:适配「屏幕空间-覆盖」模式

using UnityEngine;
using UnityEngine.UI;

public static class UIVisibilityChecker
{
    public static bool IsVisible(RectTransform uiElement)
    {
        // 先检查层级激活状态
        if (!uiElement.gameObject.activeInHierarchy)
            return false;

        // 获取UI元素在屏幕空间的实际显示矩形(自动适配Canvas缩放、锚点)
        Canvas canvas = uiElement.GetComponentInParent<Canvas>();
        Rect uiRect = RectTransformUtility.PixelAdjustRect(uiElement, canvas);
        
        // 屏幕的像素范围矩形
        Rect screenRect = new Rect(0, 0, Screen.width, Screen.height);
        
        // 判断是否有重叠(部分可见即返回true)
        return uiRect.Overlaps(screenRect);
        // 若要求完全可见,替换为:return screenRect.Contains(uiRect);
    }
}

方法2:适配「屏幕空间-相机」模式

如果Canvas使用相机渲染,需要将UI元素的世界坐标转为屏幕坐标后判断:

using UnityEngine;
using UnityEngine.UI;

public static class UIVisibilityChecker
{
    public static bool IsVisible(RectTransform uiElement, Camera uiCamera)
    {
        if (!uiElement.gameObject.activeInHierarchy)
            return false;

        // 获取UI元素的四个世界角点
        Vector3[] worldCorners = new Vector3[4];
        uiElement.GetWorldCorners(worldCorners);
        
        // 检查是否有任意一个角点在屏幕范围内
        foreach (Vector3 corner in worldCorners)
        {
            Vector3 screenPos = uiCamera.WorldToScreenPoint(corner);
            if (screenPos.x >= 0 && screenPos.x <= Screen.width && screenPos.y >= 0 && screenPos.y <= Screen.height)
            {
                return true;
            }
        }
        return false;
    }
}

关键说明

  • activeInHierarchy:Unity内部已做优化,是判断层级激活状态的最优方式,避免了手动遍历父节点的性能开销。
  • PixelAdjustRect:准确获取UI元素在屏幕上的实际显示区域,自动处理Canvas的缩放、锚点、pivot等设置带来的偏移。
  • 可视判断逻辑:示例中采用「部分重叠即视为可见」,如果需要严格的「完全可见」,只需替换矩形判断的方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:22:17