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