Unity 扩展编辑器 笔记

主要参考:文档原文

Unity 允许通过自定义 Inspector 和 Editor Windows 来扩展编辑器。
并且可以通过自定义的 属性绘制器 来定义属性在 Inspector 中的显示方式。

一、创建编辑器窗口(EditorWindow)

    1、创建继承自 EditorWindow 的类 MyWindow。(脚本必须放在“Editor”文件夹下)
    2、在 MyWindow 的 OnGUI 函数中编写 GUI 控件。可使用 GUI、GUILayout、EditorGUI、EditorGUILayout类,并且可以随意混合搭配使用。
    3、通过调用 EditorWindow.GetWindow(typeof(MyWindow)) 展示。 (标准、可停靠)
    4、也可通过调用 EditorWindow.GetWindowWithRect(typeof(MyWindow), Rect.zero) 展示,以显示地指定位置和区域。

二、属性绘制器(PropertyDrawer)

    用途1、对特性为 Serializable 的类的 Inspector 进行自定义。

public class XXX { }

[CustomPropertyDrawer(typeof(XXX))]         //CustomPropertyDrawer 告知 Unity 应该作为哪个类的属性绘制器
public class XXXDrawer : PropertyDrawer 
{
    EditorGUI.BeginProperty(position, label, property);
    //...
    EditorGUI.EndProperty();
}

    用途2、配合 PropertyAttribute,影响脚本成员在 Inspector 上的显示。

public class XXX 
{
    [YYY]
    public int a;
}

public class YYYAttribute : PropertyAttribute { }

[CustomPropertyDrawer(typeof(YYYAttribute))]
public class YYYDrawer : PropertyDrawer 
{
    void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        MyRangeAttribute range = (MyRangeAttribute)attribute;
        //...
    }
}

    注意:出于性能原因,EditorGUILayout 函数不能用于属性绘制器!

三、自定义编辑器

    1、脚本增加特性 [ExecuteInEditMode] 可在编辑器下运行。
    2、创建自定义编辑器。

public class XXX : MonoBehaviour { }

[CustomEditor(typeof(XXX))]             //CustomEditor 告知 Unity 应该作为哪个组件的编辑器
[CanEditMultipleObjects]                //CanEditMultipleObjects 告诉 Unity 您可以使用此编辑器来选择多个对象并同时更改所有对象
public class XXXEditor : Editor         //必须继承Editor
{
    //实现此函数以创建自定义检视面板。
    public override void OnInspectorGUI() { }                                           
    
    //实现此方法可创建您自己的交互式自定义预览。
    public override void OnInteractivePreviewGUI(Rect r, GUIStyle background) { }
    
    //实现此方法可为检视面板、主编辑器标头和对象选择器的预览区域创建自己的自定义预览。
    public override void OnPreviewGUI(Rect r, GUIStyle background) { }
    
    //如果要在预览标头中显示自定义控件,可重载此方法。
    public override void OnPreviewSettings() { }
    //使编辑器在场景视图中处理事件。
    //注意,非override!由消息系统处理。 
    //注意,如果要添加 2D GUI 对象(例如:GUI 或 EditorGUI),需要将这些对象包裹在 Handles.BeginGUI() 和 Handles.EndGUI() 的调用中。
    public void OnSceneGUI() { }                   
}

四、TreeView

    用于显示可以展开和折叠的层级数据。(例如 Hierarchy视图的样式)
    用到再细看。。

五、其他(自整理)

1、Unity自带PropertyAttribute的子类(源码):  
ContextMenuItemAttribute: 作用于变量上,给作用的变量在Inspector上添加右键菜单方法。
InspectorNameAttribute: 作用于枚举值,更改枚举值在 Inspector 上显示的名称。
TooltipAttribute: 作用于字段,为字段在 Inspector 添加悬浮解释文字。
SpaceAttribute: 作用于所有字段,在 Inspector 添加空行像素。
HeaderAttribute: 作用于变量上,给变量在 Inspector 中添加标题头。
RangeAttribute: 作用于 int 和 float 变量,限制范围值,在 Inspector 上显示范围条。
MinAttribute: 作用于 int 和 float 约束变量最小值。
MultilineAttribute: 作用于 string ,使 string 在 Inspector 显示多行文本区。
TextAreaAttribute: 作用于 string 类型,在 Inspector 添加高度灵活可滑动的文本区。
ColorUsageAttribute: 作用于 Color 类型变量上,使其可在取色面板配置显示 Alpha 和采用 HDR 标准。
GradientUsageAttribute: 作用于 Gradient 类型变量上,配置是否支持 HDR。
DelayedAttribute: 作用于基本数据类型 float, int 和 string 上,使其在Inspector被修改时不会立即生效,而是在按下回车或移除焦点时。

-------------------------------------------------------------------------------------------------
常用重要类:EditorEditorGUIEditorGUILayoutEditorGUIUtilityPropertyDrawerSerializedPropertyEditorStyles
--------------------------------
集合TreeView、ReorderableList

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity动画编辑器扩展是一种在Unity引擎中使用的功能,用于增强和定制动画编辑器的能力。通过扩展动画编辑器,开发者可以根据自己的需求添加新的功能和工具,使动画制作过程更加高效和便捷。 在扩展动画编辑器的过程中,开发者可以使用Unity的插件框架和API来创建自定义的窗口、工具栏、菜单和面板等界面元素。可以添加自定义的动画组件和控制器,以增加一些特殊的动画效果或行为。还可以编写脚本来实现自定义的动画算法、运动捕捉、路径编辑等功能,以满足不同类型的动画需求。 通过扩展动画编辑器,开发者可以更好地管理和组织动画资源,例如创建动画层级、动画事件管理,设置动画的播放速度和循环等。还可以进行动画的剪辑、合并、复制、粘贴和删除等操作,以快速调整动画的内容和表现效果。 另外,通过扩展动画编辑器,还可以实现与其他外部工具或软件的集成,例如使用第三方模型编辑器创建和导入动画,与物理引擎结合实现更逼真的动画效果,或者与VR/AR设备结合实现交互式的虚拟现实动画。 总之,Unity动画编辑器扩展为开发者提供了灵活和可定制的工具,使他们能够更加自由地创造各种精彩和富有表现力的动画作品。无论是游戏开发还是影视制作,扩展动画编辑器都能够为艺术家和开发者们提供更多的创作空间和可能性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值