Ampliar la ventana de inspección
1. La clase original hereda MonoBehaviour, como
public class Map : MonoBehaviour
{
public int x;
public int y;
}
Puede ver el efecto original, como se muestra a continuación.
2. Cree una clase de editor, herede Editor y agregue anotaciones CustomEditor
A continuación, debemos crear una clase que herede Editor y agregar anotaciones CustomEditor, el código es el siguiente
//typeof里写要重写Inpsctor事件的类。这里是Map
[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
}
3. Anular el método OnInspectorGUI()
el código se muestra a continuación
[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
public override void OnInspectorGUI()
{
//绘制原来的窗口,如不增加此行代码。那么就不会绘制原有的变量
DrawDefaultInspector();
//接下来,可以在下面添加你个性化的组件
//添加一个按钮
if (GUILayout.Button("测试"))
{
Debug.Log("test");
}
}
}
Nuestras necesidades habituales son agregar botones u otras operaciones sobre la base original, por lo que aquí se debe agregar el núcleo DrawDefaultInspector();, que dibujará las variables originales. Si no la agrega, la variable original no se mostrará a menos que la escriba usted mismo.
Bueno, el efecto después de escribir es el siguiente, y sale el botón.
Además, como reescribimos la ventana para Map, el negocio común es obtener la clase Map. Puedes obtener el mapa a través del siguiente código
Map map = target as Map;
El código general es el siguiente
[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
private Map map;
public override void OnInspectorGUI()
{
//绘制原来的窗口,如不增加此行代码。那么就不会绘制原有的变量
DrawDefaultInspector();
//接下来,可以在下面添加你个性化的组件
//添加一个按钮
if (GUILayout.Button("测试"))
{
Debug.Log("test");
//拿到原脚本
map = target as Map;
Debug.Log($"map.x:{map.x} map.y:{map.y}");
}
}
}