CameraSmoothFollow.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /********************************************************
  2. ** project : xx
  3. ** date : 05/09/2016
  4. ** auth : Anne
  5. ** desc : 镜头更随~
  6. ** Version : 1.0
  7. ********************************************************/
  8. using UnityEngine;
  9. using System.Collections;
  10. /// <summary>
  11. ///
  12. /// </summary>
  13. public class CameraSmoothFollow : MonoBehaviour
  14. {
  15. /// <summary>
  16. /// 跟随目标
  17. /// </summary>
  18. public Transform mFollowTarget;
  19. /// <summary>
  20. /// 跟随距离
  21. /// </summary>
  22. public float mDistance = 0f;
  23. /// <summary>
  24. /// 高度
  25. /// </summary>
  26. public float mHeight = 0f;
  27. /// <summary>
  28. /// 是否平滑旋转
  29. /// </summary>
  30. public bool bolSmoothRotation = true;
  31. /// <summary>
  32. ///
  33. /// </summary>
  34. public float damping = 5.0f;
  35. /// <summary>
  36. /// 是否在身后跟随
  37. /// </summary>
  38. public bool bolFollowBehind = true;
  39. /// <summary>
  40. /// 旋转衰减
  41. /// </summary>
  42. public float mRotationDamping = 10.0f;
  43. /// <summary>
  44. /// 是否和目标同一个方向
  45. /// </summary>
  46. public bool bolStaticOffset = false;
  47. /// <summary>
  48. /// 当前方向
  49. /// </summary>
  50. private Vector3 mWantedPosition = Vector3.zero;
  51. /// <summary>
  52. /// 相机跟随在late,防止Update中逻辑丢失
  53. /// </summary>
  54. void LateUpdate()
  55. {
  56. if (bolStaticOffset)
  57. {
  58. mWantedPosition = mFollowTarget.position + new Vector3(0, mHeight, mDistance);
  59. }
  60. else
  61. {
  62. if (bolFollowBehind)
  63. {
  64. mWantedPosition = mFollowTarget.TransformPoint(0, mHeight, -1 * mDistance);
  65. }
  66. else
  67. {
  68. mWantedPosition = mFollowTarget.TransformPoint(0, mHeight, mDistance);
  69. }
  70. }
  71. transform.position = Vector3.Lerp(transform.position, mWantedPosition, Time.deltaTime * damping);
  72. if (bolSmoothRotation)
  73. {
  74. Quaternion mWantedRotation = Quaternion.LookRotation(mFollowTarget.position - transform.position, mFollowTarget.up);
  75. transform.rotation = Quaternion.Slerp(transform.rotation, mWantedRotation, Time.deltaTime * mRotationDamping);
  76. }
  77. else {
  78. transform.LookAt(mFollowTarget, mFollowTarget.up);
  79. }
  80. }
  81. }