Почему Контроллер Аниматора vani sh от Инспектора и не назначен при запуске игры? - PullRequest
0 голосов
/ 07 апреля 2020

Он назначен в редакторе, но при запуске игры во время выполнения контроллер Animator пропадает и больше не назначается.

Я пытаюсь воспроизвести все анимации состояния в контроллере Animator по одной.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEditor.Animations;

public class SwitchAnimations : MonoBehaviour
{
    public AnimatorController controller;

    private Animator animator;
    private AnimatorState[] states;

    // Use this for initialization
    void Start()
    {
        animator = GetComponent<Animator>();
        states = GetStateNames(animator);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            StartCoroutine(QueueAnim(states));
        }
    }

    private AnimatorState[] GetStateNames(Animator animator)
    {
        controller = animator ? animator.runtimeAnimatorController as AnimatorController : null;
        return controller == null ? null : controller.layers.SelectMany(l => l.stateMachine.states).Select(s => s.state).ToArray();
    }

    IEnumerator QueueAnim(params AnimatorState[] anim)
    {
        int index = 0;

        while (index < anim.Length)
        {
            if (index == anim.Length)
                index = 0;

            animator.Play(anim[index].name);

            AnimatorStateInfo si = animator.GetCurrentAnimatorStateInfo(index);
            yield return new WaitForSeconds(5);
            index++;
        }
    }
}

Сначала все переменные в скрипте были приватными, а эта была stati c:

private static AnimatorController controller;

И метод GetStateNames был тоже stati c:

private static AnimatorState[] GetStateNames(Animator animator)

Но я изменил переменную контроллера на publi c, а не stati c, поэтому GetStateNames теперь не stati c, так как скрипт присоединен к пустому GameObject.

Но когда я назначаю Animator Controller контроллеру, при запуске игры его значение sh.

Снимок экрана перед запуском игры:

Before running the game

After running the game

1 Ответ

1 голос
/ 07 апреля 2020

Похоже, вы назначаете AnimatorController, а не Animator. Animator ссылается / использует AnimatorController, но не наоборот. Просто сделайте Animator publi c и назначьте ему AnimatorController.

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