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),出現層級問題只需調整對應級界面的層級,避免牽一發而動全身的情況,如:一級界面原本沒有特效,后來加了一個特效,后面界面層級全都要調高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM