b486678290
Library -Artifacts
105 lines
4.1 KiB
C#
105 lines
4.1 KiB
C#
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
|
|
}
|
|
}
|