Unity - кажется, я не могу связать Animator со своим скриптом - PullRequest
0 голосов
/ 19 июня 2020

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

public Animator animator;

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

Picture (It wouldn't let me post it on its own)

По какой-то причине он постоянно меняет мой тег unity2d на unity 3d. Это 2d

1 Ответ

0 голосов
/ 19 июня 2020

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

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

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

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

После этого вы снова должны увидеть свое поле Animator, куда вы можете перетащить свой 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. Вы do not хотите использовать Thread.Sleep в Unity! Это замораживает весь ваш основной поток GUI!

    Для вызова чего-то постоянно откладываемого среди множества других опций вы можете использовать, например, 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);      
        }   
    }   
}
...