预置所挂脚本实例化两次,第一次是加载时的deserialize,二次才是instantiate

  • Creator 版本:3.4.1

  • 目标平台:浏览器

  • 重现方式:
    1.// 加载 Prefab
    bundle.load(prefab, Prefab, function (err, prefab) {
    let newNode = instantiate(prefab);
    director.getScene().addChild(newNode);
    });
    2.场景中拖入预置

加载预制体也是这样,预制体资源的 data 数据 也会占用一次

2.4.x系列也同样存在这个问题

对象确实是会实例化两次。第一次是反序列化 Prefab,生成里面的节点结构,第二次才是 instantiate。反序列化本身是比 instantiate 还复杂的操作,而且涉及到依赖资源的加载和赋值,所以目前的结构确实不适合在每次 instantiate 时都执行完整的反序列化流程。
如果是脚本被重复加载两次,那才是 bug。

之后针对“一次性使用”的 Prefab,确实可以考虑在反序列化前缓存原始字符串数据,以及依赖资源列表。然后在每次实际 instantiate 时才执行真正的反序列化,以及依赖资源赋值操作。

我的预置都是动态加载的,只是做切面自动计数时,发现这个现象,结合里面的data节点使用就可以解决了

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。