77 lines
3.2 KiB
Markdown
77 lines
3.2 KiB
Markdown
![]() |
#unity/日常积累
|
|||
|
|
|||
|
## 描述
|
|||
|
|
|||
|
排序图层中的渲染器顺序。
|
|||
|
|
|||
|
您可以将 GameObject 分组到 [SpriteRenderer](https://docs.unity.cn/cn/2019.4/ScriptReference/SpriteRenderer.html) 组件中的层中。这称为 [SortingLayer](https://docs.unity.cn/cn/2019.4/ScriptReference/SortingLayer.html)。 排序顺序决定每个 GameObject 对于每个排序图层中渲染器的优先级。 提供的数字越小,GameObject 显示的距离越远。数字越大,GameObject 越靠近摄像机。这在创建 2D 卷轴游戏时非常有效,因为您可能需要某些 GameObject 位于同一层上,但某些部分显示在其他部分前方。例如,对云进行分层处理,使其显示在天空前方。
|
|||
|
|
|||
|
**注意**:该值必须介于 -32768 与 32767 之间。
|
|||
|
|
|||
|
``` cs
|
|||
|
//Attach a script like this to a Sprite GameObject (Create>2D Object>Sprite). Assign a Sprite to it in the Sprite field.
|
|||
|
//Repeat the first step for another two Sprites and make them overlap each other slightly. This shows how the order number changes the view of the Sprites.
|
|||
|
|
|||
|
using UnityEngine;
|
|||
|
public class MyScript : MonoBehaviour
|
|||
|
{
|
|||
|
public int MyOrder;
|
|||
|
public string MyName;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
``` cs
|
|||
|
//Create a folder named “Editor” (Right click in your Assets folder, Create>Folder)
|
|||
|
//Put this script in the folder.
|
|||
|
//This script adds fields to the Inspector of your GameObjects with the MyScript script attached. Edit the fields to change the layer and order number each Sprite belongs to.
|
|||
|
|
|||
|
using UnityEngine;
|
|||
|
using UnityEditor;
|
|||
|
|
|||
|
// Custom Editor using SerializedProperties.
|
|||
|
|
|||
|
[CustomEditor(typeof(MyScript))]
|
|||
|
public class MeshSortingOrderExample : Editor
|
|||
|
{
|
|||
|
SerializedProperty m_Name;
|
|||
|
SerializedProperty m_Order;
|
|||
|
|
|||
|
private SpriteRenderer rend;
|
|||
|
|
|||
|
void OnEnable()
|
|||
|
{
|
|||
|
// Fetch the properties from the MyScript script and set up the SerializedProperties.
|
|||
|
m_Name = serializedObject.FindProperty("MyName");
|
|||
|
m_Order = serializedObject.FindProperty("MyOrder");
|
|||
|
}
|
|||
|
|
|||
|
void CheckRenderer()
|
|||
|
{
|
|||
|
//Check that the GameObject you select in the hierarchy has a SpriteRenderer component
|
|||
|
if (Selection.activeGameObject.GetComponent<SpriteRenderer>())
|
|||
|
{
|
|||
|
//Fetch the SpriteRenderer from the selected GameObject
|
|||
|
rend = Selection.activeGameObject.GetComponent<SpriteRenderer>();
|
|||
|
//Change the sorting layer to the name you specify in the TextField
|
|||
|
//Changes to Default if the name you enter doesn't exist
|
|||
|
rend.sortingLayerName = m_Name.stringValue;
|
|||
|
//Change the order (or priority) of the layer
|
|||
|
rend.sortingOrder = m_Order.intValue;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void OnInspectorGUI()
|
|||
|
{
|
|||
|
// Update the serializedProperty - always do this in the beginning of OnInspectorGUI.
|
|||
|
serializedObject.Update();
|
|||
|
//Create fields for each SerializedProperty
|
|||
|
EditorGUILayout.PropertyField(m_Name, new GUIContent("Name"));
|
|||
|
EditorGUILayout.PropertyField(m_Order, new GUIContent("Order"));
|
|||
|
//Update the name and order of the Renderer properties
|
|||
|
CheckRenderer();
|
|||
|
|
|||
|
// Apply changes to the serializedProperty - always do this in the end of OnInspectorGUI.
|
|||
|
serializedObject.ApplyModifiedProperties();
|
|||
|
}
|
|||
|
}
|
|||
|
```
|