Unity 生命周期初始化Awake及Start

文章讲述了在Unity中如何正确使用Awake、OnEnable和Start生命周期函数进行物体初始化,避免因误将Init写在Start导致的常见Bug,特别是在动态创建物体和处理UI/数据时要特别注意空指针问题。
摘要由CSDN通过智能技术生成

        之前创建物体的时候 一不小心把Init初始化写到start里了 产生了一个很经典的Bug 在此做个笔记加深一下影响 防止自己以后还出现这种错误 

        Unity为物体初始化准备了三个生命周期函数:Awake 、OnEnable 、Start

        很多时候会有动态创建物体的需求 这个时候 被创建的物体的初始化工作就会变得非常重要 特别是涉及到UI管理或者数据管理单例类 很容易出现空指针异常

        下面是测试创建脚本Test

    

public class Test : MonoBehaviour
{
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Mouse0))
        {
            GameObject temp = Resources.Load("Cube") as GameObject;
            print("前:");
            Instantiate(temp);
            print("后:");
        }
    }
}

        Cube上挂在了一个Test2脚本

public class Test2 : MonoBehaviour
{
    bool isa = true;
    private void Awake()
    {
        print("Awake" + Time.frameCount);
    }
    // Start is called before the first frame update
    private void OnEnable()
    {
        print("OnEnable" + Time.frameCount);
    }
    void Start()
    {
        print("Start:" + Time.frameCount);
    }

    // Update is called once per frame
    void Update()
    {
        if(isa)
        {
            print("Update:" + Time.frameCount);
            isa = false;
        }
    }
}

        以下是输出结果

        可以看到Awake和OnEnable会立刻执行 而start会等到本次Update结束 下次Updaye之前执行

如果需要立刻对创建出来的物体进行操作 必须要将字段初始化写在Awake或OnEnable中

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值