Unity Chase Camera Camera follow
//[ExecuteInEditMode]
public class ChaseCamera : MonoBehaviour
{
public Transform LookAt;
public Transform MoveTo;
public Transform RollTo;
public float ChaseTime=0.5f;
public Vector3 mLastPos;
public Vector3 mVelocity;
public Vector3 mRollVelocity;
public float speed = 3;
public float maxSpeed = 50;
private void Start()
{
LevelGeneration.Instance.OnLevelObjectsLoaded += OnLevelCreated;
if (LookAt==null && MoveTo == null)
{
LookAt = GameObject.FindGameObjectWithTag("CAMERA_LOOK_AT").transform;
MoveTo = GameObject.FindGameObjectWithTag("CAMERA_MOVE_TO").transform;
RollTo = LookAt;
}
else
{
Debug.LogError("Camera not null");
}
}
private void OnLevelCreated()
{
if (LookAt==null && MoveTo == null)
{
LookAt = GameObject.FindGameObjectWithTag("CAMERA_LOOK_AT").transform;
MoveTo = GameObject.FindGameObjectWithTag("CAMERA_MOVE_TO").transform;
RollTo = LookAt;
}
else
{
Debug.LogError("Camera already Set With current level");
}
}
private void OnDisable()
{
LookAt = null;
MoveTo = null;
}
//#if UNITY_EDITOR
// void Update()
// {
// if (!Application.isPlaying)
// {
// if (MoveTo)
// transform.position = MoveTo.position;
// if (LookAt)
// {
// if (!RollTo) transform.LookAt (LookAt);
// else transform.LookAt (LookAt, RollTo.up);
// }
// // if (RollTo)
// // transform.rotation = Quaternion.Euler (new Vector3 (transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, RollTo.rotation.eulerAngles.z));
// }
// }
//#endif
// Update is called once per frame
void FixedUpdate()
{
if (MoveTo)
{
transform.position = Vector3.Lerp(transform.position, MoveTo.position, speed * Time.deltaTime);
// transform.position=Vector3.SmoothDamp(transform.position, MoveTo.position, ref mVelocity, ChaseTime);
}
if (LookAt)
{
transform.LookAt (LookAt , Vector3.SmoothDamp(transform.up, RollTo.up, ref mRollVelocity, ChaseTime));
// if (!RollTo) transform.LookAt (LookAt);
// else transform.LookAt (LookAt, Vector3.SmoothDamp(transform.up, RollTo.up, ref mRollVelocity, ChaseTime));
}
if (RollTo)
{
transform.rotation = Quaternion.Euler (new Vector3 (transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, RollTo.rotation.eulerAngles.z));
}
}
}