You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.5 KiB

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<Canvas>().GetComponent<Canvas>();
avproQuad = GetComponent<AVProQuad>();
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
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
}
}