没有上下文,可能你不知道这是什么(关于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 扩展的总结+记录