HeadBob.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using UnityEngine;
  3. using UnityStandardAssets.Utility;
  4. namespace UnityStandardAssets.Characters.FirstPerson
  5. {
  6. public class HeadBob : MonoBehaviour
  7. {
  8. public Camera Camera;
  9. public CurveControlledBob motionBob = new CurveControlledBob();
  10. public LerpControlledBob jumpAndLandingBob = new LerpControlledBob();
  11. public RigidbodyFirstPersonController rigidbodyFirstPersonController;
  12. public float StrideInterval;
  13. [Range(0f, 1f)] public float RunningStrideLengthen;
  14. // private CameraRefocus m_CameraRefocus;
  15. private bool m_PreviouslyGrounded;
  16. private Vector3 m_OriginalCameraPosition;
  17. private void Start()
  18. {
  19. motionBob.Setup(Camera, StrideInterval);
  20. m_OriginalCameraPosition = Camera.transform.localPosition;
  21. // m_CameraRefocus = new CameraRefocus(Camera, transform.root.transform, Camera.transform.localPosition);
  22. }
  23. private void Update()
  24. {
  25. // m_CameraRefocus.GetFocusPoint();
  26. Vector3 newCameraPosition;
  27. if (rigidbodyFirstPersonController.Velocity.magnitude > 0 && rigidbodyFirstPersonController.Grounded)
  28. {
  29. Camera.transform.localPosition = motionBob.DoHeadBob(rigidbodyFirstPersonController.Velocity.magnitude*(rigidbodyFirstPersonController.Running ? RunningStrideLengthen : 1f));
  30. newCameraPosition = Camera.transform.localPosition;
  31. newCameraPosition.y = Camera.transform.localPosition.y - jumpAndLandingBob.Offset();
  32. }
  33. else
  34. {
  35. newCameraPosition = Camera.transform.localPosition;
  36. newCameraPosition.y = m_OriginalCameraPosition.y - jumpAndLandingBob.Offset();
  37. }
  38. Camera.transform.localPosition = newCameraPosition;
  39. if (!m_PreviouslyGrounded && rigidbodyFirstPersonController.Grounded)
  40. {
  41. StartCoroutine(jumpAndLandingBob.DoBobCycle());
  42. }
  43. m_PreviouslyGrounded = rigidbodyFirstPersonController.Grounded;
  44. // m_CameraRefocus.SetFocusPoint();
  45. }
  46. }
  47. }