ui可以添加canvas并设置overrideSorting和sortingOrder,如果需要交互需要添加GraphicRaycaster组件
3d物体需要修改MeshRenderer的sortingOrder属性。
再利用好深度可以很好的处理好这种叠层的问题,规划好sortingOrder
using UnityEngine; using UnityEngine.UI; using Frame.Runtime.UI; public class SortOrderSet : UIMonoViewComponent { [SerializeField] private int SortOrder = 0; [SerializeField] private int m_UISortOrder = 0; [SerializeField] private int m_RenderSortOrder = 0; public void SetUISortOrder(int order, bool raycast = true ) { Canvas canvas = GetComponent<Canvas>(); if (canvas == null) { canvas = gameObject.AddComponent<Canvas>(); } GraphicRaycaster gr = GetComponent<GraphicRaycaster>(); if (raycast) { if (gr == null) { gameObject.AddComponent<GraphicRaycaster>(); } } else { if (gr != null) { DestroyImmediate(gr); } } m_UISortOrder = order; canvas.overrideSorting = true; canvas.sortingOrder = m_UISortOrder; } public void SetRenderSortOrder(int order) { m_RenderSortOrder = order; foreach (var render in transform.GetComponentsInChildren<MeshRenderer>(true)) { render.sortingOrder = m_RenderSortOrder; } } }