The variable sp of BirdControl has not been assigned.(unity错误记录)

  • Post author:
  • Post category:其他




错误描述:

在一个脚本(


Bird.css


)中对一个public的变量使用[HideInInspector](


[HideInInspector]使变量不显示在 Inspector 中,但进行序列化。


),该变量用于获取2D物体的


SpringJoint2D


组件。在另一个脚本(GameManager.css)中引用该组件变量。运行游戏时,出现该变量值未获取错误。



定义:

//Bird.css

//获取spring joint 2D组件
    //[HideInInspector]使变量不显示在 Inspector 中,但进行序列化。
    [HideInInspector]
    public SpringJoint2D sp;



引用:

//GameManager.css
void Instante()
{
    ...
    birds[i].sp.enabled = false;
    ...
}



出错原因:

由于Instante()方法需要一开始就要调用一次,因此将调用语句写在了start()中,而SpringJoint2D的获取也定义在了start()中。

//Bird.css

void Start()
    {
        sp = GetComponent<SpringJoint2D>();
        ...
    }
//GameManager.css

void Start()
    {
        //初始化
        Instante();
    }

start()方法是在update()之前调用一次,两个脚本的start()都在开始时就执行了,最终导致Instante()方法执行时,GameManager.css未获得在Bird.css中获取的SpringJoint2D组件。



解决方法:

Awake()方法在unity中最早调用,因此可以将SpringJoint2D组件的获取放到Awake()中,Instante()方法继续放在start()中。

//Bird.css

 private void Awake()
    {
        sp = GetComponent<SpringJoint2D>();
    }



版权声明:本文为qq_42540393原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。