资料
编辑器窗口
示例-创建一个自定义窗口,并记录操作结果
步骤
- 创建一个类继承Editorwindow的脚本,放置在Editor文件夹中
- 使用MenuItem创建一个菜单,用于打开窗口
- 使用EditorWindow的GetWindow方法,创建窗口
- OnGUI函数中定义窗口布局和交互逻辑
- 使用ScriptableObject存储数据
数据脚本
using UnityEngine;
[CreateAssetMenu(fileName = "windowData", menuName = "creatawindowData")]
public class WindowData : ScriptableObject
{
public string myString = "Hello World";
public bool groupEnabled;
public bool myBool = true;
public float myFloat = 1.23f;
public void Init()
{
myString = "Hello World";
groupEnabled = false;
myBool = true;
myFloat = 1.23f;
}
}
Editor脚本
using UnityEngine;
using UnityEditor;
public class MyWindow : EditorWindow
{
string dataPath = "Assets/Editor/MyEditor/windowData.asset";
WindowData myWindowData;
private void Awake()
{
var obj = AssetDatabase.LoadMainAssetAtPath(dataPath);
if (obj == null)
{
WindowData data = CreateInstance<WindowData>();
data.Init();
AssetDatabase.CreateAsset(data, dataPath);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
myWindowData = data;
}
else
myWindowData = obj as WindowData;
}
[MenuItem("CustomWindow/My Window")]
public static void ShowWindow()
{
GetWindow<MyWindow>("Window Title");
}
private void OnGUI()
{
GUILayout.Label("自定义窗口", EditorStyles.boldLabel);
myWindowData.myString = EditorGUILayout.TextField("Text Field", myWindowData.myString);
myWindowData.groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings",
myWindowData.groupEnabled);
myWindowData.myBool = EditorGUILayout.Toggle("Toggle", myWindowData.myBool);
myWindowData.myFloat = EditorGUILayout.Slider("Slider", myWindowData.myFloat, -3, 3);
EditorGUILayout.EndToggleGroup();
}
}