2024-02-11 Unity 编辑器开发之编辑器拓展2 —— 自定义窗口

文章目录

  • 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.GetWindow<Lesson2>("我的窗口");win.Show();}
}
image-20240211144438523

3 窗口事件回调函数

​ 继承 EditorWindow 的窗口类自带一些事件回调函数,当触发对应事件时会自动进入。

  1. OnHierarchyChange():当场景中的层次结构(Hierarchy)发生变化时调用。
    例如,当游戏对象被创建、删除或重命名时触发。

  2. OnFocus():当窗口获得焦点时调用。
    在该方法中可以执行在窗口获得焦点时需要进行的操作。

  3. OnLostFocus():当窗口失去焦点时调用。
    通常在该方法中执行在窗口失去焦点时需要进行的清理工作。

  4. OnProjectChange():当项目资源发生变化时调用。
    例如,当添加、删除或修改项目中的文件时触发。

  5. OnInspectorUpdate():在检视器(Inspector)面板更新时调用。
    可以在这个方法中执行需要在检视器面板刷新时进行的逻辑,比如更新显示的信息。

  6. OnSelectionChange():当选择的对象发生变化时调用。
    在该方法中可以执行与所选对象相关的操作,以确保编辑器窗口的内容与当前选择保持同步。

4 窗口中常用的生命周期函数

  1. OnEnable():
    当窗口被激活时调用,通常在窗口创建时会调用一次。
    在该方法中可以进行初始化工作,例如注册事件监听器或设置初始变量。

  2. OnGUI():
    每帧都会调用此方法,用于绘制编辑器窗口的 GUI。
    在该方法中可以使用 GUILayout 或 EditorGUILayout 等类创建界面元素,以便用户与窗口进行交互。

  3. OnDestroy():
    当窗口被销毁时调用,通常在关闭编辑器或切换场景时触发。在这里进行最终的清理工作,确保没有未释放的资源。

  4. Update():
    在编辑器窗口每帧更新时调用。通常在这里执行需要在每帧进行的逻辑。

5 编辑器窗口类中的常用成员

​ Unity 官方文档有关于编辑器窗口类的 API 说明:https://docs.unity.cn/cn/2022.3/ScriptReference/EditorWindow.html。

  • 静态变量

    1. focusedWindow:当前已获得键盘焦点的 EditorWindow。(只读)
    2. mouseOverWindow:当前在鼠标光标下的 EditorWindow。(只读)
  • 静态函数

    1. CreateWindow:创建窗口,如果允许窗口有多个,可用该 API 创建窗口。
    2. GetWindow:创建一个窗口对象。
    3. GetWindowWithRect:返回一个指定位置、大小的窗口。
    4. HasOpenInstances:检查编辑器窗口是否打开。
  • 成员变量

    1. titleContent:窗口标题名。
    2. positon:窗口位置大小信息。
    3. wantsMouseEnterLeaveWindow:如果设置为 true,则每当鼠标进入或离开窗口时,该窗口都会收到一次 OnGUI 调用。
  • 成员函数

    1. Show:显示面板。
    2. Repaint:重绘窗口。
    3. Close:关闭窗口。

6 小结

​ 想要实现自定义窗口,只需继承 EditorWindow 类,主要工作是在 OnGUI 中利用 GUI 相关 API 绘制控件处理功能逻辑。

​ 使用对应的事件回调函数帮助监听一些特殊情况,用于处理对应逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/464422.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】双向链表(链表实现+测试+原码)

前言 在双向链表之前&#xff0c;如果需要查看单链表来复习一下&#xff0c;链接在这里&#xff1a; http://t.csdnimg.cn/Ib5qS 1.双向链表 1.1 链表的分类 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 1.1.1 单向或者双向 1.1.2 …

Redis集群模型

主从 全量同步 增量同步 哨兵 分片集群

选择影视行业创业的原因,影视从业者创业成功的秘密

一、教程描述 本套教程是面向影视从业者的创业教程&#xff0c;主讲人将把自己的创业经验、行业观察、成长心得分享给大家。如果你正在创业&#xff0c;这门课可以让你飞速成长、弯道超车。主讲人积累的行业经验&#xff0c;会让你比大多数同行站的更高&#xff0c;看的更宽。…

k8s-资源限制与监控 15

资源限制 上传实验所需镜像 Kubernetes采用request和limit两种限制类型来对资源进行分配。 request(资源需求)&#xff1a;即运行Pod的节点必须满足运行Pod的最基本需求才能 运行Pod。 limit(资源限额)&#xff1a;即运行Pod期间&#xff0c;可能内存使用量会增加&#xff0…

七、热身仪式(Warm-Up Rituals)

5.Warm Up Rituals 五、热身仪式 A warm up ritual is your per flight checklist you go through before you start focusing for a big session.It may be checking that you have water, that you don’t need to use the bathroom, that your phone is turned off or you’…

嵌入式硬件越老越吃香,确实没错!

不知不觉已经从事硬件设计7年多了&#xff0c;7年对于一个从事硬件设计来说能有几个完整的生涯。2016年毕业&#xff0c;2023年即将结束&#xff0c;我已经在汽车这行业“摸爬滚打”了7年的时光。 回顾这7年&#xff0c;自己真的成长了很多很多。有项目失败整改的经验收获&…

k8s-深入理解Service(为Pod提供负载均衡和发现)

一、Service存在的意义 二、Service的定义和创建 Pod与Service的关系 Service的定义和创建 三、Service使用NodePort对外暴露应用 四种类型&#xff0c;常用的三种&#xff1a; 指定Service的NodePort端口 在实际生产中&#xff0c;k8s的集群不会直接暴露在公网中&#xff0c…

Linux开发工具的使用 (gcc/g++ | gdb)

目录 一、gcc/g 1.关于gcc/g 2.gcc如何使用 gcc选项&#xff1a; 预处理&#xff1a; 编译: 汇编: 连接: 函数库是什么&#xff1a; 函数库分为动态库和静态库两种 二、调试器gdb 1.关于gdb 2. gdb的使用 gdb选项&#xff1a; Linux是一个广泛用于开发的操作系统&…

KAJIMA CORPORATION CONTEST 2024(AtCoder Beginner Contest 340)ABCDEF 视频讲解

这场比较郁闷&#xff0c;C题短路&#xff0c;连续4次WA&#xff0c;导致罚时太多 A - Arithmetic Progression Problem Statement Print an arithmetic sequence with first term A A A, last term B B B, and common difference D D D. You are only given inputs for w…

43.1k star, 免费开源的 markdown 编辑器

简介 项目名&#xff1a; MarkText-- 简单而优雅的开源 Markdown 编辑器 Github 开源地址&#xff1a; https://github.com/marktext/marktext 官网&#xff1a; https://www.marktext.cc/ 支持平台&#xff1a; Linux, macOS 以及 Windows。 操作界面&#xff1a; 在操作界…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Blank组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Blank组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Blank组件 空白填充组件&#xff0c;在容器主轴方向上&#xff0c;空白填充组件具…

linux优化空间完全卸载mysql——centos7.9

文章目录 ⭐前言⭐linux命令使用&#x1f496; 基础命令&#x1f496; 内存优化&#x1f496; 完全删除mysql ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;linux优化空间&完全卸载mysql——centos7.9。 linux内存分配 在Linux中&#xff0c;内存分配是通过几种…