using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine; using UnityEngine.AI; [CreateAssetMenu(menuName = "Finite State Machine/Action/Combat/Ranged/EngageTarget")] public class EngagePlayerAction : Action { [SerializeField] private LookAt lookAt; [SerializeField] private float targetDistance = 2.0f; [SerializeField] private float pathCalculationDelay = 0.2f; public override void Execute(FSM fsm) { NavMeshAgent agent = fsm.Controller.Agent; GameObject target = fsm.Controller.AgentFOV.GetTarget(); Animator anim = fsm.Controller.Animator; //If the agent has a target if (target != null) { lookAt.SetTarget(target); lookAt.Execute(fsm); //fsm.StartCoroutine(CalculatePathToTarget(agent, target)); agent.stoppingDistance = targetDistance; if (agent.stoppingDistance >= targetDistance) { agent.destination = target.transform.position; } } } private IEnumerator CalculatePathToTarget(NavMeshAgent agent, GameObject target) { yield return new WaitForSeconds(pathCalculationDelay); NavMeshPath path = new NavMeshPath(); agent.CalculatePath(target.transform.position, path); } }