代码示例:
using UnityEngine;
using UnityEditor;
public class GetItemsTool : EditorWindow
{
int id;
private void Awake()
{
//窗口弹出时候调用
Debug.Log("My Window Start");
}
void Update()
{
//窗口弹出时候每帧调用
Debug.Log("My Window Update");
}
[MenuItem("MyTools/GetItem")]
static void Init()
{
GetWindow(typeof(GetItemsTool));
}
void OnGUI()
{
id = EditorGUILayout.IntField(id);
if(GUILayout.Button("Get"))
{
Debug.Log("Test");
}
}
}
效果图:
如果需要动态的增删面板内容,可以利用循环刷新,因为OnGUI函数是在不停刷新的。(可以自己打个Debug看下)
代码:
private void OnGUI()
{
if (GUILayout.Button("Add"))
{
count++;
isShowTextInfo = true;
}
if (isShowTextInfo)
{
for (int i = 0; i < count; i++)
{
if (GUILayout.Button("Test"))
{
}
}
}
}
点击Add就会增加一个Test按钮。
效果图:
如何在编辑器面板显示List,代码如下:
using UnityEngine;
using UnityEditor;
public class Tool : EditorWindow
{
[SerializeField]
public List<int> configs;
//序列化对象
private SerializedObject _serializedObject;
//序列化属性
private SerializedProperty _assetLstProperty;
private void OnEnable()
{
//使用当前类初始化
_serializedObject = new SerializedObject(this);
//获取当前类中可序列化的属性
_assetLstProperty = _serializedObject.FindProperty("configs"); //这里字符串要对应List名字
}
[MenuItem("Tool")]
static void Init()
{
GetWindow(typeof(Tool));
}
void OnGUI()
{
//更新
_serializedObject.Update();
//开始检查是否有修改
EditorGUI.BeginChangeCheck();
//显示属性
//第二个参数必须为true,否则无法显示子节点即List内容
EditorGUILayout.PropertyField(_assetLstProperty, true);
//结束检查是否有修改
if (EditorGUI.EndChangeCheck())
{
//提交修改
_serializedObject.ApplyModifiedProperties();
}
}
}
效果