forked from BilalY/Rasagar
77 lines
2.2 KiB
C#
77 lines
2.2 KiB
C#
|
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();
|
||
|
}
|
||
|
}
|
||
|
}
|