12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using System.Collections;
- using NUnit.Framework;
- using UnityEngine;
- using UnityEngine.AI;
- using UnityEngine.SceneManagement;
- using UnityEngine.TestTools;
-
- namespace Unity.AI.Navigation.Tests
- {
- [TestFixture]
- [PrebuildSetup("Unity.AI.Navigation.Tests." + nameof(CurrentNextOffMeshLinkDataSetUp))]
- [PostBuildCleanup("Unity.AI.Navigation.Tests." + nameof(CurrentNextOffMeshLinkDataSetUp))]
- class CurrentNextOffMeshLinkData
- {
- const string k_SceneName = "OffMeshLinkTest";
-
- [UnitySetUp]
- public IEnumerator UnitySetUp()
- {
- yield return SceneManager.LoadSceneAsync(k_SceneName, LoadSceneMode.Additive);
- yield return null;
-
- SceneManager.SetActiveScene(SceneManager.GetSceneByName(k_SceneName));
- }
-
- [UnityTest]
- [Explicit("Unstable test")]
- public IEnumerator Agent_TraversingOffMeshLink_ReportsCorrectCurrentAndNextLink()
- {
- var agent = GameObject.Find("Agent").GetComponent<NavMeshAgent>();
- var offMeshLink = GameObject.Find("Plane1").GetComponent<NavMeshLink>();
- var target = GameObject.Find("Plane2").transform;
-
- Assert.That(offMeshLink, Is.Not.Null, "Didn't find Off-mesh link");
- Assert.That(agent, Is.Not.Null, "Didn't find NavMeshAgent");
-
- var destinationSet = agent.SetDestination(target.position);
- agent.speed *= 10;
- Assert.That(destinationSet, Is.True, "NavMeshAgent's destination position is not set");
-
- // Wait for path calculation
- yield return null;
-
- // Before link
- while (!agent.isOnOffMeshLink)
- {
- Assert.That(agent.currentOffMeshLinkData.valid, Is.False, "Before link : agent.currentOffMeshLinkData is valid");
-
- AssertValidOffMeshLinkData(agent.nextOffMeshLinkData, offMeshLink);
- yield return null;
- }
-
- // On link
- while (agent.isOnOffMeshLink)
- {
- Assert.That(agent.nextOffMeshLinkData.valid, Is.False, "On link : agent.nextOffMeshLinkData is valid");
-
- AssertValidOffMeshLinkData(agent.currentOffMeshLinkData, offMeshLink);
- yield return null;
- }
-
- // After link
- Assert.That(agent.currentOffMeshLinkData.valid, Is.False, "After link : agent.currentOffMeshLinkData is valid");
- Assert.That(agent.nextOffMeshLinkData.valid, Is.False, "After link : agent.nextOffMeshLinkData is valid");
- }
-
- [UnityTearDown]
- public IEnumerator UnityTearDown()
- {
- yield return SceneManager.UnloadSceneAsync(k_SceneName);
- }
-
- static void AssertValidOffMeshLinkData(OffMeshLinkData offMeshLinkData, NavMeshLink offMeshLink)
- {
- // Double check to avoid spamming success in log-file (decreasing tests performance)
- Assert.That(offMeshLinkData.valid, Is.True, "OffMeshLinkData should be valid.");
- Assert.That(offMeshLinkData.activated, Is.True, "OffMeshLinkData should be activated.");
- Assert.That(offMeshLinkData.linkType, Is.EqualTo(OffMeshLinkType.LinkTypeManual), "OffMeshLinkData's linkType should be Manual.");
- Assert.That(offMeshLinkData.owner, Is.EqualTo(offMeshLink), "OffMeshLinkData should reference the NavMeshLink in the scene as the owner object.");
- #pragma warning disable CS0618
- Assert.That(offMeshLinkData.offMeshLink, Is.Null, "OffMeshLinkData should not reference any legacy OffMeshLink in the scene.");
- #pragma warning restore CS0618
- }
- }
- }
|