【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 里主要用来让两种类型之间可以"自动转换",不需要写强制转换。

相关推荐
淡海水1 小时前
06-02-源码-增量标记算法实现
算法·unity·c#·gc
fengci.1 小时前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
Ward的AI产品实战1 小时前
开源 AI 网关 Magpie 调优终结篇:顺位排错、跨家族对抗审查与 5 大路由组重构(下篇)
前端·人工智能
Highcharts.js1 小时前
BI可视化图表“维护难”问题的解决方案
开发语言·前端·javascript·编辑器·ecmascript·bi·highcharts
碧海银沙音频科技研究院1 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
青春不朽5121 小时前
Python 的 list append 为什么是均摊 O(1)?拆开过度分配那张表,看容量翻倍背后的暗账
java·python·list
广州华水科技1 小时前
单北斗GNSS在建筑形变监测中的应用与优势分析
前端
云淡风轻~窗明几净1 小时前
角谷猜想与百度AI的对话dialog(原始稿)
人工智能·算法·机器学习·图论
hunter_0761 小时前
Swift、Objective-C++ 与 Flutter 如何调用 C++:从混编接入到内存安全
前端