#if UNITY_EDITOR || UNITY_STANDALONE using UnityEngine; using UnityEngine.AI; using UnityEngine.TestTools; using NUnit.Framework; using System.Collections; [TestFixture] public class NavMeshSurfaceModifierTests { NavMeshSurface surface; NavMeshModifier modifier; [SetUp] public void CreatePlaneWithModifier() { var plane = GameObject.CreatePrimitive(PrimitiveType.Plane); surface = plane.AddComponent(); modifier = plane.AddComponent(); } [TearDown] public void DestroyPlaneWithModifier() { GameObject.DestroyImmediate(modifier.gameObject); } [Test] public void ModifierIgnoreAffectsSelf() { modifier.ignoreFromBuild = true; surface.BuildNavMesh(); Assert.IsFalse(NavMeshSurfaceTests.HasNavMeshAtOrigin()); } [Test] public void ModifierIgnoreAffectsChild() { modifier.ignoreFromBuild = true; modifier.GetComponent().enabled = false; var childPlane = GameObject.CreatePrimitive(PrimitiveType.Plane); childPlane.transform.SetParent(modifier.transform); surface.BuildNavMesh(); Assert.IsFalse(NavMeshSurfaceTests.HasNavMeshAtOrigin()); GameObject.DestroyImmediate(childPlane); } [Test] public void ModifierIgnoreDoesNotAffectSibling() { modifier.ignoreFromBuild = true; modifier.GetComponent().enabled = false; var siblingPlane = GameObject.CreatePrimitive(PrimitiveType.Plane); surface.BuildNavMesh(); Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin()); GameObject.DestroyImmediate(siblingPlane); } [Test] public void ModifierOverrideAreaAffectsSelf() { modifier.area = 4; modifier.overrideArea = true; surface.BuildNavMesh(); var expectedAreaMask = 1 << 4; Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin(expectedAreaMask)); } [Test] public void ModifierOverrideAreaAffectsChild() { modifier.area = 4; modifier.overrideArea = true; modifier.GetComponent().enabled = false; var childPlane = GameObject.CreatePrimitive(PrimitiveType.Plane); childPlane.transform.SetParent(modifier.transform); surface.BuildNavMesh(); var expectedAreaMask = 1 << 4; Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin(expectedAreaMask)); GameObject.DestroyImmediate(childPlane); } [Test] public void ModifierOverrideAreaDoesNotAffectSibling() { modifier.area = 4; modifier.overrideArea = true; modifier.GetComponent().enabled = false; var siblingPlane = GameObject.CreatePrimitive(PrimitiveType.Plane); surface.BuildNavMesh(); var expectedAreaMask = 1; Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin(expectedAreaMask)); GameObject.DestroyImmediate(siblingPlane); } } #endif