diff --git a/Runtime/Lrss3.Deconstruction.asmdef b/Runtime/Lrss3.Deconstruction.asmdef index 2c7c2e8..60f5425 100644 --- a/Runtime/Lrss3.Deconstruction.asmdef +++ b/Runtime/Lrss3.Deconstruction.asmdef @@ -2,8 +2,7 @@ "name": "Lrss3.Deconstruction", "rootNamespace": "Deconstruction", "references": [ - "GUID:6055be8ebefd69e48b49212b09b47b2f", - "GUID:343deaaf83e0cee4ca978e7df0b80d21" + "GUID:6055be8ebefd69e48b49212b09b47b2f" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Runtime/StructType/GowSoftRef.cs b/Runtime/StructType/GowSoftRef.cs index 975d786..dcd11e9 100644 --- a/Runtime/StructType/GowSoftRef.cs +++ b/Runtime/StructType/GowSoftRef.cs @@ -3,7 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +#if ODIN_INSPECTOR using Sirenix.OdinInspector; +#endif using UnityEngine; using XericLibrary.Runtime.MacroLibrary; using Object = UnityEngine.Object; @@ -26,15 +28,19 @@ namespace XericLibrary.Runtime.Type.Base /// /// 对象 /// +#if ODIN_INSPECTOR [HorizontalGroup("SoftRef")] [HideLabel] +#endif public GameObject targetObejct; /// /// 路径 /// +#if ODIN_INSPECTOR [HorizontalGroup("SoftRef")] [HideLabel] +#endif public string targetPath; /// diff --git a/Runtime/UI/TmpText.meta b/Runtime/UI/TmpText.meta index 6ec62ab..e3c9bfd 100644 --- a/Runtime/UI/TmpText.meta +++ b/Runtime/UI/TmpText.meta @@ -1,5 +1,9 @@ fileFormatVersion: 2 +<<<<<<<< HEAD:Release/Samples~/ConfigUIElement.meta +guid: 7758a0679c9038144a4b0d007d44618f +======== guid: 85f1b523843f5884bb9f6b47500bccd0 +>>>>>>>> gitea-Srouce/master:Release/Runtime/UI/TmpText.meta folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/UI/TmpText/TMPHyperlinkManager.cs b/Runtime/UI/TmpText/TMPHyperlinkManager.cs index b9184b1..4a2aa69 100644 --- a/Runtime/UI/TmpText/TMPHyperlinkManager.cs +++ b/Runtime/UI/TmpText/TMPHyperlinkManager.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; using Sirenix.OdinInspector; using TMPro; using UnityEngine; @@ -8,7 +10,7 @@ using XericLibrary.Runtime.MacroLibrary; using XericLibrary.Runtime.Type; namespace Deconstruction.UI.TmpText -{ +{ /// /// TMP超链接点击管理组件 /// @@ -21,19 +23,22 @@ namespace Deconstruction.UI.TmpText [LabelText("画布*")] #endif [Tooltip("组件可为空,将自动向上查找")] - [SerializeField] public Canvas canvas; + [SerializeField] + public Canvas canvas; #if ODIN_INSPECTOR [LabelText("点击超链接时回调")] #endif [SerializeField] private UnityEvent _onClickLink; + public Action onClickLink; - + /// /// 当前摄像机 /// - private Camera _camera; + private Camera _camera; + /// /// 存储链接ID与对应回调函数的映射 /// @@ -48,13 +53,11 @@ namespace Deconstruction.UI.TmpText Debug.LogError("TMP文本对象必须在Canvas下才能使用超链接功能"); return; } - + if (canvas.renderMode == RenderMode.ScreenSpaceOverlay) _camera = null; else _camera = canvas.worldCamera; - - } /// @@ -72,7 +75,7 @@ namespace Deconstruction.UI.TmpText _linkCallbacks.Add(linkID, callback); } } - + /// /// 注销链接回调函数 /// @@ -83,7 +86,7 @@ namespace Deconstruction.UI.TmpText _linkCallbacks.Remove(linkID); } } - + /// /// 处理链接点击事件 /// @@ -100,7 +103,7 @@ namespace Deconstruction.UI.TmpText } } - + /// /// 检查坐标下的超链接索引 /// @@ -111,6 +114,7 @@ namespace Deconstruction.UI.TmpText { return TMP_TextUtilities.FindIntersectingLink(text, position, _camera); } + /// /// 检查坐标下的超链接id信息 /// @@ -126,9 +130,11 @@ namespace Deconstruction.UI.TmpText linkInfo = text.textInfo.linkInfo[index]; return true; } + linkInfo = default; return false; } + /// /// 检查坐标下的超链接id /// @@ -143,6 +149,7 @@ namespace Deconstruction.UI.TmpText linkID = info.GetLinkID(); return true; } + linkID = string.Empty; return false; } @@ -158,7 +165,88 @@ namespace Deconstruction.UI.TmpText Debug.Log($"click link{linkID}"); // 这里不需要处理报错,应当由发送消息的成员处理 } - + // todo 主动查找所有的tmp组件,或是等组件唤醒后区管理它们,用来获得所有的带有标记的超链接组件 + + /// + /// 主动查找所有具有link属性的tmp组件 + /// + /// 自动查找 + /// + public void FindAllID(bool requirementComponent = true, bool forceRefesh = false) + { + transform.GetChildrenBFS().GetComponentsOTON(); + } + + private List _tempGetChildrenHyperlink = null; + + /// + /// 获取所有链接子项 + /// + /// 强制刷新,如果刷新过一次,之后不论设定如何都将直接从缓存中返回对象,置位将跳过这个缓存 + /// 包括重复标记(也就是是否包含另一个超链接管理器作用域下的超链接对象) + public List GetChildrenHyperlink(bool forceRefesh = false, + bool includeRepeatedMarking = false) + { + if (!forceRefesh && _tempGetChildrenHyperlink != null && _tempGetChildrenHyperlink.Count > 0) + return _tempGetChildrenHyperlink; + + _tempGetChildrenHyperlink = transform.GetChildrenBFS() + .GetComponentsOTON().ToList(); + + return _tempGetChildrenHyperlink; + } + + private List _tempGetChildrenTmpText2Hyperlink = null; + + /// + /// 获取所有tmp_text,然后根据规则返回链接 + /// + /// 强制刷新,如果刷新过一次,之后不论设定如何都将直接从缓存中返回对象,置位将跳过这个缓存 + /// 强制给带有link标记的对象加上超链接组件 + /// 包括重复标记(也就是是否包含另一个超链接管理器作用域下的超链接对象) + /// + public List GetChildrenTmpText2Hyperlink( + bool forceRefesh = false, + bool requirementHyperlink = true, + bool includeRepeatedMarking = false) + { + if (!forceRefesh && _tempGetChildrenTmpText2Hyperlink != null && _tempGetChildrenTmpText2Hyperlink.Count > 0) + return _tempGetChildrenTmpText2Hyperlink; + + var children = includeRepeatedMarking + ? transform.GetChildrenBFS() + : transform.GetChildrenBFS(); + + var result = new List(); + var hyperlinkType = typeof(TMPHyperlinkReceiver); + var tmpTextType = typeof(TMP_Text); + + // 预先分配足够的容量,减少扩容 + result.Capacity = Mathf.Min(children.Count(), 10); + + foreach (var child in children) + { + // 尝试从缓存获取组件 + var hyperlink = child.GetComponent(hyperlinkType) as TMPHyperlinkReceiver; + if (hyperlink != null) + { + result.Add(hyperlink); + continue; + } + + if (!requirementHyperlink) + continue; + + // 尝试获取TMP_Text组件 + var tmp = child.GetComponent(tmpTextType) as TMP_Text; + if (tmp != null && tmp.text.MatchRichTextID()) + { + result.Add(child.gameObject.AddComponent()); + } + } + + return result; + } } } \ No newline at end of file diff --git a/Runtime/XericLibrary.dll b/Runtime/XericLibrary.dll index 4181277..fd1add8 100644 Binary files a/Runtime/XericLibrary.dll and b/Runtime/XericLibrary.dll differ diff --git a/Runtime/hideSponsor.meta b/Runtime/hideSponsor.meta deleted file mode 100644 index 3628ded..0000000 --- a/Runtime/hideSponsor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 60899d22c437ddd40ba15778659bbab9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: