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;
}
}
}