内蒙古建设工程质监站网站,手工网站和自助建站式网站却别,汕头老城图片,江西建筑人才网招聘文章目录 1 创建窗口类2 显示窗口3 窗口事件回调函数4 窗口中常用的生命周期函数5 编辑器窗口类中的常用成员6 小结 1 创建窗口类
当想为 Unity 拓展一个自定义窗口时#xff0c;只需实现继承 EditorWindow 的类即可#xff0c;并在该类的 OnGUI 函数中编写面板控件相关的… 文章目录 1 创建窗口类2 显示窗口3 窗口事件回调函数4 窗口中常用的生命周期函数5 编辑器窗口类中的常用成员6 小结 1 创建窗口类
当想为 Unity 拓展一个自定义窗口时只需实现继承 EditorWindow 的类即可并在该类的 OnGUI 函数中编写面板控件相关的逻辑。
命名空间UnityEditor类名EditorWindow
2 显示窗口
调用 EditorWindow.GetWindow() 添加自定义页签用于开启窗口。创建窗口对象后调用对象的 Show() 方法即可显示窗口。
该方法有多种重载主要参数一般有
Type 或 T窗口类的类型。utility为 true 可创建浮动实用程序窗口可自由拖动、改变大小设置为 false 可创建正常窗口。title窗口标题。focus是否为窗口提供焦点如果已存在。如果 GetWindow 创建新窗口则将始终获得焦点。desiredDockNextTo窗口试图停靠到其上的 EditorWindow 类型的数组。
public class Lesson2 : EditorWindow
{[MenuItem(Unity编辑器拓展/Lesson2/显示自定义面板)]private static void ShowWindow() {Lesson2 win EditorWindow.GetWindowLesson2(我的窗口);win.Show();}
}3 窗口事件回调函数
继承 EditorWindow 的窗口类自带一些事件回调函数当触发对应事件时会自动进入。 OnHierarchyChange()当场景中的层次结构Hierarchy发生变化时调用。 例如当游戏对象被创建、删除或重命名时触发。 OnFocus()当窗口获得焦点时调用。 在该方法中可以执行在窗口获得焦点时需要进行的操作。 OnLostFocus()当窗口失去焦点时调用。 通常在该方法中执行在窗口失去焦点时需要进行的清理工作。 OnProjectChange()当项目资源发生变化时调用。 例如当添加、删除或修改项目中的文件时触发。 OnInspectorUpdate()在检视器Inspector面板更新时调用。 可以在这个方法中执行需要在检视器面板刷新时进行的逻辑比如更新显示的信息。 OnSelectionChange()当选择的对象发生变化时调用。 在该方法中可以执行与所选对象相关的操作以确保编辑器窗口的内容与当前选择保持同步。
4 窗口中常用的生命周期函数 OnEnable() 当窗口被激活时调用通常在窗口创建时会调用一次。 在该方法中可以进行初始化工作例如注册事件监听器或设置初始变量。 OnGUI() 每帧都会调用此方法用于绘制编辑器窗口的 GUI。 在该方法中可以使用 GUILayout 或 EditorGUILayout 等类创建界面元素以便用户与窗口进行交互。 OnDestroy() 当窗口被销毁时调用通常在关闭编辑器或切换场景时触发。在这里进行最终的清理工作确保没有未释放的资源。 Update() 在编辑器窗口每帧更新时调用。通常在这里执行需要在每帧进行的逻辑。
5 编辑器窗口类中的常用成员
Unity 官方文档有关于编辑器窗口类的 API 说明https://docs.unity.cn/cn/2022.3/ScriptReference/EditorWindow.html。 静态变量 focusedWindow当前已获得键盘焦点的 EditorWindow。只读mouseOverWindow当前在鼠标光标下的 EditorWindow。只读 静态函数 CreateWindow创建窗口如果允许窗口有多个可用该 API 创建窗口。GetWindow创建一个窗口对象。GetWindowWithRect返回一个指定位置、大小的窗口。HasOpenInstances检查编辑器窗口是否打开。 成员变量 titleContent窗口标题名。positon窗口位置大小信息。wantsMouseEnterLeaveWindow如果设置为 true则每当鼠标进入或离开窗口时该窗口都会收到一次 OnGUI 调用。 成员函数 Show显示面板。Repaint重绘窗口。Close关闭窗口。
6 小结
想要实现自定义窗口只需继承 EditorWindow 类主要工作是在 OnGUI 中利用 GUI 相关 API 绘制控件处理功能逻辑。
使用对应的事件回调函数帮助监听一些特殊情况用于处理对应逻辑。