Как я могу воспроизвести несколько анимаций одну за другой? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть персонаж с контроллером аниматора.И у меня есть 12 файлов анимации fbx, которые я скачал с Mixamo.com, это Pro Magic Pack.

Вопрос в том, нужно ли перетаскивать каждую анимацию по одному на контроллер аниматора, а затем добавлять переходы между каждым состоянием анимации?Или сделать смешанное дерево?

И это сценарий, который я сейчас использую, и я хочу, чтобы аниматор в индексе 2 (аниматоры 2 ) после «холостого хода» начал воспроизводить на нем все 12 анимаций.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimatorController : MonoBehaviour
{
    public Animator[] animators;
    public Transform target;
    public float speed = 1f;
    public float rotationSpeed;
    public bool slowDown = false;

    private bool endRot = false;
    private Vector3 center;

    // Use this for initialization
    void Start()
    {
        center = target.GetComponent<Renderer>().bounds.center;

        for (int i = 0; i < animators.Length; i++)
        {
            animators[i].SetFloat("Walking Speed", speed);
        }
    }

    // Update is called once per frame
    void Update()
    {
        float distanceFromTarget = Vector3.Distance(animators[2].transform.position, target.position);

        for(int i = 0; i < animators.Length; i++)
        {
            animators[2].transform.position = Vector3.MoveTowards(animators[2].transform.position, center, 0);
        }

        if (slowDown)
        {
            if (distanceFromTarget < 10)
            {
                float speed = (distanceFromTarget / 10) / 1;
                for (int i = 0; i < animators.Length; i++)
                {
                    animators[i].SetFloat("Walking Speed", speed);
                }
            }
        }

        if (distanceFromTarget < 5f)
        {
            for (int i = 0; i < animators.Length; i++)
            {
                animators[i].SetBool("Idle", true);
            }

            if (!endRot)
            {
                Quaternion goalRotation = Quaternion.Euler(0f, 0f, 0f);
                float angleToGoal = Quaternion.Angle(
                        goalRotation,
                        animators[0].transform.localRotation);
                float angleThisFrame = Mathf.Min(angleToGoal, rotationSpeed * Time.deltaTime);

                // use axis of Vector3.down to keep angles positive for ease of use
                animators[0].transform.Rotate(Vector3.up, angleThisFrame);
                animators[1].transform.Rotate(Vector3.down, angleThisFrame);

                // We end if we rotated the remaining amount.
                endRot = (angleThisFrame == angleToGoal);
            }
            {
                animators[0].SetBool("Rifle Aiming Idle", true);
                animators[1].SetBool("Rifle Aiming Idle", true);
            }
        }
    }
}

Если у меня есть все анимации в контроллере аниматора, скажем, они добавлены с переходами, как мне зациклить их в скрипте и заставить их запускаться по очереди?

ОБНОВЛЕНИЕ:

Это скриншот файлов анимации, которые я хочу воспроизвести один за другим из сценария: от стоящего заклинания 1H наложения заклинаний 01 до стоячих 2H магических атак 05:

Animation files

Следующий снимок экрана - текущий контроллер аниматора с состояниями, которые у меня уже есть, и некоторыми параметрами: от Walk до Idle (HumanoidWalk to HumanoidIdle) И я хочу, чтобы, если он находится в режиме ожидания, начните воспроизведение всех файлов анимации:

States animator controller

Итак, в сценарии после того, как персонаж в аниматорах 2 находится в режиме ожидания, затем начните воспроизведение анимации на этом аниматоре (аниматорах 2 )

Но это файлы анимации на жестком диске.Должен ли я добавить их в аниматор в первую очередь?Сделать переход между каждой анимацией?А как запустить их по одному в сценарии, когда аниматоры 2 находятся в режиме ожидания?

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