No Description
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.

CurrentNextOffMeshLinkData.cs 3.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System.Collections;
  2. using NUnit.Framework;
  3. using UnityEngine;
  4. using UnityEngine.AI;
  5. using UnityEngine.SceneManagement;
  6. using UnityEngine.TestTools;
  7. namespace Unity.AI.Navigation.Tests
  8. {
  9. [TestFixture]
  10. [PrebuildSetup("Unity.AI.Navigation.Tests." + nameof(CurrentNextOffMeshLinkDataSetUp))]
  11. [PostBuildCleanup("Unity.AI.Navigation.Tests." + nameof(CurrentNextOffMeshLinkDataSetUp))]
  12. class CurrentNextOffMeshLinkData
  13. {
  14. const string k_SceneName = "OffMeshLinkTest";
  15. [UnitySetUp]
  16. public IEnumerator UnitySetUp()
  17. {
  18. yield return SceneManager.LoadSceneAsync(k_SceneName, LoadSceneMode.Additive);
  19. yield return null;
  20. SceneManager.SetActiveScene(SceneManager.GetSceneByName(k_SceneName));
  21. }
  22. [UnityTest]
  23. [Explicit("Unstable test")]
  24. public IEnumerator Agent_TraversingOffMeshLink_ReportsCorrectCurrentAndNextLink()
  25. {
  26. var agent = GameObject.Find("Agent").GetComponent<NavMeshAgent>();
  27. var offMeshLink = GameObject.Find("Plane1").GetComponent<NavMeshLink>();
  28. var target = GameObject.Find("Plane2").transform;
  29. Assert.That(offMeshLink, Is.Not.Null, "Didn't find Off-mesh link");
  30. Assert.That(agent, Is.Not.Null, "Didn't find NavMeshAgent");
  31. var destinationSet = agent.SetDestination(target.position);
  32. agent.speed *= 10;
  33. Assert.That(destinationSet, Is.True, "NavMeshAgent's destination position is not set");
  34. // Wait for path calculation
  35. yield return null;
  36. // Before link
  37. while (!agent.isOnOffMeshLink)
  38. {
  39. Assert.That(agent.currentOffMeshLinkData.valid, Is.False, "Before link : agent.currentOffMeshLinkData is valid");
  40. AssertValidOffMeshLinkData(agent.nextOffMeshLinkData, offMeshLink);
  41. yield return null;
  42. }
  43. // On link
  44. while (agent.isOnOffMeshLink)
  45. {
  46. Assert.That(agent.nextOffMeshLinkData.valid, Is.False, "On link : agent.nextOffMeshLinkData is valid");
  47. AssertValidOffMeshLinkData(agent.currentOffMeshLinkData, offMeshLink);
  48. yield return null;
  49. }
  50. // After link
  51. Assert.That(agent.currentOffMeshLinkData.valid, Is.False, "After link : agent.currentOffMeshLinkData is valid");
  52. Assert.That(agent.nextOffMeshLinkData.valid, Is.False, "After link : agent.nextOffMeshLinkData is valid");
  53. }
  54. [UnityTearDown]
  55. public IEnumerator UnityTearDown()
  56. {
  57. yield return SceneManager.UnloadSceneAsync(k_SceneName);
  58. }
  59. static void AssertValidOffMeshLinkData(OffMeshLinkData offMeshLinkData, NavMeshLink offMeshLink)
  60. {
  61. // Double check to avoid spamming success in log-file (decreasing tests performance)
  62. Assert.That(offMeshLinkData.valid, Is.True, "OffMeshLinkData should be valid.");
  63. Assert.That(offMeshLinkData.activated, Is.True, "OffMeshLinkData should be activated.");
  64. Assert.That(offMeshLinkData.linkType, Is.EqualTo(OffMeshLinkType.LinkTypeManual), "OffMeshLinkData's linkType should be Manual.");
  65. Assert.That(offMeshLinkData.owner, Is.EqualTo(offMeshLink), "OffMeshLinkData should reference the NavMeshLink in the scene as the owner object.");
  66. #pragma warning disable CS0618
  67. Assert.That(offMeshLinkData.offMeshLink, Is.Null, "OffMeshLinkData should not reference any legacy OffMeshLink in the scene.");
  68. #pragma warning restore CS0618
  69. }
  70. }
  71. }