UnityGame/Library/PackageCache/com.unity.ai.navigation/Tests/Runtime/NavMeshSurfaceModifierTests.cs
2024-10-27 10:53:47 +03:00

134 lines
4.2 KiB
C#

#if UNITY_EDITOR || UNITY_STANDALONE
using NUnit.Framework;
using UnityEngine;
using UnityEngine.AI;
namespace Unity.AI.Navigation.Tests
{
[TestFixture]
class NavMeshSurfaceModifierTests
{
NavMeshSurface m_Surface;
NavMeshModifier m_Modifier;
NavMeshSurfaceBuildFromAwake m_BuildOnAwake;
[SetUp]
public void CreatePlaneWithModifier()
{
var plane = GameObject.CreatePrimitive(PrimitiveType.Plane);
m_Surface = plane.AddComponent<NavMeshSurface>();
m_Modifier = plane.AddComponent<NavMeshModifier>();
}
[TearDown]
public void DestroyPlaneWithModifier()
{
Object.DestroyImmediate(m_Modifier.gameObject);
}
[Test]
public void ModifierIgnoreAffectsSelf()
{
m_Modifier.ignoreFromBuild = true;
m_Surface.BuildNavMesh();
Assert.IsFalse(NavMeshSurfaceTests.HasNavMeshAtOrigin());
}
[Test]
public void ModifierIgnoreAffectsChild()
{
m_Modifier.ignoreFromBuild = true;
m_Modifier.GetComponent<MeshRenderer>().enabled = false;
var childPlane = GameObject.CreatePrimitive(PrimitiveType.Plane);
childPlane.transform.SetParent(m_Modifier.transform);
m_Surface.BuildNavMesh();
Assert.IsFalse(NavMeshSurfaceTests.HasNavMeshAtOrigin());
Object.DestroyImmediate(childPlane);
}
[Test]
public void ModifierIgnoreDoesNotAffectSibling()
{
m_Modifier.ignoreFromBuild = true;
m_Modifier.GetComponent<MeshRenderer>().enabled = false;
var siblingPlane = GameObject.CreatePrimitive(PrimitiveType.Plane);
m_Surface.BuildNavMesh();
Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin());
Object.DestroyImmediate(siblingPlane);
}
[Test]
public void ModifierOverrideAreaAffectsSelf()
{
m_Modifier.area = 4;
m_Modifier.overrideArea = true;
m_Surface.BuildNavMesh();
var expectedAreaMask = 1 << 4;
Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin(expectedAreaMask));
}
[Test]
public void Modifier_WhenSurfaceBuiltOnAwake_OverridesArea()
{
m_Modifier.gameObject.SetActive(false);
m_BuildOnAwake = m_Modifier.gameObject.AddComponent<NavMeshSurfaceBuildFromAwake>();
m_BuildOnAwake.surface = m_Surface;
m_Modifier.area = 4;
m_Modifier.overrideArea = true;
// Enable the components to build the NavMesh on Awake
m_Modifier.gameObject.SetActive(true);
NavMesh.SamplePosition(Vector3.zero, out var hit, 0.1f, NavMesh.AllAreas);
Assume.That(hit.hit, Is.True, "There should be a NavMesh at position (0,0,0).");
Assert.That(hit.mask, Is.EqualTo(1 << m_Modifier.area),
"The NavMesh should have the Modifier area mask at position (0,0,0).");
}
[Test]
public void ModifierOverrideAreaAffectsChild()
{
m_Modifier.area = 4;
m_Modifier.overrideArea = true;
m_Modifier.GetComponent<MeshRenderer>().enabled = false;
var childPlane = GameObject.CreatePrimitive(PrimitiveType.Plane);
childPlane.transform.SetParent(m_Modifier.transform);
m_Surface.BuildNavMesh();
var expectedAreaMask = 1 << 4;
Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin(expectedAreaMask));
Object.DestroyImmediate(childPlane);
}
[Test]
public void ModifierOverrideAreaDoesNotAffectSibling()
{
m_Modifier.area = 4;
m_Modifier.overrideArea = true;
m_Modifier.GetComponent<MeshRenderer>().enabled = false;
var siblingPlane = GameObject.CreatePrimitive(PrimitiveType.Plane);
m_Surface.BuildNavMesh();
var expectedAreaMask = 1;
Assert.IsTrue(NavMeshSurfaceTests.HasNavMeshAtOrigin(expectedAreaMask));
Object.DestroyImmediate(siblingPlane);
}
}
}
#endif