using System.Collections; using System.Collections.Generic; using UnityEngine; public class FocusCamera : MonoBehaviour { public float MaxDis; public float maxScale; public float factor; private Transform cam; private SpriteRenderer spriteRenderer; private float distance; // Start is called before the first frame update void Start() { cam = Camera.main.transform; spriteRenderer = this.GetComponent(); } // Update is called once per frame void Update() { transform.rotation = cam.rotation; //distance = Mathf.Abs(Vector3.Distance(transform.position, cam.position)); //Debug.Log("before =" + distance); float dotResult = Vector3.Dot(cam.forward, (transform.position - cam.position).normalized); float angle = Mathf.Acos(dotResult) * Mathf.Rad2Deg; angle = angle > 90 ? 180 - angle : angle; distance = Mathf.Cos(angle * Mathf.Deg2Rad) * Mathf.Abs(Vector3.Distance(transform.position, cam.position)); //Debug.Log(angle + " after =" + distance); if (distance > MaxDis) { transform.localScale = Vector3.one * maxScale; } else { transform.localScale = Vector3.one * (distance / factor); } } }