kerimdeveci
5/31/2019 - 12:06 PM

Unity Chase Camera Camera follow

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));
            }
        }
    }