рассчитать динамическое торможение в единицу - PullRequest
0 голосов
/ 11 сентября 2018

Для управления 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.

Так что мне нужно динамически рассчитать расстояние остановки между игроком и целью.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

проблема была в этой части, и я удалил ее.

private void OnAnimatorMove()
{
    navAgent.speed = (anim.deltaPosition / Time.deltaTime).magnitude;
}

а также я установил stoppingDistance на ноль.

0 голосов
/ 11 сентября 2018

Некоторые незначительные проблемы с вашим кодом:

  • вы установили speed = 0;, но я нигде не вижу скорости, кроме navAgent.speed - убедитесь, что вы используете правильную / предполагаемую переменную!
  • Vector3.Distance(transform.position, target.position) > navAgent.stoppingDistance в основном distance > 0 - замените stoppingDistance на 0.2f или другое небольшое значение.Расстояние почти никогда не будет точно нулевым, поэтому (почти) всегда> 0.

Некоторые мысли:

  • Вы можете установить скорость анимации на скорость агентаТаким образом, анимация будет «работать», но не будет двигаться, если игрок не будет двигаться.Также это будет масштабироваться с ускорением автоматически.Возможно, ваши blend-деревья тоже будут работать лучше.
  • Почему вы поставили тормозной путь на 0?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...