• Unity UGUI和特效(含粒子系统和3D Object)之间层级问题


    撰写本文时使用Unity的版本为2017.4.10f1(64bit)

    1.描述问题

      需求:通过UGUI制作一个界面之后,我需要在界面的后面跟前面各添加一个特效。

      问题:同一层级UI是最后渲染的,所以UI永远是在最上面

      

      

      解决:分别调整ui_effect1、imageWhile、ui_effect2这三个物品的渲染层级

    2.层级知识补充

      https://blog.csdn.net/leansmall/article/details/66478412

    3.解决方案

      需要设置层级的Object分为三种:UI、粒子系统、3D Object

      (1) UI:添加Canvas组件控制,勾选Override Sorting之后可以设置Sorting Layer和 Order in Layer

       

      (2) 粒子系统:设置Render下的Sorting Layer和 Order in Layer

       

      (3) 3D Object:

        a.代码修改Mesh Renderer的Sorting Layer和 Order in Layer,Mesh Renderer在预制体上无法直接修改,但是继承于Renderer ,是有Sorting Layer和 Order in Layer参数可以修改的

        

        

        b.挂上Sorting Group组件直接在预制体里修改

         

    4.方案优化

      使用统一的脚本组件挂于UI或者特效上,用于设置当前Object及所有子物体的层级。

      优点:(1)组件统一,可以在代码里遍历修改

         (2)特效一般子物体很多,挂在根节点,不用逐个设置层级

    using UnityEngine;
    
    [ExecuteInEditMode]
    public class UIDepth : MonoBehaviour
    {
        public int order = 100;
        public bool isUI = false;
    
        private void Start()
        {
            if(isUI)
            {
                Canvas canvas = GetComponent<Canvas>();
                if(canvas == null)
                {
                    canvas = gameObject.AddComponent<Canvas>();
                }
    
                canvas.overrideSorting = true;
                canvas.sortingOrder = order;
            }
            else
            {
                Renderer[] rs = GetComponentsInChildren<Renderer>();
                foreach(var r in rs)
                {
                    r.sortingOrder = order;
                }
            }
        }
    }

    5.方案建议

      (1)界面分级:

      一级界面(层级设置只在0-10),二级界面(10-20),三级界面(30-40),出现层级问题只需调整对应级界面的层级,避免牵一发而动全身的情况,如:一级界面原本没有特效,后来加了一个特效,后面界面层级全都要调高

  • 相关阅读:
    读《阿里云是如何失控的》有感
    LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
    界面编程模仿篇(QQ登录界面逼真篇)
    最牛B的编码套路
    QinQ封装及终结详解
    seaJs学习笔记之javascript的依赖问题
    Deploy maven on Linux OS
    c++——inline内联函数
    c++——引用
    c++——const关键字
  • 原文地址:https://www.cnblogs.com/DonYao/p/10722609.html
Copyright © 2020-2023  润新知