【问题标题】:Unity - I can't seem to link the Animator to my scriptUnity - 我似乎无法将 Animator 链接到我的脚本
【发布时间】:2020-06-19 15:27:18
【问题描述】:

对不起,如果这是一个非常简单的问题,但我真的无法弄清楚。我正在制作一款游戏,我从运动和战斗等教程开始,但是当我尝试使用适用于我的玩家运动脚本的同一行代码为我的教程制作动画时,它不会工作。 “它不起作用”是指每当我保存我的脚本(称为“Next_Script”)并返回 Unity 时,我都无法选择拖入我的 Animator 组件。同样,答案可能非常简单,但我无法弄清楚。谢谢。我正在使用的代码行是

public Animator animator;

它在另一个脚本上完美运行,所以我不知道为什么它不会在这里。这是我在 Unity 中的检查员的照片。

由于某种原因,它不断将我的 unity2d 标签更改为 unity 3d。这是2d

【问题讨论】:

    标签: unity3d 2d animator


    【解决方案1】:

    您的脚本引用已损坏,因此 Unity 甚至无法识别它......

    如果您在脚本已附加到 GameObject 后删除、重命名或将脚本移到 Unity 之外,有时会发生这种情况。

    首先要确保没有编译器错误。

    然后首先将您的脚本拖入缺少组件的字段Script。这再次告诉 Unity 将哪个脚本用于它不再识别的组件。

    之后,您应该会再次看到您的 Animator 字段,您可以像往常一样在其中拖入 Animator。


    所以从 cmets 我知道你的代码编译器错误

    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. 您确实想在 Unity 中使用 Thread.Sleep!这会冻结你的整个 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);      
            }   
        }   
    }
    

    【讨论】:

    • 是的,有一个编译器错误,但我认为这两个问题没有关系。我已经尝试通过 Stack Overflow 解决它,但是由于我是初学者,所以给出的答案对我来说并不是很清楚
    • 好吧,你必须先修复所有编译器错误!否则你的脚本可能不会被编译。你得到什么错误?
    • Assets\Next_Script.cs(19,9): error CS0201: 只有赋值、调用、递增、递减、等待和新对象表达式可以作为语句使用
    • 这是我的代码,抱歉格式错误: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); } }
    • 谢谢,我试试。我使用Thread.Sleep 的原因是为了让玩家有时间阅读,但如果你说的不起作用,我可以找到其他方法
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多