123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.TestTools;
- using NUnit.Framework;
- using System.Collections;
-
- public class ScrollRectClamp
- {
- // Prefab has the following hierarchy:
- // - PrefabRoot
- // - Canvas
- // - Root
- // - Scroll View
- // - Content
- // - Scrollbar
- GameObject m_PrefabRoot;
- RectTransform Root { get; set; }
- ScrollRect Scroll { get; set; }
- RectTransform ScrollTransform { get; set; }
- RectTransform Content { get; set; }
-
- float ScrollSizeY { get { return ScrollTransform.rect.size.y; } }
- float ContentSizeY { get { return Content.rect.size.y; } }
-
- [SetUp]
- public void Setup()
- {
- // We setup the ScrollRect so that it will vertically resize with the Root object, to simulate
- // a change in screen size
- m_PrefabRoot = new GameObject("ScrollRectClamp");
-
- GameObject CanvasGO = new GameObject("Canvas");
- CanvasGO.transform.SetParent(m_PrefabRoot.transform);
-
- GameObject RootGO = new GameObject("Root", typeof(RectTransform));
- RootGO.transform.SetParent(CanvasGO.transform);
- Root = RootGO.GetComponent<RectTransform>();
- Root.pivot = Root.anchorMin = Root.anchorMax = new Vector2(0.5f, 0.5f);
- Root.sizeDelta = new Vector2(150.0f, 200.0f);
-
- GameObject ScrollViewGO = new GameObject("Scroll View", typeof(RectTransform), typeof(ScrollRect), typeof(Image));
- ScrollViewGO.transform.SetParent(Root);
- Scroll = ScrollViewGO.GetComponent<ScrollRect>();
- ScrollTransform = ScrollViewGO.GetComponent<RectTransform>();
- Scroll.viewport = ScrollTransform;
- Scroll.movementType = ScrollRect.MovementType.Clamped;
- Scroll.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHide;
-
- ScrollTransform.pivot = ScrollTransform.anchorMax = new Vector2(0.0f, 1.0f);
- ScrollTransform.anchorMin = Vector2.zero;
- ScrollTransform.sizeDelta = new Vector2(150.0f, 0.0f);
- ScrollTransform.localPosition = Vector3.zero;
-
- GameObject ContentGO = new GameObject("Content", typeof(RectTransform));
- Content = ContentGO.GetComponent<RectTransform>();
- Content.SetParent(ScrollTransform);
- Scroll.content = Content;
- Content.pivot = Content.anchorMin = new Vector2(0.0f, 1.0f);
- Content.anchorMax = new Vector2(1.0f, 1.0f);
- Content.sizeDelta = new Vector2(0.0f, 300.0f);
- Content.anchoredPosition = Vector2.zero;
-
- GameObject ScrollbarGO = new GameObject("Scrollbar", typeof(RectTransform), typeof(Image), typeof(Scrollbar));
- ScrollbarGO.transform.SetParent(ScrollTransform);
- Scroll.verticalScrollbar = ScrollbarGO.GetComponent<Scrollbar>();
- }
-
- [TearDown]
- public void TearDown()
- {
- Object.DestroyImmediate(m_PrefabRoot);
- }
-
- [UnityTest]
- public IEnumerator ScrollRect_CorrectClampOnResize()
- {
- Assert.IsNotNull(Scroll.verticalScrollbar);
-
- Scroll.verticalNormalizedPosition = 1.0f;
- yield return null;
- Assert.IsTrue(Mathf.Approximately(0.0f, Content.anchoredPosition.y));
-
- Scroll.verticalNormalizedPosition = 0.0f;
- yield return null;
- // The content is vertically bigger than the viewport.
- Assert.IsTrue(Mathf.Approximately(Content.anchoredPosition.y, ContentSizeY - ScrollSizeY));
-
- // Resizing the root will resize the viewport accordingly.
- Root.sizeDelta = new Vector2(150.0f, 300.0f);
- yield return null;
- // The content is vertically the same size as the viewport
- Assert.IsTrue(Mathf.Approximately(ContentSizeY, ScrollSizeY));
- Assert.False(Scroll.verticalScrollbar.gameObject.activeSelf);
- Assert.IsTrue(Mathf.Approximately(0.0f, Scroll.verticalNormalizedPosition));
- Assert.IsTrue(Mathf.Approximately(0.0f, Content.anchoredPosition.y));
-
- Root.sizeDelta = new Vector2(150.0f, 200.0f);
- yield return null;
- Assert.IsTrue(Mathf.Approximately(1.0f, Scroll.verticalNormalizedPosition));
- }
- }
|