summaryrefslogtreecommitdiff
path: root/GameCode/WalkAnimator.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-03-21 10:28:46 +0800
committerchai <215380520@qq.com>2024-03-21 10:28:46 +0800
commit3fb2121cc0d00cbd42b2ca10b5dfb399a4df1a04 (patch)
treec1f4683fb021522b459408ab1ad61c40be77ee47 /GameCode/WalkAnimator.cs
parent9ee2cfa385ed77c39003f524f5f03079124fc476 (diff)
*misc
Diffstat (limited to 'GameCode/WalkAnimator.cs')
-rw-r--r--GameCode/WalkAnimator.cs55
1 files changed, 55 insertions, 0 deletions
diff --git a/GameCode/WalkAnimator.cs b/GameCode/WalkAnimator.cs
new file mode 100644
index 0000000..4f2b997
--- /dev/null
+++ b/GameCode/WalkAnimator.cs
@@ -0,0 +1,55 @@
+using System;
+using UnityEngine;
+
+public class WalkAnimator : MonoBehaviour
+{
+ private Pathfinder p;
+
+ [SerializeField]
+ private Transform directionalTransform;
+
+ [SerializeField]
+ private Transform rotationalOffsetTransform;
+
+ [SerializeField]
+ private Transform artTransform;
+
+ [SerializeField]
+ private float strideLength = 1f;
+
+ [SerializeField]
+ private float strideHeight = 1f;
+
+ [SerializeField]
+ private float sideAngles = 20f;
+
+ [SerializeField]
+ private float strideVariationPercentage = 0.1f;
+
+ private float step;
+
+ private Vector3 preiviousPosition;
+
+ private Vector3 direction;
+
+ private void Start()
+ {
+ strideLength = UnityEngine.Random.Range(strideLength * (1f - strideVariationPercentage), strideLength * (1f + strideVariationPercentage));
+ strideHeight = UnityEngine.Random.Range(strideHeight * (1f - strideVariationPercentage), strideHeight * (1f + strideVariationPercentage));
+ p = GetComponent<Pathfinder>();
+ preiviousPosition = base.transform.position;
+ }
+
+ private void FixedUpdate()
+ {
+ direction = base.transform.position - preiviousPosition;
+ preiviousPosition = base.transform.position;
+ if (direction.sqrMagnitude != 0f)
+ {
+ directionalTransform.rotation = Quaternion.LookRotation(direction, Vector3.up);
+ }
+ step = (step + p.speed * Time.fixedDeltaTime / strideLength) % 2f;
+ artTransform.localPosition = strideHeight * Vector3.up * Mathf.Abs(Mathf.Cos(step * (float)Math.PI));
+ artTransform.localEulerAngles = new Vector3(sideAngles * Mathf.Sin(step * (float)Math.PI), 0f, 0f);
+ }
+}