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

错误描述:

  在一个脚本(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>();
    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值