FocusCamera.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class FocusCamera : MonoBehaviour
  5. {
  6. public float MaxDis;
  7. public float maxScale;
  8. public float factor;
  9. private Transform cam;
  10. private SpriteRenderer spriteRenderer;
  11. private float distance;
  12. // Start is called before the first frame update
  13. void Start()
  14. {
  15. cam = Camera.main.transform;
  16. spriteRenderer = this.GetComponent<SpriteRenderer>();
  17. }
  18. // Update is called once per frame
  19. void Update()
  20. {
  21. transform.rotation = cam.rotation;
  22. //distance = Mathf.Abs(Vector3.Distance(transform.position, cam.position));
  23. //Debug.Log("before =" + distance);
  24. float dotResult = Vector3.Dot(cam.forward, (transform.position - cam.position).normalized);
  25. float angle = Mathf.Acos(dotResult) * Mathf.Rad2Deg;
  26. angle = angle > 90 ? 180 - angle : angle;
  27. distance = Mathf.Cos(angle * Mathf.Deg2Rad) * Mathf.Abs(Vector3.Distance(transform.position, cam.position));
  28. //Debug.Log(angle + " after =" + distance);
  29. if (distance > MaxDis)
  30. {
  31. transform.localScale = Vector3.one * maxScale;
  32. }
  33. else
  34. {
  35. transform.localScale = Vector3.one * (distance / factor);
  36. }
  37. }
  38. }