From 54594940b82054cb108d3cb48728cea7ead79764 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Sat, 17 May 2025 03:17:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=86=E5=88=86=E4=B8=8B=E7=89=87=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FixSystemNew/BodyModule/GearFollower.cs | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/FixSystemNew/BodyModule/GearFollower.cs b/Assets/Scripts/FixSystemNew/BodyModule/GearFollower.cs index 2ba14f446..66875f694 100644 --- a/Assets/Scripts/FixSystemNew/BodyModule/GearFollower.cs +++ b/Assets/Scripts/FixSystemNew/BodyModule/GearFollower.cs @@ -63,14 +63,33 @@ public class GearFollower : MonoBehaviour return; } - edgePoints = shapePoints - .Select(p => (Vector2)targetSpriteRenderer.transform.TransformPoint(p)) - .ToList(); + float desiredSegmentLength = 0.1f; // 你可以根据需要调整这个值 - if (edgePoints[0] != edgePoints[edgePoints.Count - 1]) + edgePoints.Clear(); + + for (int i = 0; i < shapePoints.Count; i++) + { + Vector2 p1 = targetSpriteRenderer.transform.TransformPoint(shapePoints[i]); + Vector2 p2 = targetSpriteRenderer.transform.TransformPoint(shapePoints[(i + 1) % shapePoints.Count]); + + float segmentLength = Vector2.Distance(p1, p2); + int steps = Mathf.Max(1, Mathf.CeilToInt(segmentLength / desiredSegmentLength)); + + for (int s = 0; s < steps; s++) + { + float t = (float)s / steps; + Vector2 interpolated = Vector2.Lerp(p1, p2, t); + edgePoints.Add(interpolated); + } + } + + // 确保闭环 + if ((edgePoints[0] - edgePoints[edgePoints.Count - 1]).sqrMagnitude > 0.0001f) { edgePoints.Add(edgePoints[0]); } + + Debug.Log($"边缘点数量:{edgePoints.Count}"); } private void UpdateFollowState(Vector2 mousePos)