UPF/Assets/Game/Scripts/Minigame/CameraFollower.cs
2022-12-16 22:04:23 +05:30

75 lines
2.0 KiB
C#

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<Camera>().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
}
}