找回密码
 立即注册
查看: 312|回复: 0

Unity3D Odin Inspector 简单介绍与入门

[复制链接]
发表于 2022-7-17 21:32 | 显示全部楼层 |阅读模式
环境:Unity2021.1.14 Odin3.0.4 语言:C#
面向:Editor开发人员
总起

从很早之前粗略了解Odin,看到它炫酷地Editor实现方式,到现在重度使用,慢慢的一个疑问产生了。

Odin究竟解决了一个什么问题?

根据半年的使用经验,我尝试回答一下这个问题。

Odin提供一整套Editor UI绘制的解决方案,大概有四个特点
1. 以数据类作为核心绘制单元,通过打Attribute形式指定绘制形式;
2. 100多个Attribute提供了庞大的绘制能力与参考代码;
3. 极大拓展了Unity基础绘制能力,如多态、字典;
4. 通过Processor、ValueDrawer等机制可以灵活应对各种需求。

这使得仅仅通过简单的代码就能创建复杂多变的Editor。它或许并不能脱离IMGUI本身的限制,但它能使得开发轻松而高效。
一个例子

Unity自身实现一个按钮的方式:
using UnityEditor;
using UnityEngine;

public class TestOdinIntro2 : MonoBehaviour
{
}

[CustomEditor(typeof(TestOdinIntro2))]
public class TestOdinIntro2Editor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        if (GUILayout.Button("Click"))
        {
            Debug.LogError("Hello world2");
        }
    }
}

使用Odin实现一个按钮:
using Sirenix.OdinInspector;
using UnityEngine;

public class TestOdinIntro : MonoBehaviour
{
    [Button]
    public void Click()
    {
        Debug.LogError("Hello world");
    }
}
效果:



Odin本质还是使用IMGUI,但它使用Attribute的方式使得绘制界面更容易组织、更容易应对游戏实际开发过程中多变的需求。
更加别提Odin极大扩展了Unity的绘制,诸如多态、字典。如果对UnityEditor有重度需求,Odin是个强烈推荐的插件。
学习资料

本节介绍一下我在实践过程中是如何学习Odin的。
首先推荐的是Odin各种Attribute的例子,一开始可以根据需求去找现有的Attribute:



安装插件后可以在Unity菜单栏Tools/Odin Inspector/Attribute Overview找到或者官网https://odininspector.com/attributes上也可预览。
Odin的进阶用法



可以在插件的Serenix/Demos目录下找到。
这里包括自定义Drawer和Processor等Odin的进阶用法,这类功能开始切入Odin的本质,是想要灵活应用Odin必备的知识。
官网的tourial


网址:https://odininspector.com/tutorials
里面针对Odin各类主题,如Attribute、Custom Editor、Serialize等有详细的说明。一开始可以大致浏览一遍,后续可以根据需求具体研究。
顺便推荐一下UnityEditor相关的有个十分经典的教程:http://49.233.81.186/
最后两个实用小工具:Serialization Debugger和Static Inspector:





分别可以在Unity菜单栏中找到:
1.Tools/Odin Inspector/Serialization Debugger
2.Tools/Odin Inspector/Static Inspector
Serialization Debugger是查看序列化问题非常好用的工具,遇到诸如“为什么没使用Odin绘制出来?”等问题就可以使用。
而Static Inspector是检查静态数据的工具。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-12 22:21 , Processed in 0.111796 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表