Unity - я не могу связать Animator со своим скриптом

извините, если это действительно простой вопрос, но я действительно не могу понять. Я делаю игру, в которой я начинаю с туториала по передвижению и бою и т. д., но когда я пытаюсь анимировать свои туториалы, используя ту же строку кода, которая работала для моего скрипта движения игрока, это не сработает. Под «это не сработает» я имею в виду, что всякий раз, когда я сохраняю свой сценарий (называемый «Next_Script») и возвращаюсь в Unity, у меня нет возможности перетаскивать компонент Animator. Опять же, ответ, вероятно, чрезвычайно прост, но я не могу его понять. Спасибо. Строка кода, которую я использую,

public Animator animator;

Он отлично работал на другом скрипте, поэтому я не знаю, почему этого не будет здесь. Вот фото моего инспектора в Unity.

Изображение (это не позволяло мне публиковать его отдельно)

По какой-то причине он продолжает менять мой тег unity2d на unity 3d. это 2д


person candybar521    schedule 19.06.2020    source источник


Ответы (1)


Ссылка на ваш сценарий не работает, поэтому Unity даже не распознает ее...

Иногда это происходит, если вы удаляете, переименовываете или перемещаете скрипт за пределы Unity после того, как он уже был прикреплен к файлу GameObject.

Сначала, как сказано в предупреждении, убедитесь в отсутствии ошибок компилятора.

Затем в первую очередь перетащите свой скрипт в поле Script отсутствующего компонента. Это снова сообщает Unity, какой сценарий использовать для компонента, который он больше не распознает.

После этого вы снова должны увидеть свое поле Animator, куда вы можете перетащить свой аниматор, как обычно.


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

public class Next_Script : MonoBehaviour 
{   
    public Animator animator;      
    public float Yay = 0f; 

     // Update is called once per frame    
    void Update()     
    {                  
        Thread.Sleep(5000);
        Yay + 1f;
        animator.SetFloat("Next", Yay);      
    }      
}

Вот несколько проблем:

  1. Вы не хотите использовать Thread.Sleep в Unity! Это замораживает весь ваш основной поток графического интерфейса!

    Для вызова чего-то, неоднократно отложенного среди множества других опций, вы можете использовать, например. InvokeRepeating, простой таймер или сопрограмма (см. примеры ниже)

  2. И тогда Yay + 1f; не имеет смысла... вы либо хотите присвоить это значение чему-то, либо используете Yay++; или Yay+=1

Таким образом, ваш код должен выглядеть, например.

public class Next_Script : MonoBehaviour 
{   
    public Animator animator;      
    public float Yay = 0f; 

    void Start()
    {
        InvokeRepeating(nameof(Increase), 5f, 5f);
    }

    void Increase()     
    {                  
        Yay += 1f;
        animator.SetFloat("Next", Yay);      
    }      
}

Или используя простой таймер в Update

public class Next_Script : MonoBehaviour 
{   
    public Animator animator;      
    public float Yay = 0f; 

    private float timer;

    void Update()     
    {  
        timer += Time.deltaTime;

        if(timer < 5f) return;

        timer = 0;

        Yay += 1f;
        animator.SetFloat("Next", Yay);      
    }      
}

Или с помощью Coroutine.

public class Next_Script : MonoBehaviour 
{   
    public Animator animator;      
    public float Yay = 0f; 

    private float timer;

    IEnumerator Start()
    {
        while (true)   
        {  
            yield return new WaitForSeconds(5f);

            Yay += 1f;
            animator.SetFloat("Next", Yay);      
        }   
    }   
}
person derHugo    schedule 19.06.2020
comment
Да, есть ошибка компилятора, но я не думаю, что эти две проблемы связаны. Я пытался решить это с помощью переполнения стека, но полученные ответы не были для меня слишком ясны, так как я новичок. - person candybar521; 19.06.2020
comment
Как уже было сказано, сначала нужно исправить все ошибки компилятора! В противном случае ваш скрипт может быть не скомпилирован. Какую ошибку вы получаете? - person derHugo; 19.06.2020
comment
Assets\Next_Script.cs(19,9): ошибка CS0201: в качестве оператора можно использовать только выражения присваивания, вызова, увеличения, уменьшения, ожидания и нового объекта. - person candybar521; 19.06.2020
comment
вот мой код, извините за плохое форматирование: public class Next_Script : MonoBehaviour { public Animator animator; public float Yay = 0f; // Update is called once per frame void Update() { Thread.Sleep(5000); Yay + 1f; animator.SetFloat("Next", Yay); } } - person candybar521; 19.06.2020
comment
Спасибо, я попробую. Причина, по которой я использовал Thread.Sleep, заключалась в том, что была задержка, чтобы дать игроку время на чтение, но я могу найти другой способ сделать это, если то, что вы сказали, не работает. - person candybar521; 19.06.2020
comment
Это уже исправлено ;) пожалуйста, смотрите ответ внизу .. есть три наиболее часто используемых метода задержки вещей в Unity. - person derHugo; 19.06.2020
comment
Спасибо, только сейчас увидел. То, что вы сказали, вызвало у меня ошибку, но я не могу добраться до своего ноутбука еще 8 часов, поэтому я опубликую это здесь, когда доберусь до него. В любом случае спасибо, так как я задал один вопрос, а вы ответили на другой, который требовал ответа - person candybar521; 20.06.2020
comment
Спасибо большое, теперь программа работает. Также спасибо за помощь с другой моей проблемой, которая, как я думал, не имеет отношения. Я имею в виду, что в коде есть небольшая ошибка, но, по крайней мере, это работает, еще раз, спасибо - person candybar521; 21.06.2020