暫無描述
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.

OffMeshLinkGetSetNavMeshArea.cs 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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(SimpleScene2PlanesNavigationSetup))]
  11. [PostBuildCleanup("Unity.AI.Navigation.Tests." + nameof(SimpleScene2PlanesNavigationSetup))]
  12. class OffMeshLinkGetSetNavMeshArea : OffMeshLinkTestBase
  13. {
  14. int m_AreaMask;
  15. NavMeshLink m_Link;
  16. readonly string k_SceneName = "OffMeshLinkTwoPlanesScene";
  17. [UnitySetUp]
  18. public IEnumerator UnitySetUp()
  19. {
  20. yield return SceneManager.LoadSceneAsync(k_SceneName, LoadSceneMode.Additive);
  21. yield return null;
  22. SceneManager.SetActiveScene(SceneManager.GetSceneByName(k_SceneName));
  23. }
  24. [UnityTest]
  25. [UnityPlatform(exclude = new[] { RuntimePlatform.OSXServer, RuntimePlatform.WindowsServer, RuntimePlatform.LinuxServer })]
  26. public IEnumerator OffMeshLink_WithCustomArea_AllowsThroughOnlyPathsWithMatchingMasks()
  27. {
  28. m_Link = CreateBiDirectionalLink(true);
  29. yield return null;
  30. var defaultArea = NavMesh.GetAreaFromName("Walkable");
  31. var jumpArea = NavMesh.GetAreaFromName("Jump");
  32. Assume.That(m_Link.area, Is.EqualTo(defaultArea), "Unexpected NavMesh area for NavMeshLink");
  33. // Check we can pass 'default' with 'default' mask
  34. m_AreaMask = 1 << defaultArea;
  35. VerifyAreaPassing(true);
  36. // Change oml area to 'jump'
  37. m_Link.area = jumpArea;
  38. Assume.That(m_Link.area, Is.EqualTo(jumpArea), "Unexpected NavMesh area for NavMeshLink");
  39. // Check we cannot pass 'jump' with 'default' mask
  40. VerifyAreaPassing(false);
  41. // Check we can pass 'jump' with 'default' + 'jump' mask
  42. m_AreaMask |= 1 << jumpArea;
  43. VerifyAreaPassing(true);
  44. }
  45. void VerifyAreaPassing(bool expectToPass)
  46. {
  47. var path = new NavMeshPath();
  48. NavMesh.CalculatePath(m_PlaneStart.position, m_PlaneEnd.position, m_AreaMask, path);
  49. if (expectToPass)
  50. Assert.That(path.status, Is.EqualTo(NavMeshPathStatus.PathComplete),
  51. "Expected complete path; with navmesh area mask " + m_AreaMask + " when NavMeshLink area is " + m_Link.area);
  52. else
  53. Assert.That(path.status, Is.EqualTo(NavMeshPathStatus.PathPartial),
  54. "Expected partial path; with navmesh area mask " + m_AreaMask + " when NavMeshLink area is " + m_Link.area);
  55. }
  56. [UnityTearDown]
  57. public IEnumerator UnityTearDown()
  58. {
  59. yield return SceneManager.UnloadSceneAsync(k_SceneName);
  60. }
  61. }
  62. }