yyl
2025-07-04 5d3366f2e0f687995eb7ad2107c4379fe7acd4e8
18 子 2D卡牌客户端搭建 / 2D卡牌客户端搭建 特效穿透问题修复
2个文件已修改
52 ■■■■■ 已修改文件
Main/System/UIBase/UIBase.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EffectPenetrationBlocker.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/UIBase/UIBase.cs
@@ -184,9 +184,10 @@
        // 设置Canvas属性
        canvas.overrideSorting = true;
        canvas.worldCamera = CameraManager.uiCamera;
        canvas.sortingLayerID = SortingLayer.NameToID("UI"); // 确保使用正确的排序层
        // 获取或添加CanvasGroup组件
        canvasGroup = GetComponent<CanvasGroup>();
        if (canvasGroup == null)
Main/Utility/EffectPenetrationBlocker.cs
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
@@ -11,10 +12,7 @@
    public bool autoAdjustSorting = true;
    
    [Tooltip("特效渲染器,如果为空则自动获取")]
    public Renderer[] effectRenderers;
    [Tooltip("特效粒子系统,如果为空则自动获取")]
    public ParticleSystem[] particleSystems;
    public List<Renderer> effectRenderers = new List<Renderer>();
    
    [Tooltip("自定义排序顺序,仅在不自动调整时有效")]
    public int customSortingOrder = 0;
@@ -26,30 +24,28 @@
    public Canvas parentCanvas;
    
    [Tooltip("特效在Canvas中的排序偏移量")]
    public int _sortingOrderOffset = 0;
    public int sortingOrderOffset = 1;
    
    public int canvasSortingOrder = 0;
    public int renderQueue = 3000;//默认值
    
    private void Awake()
    {
        transform.GetComponentsInChildren(true, effectRenderers);
        // 如果没有指定渲染器,则自动获取
        if (effectRenderers == null || effectRenderers.Length == 0)
        if (effectRenderers == null || effectRenderers.Count == 0)
        {
            effectRenderers = GetComponentsInChildren<Renderer>(true);
            transform.GetComponentsInChildren<Renderer>(true, effectRenderers);
        }
        // 如果没有指定粒子系统,则自动获取
        if (particleSystems == null || particleSystems.Length == 0)
        {
            particleSystems = GetComponentsInChildren<ParticleSystem>(true);
        }
        // 查找父级Canvas
        if (parentCanvas == null)
        {
            parentCanvas = GetComponentInParent<Canvas>();
        }
        if (autoAdjustSorting)
        {
            UpdateSortingOrder();
@@ -86,9 +82,9 @@
            // 如果没有找到父级Canvas,则使用默认值
            canvasSortingOrder = 0;
        }
        // 将特效的排序顺序设置为Canvas排序顺序加上偏移量
        ApplySortingSettings(canvasSortingOrder + _sortingOrderOffset, customSortingLayer);
        ApplySortingSettings(canvasSortingOrder + sortingOrderOffset, customSortingLayer);
    }
    
    /// <summary>
@@ -104,28 +100,11 @@
            if (renderer != null)
            {
                renderer.sortingOrder = sortingOrder;
                renderer.material.renderQueue = renderQueue; // 设置渲染队列
                // renderer.material.renderQueue = overlayRQ;
                if (!string.IsNullOrEmpty(sortingLayer))
                {
                    renderer.sortingLayerName = sortingLayer;
                }
            }
        }
        // 应用到粒子系统
        foreach (ParticleSystem ps in particleSystems)
        {
            if (ps != null)
            {
                ParticleSystemRenderer psRenderer = ps.GetComponent<ParticleSystemRenderer>();
                if (psRenderer != null)
                {
                    psRenderer.sortingOrder = sortingOrder;
                    // psRenderer.material.renderQueue = overlayRQ;
                    if (!string.IsNullOrEmpty(sortingLayer))
                    {
                        psRenderer.sortingLayerName = sortingLayer;
                    }
                }
            }
        }