在GUI方法中显示UI相关的内容,可以使用GUILayout和EditorGUILayout自动布局类中的静态方法
GUILayout可以在打包之后使用
EditorGUILayout只能在编辑器内使用
为自定义类添加[CustomEditor(typeof(class))]特性,可自定义脚本在Inspector面板内的显示
需要重写OnInspectorGUI方法
using UnityEngine;
/*添加编辑器宏,只在编辑器内使用*/
#if UNITY_EDITOR
using UnityEditor;
[CustomEditor(typeof(Test))]
class TestEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
Test test = target as Test;
//using中的显示内容为只读
using (new EditorGUI.DisabledGroupScope(true))
{
EditorGUILayout.TextField("显示ID:", test.ID.ToString());
}
if (GUILayout.Button("按钮"))
{
//在Inspector面板Test组件下面添加一个按钮,点击后,执行下面的代码
}
}
}
#endif
public class Test : MonoBehaviour
{
public int ID;
public string _name;
}
在OnInspectorGUI方法中,渲染相关的方法和OnGUI是一样的
using UnityEngine;
using UnityEditor;
public class MyWindow : EditorWindow
{
[MenuItem("MyWidow/Window")]
static void Init()
{
MyWindow window = (MyWindow)EditorWindow.GetWindow(typeof(MyWindow));
window.titleContent = new GUIContent("自定窗口");
window.maxSize = Vector2.one * 500;
window.minSize = Vector2.one * 200;
window.Show();
}
public string folderPath;
public string filePath;
public Sprite sprite;
private void OnGUI()
{
using (new EditorGUI.DisabledGroupScope(true))
{
folderPath = EditorGUILayout.TextField("文件夹路径", folderPath);
}
if (GUILayout.Button("选择文件夹"))
{
//选择文件夹:面板标题,初始路径,输入栏默认名称
folderPath = EditorUtility.OpenFolderPanel("选择文件夹", Application.dataPath, "");
}
using (new EditorGUI.DisabledGroupScope(true))
{
filePath = EditorGUILayout.TextField("文件路径", filePath);
}
if (GUILayout.Button("选择文件"))
{
//选择文件:面板标题,初始路径,输入栏默认名称
filePath = EditorUtility.OpenFilePanel("选择文件", Application.dataPath, "");
}
//选择一个精灵片
sprite = (Sprite)EditorGUILayout.ObjectField("选择精灵片", sprite, typeof(Sprite));
}
}