설명 없음
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RectangleContainsScreenPointTest.cs 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using NUnit.Framework;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using System.Linq;
  5. public class RectangleContainsScreenPointTest : MonoBehaviour
  6. {
  7. RectTransform m_RectTransform;
  8. Camera m_MainCamera;
  9. GameObject m_CanvasObject;
  10. GameObject m_RectObject;
  11. [SetUp]
  12. public void Setup()
  13. {
  14. m_MainCamera = new GameObject("MainCamera").AddComponent<Camera>();
  15. m_MainCamera.transform.position = new Vector3(0, 1, -10);
  16. m_MainCamera.depth = -1;
  17. m_CanvasObject = new GameObject("Canvas");
  18. Canvas m_canvas = m_CanvasObject.AddComponent<Canvas>();
  19. m_canvas.transform.localPosition = new Vector3(0, 1, 90);
  20. m_canvas.renderMode = RenderMode.ScreenSpaceCamera;
  21. m_canvas.worldCamera = m_MainCamera;
  22. m_RectObject = new GameObject("RectTransformObject");
  23. m_RectTransform = m_RectObject.AddComponent<RectTransform>();
  24. m_RectTransform.SetParent(m_CanvasObject.transform, false);
  25. }
  26. [TearDown]
  27. public void TearDown()
  28. {
  29. Destroy(m_MainCamera.gameObject);
  30. Destroy(m_CanvasObject);
  31. Destroy(m_RectObject);
  32. Destroy(m_RectTransform);
  33. }
  34. [Test]
  35. public void RectangleContainsScreenPoint_ReturnsTrue_ForAllPointsInTheRectangle()
  36. {
  37. var fourCourners = new Vector3[4];
  38. m_RectTransform.GetWorldCorners(fourCourners);
  39. var worldCorners = fourCourners
  40. .Select(p => m_MainCamera.WorldToScreenPoint(p))
  41. .ToArray();
  42. var minValue = new Vector2(
  43. x: worldCorners.Min(p => p.x),
  44. y: worldCorners.Min(p => p.y));
  45. var maxValue = new Vector2(
  46. x: worldCorners.Max(p => p.x),
  47. y: worldCorners.Max(p => p.y));
  48. var steps = 10000;
  49. bool ErrorHit = false;
  50. for (float i = 0; i < steps; i++)
  51. {
  52. var point = Vector2.Lerp(minValue, maxValue, i / steps);
  53. if (!RectTransformUtility.RectangleContainsScreenPoint(m_RectTransform, point, m_MainCamera))
  54. {
  55. ErrorHit = true;
  56. Assert.Fail("Rectangle does not Contains ScreenPoint");
  57. }
  58. }
  59. if (!ErrorHit)
  60. {
  61. Assert.Pass();
  62. }
  63. }
  64. }