想便宜一个UnityIMGUI编纂器代码框架(一)
比来写了不少编纂器代码,然后在想这个事情。一般来说仿佛城市用Unity自带的IMGUI或者使用一些插件比如Odin(个人十分安利这个插件,因为确实太强大了),还有就是使用Unity新出的UIToolKit。老的IMGUI用起来很难受,但是这么多年也基本习惯了。UIToolKit的UIBuilder用起来倒是很强大,但是本身已经习惯了IMGUI,而且这种方式对于我来说,总感觉过于繁琐了,所以一直不习惯。用起来斗劲简洁简便的倒是OdinInspector,使用标签的方式开发,个人用起来很舒服。但是奈何它太大了而且还收费,不外仿佛出了免费版的有一些核心功能。但是不确定商用上是否有什么风险,所以个人决定测验考试把Unity的EditorGUI对象化,甚至组件化,让它开倡议来像使用UGUI一样开发。本人程度不怎么样,而且是个人心血来潮,三分钟热度的事情,很有可能会鸽,到时候请口下留情。
首先既然要对象化就得有一个所有UI组件的基类,我把它叫做XObject,因为名字没想好,就暂时以X来定名,不外也是我笔名的拼音首字母也挺契合。
我们来总结一下这个XObject都应该由什么构成,个人是这么设计的:
首先是id,每一个组件都需要独一的标识,所以id是必不成少的。
其次是实现绘制的虚方式,子类担任后重写该方式用来实现绘制。
还有该组件感化于的window。
public class XObject : ScriptableObject
{
static int counter;
/// <summary>
/// 独一标识
/// </summary>
public readonly int id;
protected XWindow m_Window;
/// <summary>
/// 感化于的界面
/// </summary>
public XWindow Windows => m_Window;
public XObject(XWindow window)
{
id = counter++;
m_Window = window;
}
/// <summary>
/// 实现逻辑和绘制的方式
/// </summary>
public virtual void OnGUI()
{
}
}
上述代码中引用了XWindow,它是一个担任了EditorWindow的子类,使用它将会对EditorWindow进行一层封装。以下是简单的封装还未详细扩展。
public class XWindow : EditorWindow
{
public List<XObject> objs;
protected virtual void Awake()
{
objs = new List<XObject>();
}
private void OnGUI()
{
for (int i = 0; i < objs.Count; i++)
{
objs.OnGUI();
}
}
protected virtual void OnDisable() { }
protected virtual void OnEnable() { }
protected virtual void OnSelectionChange() { }
protected virtual void OnFocus() { }
protected virtual void OnLostFocus() { }
protected virtual void OnHierarchyChange() { }
protected virtual void OnInspectorUpdate() { }
}
XWindow的OnGUI方式来调用各个组件的OnGUI来实现绘制。但是objs这个列表里就需要各个组件注册进来了,所以咱们需要在xobject构造的时候加这么一句。
public XObject(XWindow window)
{
id = counter++;
m_Window = window;
window.objs.Add(this);
}
两个基类就大致完成了。
<hr/>更新一下:由于XObject为C#原生类,所以在每次编译脚本的时候XWindow中列表存放的xobject城市被销毁,所以我暂时把它改为了担任 ScriptableObject 的子类。 有空研究点别的吧,这玩意一没价值,二没前途;顺道你把XObject标记上,应该是这个,System下的一个特性,然后就能被EditorWindow序列化了 IMGUI主要是性能过不去,你还不如把UITooki改成UGUI化 序列化之后脚本编译也是会被销毁的,你自己试试,毕竟是原生类。 性能好不好无所谓,毕竟这东西又不会打包出去。而且IMGUI最少用了五年了,习惯已经难改掉了,让我用UItoolkit那套反而会难受的要死,最主要的那个感觉uxml太麻烦了,好用是好用但就是不习惯,只要imgui还支持一天我估计我就是一行一行敲也不会用那玩意儿。
页:
[1]