summaryrefslogtreecommitdiff
path: root/UnitySA.Utility/CurveCtrlBob.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-03-13 11:00:58 +0800
committerchai <215380520@qq.com>2024-03-13 11:00:58 +0800
commit6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch)
treeb38119d2acf0a982cb67e381f146924b9bfc3b3f /UnitySA.Utility/CurveCtrlBob.cs
+init
Diffstat (limited to 'UnitySA.Utility/CurveCtrlBob.cs')
-rw-r--r--UnitySA.Utility/CurveCtrlBob.cs50
1 files changed, 50 insertions, 0 deletions
diff --git a/UnitySA.Utility/CurveCtrlBob.cs b/UnitySA.Utility/CurveCtrlBob.cs
new file mode 100644
index 0000000..04e57e5
--- /dev/null
+++ b/UnitySA.Utility/CurveCtrlBob.cs
@@ -0,0 +1,50 @@
+using System;
+using UnityEngine;
+
+namespace UnitySA.Utility;
+
+[Serializable]
+public class CurveCtrlBob
+{
+ public float HorizontalBobRange = 0.33f;
+
+ public float VerticalBobRange = 0.33f;
+
+ public AnimationCurve Bobcurve = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(0.5f, 1f), new Keyframe(1f, 0f), new Keyframe(1.5f, -1f), new Keyframe(2f, 0f));
+
+ public float VerticaltoHorizontalRatio = 1f;
+
+ private float m_CyclePositionX;
+
+ private float m_CyclePositionY;
+
+ private float m_BobBaseInterval;
+
+ private Vector3 m_OriginalCameraPosition;
+
+ private float m_Time;
+
+ public void Setup(Camera camera, float bobBaseInterval)
+ {
+ m_BobBaseInterval = bobBaseInterval;
+ m_OriginalCameraPosition = camera.transform.localPosition;
+ m_Time = Bobcurve[Bobcurve.length - 1].time;
+ }
+
+ public Vector3 DoHeadBob(float speed)
+ {
+ float x = m_OriginalCameraPosition.x + Bobcurve.Evaluate(m_CyclePositionX) * HorizontalBobRange;
+ float y = m_OriginalCameraPosition.y + Bobcurve.Evaluate(m_CyclePositionY) * VerticalBobRange;
+ m_CyclePositionX += speed * Time.deltaTime / m_BobBaseInterval;
+ m_CyclePositionY += speed * Time.deltaTime / m_BobBaseInterval * VerticaltoHorizontalRatio;
+ if (m_CyclePositionX > m_Time)
+ {
+ m_CyclePositionX -= m_Time;
+ }
+ if (m_CyclePositionY > m_Time)
+ {
+ m_CyclePositionY -= m_Time;
+ }
+ return new Vector3(x, y, 0f);
+ }
+}