using System.Collections; using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] public class AutoScaler : MonoBehaviour { [SerializeField] [TooltipAttribute("Adjust the final scale by 2^scaleFactor.")] [Range(-2, 2)] float scaleFactor = 0; [Header("Semi Auto Fields")] [SerializeField] Camera referenceCamera; [SerializeField] Canvas canvas; [SerializeField] AVProQuad avproQuad; [SerializeField] float pixelsPerUnit = 100; void Start () { if(referenceCamera == null) referenceCamera = Camera.main; if (canvas == null) canvas = FindObjectOfType().GetComponent(); avproQuad = GetComponent(); SpriteRenderer spriteRenderer = GetComponent(); if (spriteRenderer != null) pixelsPerUnit = spriteRenderer.sprite.pixelsPerUnit; } void Update() { //#if UNITY_EDITOR if (canvas == null || referenceCamera == null) return; Vector3 heading = transform.position - referenceCamera.transform.position; Vector3 d = Vector3.one * Vector3.Dot(heading, referenceCamera.transform.forward) * pixelsPerUnit; if (avproQuad != null) { d.x = d.x * avproQuad.Size.x / pixelsPerUnit; d.y = d.y * avproQuad.Size.y / pixelsPerUnit; } float scale = Mathf.Pow(2, scaleFactor); transform.localScale = d / canvas.planeDistance * scale; //#endif } }