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();
|
||
}
|
||
}
|
||
``` |