在3d项目中,如创建一个cube,在Inspector中并没有sorting layer和order in layer这两个字段。如果需要更改排序,我们可以通过直接通过脚本写入;也可以通过编写editor脚本将sorting layer和order in layer这两个字段在Inspector中显示出来,并进行设置。
一、脚本写入:
using UnityEngine;
public class MeshRendererSorting : MonoBehaviour
{
private MeshRenderer meshRenderer;
void Start()
{
meshRenderer = GetComponent<MeshRenderer>();
meshRenderer.sortingLayerName = "UI";
meshRenderer.sortingOrder = 3;
}
}
二、编写editor脚本,显示排序字段
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(MeshRenderer))]
public class MeshRendererEditor : Editor
{
MeshRenderer meshRenderer;
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
meshRenderer = target as MeshRenderer;
string[] layerNames = new string[SortingLayer.layers.Length];
for (int i = 0; i < SortingLayer.layers.Length; i++)
layerNames[i] = SortingLayer.layers[i].name;
int layerValue = SortingLayer.GetLayerValueFromID(meshRenderer.sortingLayerID);
layerValue = EditorGUILayout.Popup("Sorting Layer", layerValue, layerNames);
SortingLayer layer = SortingLayer.layers[layerValue];
meshRenderer.sortingLayerName = layer.name;
meshRenderer.sortingLayerID = layer.id;
meshRenderer.sortingOrder = EditorGUILayout.IntField("Order in Layer", meshRenderer.sortingOrder);
}
}