У меня есть две анимации для моего зомба ie. Один из них - анимация ходьбы, когда зомб ie не знает игрока, а второй - анимация бега, когда зомб ie узнает игрока.
У меня также есть Navigation Me sh, и к каждому зомбу ie прикреплен компонент NavMeshAgent.
Анимация ходьбы работает отлично и прилипает к границам меня sh. Но когда зомб ie становится известно, я использую функцию Animator.SetBool () для перехода в запущенную анимацию.
Переход разбивает агента в том смысле, что он просто продолжает убегать от меня sh после бега к игроку.
Я новичок в Unity, поэтому любая помощь будет принята с благодарностью.
Редактировать
Вот код:
private void Update()
{
if(isAware)
{
navAgent.SetDestination(player.position);
animator.SetBool("Aware", true);
navAgent.speed = chaseSpeed;
}
else
{
SearchPlayer();
Wander();
animator.SetBool("Aware", false);
navAgent.speed = wanderSpeed;
}
}
public void SearchPlayer()
{
if (Vector3.Angle(Vector3.forward, transform.InverseTransformPoint(player.position)) < view / 2f)
{
if(Vector3.Distance(player.position, transform.position) < viewDist)
{
OnAware();
}
}
}
public void OnAware()
{
isAware = true;
}
/*
* Create random points on the Navigation Mesh for the zombies to aimlessly wander to
*/
private Vector3 WanderingPoint()
{
Vector3 randomPoint = (Random.insideUnitSphere * 4f) + transform.position; // Create a random point in a sphere surrouding the zombie
NavMeshHit navHit;
NavMesh.SamplePosition(randomPoint, out navHit, 7f, -1); //Get nearest point on the Navigation Mesh to the random point generated in the sphere around the zombie so that it stays within the mesh
return new Vector3(navHit.position.x, transform.position.y, navHit .position.z);
}
private void Wander()
{
if(Vector3.Distance(transform.position, wanderPoint) < 2f) //Create new Wandering Point when zombie reaches the current wandering point
{
wanderPoint = WanderingPoint();
}
else
{
navAgent.SetDestination(wanderPoint);
}
}
Вот окно Аниматора .