UnityGame/Library/PackageCache/com.unity.ai.navigation/Tests/Runtime/NavMeshSurfaceAgentTests.cs

107 lines
3.1 KiB
C#
Raw Permalink Normal View History

2024-10-27 10:53:47 +03:00
#if UNITY_EDITOR || UNITY_STANDALONE
using System.Collections;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.TestTools;
namespace Unity.AI.Navigation.Tests
{
class NavMeshSurfaceAgentTests
{
NavMeshSurface m_Surface;
NavMeshAgent m_Agent;
[SetUp]
public void Setup()
{
m_Surface = GameObject.CreatePrimitive(PrimitiveType.Plane).AddComponent<NavMeshSurface>();
}
[TearDown]
public void TearDown()
{
Object.DestroyImmediate(m_Agent.gameObject);
Object.DestroyImmediate(m_Surface.gameObject);
m_Agent = null;
m_Surface = null;
}
[Test]
public void AgentIdentifiesSurfaceOwner()
{
m_Surface.BuildNavMesh();
m_Agent = new GameObject("Agent").AddComponent<NavMeshAgent>();
Assert.AreEqual(m_Surface, m_Agent.navMeshOwner);
Assert.IsTrue(m_Agent.isOnNavMesh);
}
[Test]
[Ignore("1012991 : Missing functionality for notifying the NavMeshAgent about the removal of the NavMesh.")]
public void AgentDetachesAndAttachesToSurface()
{
m_Surface.BuildNavMesh();
m_Agent = new GameObject("Agent").AddComponent<NavMeshAgent>();
Assert.AreEqual(m_Surface, m_Agent.navMeshOwner);
Assert.IsTrue(m_Agent.isOnNavMesh);
m_Surface.enabled = false;
Assert.IsNull(m_Agent.navMeshOwner);
Assert.IsFalse(m_Agent.isOnNavMesh);
m_Surface.enabled = true;
Assert.AreEqual(m_Surface, m_Agent.navMeshOwner);
Assert.IsTrue(m_Agent.isOnNavMesh);
}
/*
[Test]
public void AgentIsOnNavMeshWhenMatchingAgentTypeID()
{
m_Surface.agentTypeID = 1234;
m_Surface.BuildNavMesh();
m_Agent = new GameObject("Agent").AddComponent<NavMeshAgent>();
Assert.IsFalse(m_Agent.isOnNavMesh);
m_Agent.agentTypeID = 1234;
Assert.IsTrue(m_Agent.isOnNavMesh);
}
*/
[UnityTest]
public IEnumerator AgentAlignsToSurfaceNextFrame()
{
m_Surface.transform.rotation = new Quaternion(-0.679622f, 0.351242f, -0.373845f, 0.524388f);
m_Surface.BuildNavMesh();
m_Agent = new GameObject("Agent").AddComponent<NavMeshAgent>();
yield return null;
var residual = m_Surface.transform.up - m_Agent.transform.up;
Assert.IsTrue(residual.magnitude < 0.01f);
}
[UnityTest]
public IEnumerator AgentDoesNotAlignToSurfaceNextFrame()
{
m_Surface.transform.rotation = new Quaternion(-0.679622f, 0.351242f, -0.373845f, 0.524388f);
m_Surface.BuildNavMesh();
m_Agent = new GameObject("Agent").AddComponent<NavMeshAgent>();
m_Agent.updateUpAxis = false;
yield return null;
var residual = Vector3.up - m_Agent.transform.up;
Assert.IsTrue(residual.magnitude < 0.01f);
}
}
}
#endif