12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using NUnit.Framework;
- using UnityEditor;
- using UnityEngine;
- using System.Linq;
-
- public class RectangleContainsScreenPointTest : MonoBehaviour
- {
- RectTransform m_RectTransform;
- Camera m_MainCamera;
- GameObject m_CanvasObject;
- GameObject m_RectObject;
-
- [SetUp]
- public void Setup()
- {
- m_MainCamera = new GameObject("MainCamera").AddComponent<Camera>();
- m_MainCamera.transform.position = new Vector3(0, 1, -10);
- m_MainCamera.depth = -1;
-
- m_CanvasObject = new GameObject("Canvas");
- Canvas m_canvas = m_CanvasObject.AddComponent<Canvas>();
- m_canvas.transform.localPosition = new Vector3(0, 1, 90);
- m_canvas.renderMode = RenderMode.ScreenSpaceCamera;
- m_canvas.worldCamera = m_MainCamera;
-
- m_RectObject = new GameObject("RectTransformObject");
- m_RectTransform = m_RectObject.AddComponent<RectTransform>();
- m_RectTransform.SetParent(m_CanvasObject.transform, false);
- }
-
- [TearDown]
- public void TearDown()
- {
- Destroy(m_MainCamera.gameObject);
- Destroy(m_CanvasObject);
- Destroy(m_RectObject);
- Destroy(m_RectTransform);
- }
-
- [Test]
- public void RectangleContainsScreenPoint_ReturnsTrue_ForAllPointsInTheRectangle()
- {
- var fourCourners = new Vector3[4];
- m_RectTransform.GetWorldCorners(fourCourners);
-
- var worldCorners = fourCourners
- .Select(p => m_MainCamera.WorldToScreenPoint(p))
- .ToArray();
-
- var minValue = new Vector2(
- x: worldCorners.Min(p => p.x),
- y: worldCorners.Min(p => p.y));
-
- var maxValue = new Vector2(
- x: worldCorners.Max(p => p.x),
- y: worldCorners.Max(p => p.y));
-
- var steps = 10000;
- bool ErrorHit = false;
-
- for (float i = 0; i < steps; i++)
- {
- var point = Vector2.Lerp(minValue, maxValue, i / steps);
- if (!RectTransformUtility.RectangleContainsScreenPoint(m_RectTransform, point, m_MainCamera))
- {
- ErrorHit = true;
- Assert.Fail("Rectangle does not Contains ScreenPoint");
- }
- }
-
- if (!ErrorHit)
- {
- Assert.Pass();
- }
- }
- }
|