预制体创建和解析全过程剖析,包括生命周期调用

cocos creator预制体简介

说明,本文章适用于2.4.x版本的介绍,另外部分逻辑例如start或者enable的调用关系在编辑器或者其他运行环境下可能存在差异,建议大家自行去看源码!

预制体(prefab文件)的制作和导出

  • 制作
    • 在cocos ceator中,通过拖拉一个节点到文件目录上生成一个预制体文件(下文中以prefab简称)。
    • prefab相当于之前cocosbuilder中的ccb或者flash中的库元件。
    • prefab支持组件化,每个prefab都有一个根节点,根节点上可能会挂载对应的子节点,节点上可以挂载对应的组件
    • 所有的组件均继承自cc.component
  • 导出
    • prefab在保存之后,会生成以json格式和prefab为后缀名的文件,同时对应有meta文件
    • prefab在运行时,会由creator转换成压缩形式的json格式,记录其中的数据信息

预制体加载流程

  • prefab加载介绍

    • cc.loader.loadRes 在2.4.x版本中已经被弃用
    • cc.resources.load 官方的提供加载接口
  • cc.Prefab

    • 在creator中加载完成回来的资源实例对象均为继承自cc.Assets的资源对象
    • 使用cc.instantiate创建node对象,此时转化Assets资源对象为Prefab的Node对象
    • 使用addChild添加node节点至场景的节点树上
    • 至此,一个prefab从解析文件,变成一个node的节点对象

预制体创建中调用关系

  • 加载过程中执行了construct的构造方法,从上图可以看出此时的属性引用等关系没有建立完成,所以creator不建议大家重写构造去做一些事情。
  • 在激活的时候会调用三个方法:
    • preload:不同的组件内部的实现
    • onload:可重写
    • onenable:可重写
      • 在这里加入对象的三个方法到invoke中
  • update的处理,在director中,会触发这三个invoke
    • onstart:第一次启用的时候触发,下次不会在触发,除非调用ondisable之后又调用onenable
    • update:循环
    • lastupdate:循环之后
2赞

先顶再看!!!mark