unity menuitem_Unity编辑器拓展基础知识总结

v2-04229125186e59eda2e01b6fe12bc3b9_1440w.jpg?source=172ae18b

前言

从事Unity编辑器拓展也有一段时间了,该记录一下常见的知识点了,也方便自己日后查阅

结构

Unity编辑器拓展主要分为3大类

  • UnityEngine.GUI:可用于编辑器和运行时,需要自行计算Rect
  • UnityEditor.EditorGUI:只可用于编辑器,需要自行计算Rect
  • UnityEditor.EditorGUILayout:只可用于编辑器,自动计算Rect

其中UnityEditor.EditorGUILayout基于UnityEditor.EditorGUI实现

常见类

Rect

这个类型在编辑器拓展中十分常见,官方解释为

A 2D Rectangle defined by X and Y position, width and height.
一个由X,Y坐标,width,height宽高定义的2D矩形

其以左上角为坐标原点,X往右递增,Y往下递增

更加详细介绍可参照:Unity Rect官方文档

GUIContent

GUIContent定义了一个GUI Item内容,最完整的构造函数如下

//构建同时包含文本,图片和定义的tooltip的GUIContent。 当用户将鼠标悬停在其上方时,全局GUI.tooltip会被设置为这个tooltip

GUIStyle

一个GUIStyle定义了一个GUI Item的样式,最完整的构造函数如下

public 

但是我们最常用的还是string的隐式转换

public 

常用GUIStyle样式可以从Unity常用GUIStyle收集查看

常用编辑器拓展知识

菜单栏拓展

 [MenuItem("TargetCatalogName")]

Inspector拓展

 [CustomEditor(typeof(TargetClassName))]

双击资源回调

 [UnityEditor.Callbacks.OnOpenAsset(TargetCallBackOrder)]

UnityEditor生命周期

UnityEditor

Undo/Redo

UnityEditor

ScriptableObject序列化相关

  • 如果一个ScriptableObject(下面简称为SO)的HideFlag设置为HideInHierarchy,那么LoadAllAssetRepresentationsAtPath会将其忽略
  • 如果不将SO保存为Asset,运行游戏后将会被GC,从而丢失引用

资源管理相关

//添加子Asset

保存资源时,保险起见应当进行

  1. EditorUtility.SetDirty
  2. AssetDatabase.SaveAssets
  3. AssetDatabase.Refresh

TreeView

Unity Tree View官方文档

v2-6a666f6c17a91d2dbba7dbad02cfe3a9_b.jpg

Unity 折叠树

v2-a0c013eff9eef02bbd5ccef1ca913834_b.jpg

https://blog.csdn.net/e295166319/article/details/52370575

这个特性其实EditorGUILayout.BeginFoldoutHeaderGroup也可与之对位

AdvancedDropdown

Unity AdvancedDropdown官方文档

v2-23636acf33b776813ff4c12975a1a291_b.jpg

其他资源

Unity Editor中所有图标,包含所有Unity Editor中图标,方便使用

Unity开源的CSharp部分,可在其中找到自己想要实现的Editor样式源码

Unity编辑器拓展手册,超全,日文版,但是内容十分详尽

总结

Unity编辑器拓展知识点十分琐碎,是一个不断积累的过程,共勉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity编辑器拓展(Editor Extension)可以通过自定义的脚本来扩展Unity编辑器的功能和界面,以满足特定项目的需求。通过编辑器拓展,开发者可以创建自定义的编辑器窗口、工具栏按钮、菜单项、检视面板等,来增强Unity编辑器的功能和流程。 要创建一个Unity编辑器拓展,你可以使用C#编写一个继承自Editor类的脚本。这个脚本可以通过Unity的Inspector面板来设置相关的属性和行为。以下是一个简单的示例: ```csharp using UnityEngine; using UnityEditor; public class MyEditorExtension : EditorWindow { [MenuItem("Custom Tools/My Editor Window")] public static void OpenWindow() { // 创建并打开一个自定义的编辑器窗口 MyEditorExtension window = (MyEditorExtension)EditorWindow.GetWindow(typeof(MyEditorExtension)); window.Show(); } private void OnGUI() { // 在编辑器窗口中绘制UI元素 GUILayout.Label("Hello, I am a custom editor window!"); if (GUILayout.Button("Click Me")) { Debug.Log("Button clicked!"); } } } ``` 上述代码创建了一个自定义的编辑器窗口,并在窗口中绘制了一个标签和一个按钮。通过在Unity编辑器中点击"Custom Tools"菜单下的"My Editor Window",可以打开这个自定义的编辑器窗口。 除了编辑器窗口,你还可以通过继承Editor类来创建自定义的检视面板、菜单项等。Unity官方文档中有更详细的教程和示例,可以帮助你更深入地了解和使用Unity编辑器拓展

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值