diff --git a/CHANGELOG.md b/CHANGELOG.md index 859ae54..ba8d839 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## [Unrealse] + +## [0.5.4] - 2025-10-13 + +新版软接口: +* 新增了对方法的识别,现在可以使用多种预设的接口模式,仅凭一个名称就调用到任意位置的方法!但是如果软接口执行失败,会直接抛出错误,不会隐式返回了。 + +UI库: +* 添加了关于全部复位状态的控制。 + +文本包裹器: +* 优化了在设置静态文本包裹器的参数时,可能会频繁执行装拆箱操作的问题。 +* 添加了一个包裹器工具集,可以避免在声明时使用大量的new语法,并加入对象池控制,不管它对性能是否有所提升,都可以堵住那些不愿意写大量new的人的嘴。 +* 添加了更多语法糖。 + +对象池宏: +* 添加一种特殊的对象池。 + +新增布尔库: +* 添加通过布尔切换执行委托的方法 + +编译程序更新: +* 加入对命令行的支持,通过命令行参数控制编译 + +修复 +* 修复超级单例如果声名为了一个非自封闭的单例类,并调用绝对自身,期望获得隐式声名的嵌套类时,会无限创建实例的问题。 +* 修复文本包裹器中对于常规数值类型的转换太有限的问题。 +* 修复 XericRectSplinePath 在添加项目后界面坍塌的问题。 + + ## [0.5.3] - 2025-09-26 添加一个大顶堆数据容器XericLibrary.Runtime.Type.SpatialAlgorithm.MaxHeap diff --git a/Editor/DeconstructionStyle.dll b/Editor/DeconstructionStyle.dll index c05adf4..bf26503 100644 Binary files a/Editor/DeconstructionStyle.dll and b/Editor/DeconstructionStyle.dll differ diff --git a/Editor/XericLibraryEditor.dll b/Editor/XericLibraryEditor.dll index 39445bf..4f2bb1d 100644 Binary files a/Editor/XericLibraryEditor.dll and b/Editor/XericLibraryEditor.dll differ diff --git a/Runtime/Deconstruction.dll b/Runtime/Deconstruction.dll index e0a90cd..f195cae 100644 Binary files a/Runtime/Deconstruction.dll and b/Runtime/Deconstruction.dll differ diff --git a/Runtime/SerializerHelper.dll b/Runtime/SerializerHelper.dll index 455cb0e..6100a56 100644 Binary files a/Runtime/SerializerHelper.dll and b/Runtime/SerializerHelper.dll differ diff --git a/Runtime/UI/MacroUI.cs b/Runtime/UI/MacroUI.cs index 2c6edf3..cc4b597 100644 --- a/Runtime/UI/MacroUI.cs +++ b/Runtime/UI/MacroUI.cs @@ -134,16 +134,16 @@ namespace XericLibrary.Runtime.MacroLibrary #region 事件委托 public Action OnAnyToggleValueSwitchOn; - + #endregion - + #region 字段属性 #if ODIN_INSPECTOR [SerializeField, LabelText("编辑单选项目值")] #endif private List toggleValue; - + #endregion public override void BakeToggleGroupItems() @@ -163,15 +163,15 @@ namespace XericLibrary.Runtime.MacroLibrary return default; return toggleValue[index]; } - + protected override void ToggleRegister(Toggle t) { base.ToggleRegister(t); OnAnyToggleValueSwitchOn?.Invoke(t, GetValueByIndex(GetIndex(t))); } } - - + + /// /// toggle映射集 /// @@ -208,7 +208,7 @@ namespace XericLibrary.Runtime.MacroLibrary protected List toggleList = new List(); protected bool ToggleListInvalid => toggleList is not { Count: > 0 }; - + public List ToggleList { get @@ -250,7 +250,9 @@ namespace XericLibrary.Runtime.MacroLibrary /// /// 选中项目实例 /// - public Toggle CurrentSelectToggle => ToggleList[_nowSelectToggleIndex]; + public Toggle CurrentSelectToggle => _nowSelectToggleIndex < 0 || _nowSelectToggleIndex > ToggleList.Count + ? null + : ToggleList[_nowSelectToggleIndex]; /// /// 允许清空选项的选中状态 @@ -260,7 +262,7 @@ namespace XericLibrary.Runtime.MacroLibrary get => ToggleGroup.allowSwitchOff; set => ToggleGroup.allowSwitchOff = value; } - + // 映射关系脏 private bool _mappingDirty = false; @@ -270,6 +272,9 @@ namespace XericLibrary.Runtime.MacroLibrary // 当前选中的项目 private int _nowSelectToggleIndex = -1; + // 在任意选项选中时复位允许反选toggle的功能 + private bool _resetAllowToggleOffAtAnyIsOn; + #endregion #region 结构更新 @@ -334,6 +339,7 @@ namespace XericLibrary.Runtime.MacroLibrary else tempToggleList = ToggleGroup.GetToggles(); } + // 需要注意的是,这里不能随意释放掉原来的选项列表 if (tempToggleList is { Count: > 0 }) toggleList = tempToggleList; @@ -360,18 +366,22 @@ namespace XericLibrary.Runtime.MacroLibrary .ToList(); } #if ODIN_INSPECTOR - [HorizontalGroup("GetGroup"), Button("SaveGroup")] + [HorizontalGroup("GetGroup"), Button("SaveGroup")] [DisableInEditorMode] #endif + [Obsolete("正常流程单选项组中的标签已经呈现了必要对象,无需重新设置")] public void SetToggelGroupItems() { + if (!ToggleGroup.gameObject.activeInHierarchy) + { + Debug.LogWarning("编组尚未激活,成员与实际可能存在差异。"); + return; + } var realToggleGroup = ToggleGroup.GetToggles(); if (ToggleListInvalid || toggleList.Count != realToggleGroup.Count) { Debug.LogError("编组无效,或编组成员与实际不符"); return; } - realToggleGroup.Clear(); - realToggleGroup.AddRange(toggleList); Debug.Log("编组设置成功"); } @@ -427,7 +437,7 @@ namespace XericLibrary.Runtime.MacroLibrary if (_noInit) SetToggelGroupItems(); - + _mappingDirty = false; _noInit = false; } @@ -537,14 +547,13 @@ namespace XericLibrary.Runtime.MacroLibrary /// protected virtual void ToggleRegister(Toggle t) { + TryResetToggleGroupAutoOff(); _nowSelectToggleIndex = GetIndex(t); OnAnyToggleSwitchOn?.Invoke(t); OnAnyToggleIndexSwitchOn?.Invoke(_nowSelectToggleIndex); } - - /// /// 获取toggle代表的索引 /// @@ -585,6 +594,7 @@ namespace XericLibrary.Runtime.MacroLibrary public void SetToggleOn(Toggle target) { target.isOn = true; + TryResetToggleGroupAutoOff(); } /// @@ -606,6 +616,7 @@ namespace XericLibrary.Runtime.MacroLibrary public void SetToggleOnWithoutNotify(Toggle target) { _nowSelectToggleIndex = GetIndex(target); + TryResetToggleGroupAutoOff(); target.SetIsOnWithoutNotify(true); } @@ -615,13 +626,48 @@ namespace XericLibrary.Runtime.MacroLibrary /// public void SetToggleOnWithoutNotify(int index) { - if (0 < index && index < ToggleList.Count) + if (0 <= index && index < ToggleList.Count) { SetToggleOnWithoutNotify(ToggleList[index]); } } + + /// + /// 将整个单选项组复位,这同时会标记单选项组上的允许取消操作。 + /// 在下次选中标签时,会自动复位这个标记,确保全部反选的状态仅出现一次。 + /// +#if ODIN_INSPECTOR + [Button("ResetAllToggleOff")] +#endif + public void ResetGroupAllToggleOff() + { + _nowSelectToggleIndex = -1; + if (ToggleGroup == null) + { + Debug.LogError("单选项组不存在..."); + } + if (!ToggleGroup.allowSwitchOff) + { + _resetAllowToggleOffAtAnyIsOn = true; + ToggleGroup.allowSwitchOff = true; + } + ToggleList.ForEachDo(a => a.SetIsOnWithoutNotify(false)); + } + /// + /// 如果此次按下是发生在全部反选之后的首次操作,那么关闭允许关闭的操作。 + /// + private void TryResetToggleGroupAutoOff() + { + if (_resetAllowToggleOffAtAnyIsOn) + { + _resetAllowToggleOffAtAnyIsOn = false; + ToggleGroup.allowSwitchOff = false; + } + } + + /// /// 清除映射结构(不会清除toggle实例) /// @@ -643,7 +689,7 @@ namespace XericLibrary.Runtime.MacroLibrary Clear(); } - + public IEnumerator GetEnumerator() { diff --git a/Runtime/UI/TmpText/TMPHyperlinkManager.cs b/Runtime/UI/TmpText/TMPHyperlinkManager.cs index a01529d..4ece97b 100644 --- a/Runtime/UI/TmpText/TMPHyperlinkManager.cs +++ b/Runtime/UI/TmpText/TMPHyperlinkManager.cs @@ -211,6 +211,10 @@ namespace Deconstruction.UI.TmpText /// 强制给带有link标记的对象加上超链接组件 /// 是否包含重复引用的链接(是否包含当前超链接管理器下其他超链接管理器作用域下的超链接对象) /// + /// + /// 这个操作会扫描所有对象,然后在具有超链接特征的文本组件上生成超链接管理器。 + /// 超链接响应的前提是开启 Raycast Target 选项。 + /// public List GetChildrenTmpText2Hyperlink( bool forceRefesh = false, bool requirementHyperlink = true, @@ -256,6 +260,9 @@ namespace Deconstruction.UI.TmpText return result; } + /// + /// 直接刷新所有超链接 + /// #if ODIN_INSPECTOR [Button] #endif diff --git a/Runtime/XericCecil.dll b/Runtime/XericCecil.dll index 25de67c..96fe962 100644 Binary files a/Runtime/XericCecil.dll and b/Runtime/XericCecil.dll differ diff --git a/Runtime/XericLibrary.dll b/Runtime/XericLibrary.dll index eb0e84e..f4c68fd 100644 Binary files a/Runtime/XericLibrary.dll and b/Runtime/XericLibrary.dll differ diff --git a/Runtime/XericLibrary.xml b/Runtime/XericLibrary.xml index 3e1e0a2..b305bc5 100644 --- a/Runtime/XericLibrary.xml +++ b/Runtime/XericLibrary.xml @@ -1528,1347 +1528,6 @@ 超时时间(秒) - - - 配置宏 - - - - - 保存uri配置文件 - - 自行完毕状态 - - - - 读取uri配置文件 - - 自行完毕状态 - - - - 协议 - - - - - 主机名 - - - - - 最终路径,最后的斜杠会影响uri的处理 - - - - - 在列表中搜索名称,如果没找到,返回一个空字符串 - - - - - - - - 通过名称获取路径uri - - - - - - - - 处理一段路径中的占位符,将其替换为目标符号 - - - - - - - - 添加一个配置项 - - - - - - - 移除一个配置项 - - - - - - 移除一个配置项 - - - - - - 设置一个配置项 - - - - - - - 名称 - - - - - 值 - - - - - 静态类型,生成时固定类型,如果后续设置类型不同将拒绝赋值 - - - - - 是否为空,不检查值是否为空,而是置标志位 - - - - - 类型 - - - - - 调试宏,重载unity的日志输出效果 - - - - - 开始替换日志输出器 - - - - - 结束替换日志输出器 - - - - - 彩色日志 - - - - - - 彩色日志 - - - - - - 彩色警告 - - - - - - 彩色抛出 - - - - - - 彩色断言 - - - - - - 彩色错误 - - - - - - il指令分析库 - - - - - 从类上获取IL程序集 - - - - - - - 检查类上的方法是否调用了基类的类 - - - - - - - - 检查一个方法里是否通过base.调用基类的方法 - - - - - - - - - - 菜单宏 - - - - - 值为空时显示的文本 - - - - - 数值格式化格式 - - - - - 字符太长时替换样式 - - - - - 呈献值 - - - - - 值为空时显示的文本 - - - - - 数值格式化格式 - - - - - 字符太长时替换样式 - - - - - 名称及标识符 - - - - - 值处理器 - - - - - 承载对象 - - - - - 格式包裹器 - - - - - 创建一个呈现组 - - - - - - - - - - - 添加一个值 - - - - - - - - - - - - - 创建一个值 - - - - - - - - - - - - - 创建一个值 - - - - - - - - - - - - 对象计算器 - - - - - 设置值 - - - - - - - 获取值 - - - - - - - 值计算器 - - - - - - 值步骤长度 - - - - - 取整方向 - - - - - 设置值 - - - - - - 获取值 - - - - - - 设置值 - - - - - - 浮点数计算器 - - - - - 浮点数计算器 - - - - - 浮点数计算器 - - - - - 检查当前变换组件上是否发生盒体碰撞 - - - - - - - 检查当前变换组件上是否发生盒体碰撞 - - - - - - - - - 检查盒体范围是否发生碰撞(或在某个碰撞体内) - - - - - - - - - - - 检查胶囊体范围是否发生碰撞(或在某个碰撞体内) - - - - - - - - - - - 检查球体范围是否发生了碰撞(或在某个碰撞体内) - - - - - - - - - - 命令控制台面板宏 - - 脚本中将监听的命令注册到此,当用户输入时,也可以通过这里的字典进行查找。 - 命令需要有一个开启词,自动补全也仅支持开启词补全。 - 命令后的参数将会由具体目标处理。 - - - - - - 命令 - - - - - 继承中间件 - - - - - 执行命令 - - - - - 当前进程ID - - - - - 通过程序名称查询窗口句柄 - - - - - - - - 枚举窗口回调委托 - - 窗口句柄。 - 应用程序定义值。 - - - - - 通过将句柄传递到每个窗口,进而将传递给应用程序定义的回调函数,枚举屏幕上的所有顶级窗口。 - 枚举窗口 将一直持续到最后一个顶级窗口被枚举或回调函数返回 FALSE。 - - EnumWindows 函数不枚举子窗口,但系统拥有的几个具有WS_CHILD样式的顶级窗口除外。 - 此函数比在循环中调用 GetWindow 函数更可靠。 - 调用 GetWindow 以执行此任务的应用程序有被捕获到无限循环或引用已销毁窗口的句柄的风险。 - - - - 指向应用程序定义的回调函数的指针。 - 要传递给回调函数的应用程序定义值。 - 如果该函数成功,则返回真 - - - - 检索指定窗口的父级或所有者的句柄。 - 若要检索指定上级的句柄,请使用 GetAncestor 函数。 - - 如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。 - - 此函数通常由于以下原因之一而失败: - 该窗口是无所有者或没有 WS_POPUP 样式的顶级窗口。 - 所有者窗口具有 WS_POPUP 样式。 - - - - - 如果窗口是子窗口,则返回值是父窗口的句柄。 如果窗口是具有 WS_POPUP 样式的顶级窗口,则返回值是所有者窗口的句柄。 - - - - 检索创建指定窗口的线程的标识符,以及创建该窗口的进程(可选)的标识符。 - - - 窗口的句柄。 - 指向接收进程标识符的变量的指针。 如果此参数不为 NULL, 则 GetWindowThreadProcessId 会将进程的标识符复制到变量;否则,它不会。 如果函数失败,则变量的值保持不变。 - 如果函数成功,则返回值是创建窗口的线程的标识符。 如果窗口句柄无效,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。 - - - - 找到当前进程下的窗口句柄 - - - - - - 找到当前进程下的所有窗口句柄 - - 如果发生错误,返回null - - - - 所有窗口展示命令 - - - - - - 隐藏窗口并激活另一个窗口 - - - - - 激活并显示窗口。如果窗口最小化、最大化或排列,系统会将其还原到其原始大小和位置。应用程序应在首次显示窗口时指定此标志 - - - - - 同 ShowNormal - - - - - 激活窗口并将其显示未最小化窗口 - - - - - 激活窗口并显示未最大化的窗口 - - - - - 同 ShowMaximized - - - - - 以最近的大小和位置显示窗口。 此值类似于 SW_SHOWNORMAL,只是窗口未激活。 - - - - - 激活窗口并以当前大小和位置显示窗口。 - - - - - 最小化指定的窗口,并按 Z 顺序激活下一个顶级窗口。 - - - - - 将窗口显示为最小化窗口。 此值类似于 SW_SHOWMINIMIZED,但窗口未激活。 - - - - - 以当前大小和位置显示窗口。 此值类似于 SW_SHOW,只是窗口未激活。 - - - - - 激活并显示窗口。 如果窗口最小化、最大化或排列,系统会将其还原到其原始大小和位置。 还原最小化窗口时,应用程序应指定此标志。 - - - - - 根据启动应用程序的程序传递给 CreateProcess 函数的 STARTUPINFO 结构中指定的SW_值设置显示状态。 - - - - - 最小化窗口,即使拥有窗口的线程没有响应。 仅当最小化不同线程的窗口时,才应使用此标志。 - - - - - 设定窗口的显示状态 - - - 窗口句柄 - 指定窗口如何显示。如果发送应用程序的程序提供了StartUpInfo结构,则应用程序的第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。 - 如果窗口以前就可见,返回真,否则返回否 - - - - 设定窗口的显示状态,而无需等待操作完成 - - - 窗口句柄 - 指定窗口如何显示。如果发送应用程序的程序提供了StartUpInfo结构,则应用程序的第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。 - 如果操作已成功启动,则返回真 - - - - 矩形信息 - - - - - 监视器信息 - - - - - 结构体大小 - - - - - 物理分辨率和位置 - - - - - 工作区域(排除任务栏) - - - - - 标志位(如主显示器) - - - - - 设备名称 - - - - - - - 设备上下文(DC) - 剪辑区域 - - 自定义数据 - - - - - 显示器拷贝信息 - - - - - 刷新所有显示器信息 - - - 返回显示器原始信息 - - - - 消息宏 - - - - - 基础消息 - - - - - 业务消息 - - - - - - 重定向文本消息发送(一般定向到消息发送方法上) - - - - - 所有委派成员 - - - - - 无参委派成员 - - - - - 启用自动转换 - - 让委派成员更智能地通过cast函数来传播消息里的内容; - 具体来说,当消息里的内容是一个对象结构时,而输出是string类型,这时json反序列化会报错, - 但使用自动转换会尝试通过其他方法获取到里面的内容。 - - - - - - 自动调用委托 - - - - - - 一个参数的委派成员 - - - - - - 注册一个重定向消息处理,这会通过消息事件处理 - - - - - - 注册一个重定向且带有具体类型的消息处理 - - 尽管在每个委托实现的前面注册重定向会比较符合阅读习惯,但是这样会导致只能注册一个寂寞(因为在还没有任何成员注册以前,它只是一个null) - - - - - - - - - 向这里发送重定向消息 - - 由于消息很可能不是在主线程运行的,所以这里只是保存. - 需要在主线程上手动调用MainThreadProcessingMessage来处理消息 - - - - - - - 在主线程上处理消息 - - - - - 获取安全的消息,过程中发生的错误均会通过消息链路进行向上传递 - - - - - - - 将对象序列化为消息 - - - - - - - - - 发送消息的扩展 - - - - - - 发送对象的扩展 - - - - - - - - 直接获取事件名称 - - - - - - - 直接获取事件成员 - - - - 是否沉默,如果为真,则不会输出错误信息 - - - - - 直接获取事件成员 - - - - - - - - - 可以调用的目标封装 - - - - - 调用承载 - - - - - 示例方法封装 - - 目标实例 - 方法名称 - - - - 示例方法封装 - - 目标实例 - 方法名称 - 参数类型 - - - - 实例方法封装 - - 目标实例 - 方法名称 - 参数对象 - - - - 实例方法封装 - - 目标实例 - 方法名称 - - - - 实例方法封装 - - 目标实例 - 方法名称 - 参数类型 - - - - 实例方法封装 - - 目标实例 - 方法名称 - 参数对象 - - - - 调用 - - - - - - 设置参数 - - - - - 添加委托封装对象 - - - - - - 通过名称召唤委托封装 - - - - - - - 尝试通过名称召唤委托封装 - - - - - - - - 移除一个委托封装目标 - - - - - - - 对象池宏 - - - - - 对象池组件列表 - - - - - 获取对象池对应的哈希双子列表,如果此对象池已经对应了另一个数据集合,则失败 - - - - - - - - - 从对象池列表中销毁组件 - - - - - - - - - 可以直接通过 - 关于批量释放,可以使用pool - - - - - - 加入创建过程(不需要提供创建方法) - - - - - 加入获取过程(实例对象,理论索引) - - - - - 加入释放过程 - - - - - 加入销毁过程(可以执行销毁方法) - - - - - 获取一个池化对象 - - - - - - 获取一个池化对象,并获取上面的一个组件 - - - - - - - - 获取一个池化对象,并获取上面的多个组件 - - - - - - - - - - 获取一个池化对象,并获取上面的多个组件 - - - - - - - - - - - - 获取一个池化对象,并获取上面的多个组件 - - - - - - - - - - - - 获取一个池化对象,并获取上面的多个组件 - - - - - - - - - - - - 获取一个池化对象,并获取子项上的组件 - - - - - - - - 获取一个池化对象,并获取子项上的组件 - - - - - - - - 获取一个池化对象,并获取子项上的组件 - - - - - - - - 获取一个池化对象,并获取子项上的组件 - - - - - - - - 获取一个池化对象,并获取子项上的组件 - - - - - - - - 进入推迟获取区间 - - - - - 获取一个池化对象,并获取上面的一个组件 - - - - - - - - 获取一个池化对象,并获取上面的组件 - - - - - - - - 获取一个池化对象,并获取上面的组件 - - - - - - - - 获取一个池化对象,并获取上面的组件 - - - - - - - - 获取一个池化对象,并获取上面的组件 - - - - - - - - 结束当前推迟获取组件 - - - - - 径直释放一个对象 - - - - - - 将给定的对象的任意子项用于释放对象 - - - - - - 释放所有对象 - - - - - 对象径直池化(也就是说这个对象可以使用径直释放方法) - - - - - - - 通过枚举器生成伴随循环的池化实例项目 - - - - - - - - 获取所有激活的池化项目 - - - - - - 获取所有激活的池化项目上的组件 - - - - - - - 信标,用于查找 - - - - - 对象池设置 - - - - - 对象池 - - - - - 激活对象的字典 - - - - - 非激活对象的列表 - - - - - 所有激活的对象 - - - - - 激活对象与索引 - - - - - 未激活对象列表 - - - - - 初始化设置对象 - - - - - - 移动一个元素到激活列表中 - - - - - 移动一个元素到非激活列表中 - - - - - 在非激活列表中移除元素 - - - - - 检查池化对象是否有效 - - - - - - - 检查池化对象是否无效 - - - - - - - 检查对象是否池化 - - - - - - - 尝试获取当前对象的数据 - - - - - - - - 释放所有对象 - - - - - 对象池联合参数 - - - - - 对象索引 - - - - - 快速创建一个UI对象池 - - 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 - 并且会监控创建的顺序,将其按照获取的顺序排列 - - - 对象池管理组件类型 - 预制体对象 - 对象池预设父级 - 在释放时检查对象,如果对象是刚建立的成员将会弹出报错 - 初始的池深度,这只是声名深度,并不会立刻创建对象 - 池最大深度,多余的对象将在释放时直接销毁 - 设置对象 - - - - - 快速创建一个UI对象池 - - 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 - 并且会监控创建的顺序,将其按照获取的顺序排列。 - - - 对象池管理组件类型 - 预制体对象 - 对象池预设父级 - 如何从对象获取组件 - 如何从组件获取对象 - 额外的获取方法 - 额外的释放方法 - 在释放时检查对象,如果对象是刚建立的成员将会弹出报错 - 初始的池深度,这只是声名深度,并不会立刻创建对象 - 池最大深度,多余的对象将在释放时直接销毁 - 设置对象 - - - - - 快速创建一个对象池 - - 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 - - - - - - - - - 快速创建一个对象池 - - 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 - - - - - - - - - 快速创建一个对象池 - - 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 - - - - - - - - - 快速创建一个对象池 - - 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 - - - - - - - - - 在释放时检查对象,如果对象是刚建立的成员将会弹出报错 - - - - 数学库 @@ -2932,6 +1591,579 @@ + + + 文本包裹块处理器 + + 包裹器支持通过反射进行兼容性序列化,但这样会带来一些反射开销 + 通过 compatibility 开启反射兼容。 + + 部分格式的包裹器支持通过 SetParamters 设置值。 + + + + + + 赋予结果的委托 + + + + + 启用兼容性反射检查 + + + + + 包裹器内如果包含变量,将允许SetParamters设置这个变量 + + + + + 参数化占用的名额 + + + + + 子集发生了改变 + + + + + 判断目标类型是否为事件委托 + + + + + + + + 格式化数值 + + + + + + + + 格式化颜色 + + + + + + + 尝试格式化对象为浮点数 + + + + + + + + 尝试格式化对象为枚举 + + + + + + + + + 开始文本拼接,返回文本构建器 + + + + + + 结束文本拼接,返回结果并清空构建内容 + + + + + + + 将当前包裹器内所有子包裹器序列化并拼接起来。 + + + + + + 获取当前节点下所有的包裹器 + + + + + + 获取当前节点的所有血统父级 + + + + + + 广度优先地获取对象 + + + + + + 检查自身是否被给定的所有类型包裹 + + + + + + + 检查自身是否被给定的所有类型包裹(默认认为给定的类型都是包裹器) + + + + + + + 直接设置参数,并将其设置到各个允许设置值的包裹器中 + + + + + + 设置参数 + + 参数起点索引 + 所有参数 + 返回使用了多少参数 + + + + 设置是否启用兼容性反射检查 + + + + + + + 设置是否启用变量化这个包裹器 + + + 手动设置占用变量 + + + + + 设置延迟赋值的委托事件 + + + + + + + 启动延迟赋值 + + + + + + 委托包裹器 + + + + + 反射包裹器(有子项) + + + + + 寻找成员 + + + + + + + + 设置值 + + + + + 获取值 + + + + + + 值包裹器(没有子项,计数) + + + + + 值名称(用于查找) + + + + + 值 + + + + + 值包裹器(没有子项,计数) + + + 值有两个状态,正常,超出范围(无效) + 当设置的值超出设定的范围时,如果同时开启了显示无效值的模式,那么将会显示为预设的无效名称。 + + + + + 值名称(用于查找) + + + + + 值 + + + + + 最小值 + + + + + 最大值 + + + + + 格式化文本 + + + + + 启用无效值 + + + + + 值无效 + + + + + 无效时展示 + + + + + 值包裹器 + + + + + + + + + + + + 日期时间包裹器 + + + + + 值名称(用于查找) + + + + + 值 + + + + + 最小值 + + + + + 最大值 + + + + + 格式化文本 + + + + + 启用无效值 + + + + + 值无效 + + + + + 无效时展示 + + + + + 值包裹器 + + + + + + + + + + + + 值表达式包裹器(没有子项,不计数) + + + + + 工作模式 + + + + + 自定义状态 + + + + + 暂存 + + + + + 总和 + + + + + 总差 + + + + + 平均值 + + + + + 最大值 + + + + + 最小值 + + + + + 自定义 + + + + + 创建值表达式 + + + + + + + 条件包裹器 + + + + + 设置参数 + + 参数起点索引 + 所有参数 + 返回使用了多少参数 + + + + 对齐 + + + + + 对齐 + + + + + 颜色 + + + + + 粗体 + + + + + 斜体 + + + + + 间距(一段文本的整体字符间距) + + + + + 字体 + + + + + + + 字体资源是必要的 + 如若不需要材质资源,填null即可 + + + + + 行高 + + + + + 行缩进 + + + + + 链接 + + + + + 小写 + + + + + 大写 + + + + + 小型大写字母 + + + + + 边缘 + + + + + + + 设置为负来取消这类标签 + 设置为负来取消这类标签 + 设置为负来取消这类标签 + + + + + 马克(背景颜色,或者说前景?因为马克在文本之上) + + + + + 字符间距,设置为给定等宽距离(单个字符调整左右边距) + + + + + 阻止解析标签 + + + + + 不间断空格,让单词保持在一起,而不是被自动换行分隔 + + + + + 分页符(必须将 text 对象设置为 page overflow 模式才能正常工作) + + + + + 水平位置 + + + + + 字体大小 + + + + + 水平间隔(在位置中插入间隔) + + + + + 精灵 + + + + + 删除线 + + + + + 下划线 + + + + + 样式 + + + + + 上标 + + + + + 下标 + + + + + 垂直间隔 + + + + + 文本宽度 + + + + + 富文本单位模式 + + 转换弧度到角度 @@ -5685,500 +4917,6 @@ - - - 文本包裹块处理器 - - 包裹器支持通过反射进行兼容性序列化,但这样会带来一些反射开销 - 通过 compatibility 开启反射兼容。 - - 部分格式的包裹器支持通过 SetParamters 设置值。 - - - - - - 启用兼容性反射检查 - - - - - 包裹器内如果包含变量,将允许SetParamters设置这个变量 - - - - - 参数化占用的名额 - - - - - 判断目标类型是否为事件委托 - - - - - - - - 格式化数值 - - - - - - - - 格式化颜色 - - - - - - - 尝试格式化对象为浮点数 - - - - - - - - 尝试格式化对象为枚举 - - - - - - - - - 开始文本拼接,返回文本构建器 - - - - - - 结束文本拼接,返回结果并清空构建内容 - - - - - - - 将当前包裹器内所有子包裹器序列化并拼接起来。 - - - - - - 获取当前节点下所有的包裹器 - - - - - - 获取当前节点的所有血统父级 - - - - - - 广度优先地获取对象 - - - - - - 检查自身是否被给定的所有类型包裹 - - - - - - - 检查自身是否被给定的所有类型包裹(默认认为给定的类型都是包裹器) - - - - - - - 直接设置参数,并将其设置到各个允许设置值的包裹器中 - - - - - - 设置参数 - - 参数起点索引 - 所有参数 - 返回使用了多少参数 - - - - 设置是否启用兼容性反射检查 - - - - - - - 设置是否启用变量化这个包裹器 - - - 手动设置占用变量 - - - - - 委托包裹器 - - - - - 反射包裹器(有子项) - - - - - 寻找成员 - - - - - - - - 设置值 - - - - - 获取值 - - - - - - 值包裹器(没有子项,计数) - - - - - 值名称(用于查找) - - - - - 值 - - - - - 其他参数 - - - - - 值包裹器(没有子项,计数) - - - - - 值名称(用于查找) - - - - - 值 - - - - - 最小值 - - - - - 最大值 - - - - - 格式化文本 - - - - - 启用无效值 - - - - - 值无效 - - - - - 无效时展示 - - - - - 值包裹器 - - - - - - - - - - - - 值表达式包裹器(没有子项,不计数) - - - - - 工作模式 - - - - - 自定义状态 - - - - - 暂存 - - - - - 总和 - - - - - 总差 - - - - - 平均值 - - - - - 最大值 - - - - - 最小值 - - - - - 自定义 - - - - - 创建值表达式 - - - - - - - 条件包裹器 - - - - - 设置参数 - - 参数起点索引 - 所有参数 - 返回使用了多少参数 - - - - 对齐 - - - - - 对齐 - - - - - 颜色 - - - - - 粗体 - - - - - 斜体 - - - - - 间距 - - - - - 字体 - - - - - - - 字体资源是必要的 - 如若不需要材质资源,填null即可 - - - - - 行高 - - - - - 行缩进 - - - - - 链接 - - - - - 小写 - - - - - 大写 - - - - - 小型大写字母 - - - - - 边缘 - - - - - - - 设置为负来取消这类标签 - 设置为负来取消这类标签 - 设置为负来取消这类标签 - - - - - 马克(背景颜色,或者说前景?因为马克在文本之上) - - - - - 字符间距,设置为给定等宽距离 - - - - - 阻止解析标签 - - - - - 不间断空格,让单词保持在一起,而不是被自动换行分隔 - - - - - 分页符(必须将 text 对象设置为 page overflow 模式才能正常工作) - - - - - 水平位置 - - - - - 字体大小 - - - - - 水平间隔 - - - - - 精灵 - - - - - 删除线 - - - - - 下划线 - - - - - 链接 - - - - - 上标 - - - - - 下标 - - - - - 垂直间隔 - - - - - 文本宽度 - - - - - 富文本单位模式 - - 将一个数值四舍五入后转为一个文本,并保留特定的小数点位,如果这个小数位为0则省略不写 @@ -6900,6 +5638,1347 @@ + + + 配置宏 + + + + + 保存uri配置文件 + + 自行完毕状态 + + + + 读取uri配置文件 + + 自行完毕状态 + + + + 协议 + + + + + 主机名 + + + + + 最终路径,最后的斜杠会影响uri的处理 + + + + + 在列表中搜索名称,如果没找到,返回一个空字符串 + + + + + + + + 通过名称获取路径uri + + + + + + + + 处理一段路径中的占位符,将其替换为目标符号 + + + + + + + + 添加一个配置项 + + + + + + + 移除一个配置项 + + + + + + 移除一个配置项 + + + + + + 设置一个配置项 + + + + + + + 名称 + + + + + 值 + + + + + 静态类型,生成时固定类型,如果后续设置类型不同将拒绝赋值 + + + + + 是否为空,不检查值是否为空,而是置标志位 + + + + + 类型 + + + + + 调试宏,重载unity的日志输出效果 + + + + + 开始替换日志输出器 + + + + + 结束替换日志输出器 + + + + + 彩色日志 + + + + + + 彩色日志 + + + + + + 彩色警告 + + + + + + 彩色抛出 + + + + + + 彩色断言 + + + + + + 彩色错误 + + + + + + il指令分析库 + + + + + 从类上获取IL程序集 + + + + + + + 检查类上的方法是否调用了基类的类 + + + + + + + + 检查一个方法里是否通过base.调用基类的方法 + + + + + + + + + + 菜单宏 + + + + + 值为空时显示的文本 + + + + + 数值格式化格式 + + + + + 字符太长时替换样式 + + + + + 呈献值 + + + + + 值为空时显示的文本 + + + + + 数值格式化格式 + + + + + 字符太长时替换样式 + + + + + 名称及标识符 + + + + + 值处理器 + + + + + 承载对象 + + + + + 格式包裹器 + + + + + 创建一个呈现组 + + + + + + + + + + + 添加一个值 + + + + + + + + + + + + + 创建一个值 + + + + + + + + + + + + + 创建一个值 + + + + + + + + + + + + 对象计算器 + + + + + 设置值 + + + + + + + 获取值 + + + + + + + 值计算器 + + + + + + 值步骤长度 + + + + + 取整方向 + + + + + 设置值 + + + + + + 获取值 + + + + + + 设置值 + + + + + + 浮点数计算器 + + + + + 浮点数计算器 + + + + + 浮点数计算器 + + + + + 检查当前变换组件上是否发生盒体碰撞 + + + + + + + 检查当前变换组件上是否发生盒体碰撞 + + + + + + + + + 检查盒体范围是否发生碰撞(或在某个碰撞体内) + + + + + + + + + + + 检查胶囊体范围是否发生碰撞(或在某个碰撞体内) + + + + + + + + + + + 检查球体范围是否发生了碰撞(或在某个碰撞体内) + + + + + + + + + + 命令控制台面板宏 + + 脚本中将监听的命令注册到此,当用户输入时,也可以通过这里的字典进行查找。 + 命令需要有一个开启词,自动补全也仅支持开启词补全。 + 命令后的参数将会由具体目标处理。 + + + + + + 命令 + + + + + 继承中间件 + + + + + 执行命令 + + + + + 当前进程ID + + + + + 通过程序名称查询窗口句柄 + + + + + + + + 枚举窗口回调委托 + + 窗口句柄。 + 应用程序定义值。 + + + + + 通过将句柄传递到每个窗口,进而将传递给应用程序定义的回调函数,枚举屏幕上的所有顶级窗口。 + 枚举窗口 将一直持续到最后一个顶级窗口被枚举或回调函数返回 FALSE。 + + EnumWindows 函数不枚举子窗口,但系统拥有的几个具有WS_CHILD样式的顶级窗口除外。 + 此函数比在循环中调用 GetWindow 函数更可靠。 + 调用 GetWindow 以执行此任务的应用程序有被捕获到无限循环或引用已销毁窗口的句柄的风险。 + + + + 指向应用程序定义的回调函数的指针。 + 要传递给回调函数的应用程序定义值。 + 如果该函数成功,则返回真 + + + + 检索指定窗口的父级或所有者的句柄。 + 若要检索指定上级的句柄,请使用 GetAncestor 函数。 + + 如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。 + + 此函数通常由于以下原因之一而失败: + 该窗口是无所有者或没有 WS_POPUP 样式的顶级窗口。 + 所有者窗口具有 WS_POPUP 样式。 + + + + + 如果窗口是子窗口,则返回值是父窗口的句柄。 如果窗口是具有 WS_POPUP 样式的顶级窗口,则返回值是所有者窗口的句柄。 + + + + 检索创建指定窗口的线程的标识符,以及创建该窗口的进程(可选)的标识符。 + + + 窗口的句柄。 + 指向接收进程标识符的变量的指针。 如果此参数不为 NULL, 则 GetWindowThreadProcessId 会将进程的标识符复制到变量;否则,它不会。 如果函数失败,则变量的值保持不变。 + 如果函数成功,则返回值是创建窗口的线程的标识符。 如果窗口句柄无效,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。 + + + + 找到当前进程下的窗口句柄 + + + + + + 找到当前进程下的所有窗口句柄 + + 如果发生错误,返回null + + + + 所有窗口展示命令 + + + + + + 隐藏窗口并激活另一个窗口 + + + + + 激活并显示窗口。如果窗口最小化、最大化或排列,系统会将其还原到其原始大小和位置。应用程序应在首次显示窗口时指定此标志 + + + + + 同 ShowNormal + + + + + 激活窗口并将其显示未最小化窗口 + + + + + 激活窗口并显示未最大化的窗口 + + + + + 同 ShowMaximized + + + + + 以最近的大小和位置显示窗口。 此值类似于 SW_SHOWNORMAL,只是窗口未激活。 + + + + + 激活窗口并以当前大小和位置显示窗口。 + + + + + 最小化指定的窗口,并按 Z 顺序激活下一个顶级窗口。 + + + + + 将窗口显示为最小化窗口。 此值类似于 SW_SHOWMINIMIZED,但窗口未激活。 + + + + + 以当前大小和位置显示窗口。 此值类似于 SW_SHOW,只是窗口未激活。 + + + + + 激活并显示窗口。 如果窗口最小化、最大化或排列,系统会将其还原到其原始大小和位置。 还原最小化窗口时,应用程序应指定此标志。 + + + + + 根据启动应用程序的程序传递给 CreateProcess 函数的 STARTUPINFO 结构中指定的SW_值设置显示状态。 + + + + + 最小化窗口,即使拥有窗口的线程没有响应。 仅当最小化不同线程的窗口时,才应使用此标志。 + + + + + 设定窗口的显示状态 + + + 窗口句柄 + 指定窗口如何显示。如果发送应用程序的程序提供了StartUpInfo结构,则应用程序的第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。 + 如果窗口以前就可见,返回真,否则返回否 + + + + 设定窗口的显示状态,而无需等待操作完成 + + + 窗口句柄 + 指定窗口如何显示。如果发送应用程序的程序提供了StartUpInfo结构,则应用程序的第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。 + 如果操作已成功启动,则返回真 + + + + 矩形信息 + + + + + 监视器信息 + + + + + 结构体大小 + + + + + 物理分辨率和位置 + + + + + 工作区域(排除任务栏) + + + + + 标志位(如主显示器) + + + + + 设备名称 + + + + + + + 设备上下文(DC) + 剪辑区域 + + 自定义数据 + + + + + 显示器拷贝信息 + + + + + 刷新所有显示器信息 + + + 返回显示器原始信息 + + + + 消息宏 + + + + + 基础消息 + + + + + 业务消息 + + + + + + 重定向文本消息发送(一般定向到消息发送方法上) + + + + + 所有委派成员 + + + + + 无参委派成员 + + + + + 启用自动转换 + + 让委派成员更智能地通过cast函数来传播消息里的内容; + 具体来说,当消息里的内容是一个对象结构时,而输出是string类型,这时json反序列化会报错, + 但使用自动转换会尝试通过其他方法获取到里面的内容。 + + + + + + 自动调用委托 + + + + + + 一个参数的委派成员 + + + + + + 注册一个重定向消息处理,这会通过消息事件处理 + + + + + + 注册一个重定向且带有具体类型的消息处理 + + 尽管在每个委托实现的前面注册重定向会比较符合阅读习惯,但是这样会导致只能注册一个寂寞(因为在还没有任何成员注册以前,它只是一个null) + + + + + + + + + 向这里发送重定向消息 + + 由于消息很可能不是在主线程运行的,所以这里只是保存. + 需要在主线程上手动调用MainThreadProcessingMessage来处理消息 + + + + + + + 在主线程上处理消息 + + + + + 获取安全的消息,过程中发生的错误均会通过消息链路进行向上传递 + + + + + + + 将对象序列化为消息 + + + + + + + + + 发送消息的扩展 + + + + + + 发送对象的扩展 + + + + + + + + 直接获取事件名称 + + + + + + + 直接获取事件成员 + + + + 是否沉默,如果为真,则不会输出错误信息 + + + + + 直接获取事件成员 + + + + + + + + + 可以调用的目标封装 + + + + + 调用承载 + + + + + 示例方法封装 + + 目标实例 + 方法名称 + + + + 示例方法封装 + + 目标实例 + 方法名称 + 参数类型 + + + + 实例方法封装 + + 目标实例 + 方法名称 + 参数对象 + + + + 实例方法封装 + + 目标实例 + 方法名称 + + + + 实例方法封装 + + 目标实例 + 方法名称 + 参数类型 + + + + 实例方法封装 + + 目标实例 + 方法名称 + 参数对象 + + + + 调用 + + + + + + 设置参数 + + + + + 添加委托封装对象 + + + + + + 通过名称召唤委托封装 + + + + + + + 尝试通过名称召唤委托封装 + + + + + + + + 移除一个委托封装目标 + + + + + + + 对象池宏 + + + + + 对象池组件列表 + + + + + 获取对象池对应的哈希双子列表,如果此对象池已经对应了另一个数据集合,则失败 + + + + + + + + + 从对象池列表中销毁组件 + + + + + + + + + 可以直接通过 + 关于批量释放,可以使用pool + + + + + + 加入创建过程(不需要提供创建方法) + + + + + 加入获取过程(实例对象,理论索引) + + + + + 加入释放过程 + + + + + 加入销毁过程(可以执行销毁方法) + + + + + 获取一个池化对象 + + + + + + 获取一个池化对象,并获取上面的一个组件 + + + + + + + + 获取一个池化对象,并获取上面的多个组件 + + + + + + + + + + 获取一个池化对象,并获取上面的多个组件 + + + + + + + + + + + + 获取一个池化对象,并获取上面的多个组件 + + + + + + + + + + + + 获取一个池化对象,并获取上面的多个组件 + + + + + + + + + + + + 获取一个池化对象,并获取子项上的组件 + + + + + + + + 获取一个池化对象,并获取子项上的组件 + + + + + + + + 获取一个池化对象,并获取子项上的组件 + + + + + + + + 获取一个池化对象,并获取子项上的组件 + + + + + + + + 获取一个池化对象,并获取子项上的组件 + + + + + + + + 进入推迟获取区间 + + + + + 获取一个池化对象,并获取上面的一个组件 + + + + + + + + 获取一个池化对象,并获取上面的组件 + + + + + + + + 获取一个池化对象,并获取上面的组件 + + + + + + + + 获取一个池化对象,并获取上面的组件 + + + + + + + + 获取一个池化对象,并获取上面的组件 + + + + + + + + 结束当前推迟获取组件 + + + + + 径直释放一个对象 + + + + + + 将给定的对象的任意子项用于释放对象 + + + + + + 释放所有对象 + + + + + 对象径直池化(也就是说这个对象可以使用径直释放方法) + + + + + + + 通过枚举器生成伴随循环的池化实例项目 + + + + + + + + 获取所有激活的池化项目 + + + + + + 获取所有激活的池化项目上的组件 + + + + + + + 信标,用于查找 + + + + + 对象池设置 + + + + + 对象池 + + + + + 激活对象的字典 + + + + + 非激活对象的列表 + + + + + 所有激活的对象 + + + + + 激活对象与索引 + + + + + 未激活对象列表 + + + + + 初始化设置对象 + + + + + + 移动一个元素到激活列表中 + + + + + 移动一个元素到非激活列表中 + + + + + 在非激活列表中移除元素 + + + + + 检查池化对象是否有效 + + + + + + + 检查池化对象是否无效 + + + + + + + 检查对象是否池化 + + + + + + + 尝试获取当前对象的数据 + + + + + + + + 释放所有对象 + + + + + 对象池联合参数 + + + + + 对象索引 + + + + + 快速创建一个UI对象池 + + 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 + 并且会监控创建的顺序,将其按照获取的顺序排列 + + + 对象池管理组件类型 + 预制体对象 + 对象池预设父级 + 在释放时检查对象,如果对象是刚建立的成员将会弹出报错 + 初始的池深度,这只是声名深度,并不会立刻创建对象 + 池最大深度,多余的对象将在释放时直接销毁 + 设置对象 + + + + + 快速创建一个UI对象池 + + 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 + 并且会监控创建的顺序,将其按照获取的顺序排列。 + + + 对象池管理组件类型 + 预制体对象 + 对象池预设父级 + 如何从对象获取组件 + 如何从组件获取对象 + 额外的获取方法 + 额外的释放方法 + 在释放时检查对象,如果对象是刚建立的成员将会弹出报错 + 初始的池深度,这只是声名深度,并不会立刻创建对象 + 池最大深度,多余的对象将在释放时直接销毁 + 设置对象 + + + + + 快速创建一个对象池 + + 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 + + + + + + + + + 快速创建一个对象池 + + 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 + + + + + + + + + 快速创建一个对象池 + + 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 + + + + + + + + + 快速创建一个对象池 + + 这个简单的对象池将在获取对象时激活物体,释放对象时取消激活物体。 + + + + + + + + + 在释放时检查对象,如果对象是刚建立的成员将会弹出报错 + + + + 提供相机的计算宏,比如计算视锥角等。 @@ -8057,77 +8136,6 @@ - - - 获取软接口反射目标,并执行相应的步骤 - - - - - - 失败返回否,比如字段和属性中都没有找到 - - - - 使用软接口名称(对象以及类上成员名称)获取字段属性的值; - - - - - 失败返回否,比如字段和属性中都没有找到 - - - - 使用软接口名称(对象以及类上成员名称)设置字段属性的值; - - - - - 失败返回否,比如字段和属性中都没有找到 - - - - 使用软接口名称(对象以及类上成员名称)获取字段属性的值 - - - - - - - - - - 使用一系列软接口名称(对象以及类上成员名称)获取多个字段属性的值 - - - - - 如果给定名称找不到字段,则返回default - - - - 使用一系列候选软接口名称设置一系列对象上的字段属性值 - - - - - - - - 在一系列对象上使用相同软接口名称获取字段属性值 - - - - - - - - 在一系列对象上使用相同软接口名称设置字段属性值 - - - - - 超驰实例化 @@ -8259,6 +8267,22 @@ + + + 获取运行时成员集合 + + + + + + + + + 获取一个对象上所有属性的匿名键值对快照 + + + + 获取一个对象上所有属性的匿名键值对快照 @@ -8266,18 +8290,25 @@ - + + + 获取一个对象上所有字段的匿名键值对快照 + + + + + 获取一个类上所有属性的名称 - + - 获取一个对象上所有字段的匿名键值对快照 + 获取一个类上所有属性的名称 - + @@ -8490,6 +8521,377 @@ + + + 反射加速配置 + + + + + 获取方法的哈希值 + + + + + + + + + 获取接口的哈希值 + + + + + + + + 获取软接口反射目标,并执行相应的步骤 + + + + + + 失败返回否,比如字段和属性中都没有找到 + + + + 使用软接口名称(对象以及类上成员名称)获取字段属性的值; + + + + + 失败返回否,比如字段和属性中都没有找到 + + + + 使用软接口名称(对象以及类上成员名称)设置字段属性的值; + + + + + 失败返回否,比如字段和属性中都没有找到 + + + + 使用软接口名称(对象以及类上成员名称)获取字段属性的值 + + + + + + + + + + 使用一系列软接口名称(对象以及类上成员名称)获取多个字段属性的值 + + + + + 如果给定名称找不到字段,则返回default + + + + 使用一系列候选软接口名称设置一系列对象上的字段属性值 + + + + + + + + 在一系列对象上使用相同软接口名称获取字段属性值 + + + + + + + + 在一系列对象上使用相同软接口名称设置字段属性值 + + + + + + + + 查找符合参数条件的构造方法并创建实例 + + 目标类型 + 构造方法参数 + 找到单个构造方法时的回调 + 找到多个构造方法时的回调 + 是否找到符合条件的构造方法 + + + + 检查构造方法是否匹配参数条件 + + + + + 直接调用指定的构造方法创建实例 + + 目标类型 + 要调用的构造方法 + 构造方法参数 + 创建的实例 + + + + 查找符合条件的方法 + + 目标对象 + 方法名称 + 限定的类(null表示不限定) + 输入参数(不包含out参数) + 输出参数类型(包含返回值作为第一个元素, 为空时表示不参考) + 找到单个方法时的回调 + 找到多个方法时的回调 + 是否找到符合条件的方法 + + + + 检查方法是否匹配参数条件(out算作输出值,而ref则输入和输出都算) + + + + + 执行找到的方法 + + 目标对象 + 要执行的方法 + 输入参数 + 输出参数(将被填充) + 方法的返回值(如果有) + + + + 直接执行无参数方法 + + + + + + + + + 调用一个静态无参方法 + + + + + + + + 调用一个实例无参方法 + + + + + + + + + 调用一个有参静态方法,但不对输出类型作限制 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参实例方法,但不对输出类型作限制 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参实例方法 + + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参实例方法 + + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + + + + 调用一个有参静态方法 + + + + 仅包括输入类型,out标记不算在内 + + 预制函数退化链节点 @@ -14464,89 +14866,313 @@ unity委托耗时执行测试 - + - 目录树型管理结构 + 目录树类,用于处理文本分割和管理 - + - 路径分隔符号 + 根节点 - + - 当前节点的名称,通常是路径名称 + 脏标记,标识树是否需要维护 - + - 值是无效的 + 默认构造函数 - + - 当前值 + 将文本按指定分割符添加到目录树 + + 要添加的文本 + 分割符 + 添加后的叶节点 + + + + 在指定父节点下插入子节点 + + 父节点 + 子节点文本 + 插入位置(可选) + 插入的节点 + + + + 查找包含指定文本的节点 + + 要查找的文本 + 是否区分大小写 + 找到的节点列表 + + + + 获取指定节点的所有子节点 + + 父节点 + 子节点列表 + + + + 获取所有叶节点 + + 叶节点列表 + + + + 删除节点及其子树 + + 要删除的节点 + 是否删除成功 + + + + 清理无用节点 + + 起始节点 + + + + 维护树结构(排序、清理等) - + - 父级节点 + 获取树中节点文本的数量 - + - 子项目 + 是否为只读集合 - + - 如果这个节点是自动生成的,那么可能没有给定值,所以项目为null,但实际上如果获取的话值为defualt。 + 添加文本到树中(使用默认分割符) + + 要添加的文本 + + + + 清空树 - + - 创建一个目录树节点 + 检查树中是否包含指定文本 - + 要检查的文本 + 是否包含 - + - 创建一个目录树节点,并指定节点无效,这通常用于自动创建 + 复制到数组 - + 目标数组 + 起始索引 - + - 添加子目录节点 + 移除指定文本 - + 要移除的文本 + 是否移除成功 - + - 根据路径添加新的节点 + 获取枚举器 - 相对路径 - - + 枚举器 - + - 获取当前节点的根节点 + 目录树节点类 - - + - 获取路径下的遍历结构 - - 默认遍历成员从第一个非目录控制字符开始,。 - + 节点文本内容 + + + + + 分割符集合,用于记录到此节点的不同分割方式数量 + + + + + 优先级,用于节点排序 + + + + + 是否为叶节点 + + + + + 初始化一个目录树节点 + + 节点文本内容 + + + + 添加子节点 + + 要添加的子节点 + + + + 移除子节点 + + 要移除的子节点 + 是否移除成功 + + + + 获取从根节点到当前节点的完整文本 + + 是否包含当前节点的文本 + 完整文本 + + + + 按照优先级排序子节点 + + + + + 插入子节点到指定位置 + + 插入位置 + 要插入的子节点 + + + + 目录树字典类,将目录节点映射到泛型对象 + + 映射的值类型 + + + + 获取目录树 + + + + + 构造函数 + + + + + 添加键值对 + + 目录节点 + 关联的值 + + + + 添加文本并关联值 + + 文本 + 分割符 + 关联的值 + 创建的叶节点 + + + + 获取或设置与指定节点关联的值 + + 目录节点 + 关联的值 + + + + 获取与指定文本路径关联的值 + + 文本路径 + 关联的值 + + + + 检查是否包含指定节点 + + 目录节点 + 是否包含 + + + + 尝试获取与指定节点关联的值 + + 目录节点 + 关联的值 + 是否获取成功 + + + + 移除指定节点及其关联的值 + + 目录节点 + 是否移除成功 + + + + 获取键值对数量 + + + + + 是否为只读集合 + + + + + 添加键值对 + + 键值对 + + + + 清空字典 + + + + + 检查是否包含指定键值对 + + 键值对 + 是否包含 + + + + 复制到数组 + + 目标数组 + 起始索引 + + + + 移除键值对 + + 键值对 + 是否移除成功 + + + + 获取枚举器 + + 枚举器 + + + + 比较类型枚举 - ../表示上一级,./表示同级,ROOT/表示顶级,其他片段表示以当前节点往下进行查找(或创建) - 允许在遍历时遇到不存在的节点时创建,否则会产生报错 - 启用调试成员,将输出所有控制字符在遍历的成员 - 允许调试语句,将不再检查语句语法,可以完全使用路径语句进行流程遍历控制,而不会产生报错 @@ -14787,6 +15413,163 @@ 格式化性能报告 + + + 包裹器参数 + + + + + 设置包裹器参数,仅保留传入参数集中与空值不一样的字段 + + + + + 注意:此方法基于反射实现。 + + + + + TextBlockRichBuilder 静态实例集合 + + + 不论该类型的实例是否实现,静态实例总是可以获取,但为了规范具体用法,其中的成员不一定总是是有效的,如果其具体行为尚未定义,即便获取也总是返回null。 + 这里允许你重复实现文本包裹器池对象,从而覆盖原有对象类型,但注意这可能会导致无法预料的后果,实例具体类型将由编译器决定。(这种用法只是一种猜想,最好还是重写) + + + + + 包裹器对象池 + + + + + + 包裹器代理对象池 + + + + + + 包裹器代理接口 + + + + + 当前包裹器代理节点的父级 + + + + + 将当前包裹器代理节点烘焙为包裹器实例,因为包裹器实际上只有设置值的时候关心类型,所以返回值是object类型。 + + + + + + + 包裹器容器代理接口 + + + 限制从池用法,要求池对象必须被具体实现,且继承此接口。 + + + + + 包裹器代理节点的子项成员枚举器 + + + + + 包裹器代理节点的子项数量 + + + + + 包裹器代理节点索引器 + + + + + + + 添加一个代理节点为当前代理节点的子项 + + + + + + 在项目之前插入对象 + + + + + + + 包裹器类型 + + + + + 纯值构建代理 + + + + + 块语法构建代理框架 + + + + + (构建入口)创建代理 + + + + + + + + + 定义如何从池中获取自己的对象 + + + + + + 获取根节点 + + + + + + 当前是根节点 + + + + + + 从当前节点上构建一个文本包裹器 + + + + + + + + 完整释放当前的包裹器代理 + + + + + 在当前节点上构建文本包裹器,然后释放掉它 + + + + + + 清空当前代理 + + 字典树节点类 diff --git a/package.json b/package.json index 78deec3..ea8d683 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "com.lrss3.deconstruction", "displayName": "Xeric Library", - "version": "0.5.3", + "version": "0.5.5", "unity": "2021.3", - "description": "\u6b22\u8fce\u4f7f\u7528Xeric Library\uff0c\u8fd9\u662f\u4e00\u4e2a\u4e13\u6ce8\u4ee3\u7801\u7684\u6269\u5c55\u5e93\r\n\r\n\u25cf\u6269\u5c55Unity\u6210\u5458\u8bed\u6cd5\uff0c\u6269\u5c55\u6570\u636e\u7ed3\u6784Linq\u8bed\u6cd5\uff0c\u589e\u52a0\u8fd0\u7b97\u7b26\u8bed\u6cd5\uff0c\u652f\u6301\u5404\u7c7b\u9690\u5f0f\u7528\u6cd5\uff0c\u652f\u6301\u591a\u79cd\u8f6f\u5f15\u7528\u65b9\u6cd5\uff1b \u9488\u5bf9\u5927\u90e8\u5206\u4f7f\u7528\u573a\u666f\u52a0\u5165\u4e86\uff1a \u51fd\u6570\u5e73\u6ed1\u3001 \u591a\u9879\u5f0f\u8ba1\u7b97\u3001 \u6743\u91cd\u62df\u5408\u3001 \u8fc7\u7a0b\u5206\u7ea7\u3001 \u5de5\u4e1a\u63a7\u5236\u3001 \u66f2\u7ebf\u7ed8\u5236\u3001 \u8def\u5f84\u8bbe\u7f6e\u3001 \u5bf9\u8c61\u63a7\u5236\u3001 \u8fed\u4ee3\u6269\u5c55\u3001 \u7a7a\u95f4\u53d8\u6362\u3001 \u72ec\u7279\u7ed3\u6784\u3001 \u6587\u672c\u683c\u5f0f\u3001 \u7c7b\u578b\u8f6c\u6362\u3001 \u673a\u5668\u7f16\u7801\u3001 \u5f00\u53d1\u8c03\u8bd5\u3001 \u52a8\u6001\u751f\u6210\u3001 \u51e0\u4f55\u521b\u5efa\u3001 \u5feb\u901f\u6c60\u5316\u3001 \u5bfc\u822a\u5bfb\u8def\u3001 \u9694\u79bb\u63a7\u5236\u3001 \u9694\u79bb\u8f93\u5165\u3001 \u8bed\u4e49\u5316\u59d4\u6258\u3001 \u53cd\u5c04\u8d85\u9a70\u3001 \u6570\u5b66\u5e38\u6570\u3001 \u5355\u4f4d\u6362\u7b97\u3001 \u6392\u5e8f\u7b97\u6cd5\u3001 \u7a0b\u5e8f\u8c03\u7528\u3001 \u7f51\u7edc\u8fde\u63a5\u7b49\u5feb\u6377\u7528\u6cd5\u3002 \r\n\u25cf\u591a\u79cd\u7279\u6b8a\u7c7b\u578b\uff1a \u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a\u591a\u7ef4\u5e03\u5c14\u3001 \u6837\u6761\u66f2\u7ebf\u3001 \u8d85\u7ea7\u5355\u4f8b\u3001 \u591a\u4f8b\u7cfb\u7edf\u3001 \u90bb\u5c45\u7f51\u7edc\u3001 \u56db\u53c9\u6811\u3001 \u5b57\u5178\u6811\u3001 \u8f6f\u5f15\u7528\u5c01\u88c5\u5668\u7b49\u3002 \r\n\u25cf\u5404\u79cd\u5e38\u7528\u811a\u672c\uff1a\u6e38\u620f\u4ea4\u4e92\u3001 \u754c\u9762\u9002\u914d\u3001 \u5f31\u6269\u5c55\u3001 \u7ed8\u5236\u5de5\u5382\u3001 SQL\u6269\u5c55\u3002\r\n\r\n\u25cf\u517c\u5bb9\u4e0d\u89c4\u8303\u7a0b\u5e8f\uff1a\u9488\u5bf9\u5404\u79cd\u4e0d\u89c4\u8303\u7684\uff0c\u6216\u6beb\u65e0\u8bbe\u8ba1\u89c4\u5219\u53ef\u8a00\u7684\u7a0b\u5e8f\uff0c\u63d0\u4f9b\u4e86\u66f4\u591a\u57fa\u4e8e\u53cd\u5c04\uff0cCIL\u7279\u6027\u7b49\u4f4e\u7ea7\u8bed\u6cd5\u7684\u7a0b\u5e8f\u6269\u5c55\uff0c\u5141\u8bb8\u901a\u8fc7\u5404\u79cd\u65b9\u5f0f\u5feb\u901f\u5b9e\u73b0\u76ee\u7684\uff1a\r\n1.\u811a\u672c\u6ca1\u6709\u7ee7\u627f\u5355\u4f8b\uff1f\u65e0\u6240\u8c13\uff0c\u8d85\u7ea7\u5355\u4f8b\u4e0d\u9700\u8981\u58f0\u540d\uff0c\u4e5f\u4e0d\u9700\u8981\u4fee\u6539\u4efb\u4f55\u811a\u672c\u5185\u5bb9\u5c31\u53ef\u4ee5\u5b9e\u73b0\u5355\u4f8b\u3002\r\n2.\u591a\u4e2a\u6570\u636e\u7ed3\u6784\u5b57\u6bb5\u4e4b\u95f4\u5197\u4f59\u91cd\u590d\uff1f\u65e0\u6240\u8c13\uff0c\u8f6f\u63a5\u53e3SoftInterface\u53ea\u9700\u8981\u4e00\u4e2a\u968f\u610f\u7684\u540d\u79f0\u5c31\u53ef\u4ee5\u83b7\u53d6\u548c\u8bbe\u7f6e\u503c\uff0c\u4f60\u53ef\u4ee5\u7528\u8f6f\u63a5\u53e3\u5728\u4efb\u610f\u5bf9\u8c61\u4e0a\u904d\u5386\u5b57\u6bb5\u5c5e\u6027\u7b49\u5185\u5bb9\u3002\r\n3.\u4e0d\u559c\u6b22\u5bf9\u8c61\u6c60\u7684\u521d\u59cb\u5316\uff1f\u6211\u4e5f\u662f\uff0cMacroPool.UnionSet \u8054\u5408\u5bf9\u8c61\u6c60\u652f\u6301\u5c06\u5fc5\u8981\u914d\u7f6e\u9879\u76ee\u6210\u5458\u5f00\u653e\u5230\u754c\u9762\u4e0a\uff0c\u7136\u540e\u76f4\u63a5\u8c03\u7528get\u5c31\u53ef\u4ee5\uff01\r\n4.\u7a0b\u5e8fUI\u6846\u67b6\u548c\u903b\u8f91\u6846\u67b6\u9ad8\u7ea7\u8026\u5408\u65e0\u4ece\u4e0b\u624b\uff1f\u6709\u70b9\u9ebb\u70e6\uff0c\u4e0d\u8fc7\u83dc\u5355\u7279\u6027\uff0c\u67e5\u627e\u7279\u6027\uff0c\u547d\u540d\u6807\u8bb0\u7279\u6027\u53ef\u4ee5\u5e2e\u52a9\u4f60\u65e0\u89c6\u5185\u5bb9\u67e5\u627e\u5b57\u6bb5\u5c5e\u6027\u65b9\u6cd5\u7c7b\u578b\u7b49\u5185\u5bb9\uff0c\u76f4\u63a5\u5c06\u7c7b\u4f20\u5165\u5c31\u80fd\u7a0b\u5e8f\u5316\u751f\u6210\u83dc\u5355\u754c\u9762\u3002\r\n5.\u6570\u636e\u7ed3\u6784\u592a\u591a\u5bfc\u81f4\u5728\u4ea4\u4e92\u65f6\u7a0b\u5e8f\u5361\u987f\uff1f\u8fd9\u662f\u4e2a\u95ee\u9898\uff0cXericUIActionVessel\u63d2\u4ef6\u4e2d\u63d0\u4f9b\u4e86\u591a\u79cd\u6570\u636e\u7ed3\u6784\u865a\u62df\u5316\u6280\u672f\uff0c\u57fa\u4e8e\u865a\u62df\u5316\u62c6\u5206\u5927\u91cf\u6570\u636e\u53ef\u4ee5\u51cf\u5c11\u538b\u529b\u3002\r\n6.\u559c\u6b22\u4f7f\u7528\u51fd\u6570\u5f0f\u548clinq\u8bed\u53e5\u7b80\u5316\u7a0b\u5e8f\uff1f\u6ca1\u6709\u95ee\u9898\uff01\u679a\u4e3e\u53ef\u4ee5\u4f7f\u7528MacroEnum\u5206\u7c7b\u548cMacroEnum\u6269\u5c55\uff1b\u6570\u5b66\uff0c\u5411\u91cf\uff0c\u51e0\u4f55\uff0c\u6570\u636e\u7ed3\u6784\u6269\u5c55\uff0c\u5e38\u89c1\u7b97\u6cd5\uff0c\u5e38\u7528\u5b57\u7b26\u8ba1\u7b97\u5df2\u7ecf\u5168\u90e8\u5185\u5d4cMacroMath\u5206\u7c7b\u4e2d\u3002\u8fd8\u6709\u66f4\u591a\u7b49\u4f60\u63a2\u7d22\uff01\r\n7.\u60f3\u4f7f\u7528\u66f4\u591a\u4e13\u7528\u6570\u636e\u7ed3\u6784\uff1f\u5927\u9876\u5806\uff0c\u56db\u53c9\u6811\uff0c\u516b\u53c9\u6811\uff0c\u5b57\u5178\u6811\uff0c\u65f6\u95f4\u6233\uff0c\u591a\u6bb5\u7ebf\uff0c\u8d1d\u585e\u5c14\uff0c\u591a\u7ef4\u5e03\u5c14\uff0c\u53cc\u751f\u54c8\u5e0c\u8868\uff0c\u76f8\u90bb\u7f51\u683c\u7b49\u7b49\u5185\u5bb9\u4efb\u541b\u4f7f\u7528\uff0c\u800c\u4e14\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u90fd\u6709\u4e13\u7528\u7684\u754c\u9762\uff0c\u754c\u9762\u7f8e\u5316\u8fd9\u4e00\u5757\u3002\r\n8.\u60f3\u8981\u7acb\u523b\u80fd\u591f\u5728\u573a\u666f\u4e2d\u79fb\u52a8\u89d2\u8272\uff1f\u7b2c\u4e00\u4eba\u79f0\uff0c\u7b2c\u4e09\u4eba\u79f0\uff0c\u4e0a\u5e1d\u89c6\u89d2\u5df2\u7ecf\u51c6\u5907\u5c31\u7eea\uff01\r\n9.\u538c\u70e6\u590d\u6742\u7684\u6309\u952e\u68c0\u67e5\u903b\u8f91\uff1f\u6211\u5e2e\u4f60\uff01MacroKey\u4e2d\u7684\u6309\u952e\u72b6\u6001\u8868\u652f\u6301\u4ee5\u81ea\u5df1\u559c\u6b22\u7684\u72b6\u6001\u548c\u9891\u7387\u5904\u7406\u6309\u952e\uff0c\u5e76\u5904\u7406\u6210\u77ed\u6309\uff0c\u957f\u6309\uff0c\u53cc\u51fb\uff0c\u8fde\u51fb\uff0c\u62d6\u62fd\uff0c\u4ee5\u53ca\u8fd9\u4e9b\u72b6\u6001\u7684\u6309\u4e0b\u548c\u91ca\u653e\u72b6\u6001\uff01\u652f\u6301\u4ee5\u65f6\u95f4\uff0c\u5750\u6807\u7b49\u5171\u8ba14\u79cd\u6a21\u5f0f\u5904\u7406\u3002\r\n10.\u62c5\u5fc3\u517c\u5bb9\u6027\u5417\uff1f\u7a0b\u5e8f\u4e3b\u8981\u57fa\u4e8e2022\u7248\u672c\u5f00\u53d1\uff0c\u5411\u4e0b\u517c\u5bb92021\uff0c\u5411\u4e0a\u652f\u63016000\uff0c\u4e0d\u6d89\u53ca\u6e32\u67d3\u7ba1\u7ebfAPI\uff0c\u517c\u5bb9\u6027\u8f83\u597d\u3002\r\n\r\n\u25cf\u5f53\u524d\u63d2\u4ef6\u63d0\u4f9b\u7f16\u8f91\u5668\u529f\u80fd\uff1aDeepseek AI\u5bf9\u8bdd\u3002\r\n\u66f4\u591a\u7f16\u8f91\u5668\u529f\u80fd\u53c2\u8003\uff1a\r\n\u25cf\u5b89\u88c5Xeric Blueprint Graph\u4ee5\u83b7\u53d6Unity\u4e0a\u84dd\u56fe\u8282\u70b9\u529f\u80fd, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n\u25cf\u5b89\u88c5Xeric UI Graph\u4ee5\u83b7\u53d6\u84dd\u56fe\u5316UI\u751f\u6210\u529f\u80fd, \u4f7f\u7528\u84dd\u56fe\u903b\u8f91\u63a7\u5236UI\u4ea4\u4e92, \u751f\u6210\u903b\u8f91, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n\u25cf\u5b89\u88c5Digital Twin Tool\u4ee5\u83b7\u53d6\u5e38\u7528\u8c03\u8bd5\u5de5\u5177\u96c6\u3002\r\n\u25cf\u5b89\u88c5Nexus Frame Flow\u4ee5\u83b7\u53d6\u5de5\u4f5c\u67b6\u6784\u5904\u7406\u529f\u80fd\u3002\r\n\u25cf\u5b89\u88c5Xeric Editor\u8f85\u52a9\u5f15\u64ce\u5927\u7eb2\u7f8e\u5316\u7ec4\u4ef6\u3001 \u8d44\u6e90\u5783\u573e\u5904\u7406\u7ec4\u4ef6\u3001 \u8d44\u6e90\u7f13\u5b58\u7ec4\u4ef6\u3001 \u5feb\u901f\u622a\u56fe\u529f\u80fd, \u4ee5\u53ca\u66f4\u591a\u5feb\u6377\u952e\u529f\u80fd\r\n\r\n\u9700\u8981\u6ce8\u610f\uff1a\u63d2\u4ef6\u5185\u5982\u679c\u6d89\u53ca\u591a\u5e73\u53f0\u5207\u6362, \u53ef\u80fd\u4f1a\u63d0\u4f9b\u591a\u79cd\u81ea\u52a8\u6216\u624b\u52a8\u7684\u5207\u6362\u65b9\u6848, \u6216\u9ed8\u8ba4\u4f7f\u7528windows\u5e73\u53f0, \u8bf7\u6ce8\u610f\u8fa8\u522b\u3002\r\n\r\n\u5efa\u8bae\u6dfb\u52a0ODin\u63d2\u4ef6, \u4fbf\u4e8e\u5448\u73b0\u66f4\u591a\u754c\u9762\u529f\u80fd\u3002\r\n\r\n\u66f4\u591a\u8be6\u7ec6\u5185\u5bb9\u8bf4\u660e\u8bf7\u7ffb\u9605README\u6587\u6863\u3002\r\n\u5982\u679c\u53d1\u73b0\u4efb\u4f55\u95ee\u9898, \u5305\u62ec\u7248\u672c\u517c\u5bb9\u6027, \u8ba1\u7b97\u9519\u8bef, \u8c03\u7528\u9519\u8bef, \u4f7f\u7528\u95ee\u9898, \u90fd\u53ef\u4ee5\u901a\u8fc7\u53d1\u5e03\u9875Issues\u6216\u5176\u4ed6\u8054\u7cfb\u65b9\u5f0f\u627e\u6211\u83b7\u5f97\u5e2e\u52a9\u3002", + "description": "\u6b22\u8fce\u4f7f\u7528Xeric Library\uff0c\u8fd9\u662f\u4e00\u4e2a\u4e13\u6ce8\u4ee3\u7801\u7684\u6269\u5c55\u5e93\r\n\r\n\u25cf\u6269\u5c55Unity\u6210\u5458\u8bed\u6cd5\uff0c\u6269\u5c55\u6570\u636e\u7ed3\u6784Linq\u8bed\u6cd5\uff0c\u589e\u52a0\u8fd0\u7b97\u7b26\u8bed\u6cd5\uff0c\u652f\u6301\u5404\u7c7b\u9690\u5f0f\u7528\u6cd5\uff0c\u652f\u6301\u591a\u79cd\u8f6f\u5f15\u7528\u65b9\u6cd5\uff1b \u9488\u5bf9\u5927\u90e8\u5206\u4f7f\u7528\u573a\u666f\u52a0\u5165\u4e86\uff1a \u51fd\u6570\u5e73\u6ed1\u3001 \u591a\u9879\u5f0f\u8ba1\u7b97\u3001 \u6743\u91cd\u62df\u5408\u3001 \u8fc7\u7a0b\u5206\u7ea7\u3001 \u5de5\u4e1a\u63a7\u5236\u3001 \u66f2\u7ebf\u7ed8\u5236\u3001 \u8def\u5f84\u8bbe\u7f6e\u3001 \u5bf9\u8c61\u63a7\u5236\u3001 \u8fed\u4ee3\u6269\u5c55\u3001 \u7a7a\u95f4\u53d8\u6362\u3001 \u72ec\u7279\u7ed3\u6784\u3001 \u6587\u672c\u683c\u5f0f\u3001 \u7c7b\u578b\u8f6c\u6362\u3001 \u673a\u5668\u7f16\u7801\u3001 \u5f00\u53d1\u8c03\u8bd5\u3001 \u52a8\u6001\u751f\u6210\u3001 \u51e0\u4f55\u521b\u5efa\u3001 \u5feb\u901f\u6c60\u5316\u3001 \u5bfc\u822a\u5bfb\u8def\u3001 \u9694\u79bb\u63a7\u5236\u3001 \u9694\u79bb\u8f93\u5165\u3001 \u8bed\u4e49\u5316\u59d4\u6258\u3001 \u53cd\u5c04\u8d85\u9a70\u3001 \u6570\u5b66\u5e38\u6570\u3001 \u5355\u4f4d\u6362\u7b97\u3001 \u6392\u5e8f\u7b97\u6cd5\u3001 \u7a0b\u5e8f\u8c03\u7528\u3001 \u7f51\u7edc\u8fde\u63a5\u7b49\u5feb\u6377\u7528\u6cd5\u3002 \r\n\u25cf\u591a\u79cd\u7279\u6b8a\u7c7b\u578b\uff1a \u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a\u591a\u7ef4\u5e03\u5c14\u3001 \u6837\u6761\u66f2\u7ebf\u3001 \u8d85\u7ea7\u5355\u4f8b\u3001 \u591a\u4f8b\u7cfb\u7edf\u3001 \u90bb\u5c45\u7f51\u7edc\u3001 \u56db\u53c9\u6811\u3001 \u5b57\u5178\u6811\u3001 \u8f6f\u5f15\u7528\u5c01\u88c5\u5668\u7b49\u3002 \r\n\u25cf\u5404\u79cd\u5e38\u7528\u811a\u672c\uff1a\u6e38\u620f\u4ea4\u4e92\u3001 \u754c\u9762\u9002\u914d\u3001 \u5f31\u6269\u5c55\u3001 \u7ed8\u5236\u5de5\u5382\u3001 SQL\u6269\u5c55\u3002\r\n\r\n\u25cf\u517c\u5bb9\u4e0d\u89c4\u8303\u7a0b\u5e8f\uff1a\u9488\u5bf9\u5404\u79cd\u4e0d\u89c4\u8303\u7684\uff0c\u6216\u6beb\u65e0\u8bbe\u8ba1\u89c4\u5219\u53ef\u8a00\u7684\u7a0b\u5e8f\uff0c\u63d0\u4f9b\u4e86\u66f4\u591a\u57fa\u4e8e\u53cd\u5c04\uff0cCIL\u7279\u6027\u7b49\u4f4e\u7ea7\u8bed\u6cd5\u7684\u7a0b\u5e8f\u6269\u5c55\uff0c\u5141\u8bb8\u901a\u8fc7\u5404\u79cd\u65b9\u5f0f\u5feb\u901f\u5b9e\u73b0\u76ee\u7684\uff1a\r\n1.\u811a\u672c\u6ca1\u6709\u7ee7\u627f\u5355\u4f8b\uff1f\u65e0\u6240\u8c13\uff0c\u8d85\u7ea7\u5355\u4f8b\u4e0d\u9700\u8981\u58f0\u540d\uff0c\u4e5f\u4e0d\u9700\u8981\u4fee\u6539\u4efb\u4f55\u811a\u672c\u5185\u5bb9\u5c31\u53ef\u4ee5\u5b9e\u73b0\u5355\u4f8b\u3002\r\n2.\u591a\u4e2a\u6570\u636e\u7ed3\u6784\u5b57\u6bb5\u4e4b\u95f4\u5197\u4f59\u91cd\u590d\uff1f\u65e0\u6240\u8c13\uff0c\u8f6f\u63a5\u53e3SoftInterface\u53ea\u9700\u8981\u4e00\u4e2a\u540d\u79f0\u5c31\u53ef\u4ee5\u83b7\u53d6\u548c\u8bbe\u7f6e\u503c\uff0c\u4f60\u53ef\u4ee5\u7528\u8f6f\u63a5\u53e3\u5728\u4efb\u610f\u5bf9\u8c61\u4e0a\u904d\u5386\u5b57\u6bb5\uff0c\u5c5e\u6027\uff0c\u65b9\u6cd5\uff0c\u53ea\u8981\u4e0d\u662f\u533f\u540d\u7684\u90fd\u53ef\u4ee5\u8c03\u7528\uff01\r\n3.\u4e0d\u559c\u6b22\u5bf9\u8c61\u6c60\u7684\u521d\u59cb\u5316\uff1f\u6211\u4e5f\u662f\uff0cMacroPool.UnionSet \u8054\u5408\u5bf9\u8c61\u6c60\u652f\u6301\u5c06\u5fc5\u8981\u914d\u7f6e\u9879\u76ee\u6210\u5458\u5f00\u653e\u5230\u754c\u9762\u4e0a\uff0c\u7136\u540e\u76f4\u63a5\u8c03\u7528get\u5c31\u53ef\u4ee5\uff01\r\n4.\u7a0b\u5e8fUI\u6846\u67b6\u548c\u903b\u8f91\u6846\u67b6\u9ad8\u5ea6\u8026\u5408\u65e0\u4ece\u4e0b\u624b\uff1f\u6709\u70b9\u9ebb\u70e6\uff0c\u4e0d\u8fc7\u83dc\u5355\u7279\u6027\uff0c\u67e5\u627e\u7279\u6027\uff0c\u547d\u540d\u6807\u8bb0\u7279\u6027\u53ef\u4ee5\u5e2e\u52a9\u4f60\u65e0\u89c6\u5185\u5bb9\u67e5\u627e\u5b57\u6bb5\u5c5e\u6027\u65b9\u6cd5\u7c7b\u578b\u7b49\u5185\u5bb9\uff0c\u76f4\u63a5\u5c06\u7c7b\u4f20\u5165\u5c31\u80fd\u7a0b\u5e8f\u5316\u751f\u6210\u83dc\u5355\u754c\u9762\u3002\r\n5.\u8d85\u7ea7\u591a\u7684\u6570\u636e\u91cf\u5c06\u5bfc\u81f4\u7a0b\u5e8f\u5361\u987f\uff1f\u8fd9\u662f\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u5b89\u88c5XericUIActionVessel\u63d2\u4ef6\uff0c\u5176\u4e2d\u63d0\u4f9b\u4e86\u591a\u79cd\u57fa\u4e8eUI\u6846\u67b6\u7684\u6570\u636e\u7ed3\u6784\u865a\u62df\u5316\u6280\u672f\uff0c\u57fa\u4e8e\u865a\u62df\u5316\u62c6\u5206\u5927\u91cf\u6570\u636e\u53ef\u4ee5\u51cf\u5c11\u538b\u529b\uff0c\u7cbe\u7ec6\u7684\u6743\u80fd\u5212\u5206\u4e5f\u80fd\u8ba9\u8fd9\u4e9b\u865a\u62df\u5316\u7ed3\u6784\u5728\u5176\u4ed6\u5730\u65b9\u53d1\u5149\u53d1\u70ed\uff01\u3002\r\n6.\u559c\u6b22\u4f7f\u7528\u51fd\u6570\u5f0f\u548clinq\u8bed\u53e5\u7f16\u5199\u7a0b\u5e8f\uff1f\u6ca1\u6709\u95ee\u9898\uff01\u679a\u4e3e\u53ef\u4ee5\u4f7f\u7528MacroEnum\u5206\u7c7b\u548cMacroEnum\u6269\u5c55\uff1b\u6570\u5b66\uff0c\u5411\u91cf\uff0c\u51e0\u4f55\uff0c\u6570\u636e\u7ed3\u6784\u6269\u5c55\uff0c\u5e38\u89c1\u7b97\u6cd5\uff0c\u5e38\u7528\u5b57\u7b26\u8ba1\u7b97\u5df2\u7ecf\u5168\u90e8\u5185\u5d4cMacroMath\u5206\u7c7b\u4e2d\uff0c\u5927\u91cf\u4e0e\u6570\u5b66\uff0c\u5bf9\u8c61\uff0c\u6570\u636e\u7ed3\u6784\u76f8\u5173\u7684\u5feb\u6377\u8bed\u53e5\uff0c\u8fd8\u6709\u66f4\u591a\u7b49\u4f60\u63a2\u7d22\uff01\r\n7.\u60f3\u4f7f\u7528\u66f4\u591a\u4e13\u7528\u6570\u636e\u7ed3\u6784\uff1f\u5927\u9876\u5806\uff0c\u56db\u53c9\u6811\uff0c\u516b\u53c9\u6811\uff0c\u5b57\u5178\u6811\uff0c\u65f6\u95f4\u6233\uff0c\u591a\u6bb5\u7ebf\uff0c\u8d1d\u585e\u5c14\uff0c\u591a\u7ef4\u5e03\u5c14\uff0c\u53cc\u751f\u54c8\u5e0c\u8868\uff0c\u76f8\u90bb\u7f51\u683c\u7b49\u7b49\u5185\u5bb9\u4efb\u541b\u4f7f\u7528\uff0c\u800c\u4e14\u8fd9\u4e9b\u6570\u636e\u7ed3\u6784\u90fd\u6709\u4e13\u7528\u7684\u754c\u9762\uff0c\u754c\u9762\u7f8e\u5316\u8fd9\u4e00\u5757\u3002\r\n8.\u60f3\u8981\u7acb\u523b\u80fd\u591f\u5728\u573a\u666f\u4e2d\u79fb\u52a8\u89d2\u8272\uff1f\u7b2c\u4e00\u4eba\u79f0\uff0c\u7b2c\u4e09\u4eba\u79f0\uff0c\u4e0a\u5e1d\u89c6\u89d2\u5df2\u7ecf\u51c6\u5907\u5c31\u7eea\uff01\r\n9.\u538c\u70e6\u590d\u6742\u7684\u6309\u952e\u68c0\u67e5\u903b\u8f91\uff1f\u6211\u5e2e\u4f60\uff01MacroKey\u4e2d\u7684\u6309\u952e\u72b6\u6001\u8868\u652f\u6301\u4ee5\u81ea\u5df1\u559c\u6b22\u7684\u72b6\u6001\u548c\u9891\u7387\u5904\u7406\u6309\u952e\uff0c\u5e76\u5904\u7406\u6210\u77ed\u6309\uff0c\u957f\u6309\uff0c\u53cc\u51fb\uff0c\u8fde\u51fb\uff0c\u62d6\u62fd\uff0c\u4ee5\u53ca\u8fd9\u4e9b\u72b6\u6001\u7684\u6309\u4e0b\u548c\u91ca\u653e\u72b6\u6001\uff01\u652f\u6301\u4ee5\u65f6\u95f4\uff0c\u5750\u6807\u7b49\u5171\u8ba14\u79cd\u6a21\u5f0f\u5904\u7406\uff0c\u6ee1\u8db3\u7edd\u5927\u90e8\u5206\u573a\u666f\u7684\u7ec6\u5206\u9700\u6c42\u3002\r\n10.\u62c5\u5fc3\u517c\u5bb9\u6027\u5417\uff1f\u7a0b\u5e8f\u4e3b\u8981\u57fa\u4e8e2022\u7248\u672c\u5f00\u53d1\uff0c\u5411\u4e0b\u517c\u5bb92021\uff0c\u5411\u4e0a\u652f\u63016000\uff0c\u4e0d\u6d89\u53ca\u6e32\u67d3\u7ba1\u7ebfAPI\uff0c\u517c\u5bb9\u6027\u8f83\u597d\u3002\r\n\r\n\u66f4\u591a\u7f16\u8f91\u5668\u529f\u80fd\u53c2\u8003\uff1a\r\n\u25cf\u5b89\u88c5Xeric Blueprint Graph\u4ee5\u83b7\u53d6Unity\u4e0a\u84dd\u56fe\u8282\u70b9\u529f\u80fd, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n\u25cf\u5b89\u88c5Xeric UI Graph\u4ee5\u83b7\u53d6\u84dd\u56fe\u5316UI\u751f\u6210\u529f\u80fd, \u4f7f\u7528\u84dd\u56fe\u903b\u8f91\u63a7\u5236UI\u4ea4\u4e92, \u751f\u6210\u903b\u8f91, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n\u25cf\u5b89\u88c5Digital Twin Tool\u4ee5\u83b7\u53d6\u5e38\u7528\u8c03\u8bd5\u5de5\u5177\u96c6\u3002\r\n\u25cf\u5b89\u88c5Nexus Frame Flow\u4ee5\u83b7\u53d6\u5de5\u4f5c\u67b6\u6784\u6d41\u5904\u7406\u529f\u80fd\u3002\r\n\u25cf\u5b89\u88c5Xeric Editor\u8f85\u52a9\u5f15\u64ce\u5927\u7eb2\u7f8e\u5316\u7ec4\u4ef6\u3001 \u8d44\u6e90\u5783\u573e\u5904\u7406\u7ec4\u4ef6\u3001 \u8d44\u6e90\u7f13\u5b58\u7ec4\u4ef6\u3001 \u5feb\u901f\u622a\u56fe\u529f\u80fd, \u4ee5\u53ca\u66f4\u591a\u5feb\u6377\u952e\u529f\u80fd\r\n\r\n\u4f7f\u7528\u7f16\u8bd1\u6807\u8bb0\u542f\u7528\u529f\u80fd\uff1a\r\n\u25cfXericLibrary\uff1a\u901a\u7528\u7684\u542f\u7528\u7279\u6b8a\u529f\u80fd\u3002\r\n\r\n\u5f53\u524d\u63d2\u4ef6\u63d0\u4f9b\u7f16\u8f91\u5668\u529f\u80fd\uff1aDeepseek AI\u5bf9\u8bdd\u3002\r\n\r\n\u9700\u8981\u6ce8\u610f\uff1a\u63d2\u4ef6\u5185\u5982\u679c\u6d89\u53ca\u591a\u5e73\u53f0\u5207\u6362, \u53ef\u80fd\u4f1a\u63d0\u4f9b\u591a\u79cd\u81ea\u52a8\u6216\u624b\u52a8\u7684\u5207\u6362\u65b9\u6848, \u6216\u9ed8\u8ba4\u4f7f\u7528windows\u5e73\u53f0, \u8bf7\u6ce8\u610f\u8fa8\u522b\u3002\r\n\r\n\u5efa\u8bae\u6dfb\u52a0ODin\u63d2\u4ef6, \u4fbf\u4e8e\u5448\u73b0\u66f4\u591a\u754c\u9762\u529f\u80fd\u3002\r\n\r\n\u66f4\u591a\u8be6\u7ec6\u5185\u5bb9\u8bf4\u660e\u8bf7\u7ffb\u9605README\u6587\u6863\u3002\r\n\u5982\u679c\u53d1\u73b0\u4efb\u4f55\u95ee\u9898, \u5305\u62ec\u7248\u672c\u517c\u5bb9\u6027, \u8ba1\u7b97\u9519\u8bef, \u8c03\u7528\u9519\u8bef, \u4f7f\u7528\u95ee\u9898, \u90fd\u53ef\u4ee5\u901a\u8fc7\u53d1\u5e03\u9875Issues\u6216\u5176\u4ed6\u8054\u7cfb\u65b9\u5f0f\u627e\u6211\u83b7\u5f97\u5e2e\u52a9\u3002", "keywords": [ "unity", "xeric"