12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /********************************************************
- ** project : xx
- ** date : 05/09/2016
- ** auth : Anne
- ** desc : 镜头更随~
- ** Version : 1.0
- ********************************************************/
- using UnityEngine;
- using System.Collections;
- /// <summary>
- ///
- /// </summary>
- public class CameraSmoothFollow : MonoBehaviour
- {
- /// <summary>
- /// 跟随目标
- /// </summary>
- public Transform mFollowTarget;
- /// <summary>
- /// 跟随距离
- /// </summary>
- public float mDistance = 0f;
- /// <summary>
- /// 高度
- /// </summary>
- public float mHeight = 0f;
- /// <summary>
- /// 是否平滑旋转
- /// </summary>
- public bool bolSmoothRotation = true;
- /// <summary>
- ///
- /// </summary>
- public float damping = 5.0f;
- /// <summary>
- /// 是否在身后跟随
- /// </summary>
- public bool bolFollowBehind = true;
- /// <summary>
- /// 旋转衰减
- /// </summary>
- public float mRotationDamping = 10.0f;
- /// <summary>
- /// 是否和目标同一个方向
- /// </summary>
- public bool bolStaticOffset = false;
- /// <summary>
- /// 当前方向
- /// </summary>
- private Vector3 mWantedPosition = Vector3.zero;
- /// <summary>
- /// 相机跟随在late,防止Update中逻辑丢失
- /// </summary>
- void LateUpdate()
- {
- if (bolStaticOffset)
- {
- mWantedPosition = mFollowTarget.position + new Vector3(0, mHeight, mDistance);
- }
- else
- {
- if (bolFollowBehind)
- {
- mWantedPosition = mFollowTarget.TransformPoint(0, mHeight, -1 * mDistance);
- }
- else
- {
- mWantedPosition = mFollowTarget.TransformPoint(0, mHeight, mDistance);
- }
-
- }
- transform.position = Vector3.Lerp(transform.position, mWantedPosition, Time.deltaTime * damping);
- if (bolSmoothRotation)
- {
- Quaternion mWantedRotation = Quaternion.LookRotation(mFollowTarget.position - transform.position, mFollowTarget.up);
- transform.rotation = Quaternion.Slerp(transform.rotation, mWantedRotation, Time.deltaTime * mRotationDamping);
- }
- else {
- transform.LookAt(mFollowTarget, mFollowTarget.up);
- }
- }
- }
|