Animator.SetBool () разбивает NavMeshAgent - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть две анимации для моего зомба 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);
        }
    }

Вот окно Аниматора screenshot.

1 Ответ

1 голос
/ 12 февраля 2020

с первого взгляда часть кода в порядке. проблема может быть в части аниматора. если в состоянии Z_Run нет анимации бездействия (только анимация бега), когда зомб ie достигает игрока, которого он не может остановить (я не уверен, что это проблема, вам нужно указать больше c на эта часть). Кроме того, чтобы сделать анимацию плавной, я предлагаю, чтобы когда ваш navAgent достигал «рядом» с игроком, он уменьшал скорость, а затем снова уменьшал скорость до нуля, когда он фактически достигал ее, и переходил в режим ожидания (вы должны иметь возможность последняя часть в состоянии Z_Run, если вы используете базовое c Blend Trees в качестве состояния). Достаточно взглянуть на документы Unity о Blend Trees.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...