您的脚本引用已损坏,因此 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);
}
}
这里有多个问题:
-
您确实不想在 Unity 中使用 Thread.Sleep!这会冻结你的整个 GUI 主线程!
对于在您可以使用的许多其他选项中反复延迟调用某些内容,例如InvokeRepeating,一个简单的计时器或协程(见下面的例子)
然后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);
}
}
}