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