当前位置: 首页 > article >正文

Unity-Editor扩展Odin + 自定义EditorWindow记录

没有上下文,可能你不知道这是什么(关于Odin Inspector)

在写一个 Odin 插件的完整文章,卡了三天,之后会放出

使用Unity的人之中 1/10 可能会使用Editor扩展,而这之中的又1/10的 人可能会用Odin这个Editor的附加扩展 ------------ 1%的可能有兴趣

我曾经也是其中之一,一位觉得本身Editor就没什么用,而且Odin又扩展了Editor的Editor模板

对比一下Odin v3.0 和 3.3 的区别

Odin 3.0(2018)

Odin 3.3

不明白为什么?有什么?好对比,就对了

我也不打算解释

Odin Inspector 另外最新版本的<介绍页>,的IMGUI动画,也是藏了一些细节。。。。

(静态美比较重要,存在时间长,而且先有静态美再有动态美)

可能,你还是看不明白

看不明白就对了,看明白了你会想吐

EditorWindow你又明白多少??

                if (ButtonTexture(_coreData.tools.icons.effects, 20))
                {
                    AssetsPaletteWindow.Init();
                }
    public class AssetsPaletteWindow : EditorWindow
    {
        private Editor _editor;
        private AssetsPalette _attachedPalette;

        private static AssetsPaletteWindow _currentWindow;
        
        /// <summary>
        /// //修复太长问题
        /// </summary>
        Vector2 _scrollPos;
        [MenuItem("D2D/Open Palette &e")]
        public static void Init()
        {
            if (_currentWindow != null)
            {
                _currentWindow?.Close();
                _currentWindow = null;
            }
            else
            {
                _currentWindow = ScriptableObject.CreateInstance<AssetsPaletteWindow>();
                _currentWindow.position = new Rect(_coreData.tools.palettePosition.x, _coreData.tools.palettePosition.y, _coreData.tools.paletteSize.x, _coreData.tools.paletteSize.y);
                _currentWindow.ShowPopup();
            }

            OnWindowToolsOpen();
        }
        private void OnEnable()
        {
            _attachedPalette = AssetsPalette.Instance;
            _editor = Editor.CreateEditor(_attachedPalette);
        }
        private void OnGUI()
        {
            _scrollPos = GUILayout.BeginScrollView(_scrollPos);
            // GUILayout.Space(100);

            _editor.OnInspectorGUI();

            //一个 Button换色写法
            GUI.backgroundColor = Color.red;
            if (GUILayout.Button("Close"))
            {
                //CloseAll();
            }
            GUI.backgroundColor = Color.white;
            GUILayout.EndScrollView();
            
        }

Odin 写标签代码容易带来的问题

简单是优点,而最大的优点往往是最大的缺点-------成也萧何,败也萧何

//定义一个数据类:ReplaceTool,可自然产生折叠效果(IMGUI自带)
  /// <summary>
        /// 扩展了GameObject 的 EditorInstantiate()一个替换场景”站桩点“的方法
        /// </summary>
        [Serializable]
        public class ReplaceTool
        {
            
            //[Foldout("Replace tool")]//最终代码是有的,但其实没有用到的功能,
            //!!!这里,我把他屏蔽了,其实功能完全没影响。。。。
            //所以就会带来一个”严重“,但不易被发现的问题:就是很多影响启动(或Init初始化)的效率,但实际上没用的代码残留
            //”普通“的程序员??是否有意识,或者足够自律,能把折叠多余的代码及时清掉??
            //
            //你不知道什么什么用的代码就应该清掉|杜绝,--------------”防微杜渐“
            [SerializeField] private GameObject _replacer;

            //[Foldout("Replace tool")]
            [SerializeField] private bool _destroyOldSelected;

            //[Foldout("Replace tool")]
            [SerializeField] private bool _selectNewAfterSpawn;
            
            [Button("Replace")]
            public void Replace()
            {
                var instances = new List<GameObject>();
                var length = Selection.gameObjects.Length;
                for (var i = 0; i < length; i++)
                {
                    var g = Selection.gameObjects[i];
                
                    var instance = _replacer.EditorInstantiate(g.transform.position, g.transform.parent);
                    instance.transform.rotation = g.transform.rotation;
                    instances.Add(instance);

                    if (_destroyOldSelected)
                    {
                        DestroyImmediate(Selection.gameObjects[i]);
                        length--;
                        i--;
                    }
                }

                if (_selectNewAfterSpawn)
                    Selection.objects = instances.ToArray();
            }
        }
        /// <summary>
        /// 站桩替换,,很简单的功能;实在不知道有什么用
        /// </summary>
        [Space]
            public ReplaceTool replaceTool;

总结,

这个文章,是三段,或四段没什么关系的,又都是Editor 扩展的总结+记录


http://www.kler.cn/a/399627.html

相关文章:

  • ssm129办公用品管理系统开发与设计+jsp(论文+源码)_kaic
  • OMV7 树莓派 tf卡安装
  • C语言项⽬实践-贪吃蛇
  • Ubuntu 的 ROS 操作系统 turtlebot3 导航仿真
  • 丹摩征文活动|丹摩助力selenium实现大麦网抢票
  • LeetCode题解:18.四数之和【Python题解超详细】,三数之和 vs. 四数之和
  • Python正则表达式中re.M 是什么意思
  • Big Data for AI实践:面向AI大模型开发和应用的大规模数据处理套件
  • 【WPF】Prism学习(四)
  • 深入浅出 Go 语言:现代编程的高效选择
  • 【PGCCC】Postgresql 存储设计
  • Flink运行时架构以及核心概念
  • 基于SpringBoot+Vue的船舶维保管理系统(带1w+文档)
  • UE5的线程同步机制
  • 鸿蒙HarmonyOS 地图定位到当前位置 site查询等操作
  • Rewar Model的输出(不包含训练)
  • <有毒?!> 诺顿检测:这篇 CSDN 文章有病毒
  • Gin 框架中的路由
  • PostgreSQL高可用Patroni安装(超详细)
  • datalist 是什么?以及作用是什么?
  • Android 判断当前是否亮灭屏状态或黑屏锁屏状态
  • 小白快速上手 labelme:新手图像标注详解教程
  • 集群聊天服务器(3)muduo网络库
  • 编译sddm 0.18.1 依赖
  • 图像分类之花卉识别实验验证
  • LeetCode59. 螺旋矩阵 II