यह संपादक में सौंपा गया है, लेकिन रन टाइम में गेम चलाते समय एनिमेटर नियंत्रक चला गया है और अब असाइन नहीं किया गया है।

मैं एक-एक करके एनिमेटर नियंत्रक में सभी राज्य एनिमेशन चलाने की कोशिश कर रहा हूं।

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++;
        }
    }
}

पहले स्क्रिप्ट में सभी चर निजी थे और यह स्थिर था:

private static AnimatorController controller;

और विधि GetStateNames भी स्थिर थी:

private static AnimatorState[] GetStateNames(Animator animator)

लेकिन मैंने नियंत्रक चर को सार्वजनिक होने के लिए बदल दिया है और स्थिर नहीं है इसलिए GetStateNames अब स्थिर नहीं है क्योंकि स्क्रिप्ट खाली GameObject से जुड़ी हुई है।

लेकिन जब मैं एनिमेटर कंट्रोलर को कंट्रोलर को असाइन करता हूं तो गेम चलाते समय यह गायब हो जाता है।

खेल चलाने से पहले स्क्रीनशॉट:

Before running the game

After running the game

0
Daniel Lip 7 अप्रैल 2020, 16:15

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा प्रतीत होता है कि आप एनिमेटर कंट्रोलर असाइन कर रहे हैं, एनिमेटर नहीं। एक एनिमेटर एक एनिमेटर कंट्रोलर का संदर्भ देता है/उपयोग करता है लेकिन दूसरी तरफ नहीं। बस एनिमेटर को सार्वजनिक करें और उसे एनिमेटर कंट्रोलर असाइन करें।

1
jiveturkey 7 अप्रैल 2020, 15:10