diff options
author | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-03-13 11:00:58 +0800 |
commit | 6ce8b9e22fc13be34b442c7b6af48b42cd44275a (patch) | |
tree | b38119d2acf0a982cb67e381f146924b9bfc3b3f /UnitySA.Utility/CurveCtrlBob.cs |
+init
Diffstat (limited to 'UnitySA.Utility/CurveCtrlBob.cs')
-rw-r--r-- | UnitySA.Utility/CurveCtrlBob.cs | 50 |
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); + } +} |