ResponsiveResize.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace SRF.UI
  5. {
  6. [ExecuteInEditMode]
  7. [AddComponentMenu("SRF/UI/Responsive (Enable)")]
  8. [RequireComponent(typeof(RectTransform))]
  9. public class ResponsiveResize : ResponsiveBase
  10. {
  11. protected override void Refresh()
  12. {
  13. Rect rect = base.RectTransform.rect;
  14. for (int i = 0; i < this.Elements.Length; i++)
  15. {
  16. ResponsiveResize.Element element = this.Elements[i];
  17. if (!(element.Target == null))
  18. {
  19. float num = float.MinValue;
  20. float num2 = -1f;
  21. for (int j = 0; j < element.SizeDefinitions.Length; j++)
  22. {
  23. ResponsiveResize.Element.SizeDefinition sizeDefinition = element.SizeDefinitions[j];
  24. if (sizeDefinition.ThresholdWidth <= rect.width && sizeDefinition.ThresholdWidth > num)
  25. {
  26. num = sizeDefinition.ThresholdWidth;
  27. num2 = sizeDefinition.ElementWidth;
  28. }
  29. }
  30. if (num2 > 0f)
  31. {
  32. element.Target.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, num2);
  33. LayoutElement component = element.Target.GetComponent<LayoutElement>();
  34. if (component != null)
  35. {
  36. component.preferredWidth = num2;
  37. }
  38. }
  39. }
  40. }
  41. }
  42. public ResponsiveResize.Element[] Elements = new ResponsiveResize.Element[0];
  43. [Serializable]
  44. public struct Element
  45. {
  46. public ResponsiveResize.Element.SizeDefinition[] SizeDefinitions;
  47. public RectTransform Target;
  48. [Serializable]
  49. public struct SizeDefinition
  50. {
  51. [Tooltip("Width to apply when over the threshold width")]
  52. public float ElementWidth;
  53. [Tooltip("Threshold over which this width will take effect")]
  54. public float ThresholdWidth;
  55. }
  56. }
  57. }
  58. }