Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

GraphicRaycasterWorldSpaceCanvasTests.cs 3.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using NUnit.Framework;
  4. using UnityEngine;
  5. using UnityEngine.EventSystems;
  6. using UnityEngine.TestTools;
  7. using UnityEngine.UI;
  8. using UnityEngine.TestTools.Utils;
  9. public class GraphicRaycasterWorldSpaceCanvasTests
  10. {
  11. Camera m_Camera;
  12. EventSystem m_EventSystem;
  13. Canvas m_Canvas;
  14. RectTransform m_CanvasRectTrans;
  15. [SetUp]
  16. public void TestSetup()
  17. {
  18. m_Camera = new GameObject("GraphicRaycaster Camera").AddComponent<Camera>();
  19. m_Camera.transform.position = Vector3.zero;
  20. m_Camera.transform.LookAt(Vector3.forward);
  21. m_Camera.farClipPlane = 10;
  22. m_EventSystem = new GameObject("Event System").AddComponent<EventSystem>();
  23. m_Canvas = new GameObject("Canvas").AddComponent<Canvas>();
  24. m_Canvas.renderMode = RenderMode.WorldSpace;
  25. m_Canvas.worldCamera = m_Camera;
  26. m_Canvas.gameObject.AddComponent<GraphicRaycaster>();
  27. m_CanvasRectTrans = m_Canvas.GetComponent<RectTransform>();
  28. m_CanvasRectTrans.sizeDelta = new Vector2(100, 100);
  29. var textRectTrans = new GameObject("Text").AddComponent<Text>().rectTransform;
  30. textRectTrans.SetParent(m_Canvas.transform);
  31. textRectTrans.anchorMin = Vector2.zero;
  32. textRectTrans.anchorMax = Vector2.one;
  33. textRectTrans.offsetMin = Vector2.zero;
  34. textRectTrans.offsetMax = Vector2.zero;
  35. }
  36. [UnityTest]
  37. public IEnumerator GraphicRaycasterDoesNotHitGraphicBehindCameraFarClipPlane()
  38. {
  39. m_CanvasRectTrans.anchoredPosition3D = new Vector3(0, 0, 11);
  40. yield return null;
  41. var results = new List<RaycastResult>();
  42. var pointerEvent = new PointerEventData(m_EventSystem)
  43. {
  44. position = new Vector2(Screen.width / 2f, Screen.height / 2f)
  45. };
  46. m_EventSystem.RaycastAll(pointerEvent, results);
  47. Assert.IsEmpty(results, "Expected no results from a raycast against a graphic behind the camera's far clip plane.");
  48. }
  49. [UnityTest]
  50. public IEnumerator GraphicRaycasterReturnsWorldPositionAndWorldNormal()
  51. {
  52. m_CanvasRectTrans.anchoredPosition3D = new Vector3(0, 0, 11);
  53. m_Camera.farClipPlane = 12;
  54. yield return null;
  55. var results = new List<RaycastResult>();
  56. var pointerEvent = new PointerEventData(m_EventSystem)
  57. {
  58. position = new Vector2(Screen.width / 2f, Screen.height / 2f)
  59. };
  60. m_EventSystem.RaycastAll(pointerEvent, results);
  61. // on katana on 10.13 agents world position returned is 0, -0.00952, 11
  62. // it does not reproduce for me localy, so we just tweak the comparison threshold
  63. Assert.That(new Vector3(0, 0, 11), Is.EqualTo(results[0].worldPosition).Using(new Vector3EqualityComparer(0.01f)));
  64. Assert.That(new Vector3(0, 0, -1), Is.EqualTo(results[0].worldNormal).Using(new Vector3EqualityComparer(0.001f)));
  65. }
  66. [TearDown]
  67. public void TearDown()
  68. {
  69. Object.DestroyImmediate(m_Camera.gameObject);
  70. Object.DestroyImmediate(m_EventSystem.gameObject);
  71. Object.DestroyImmediate(m_Canvas.gameObject);
  72. }
  73. }