using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraFollower : MonoBehaviour { public bool autoOffset = true; public Transform target; public bool isShaking = false; public float shakeIntensity = 1; public float minFOV = 11; public float FOVmultiplier = 5; public float smoothness = 0.1f; public CameraUpdateMode updateMode; public static CameraFollower instance{get; private set;} public static void UpdateFrame() {if(instance.updateMode == CameraUpdateMode.Manual){ instance.HandleFrame();}} void Awake(){ instance=this; } void Start() { if(target==null){return;} } // Update is called once per frame void FixedUpdate() { if(updateMode!= CameraUpdateMode.Fixed){return;} HandleFrame(); } void LateUpdate(){ if(updateMode!= CameraUpdateMode.Late){return;} HandleFrame(); } void Update(){ if(updateMode!= CameraUpdateMode.Normal){return;} HandleFrame(); } Vector3 lastPos; public void HandleFrame(){ if(target==null){return;} if(Mathf.Abs(target.position.x) > 1000 || Mathf.Abs(target.position.y )> 1000){return;} transform.position = Vector3.Lerp(lastPos, new Vector3(target.position.x, target.position.y,-10), smoothness * Time.deltaTime); lastPos = transform.position; if(isShaking){transform.position += Random.insideUnitSphere * shakeIntensity;} GetComponent().orthographicSize = minFOV + ((target.localScale.x - 1) * FOVmultiplier); } public void SetTarget(Transform Target){ target = Target; } public void ShakeBoost(){ StartCoroutine(shakeBoost()); } IEnumerator shakeBoost(){ isShaking = true; yield return new WaitForSeconds(0.25f); isShaking = false; } public enum CameraUpdateMode{ Fixed, Late, Normal, Manual } }