using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; namespace AI.BT { public class FindClosestDestination : BTTask { public BlackboardKeySelector Destination; private GameObject m_ClosestDestination; protected override void OnStart() { base.OnStart(); } protected override void OnBeginExecute(NavMeshAgent agent) { base.OnBeginExecute(agent); var destinations = GameObject.FindObjectsByType<Destination>(FindObjectsSortMode.None); float mindistane =float.MaxValue; foreach (var dest in destinations) { Vector3 position = dest.transform.position; float distance = Vector3.Distance(position, agent.transform.position); if (distance < mindistane) { mindistane = distance; m_ClosestDestination = dest.gameObject; } } } protected override ENodeState OnExecute(NavMeshAgent agent) { if(m_ParentTree.m_Blackboard.TrySet(Destination.KeyName, m_ClosestDestination)) { return ENodeState.Success; } return ENodeState.Failure; } protected override void OnEndExecute() { base.OnEndExecute(); } protected override void OnAbort() { base.OnAbort(); } } }