From c8188ff3f37042491235a5034535d9bff2751ab4 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 02 九月 2025 21:03:16 +0800
Subject: [PATCH] 0312 优化文字描边mask的显示

---
 Main/Component/UI/Core/OutlineEx.cs |   69 +++++++++++++++++++++++++++++++++-
 1 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/Main/Component/UI/Core/OutlineEx.cs b/Main/Component/UI/Core/OutlineEx.cs
index 2deb388..a5c6940 100644
--- a/Main/Component/UI/Core/OutlineEx.cs
+++ b/Main/Component/UI/Core/OutlineEx.cs
@@ -186,13 +186,78 @@
             var uvMin = _Min(v1.uv0, v2.uv0, v3.uv0);
             var uvMax = _Max(v1.uv0, v2.uv0, v3.uv0);
             var uvOrigin = new Vector4(uvMin.x, uvMin.y, uvMax.x, uvMax.y);
+
             // 涓烘瘡涓《鐐硅缃柊鐨凱osition鍜孶V锛屽苟浼犲叆鍘熷UV妗�
-            //
             v1 = _SetNewPosAndUV(v1, this.OutlineWidth, posCenter, triX, triY, uvX, uvY, uvOrigin);
             v2 = _SetNewPosAndUV(v2, this.OutlineWidth, posCenter, triX, triY, uvX, uvY, uvOrigin);
             v3 = _SetNewPosAndUV(v3, this.OutlineWidth, posCenter, triX, triY, uvX, uvY, uvOrigin);
+
+            // 鑾峰彇 RectMask2D 鐨勮竟鐣�
+            // 纭繚鎻忚竟椤剁偣鎵╁睍涓嶄細瓒呭嚭 RectMask2D 鐨勮竟鐣�
+
+            var mask = GetComponentInParent<RectMask2D>();
+            if (mask != null)
+            {
+                // 灏嗗眬閮ㄥ潗鏍囪浆鎹负灞忓箷鍧愭爣
+
+                Transform uiTransform = this.transform;
+                Vector3 worldPos1 = uiTransform.TransformPoint(v1.position);
+                Vector3 worldPos2 = uiTransform.TransformPoint(v2.position);
+                Vector3 worldPos3 = uiTransform.TransformPoint(v3.position);
+
+                Vector2 screenPos1 = CameraManager.uiCamera.WorldToScreenPoint(worldPos1);
+                Vector2 screenPos2 = CameraManager.uiCamera.WorldToScreenPoint(worldPos2);
+                Vector2 screenPos3 = CameraManager.uiCamera.WorldToScreenPoint(worldPos3);
+
+
+
+                // 纭繚鎻忚竟椤剁偣鎵╁睍涓嶄細瓒呭嚭 RectMask2D 鐨勮竟鐣�
+                var clipRect = mask.canvasRect;
+                //clipRect鏄腑蹇冪偣涓哄潗鏍�0锛�0锛岃浆鎴愬睆骞曠殑
+                var maskMinX = Screen.width / 2 + clipRect.xMin;
+                var maskMaxX = Screen.width / 2 + clipRect.xMax;
+                var maskMinY = Screen.height / 2 + clipRect.yMin;
+                var maskMaxY = Screen.height / 2 + clipRect.yMax;
+
+                // //screenPos1 瓒呭嚭clipRect鑼冨洿涓嶆樉绀�
+                bool isout = false;
+                if (screenPos3.x < maskMinX || screenPos3.x > maskMaxX || screenPos3.y < maskMinY || screenPos3.y > maskMaxY)
+                {
+                    isout = true;
+                }
+                else if (screenPos2.x < maskMinX || screenPos2.x > maskMaxX || screenPos2.y < maskMinY || screenPos2.y > maskMaxY)
+                {
+                    isout = true;
+                }
+                else if (screenPos1.x < maskMinX || screenPos1.x > maskMaxX || screenPos1.y < maskMinY || screenPos1.y > maskMaxY)
+                {
+                    isout = true;
+                }
+                if (isout)
+                {
+                    v1.position = new Vector3(10000, 10000, 10000);
+                    v2.position = new Vector3(10000, 10000, 10000);
+                    v3.position = new Vector3(10000, 10000, 10000);
+                }
+
+                // screenPos1.x = Mathf.Clamp(screenPos1.x, maskMinX, maskMaxX);
+                // screenPos1.y = Mathf.Clamp(screenPos1.y, maskMinY, maskMaxY);
+                // screenPos2.x = Mathf.Clamp(screenPos2.x, maskMinX, maskMaxX);
+                // screenPos2.y = Mathf.Clamp(screenPos2.y, maskMinY, maskMaxY);
+                // screenPos3.x = Mathf.Clamp(screenPos3.x, maskMinX, maskMaxX);
+                // screenPos3.y = Mathf.Clamp(screenPos3.y, maskMinY, maskMaxY);
+
+                // // 灏嗗睆骞曞潗鏍囪浆鎹负灞�閮ㄥ潗鏍�
+                // RectTransformUtility.ScreenPointToLocalPointInRectangle(uiTransform.GetComponent<RectTransform>(), screenPos1, CameraManager.uiCamera, out Vector2 localPos1);
+                // RectTransformUtility.ScreenPointToLocalPointInRectangle(uiTransform.GetComponent<RectTransform>(), screenPos2, CameraManager.uiCamera, out Vector2 localPos2);
+                // RectTransformUtility.ScreenPointToLocalPointInRectangle(uiTransform.GetComponent<RectTransform>(), screenPos3, CameraManager.uiCamera, out Vector2 localPos3);
+                // v1.position = localPos1;
+                // v2.position = localPos2;
+                // v3.position = localPos3;
+            }
+
+
             // 搴旂敤璁剧疆鍚庣殑UIVertex
-            //
             m_VetexList[i] = v1;
             m_VetexList[i + 1] = v2;
             m_VetexList[i + 2] = v3;

--
Gitblit v1.8.0