TransformScaler.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEngine;
  6. using UnityEngine.Serialization;
  7. namespace TheraBytes.BetterUi
  8. {
  9. #if UNITY_2018_3_OR_NEWER
  10. [ExecuteAlways]
  11. #else
  12. [ExecuteInEditMode]
  13. #endif
  14. [HelpURL("https://documentation.therabytes.de/better-ui/TransformScaler.html")]
  15. [AddComponentMenu("Better UI/Helpers/Transform Scaler", 30)]
  16. public class TransformScaler : ResolutionSizer<Vector3>
  17. {
  18. public Vector3SizeModifier ScaleSizer { get { return customScaleSizers.GetCurrentItem(scaleSizerFallback); } }
  19. protected override ScreenDependentSize<Vector3> sizer { get { return customScaleSizers.GetCurrentItem(scaleSizerFallback); } }
  20. [FormerlySerializedAs("scaleSizer")]
  21. [SerializeField]
  22. Vector3SizeModifier scaleSizerFallback = new Vector3SizeModifier(Vector3.one, Vector3.zero, 4 * Vector3.one);
  23. [SerializeField]
  24. Vector3SizeConfigCollection customScaleSizers = new Vector3SizeConfigCollection();
  25. DrivenRectTransformTracker rectTransformTracker = new DrivenRectTransformTracker();
  26. protected override void OnDisable()
  27. {
  28. base.OnDisable();
  29. rectTransformTracker.Clear();
  30. }
  31. protected override void ApplySize(Vector3 newSize)
  32. {
  33. rectTransformTracker.Clear();
  34. RectTransform rt = this.transform as RectTransform;
  35. if(rt != null)
  36. {
  37. rectTransformTracker.Clear();
  38. rectTransformTracker.Add(this, rt, DrivenTransformProperties.Scale);
  39. }
  40. this.transform.localScale = newSize;
  41. }
  42. }
  43. }