summaryrefslogtreecommitdiff
path: root/GameCode/LegRenderer.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-10-27 11:05:14 +0800
committerchai <215380520@qq.com>2023-10-27 11:05:14 +0800
commit766cdff5ffa72b65d7f106658d1603f47739b2ba (patch)
tree34d7799a94dfa9be182825577583c0fa6dc935f7 /GameCode/LegRenderer.cs
+ init
Diffstat (limited to 'GameCode/LegRenderer.cs')
-rw-r--r--GameCode/LegRenderer.cs77
1 files changed, 77 insertions, 0 deletions
diff --git a/GameCode/LegRenderer.cs b/GameCode/LegRenderer.cs
new file mode 100644
index 0000000..094b0c9
--- /dev/null
+++ b/GameCode/LegRenderer.cs
@@ -0,0 +1,77 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class LegRenderer : MonoBehaviour
+{
+ public Transform start;
+
+ public Transform mid;
+
+ public Transform end;
+
+ public int segmentCount = 10;
+
+ public GameObject segment;
+
+ public float segmentLength = 1f;
+
+ private List<Transform> segments = new List<Transform>();
+
+ private void Awake()
+ {
+ for (int i = 0; i < segmentCount; i++)
+ {
+ GameObject gameObject = Object.Instantiate(segment, base.transform);
+ gameObject.SetActive(value: true);
+ segments.Add(gameObject.transform);
+ if (i == segmentCount - 1)
+ {
+ gameObject.transform.localScale *= 0f;
+ }
+ }
+ }
+
+ private void LateUpdate()
+ {
+ for (int i = 0; i < segments.Count; i++)
+ {
+ float t = (float)i / ((float)segments.Count - 1f);
+ _ = Vector3.zero;
+ if (i == 0)
+ {
+ _ = segments[i + 1].position - segments[i].position;
+ }
+ else if (i == segments.Count - 1)
+ {
+ _ = segments[i].position - segments[i - 1].position;
+ }
+ else
+ {
+ Vector3 vector = segments[i].position - segments[i - 1].position;
+ Vector3 vector2 = segments[i + 1].position - segments[i].position;
+ _ = (vector + vector2) * 0.5f;
+ }
+ segments[i].position = BezierCurve.QuadraticBezier(start.position, mid.position, end.position, t);
+ }
+ for (int j = 0; j < segments.Count; j++)
+ {
+ _ = (float)j / ((float)segments.Count - 1f);
+ Vector3 zero = Vector3.zero;
+ if (j == 0)
+ {
+ zero = segments[j + 1].position - segments[j].position;
+ }
+ else if (j == segments.Count - 1)
+ {
+ zero = segments[j].position - segments[j - 1].position;
+ }
+ else
+ {
+ Vector3 vector3 = segments[j].position - segments[j - 1].position;
+ Vector3 vector4 = segments[j + 1].position - segments[j].position;
+ zero = (vector3 + vector4) * 0.5f;
+ }
+ segments[j].rotation = Quaternion.LookRotation(Vector3.forward, zero);
+ }
+ }
+}