Нема описа
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.

ScrollRectScale.cs 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System.IO;
  2. using UnityEngine;
  3. using UnityEngine.TestTools;
  4. using NUnit.Framework;
  5. using System.Collections;
  6. using UnityEngine.UI;
  7. using UnityEditor;
  8. public class ScrollRectScale : IPrebuildSetup
  9. {
  10. const string kPrefabPath = "Assets/Resources/ScrollRectScalePrefab.prefab";
  11. public void Setup()
  12. {
  13. #if UNITY_EDITOR
  14. var rootGO = new GameObject("Canvas", typeof(Canvas), typeof(CanvasScaler));
  15. rootGO.transform.SetParent(rootGO.transform);
  16. var rootGOTransform = rootGO.transform as RectTransform;
  17. rootGOTransform.anchoredPosition3D = new Vector3(679, -122, 783);
  18. rootGOTransform.sizeDelta = new Vector2(1165, 765);
  19. rootGOTransform.localRotation = Quaternion.Euler(20, 30, 0);
  20. var bodyGO = new GameObject("Body", typeof(RectTransform), typeof(Image), typeof(ScrollRect));
  21. bodyGO.transform.SetParent(rootGO.transform);
  22. var bodyGORectTransform = bodyGO.transform as RectTransform;
  23. bodyGORectTransform.localRotation = Quaternion.identity;
  24. bodyGORectTransform.anchorMin = Vector2.zero;
  25. bodyGORectTransform.anchorMax = Vector2.one;
  26. bodyGORectTransform.localPosition = Vector3.zero;
  27. bodyGORectTransform.anchoredPosition = new Vector2(8, -8);
  28. bodyGORectTransform.sizeDelta = new Vector2(-16, -16);
  29. bodyGORectTransform.pivot = new Vector2(0, 1);
  30. var sizer = new GameObject("Sizer", typeof(RectTransform));
  31. var sizerTransform = sizer.transform as RectTransform;
  32. sizerTransform.SetParent(bodyGO.transform);
  33. sizerTransform.localRotation = Quaternion.identity;
  34. sizerTransform.sizeDelta = new Vector2(1149, 3700);
  35. sizerTransform.anchoredPosition3D = Vector3.zero;
  36. sizerTransform.anchorMin = new Vector2(0, 1);
  37. sizerTransform.anchorMax = new Vector2(0, 1);
  38. sizerTransform.pivot = new Vector2(0, 1);
  39. var bodyGOScrollRect = bodyGO.GetComponent<ScrollRect>();
  40. bodyGOScrollRect.content = sizerTransform;
  41. bodyGOScrollRect.movementType = ScrollRect.MovementType.Clamped;
  42. bodyGOScrollRect.decelerationRate = 0.135f;
  43. for (int i = 0; i < 19; ++i)
  44. {
  45. var row = new GameObject("Row" + i, typeof(Image));
  46. var rowTransform = row.transform as RectTransform;
  47. rowTransform.SetParent(sizer.transform);
  48. rowTransform.localRotation = Quaternion.identity;
  49. rowTransform.anchorMin = new Vector2(0, 1);
  50. rowTransform.anchorMax = new Vector2(0, 1);
  51. rowTransform.pivot = new Vector2(0, 1);
  52. rowTransform.sizeDelta = new Vector2(1149, 37);
  53. rowTransform.anchoredPosition3D = new Vector3(0, i * -37, 0);
  54. }
  55. if (!Directory.Exists("Assets/Resources/"))
  56. Directory.CreateDirectory("Assets/Resources/");
  57. UnityEditor.PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
  58. GameObject.DestroyImmediate(rootGO);
  59. #endif
  60. }
  61. GameObject m_CanvasGO;
  62. [SetUp]
  63. public void TestSetup()
  64. {
  65. m_CanvasGO = Object.Instantiate(Resources.Load("ScrollRectScalePrefab")) as GameObject;
  66. }
  67. [UnityTest]
  68. [Description("Rect Transform position values are set to NaN, when Rect Transform is created via script and canvas is scaled to 0.01(case 893559)")]
  69. public IEnumerator SmallScaleDoesNotCauseInvalidContentPosition()
  70. {
  71. var canvas = m_CanvasGO.GetComponent<Canvas>();
  72. var scrollRect = canvas.GetComponentInChildren<ScrollRect>();
  73. var contentRt = scrollRect.content.GetComponent<RectTransform>();
  74. var contentLocalPosition = contentRt.localPosition;
  75. var rt = canvas.GetComponent<RectTransform>();
  76. rt.localScale = new Vector3(0.1f, 0.1f, 0.1f);
  77. yield return null;
  78. Assert.AreEqual(contentLocalPosition.x, contentRt.localPosition.x, 0.001f);
  79. Assert.AreEqual(contentLocalPosition.y, contentRt.localPosition.y, 0.001f);
  80. Assert.AreEqual(contentLocalPosition.z, contentRt.localPosition.z, 0.001f);
  81. }
  82. [TearDown]
  83. public void TearDown()
  84. {
  85. GameObject.DestroyImmediate(m_CanvasGO);
  86. #if UNITY_EDITOR
  87. AssetDatabase.DeleteAsset(kPrefabPath);
  88. #endif
  89. }
  90. }