Для управления NammeshAgent и остановки после достижения пункта назначения я использовал OnAnimatorMove ().но когда он достигнет места назначения, анимация запуска не остановится.
Я использовал BlendTree для управления анимацией.так что это мой код:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
// private vriables
private Animator anim;
private NavMeshAgent navAgent;
public Transform target;
private float speed;
void Start()
{
anim = GetComponent<Animator>();
navAgent = GetComponent<NavMeshAgent>();
}
void Update()
{
MoveToDestination();
}
private void MoveToDestination()
{
// Move to Target
if (Vector3.Distance(transform.position, target.position) > navAgent.stoppingDistance)
{
speed = 1f;
navAgent.SetDestination(target.position);
}
else
{
speed = 0;
}
anim.SetFloat("Speed", speed, 0.1f, Time.deltaTime);
}
private void OnAnimatorMove()
{
navAgent.speed = (anim.deltaPosition / Time.deltaTime).magnitude;
}
ПРИМЕЧАНИЕ: когда NavmeshAgent достигнут пункта назначения, значение скорости в компоненте NavmeshAgent больше 1. Я видел это с печатью ниже строки.
Vector3.Distance(transform.position, target.position)
ПРИМЕЧАНИЕ: я установил stoppingDistance в 0 в компоненте NavMesh.
Так что мне нужно динамически рассчитать расстояние остановки между игроком и целью.