【AI教人】在Inspector显示所有Delegate-Odin Inspector之三

又是挑战自己的无知的一天

UnityEvent

比较好处理

Delegate 呢 (by Inspector)

(最终结果是这样的,↑↑,暂时只有string , 之后在看怎么点击跳转)

Unity并不会默认在 Inspector 显示 Delegate(主要是没序列化不好控制吧)

缺点

没序列化,无法默认 Draw Property

优点

还是没序列化,相互区隔;就可以避免序列化产生的代码持有问题

cs 复制代码
	public string[] GetJugadaFinalizadaListenerNames()
	{
		var callbacks = JugadaFinalizadaDelegate?.GetInvocationList();
		if (callbacks == null)
		{
			return System.Array.Empty<string>();
		}

		string[] listenerNames = new string[callbacks.Length];
		for (int i = 0; i < callbacks.Length; i++)
		{
			var callback = callbacks[i];
			string targetTypeName = callback.Target != null
				? callback.Target.GetType().Name
				: callback.Method.DeclaringType?.Name ?? "Static";
			listenerNames[i] = targetTypeName + "." + callback.Method.Name;
		}

		return listenerNames;
	}

参考 - 无厘头 Inspector 一些写法

太多代码想记录下来了

??、111111

ValueDropDown

cs 复制代码
/// <summary>
/// cankao:https://www.youtube.com/watch?v=06_giCwo2u4;
/// 无用了??,还不如用回Unity Editor....
/// </summary>
public class UBlackboardEntryCondDrawer : OdinValueDrawer<AnyCalcuteValue_Ref>
{
    protected override void DrawPropertyLayout(GUIContent label)
    {
        GUIHelper.PushLabelWidth(50);
        DrawSearchablDrawdown();

        GUIHelper.PopLabelWidth();
    }

    void DrawSearchablDrawdown() { 
        //创造root 
        var root = new SearchableDropdownItem("Assembly");
        root.AddChild(new SearchableDropdownItem(EditorStyle.NoneStr, null));
        root.AddSeparator();
        //创造两个假的数据
        var child = new SearchableDropdownItem("levelSceneModule", "levelSceneModule");
        root.AddChild(child);
        child = new SearchableDropdownItem("xxxx", "???");
        root.AddChild(child);
        


        var target = this.ValueEntry.SmartValue;
        
        bool CheckNullFunc() => string.IsNullOrEmpty(target.typeValue);
        void ResetFunc() => target.typeValue= "";
        string CurrentDisplayNameGetter()
        {
            return target.typeValue;
        }
      
        void OnClick(SearchableDropdownItem item)
        {
            this.ValueEntry.SmartValue.typeValue = item.Value.ToString();
        }

        GUIUtil.SearchableDropdownList("Sel Type & Method", root, CheckNullFunc, ResetFunc, CurrentDisplayNameGetter, OnClick);
    }

    
}

更优雅改颜色

关键在于 IDisposable 这个 C# 类;;;;;;之前我是真不知道。。。。

cs 复制代码
    internal struct ColorScope : IDisposable
    {
        public Color OriginalColor;

        public ColorScope(Color color, Func<bool> predicate = null)
        {
            OriginalColor = GUI.color;
            if (predicate == null || predicate())
            {
                GUI.color = color;
            }
        }

        public void Dispose()
        {
            GUI.color = OriginalColor;
        }
    }

全局搜索"implicit operator "

implicit operator 是 C# 的隐式类型转换运算符,在 Unity 里主要用来让两种类型之间可以"自动转换",不需要写强制转换。

相关推荐
parade岁月18 分钟前
AI 写的前端代码为什么总像 5 年前的?Chrome 官方出手了
前端
SL_staff24 分钟前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
tryCbest1 小时前
Vue系列——第 15 篇:内置组件全家桶——Transition、Teleport、Suspense、KeepAlive
前端·vue.js
SL_staff1 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
武子康1 小时前
驾驶轨迹换个坐标,就能给移动机器人用吗?
人工智能·算法·机器学习
易师傅1 小时前
技术面试已死?AI 时代,真正拉开程序员差距的是什么?
前端·后端·程序员
jay神1 小时前
基于深度学习的交通流量预测系统(Web 版)
前端·人工智能·深度学习·yolo·计算机毕业设计
AiMan1 小时前
别再把秘塔会话逐个点开:这可把秘塔多个会话一次导出?AI导出鸭
前端·后端·面试
AiMan1 小时前
你好,请问可以一键导出Dola多个对话框内容吗?一键导出一整年哦
前端
SL_staff2 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品