Files
2026-02-21 16:45:37 +08:00

66 lines
1.4 KiB
C#

using UnityEngine;
using UnityEngine.AI;
namespace BehaviorDesigner.Runtime.Tasks.Movement
{
public abstract class NavMeshGroupMovement : GroupMovement
{
[Tooltip("All of the agents")]
public SharedGameObject[] agents;
[Tooltip("The speed of the agents")]
public SharedFloat speed = 10f;
[Tooltip("The angular speed of the agents")]
public SharedFloat angularSpeed = 120f;
private NavMeshAgent[] navMeshAgents;
protected Transform[] transforms;
public override void OnStart()
{
navMeshAgents = new NavMeshAgent[agents.Length];
transforms = new Transform[agents.Length];
for (int i = 0; i < agents.Length; i++)
{
transforms[i] = agents[i].Value.transform;
navMeshAgents[i] = agents[i].Value.GetComponent<NavMeshAgent>();
navMeshAgents[i].speed = speed.Value;
navMeshAgents[i].angularSpeed = angularSpeed.Value;
navMeshAgents[i].Resume();
}
}
protected override bool SetDestination(int index, Vector3 target)
{
if (navMeshAgents[index].destination == target)
{
return true;
}
return navMeshAgents[index].SetDestination(target);
}
protected override Vector3 Velocity(int index)
{
return navMeshAgents[index].velocity;
}
public override void OnEnd()
{
for (int i = 0; i < navMeshAgents.Length; i++)
{
if (navMeshAgents[i] != null)
{
navMeshAgents[i].Stop();
}
}
}
public override void OnReset()
{
agents = null;
}
}
}