123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using System.IO;
- using UnityEngine;
- using UnityEngine.TestTools;
- using NUnit.Framework;
- using System.Collections;
- using UnityEngine.UI;
- using UnityEditor;
-
- public class ScrollRectScale : IPrebuildSetup
- {
- const string kPrefabPath = "Assets/Resources/ScrollRectScalePrefab.prefab";
- public void Setup()
- {
- #if UNITY_EDITOR
- var rootGO = new GameObject("Canvas", typeof(Canvas), typeof(CanvasScaler));
- rootGO.transform.SetParent(rootGO.transform);
- var rootGOTransform = rootGO.transform as RectTransform;
- rootGOTransform.anchoredPosition3D = new Vector3(679, -122, 783);
- rootGOTransform.sizeDelta = new Vector2(1165, 765);
- rootGOTransform.localRotation = Quaternion.Euler(20, 30, 0);
-
-
- var bodyGO = new GameObject("Body", typeof(RectTransform), typeof(Image), typeof(ScrollRect));
- bodyGO.transform.SetParent(rootGO.transform);
- var bodyGORectTransform = bodyGO.transform as RectTransform;
- bodyGORectTransform.localRotation = Quaternion.identity;
- bodyGORectTransform.anchorMin = Vector2.zero;
- bodyGORectTransform.anchorMax = Vector2.one;
- bodyGORectTransform.localPosition = Vector3.zero;
- bodyGORectTransform.anchoredPosition = new Vector2(8, -8);
- bodyGORectTransform.sizeDelta = new Vector2(-16, -16);
- bodyGORectTransform.pivot = new Vector2(0, 1);
-
- var sizer = new GameObject("Sizer", typeof(RectTransform));
- var sizerTransform = sizer.transform as RectTransform;
- sizerTransform.SetParent(bodyGO.transform);
- sizerTransform.localRotation = Quaternion.identity;
- sizerTransform.sizeDelta = new Vector2(1149, 3700);
- sizerTransform.anchoredPosition3D = Vector3.zero;
- sizerTransform.anchorMin = new Vector2(0, 1);
- sizerTransform.anchorMax = new Vector2(0, 1);
- sizerTransform.pivot = new Vector2(0, 1);
-
- var bodyGOScrollRect = bodyGO.GetComponent<ScrollRect>();
- bodyGOScrollRect.content = sizerTransform;
- bodyGOScrollRect.movementType = ScrollRect.MovementType.Clamped;
- bodyGOScrollRect.decelerationRate = 0.135f;
-
- for (int i = 0; i < 19; ++i)
- {
- var row = new GameObject("Row" + i, typeof(Image));
- var rowTransform = row.transform as RectTransform;
- rowTransform.SetParent(sizer.transform);
- rowTransform.localRotation = Quaternion.identity;
- rowTransform.anchorMin = new Vector2(0, 1);
- rowTransform.anchorMax = new Vector2(0, 1);
- rowTransform.pivot = new Vector2(0, 1);
- rowTransform.sizeDelta = new Vector2(1149, 37);
- rowTransform.anchoredPosition3D = new Vector3(0, i * -37, 0);
- }
-
- if (!Directory.Exists("Assets/Resources/"))
- Directory.CreateDirectory("Assets/Resources/");
-
- UnityEditor.PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
- GameObject.DestroyImmediate(rootGO);
- #endif
- }
-
- GameObject m_CanvasGO;
-
- [SetUp]
- public void TestSetup()
- {
- m_CanvasGO = Object.Instantiate(Resources.Load("ScrollRectScalePrefab")) as GameObject;
- }
-
- [UnityTest]
- [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)")]
- public IEnumerator SmallScaleDoesNotCauseInvalidContentPosition()
- {
- var canvas = m_CanvasGO.GetComponent<Canvas>();
- var scrollRect = canvas.GetComponentInChildren<ScrollRect>();
- var contentRt = scrollRect.content.GetComponent<RectTransform>();
- var contentLocalPosition = contentRt.localPosition;
-
- var rt = canvas.GetComponent<RectTransform>();
- rt.localScale = new Vector3(0.1f, 0.1f, 0.1f);
- yield return null;
-
- Assert.AreEqual(contentLocalPosition.x, contentRt.localPosition.x, 0.001f);
- Assert.AreEqual(contentLocalPosition.y, contentRt.localPosition.y, 0.001f);
- Assert.AreEqual(contentLocalPosition.z, contentRt.localPosition.z, 0.001f);
- }
-
- [TearDown]
- public void TearDown()
- {
- GameObject.DestroyImmediate(m_CanvasGO);
- #if UNITY_EDITOR
- AssetDatabase.DeleteAsset(kPrefabPath);
- #endif
- }
- }
|