3.0预制件实例化addChild异常SetActive of null

  • Creator 版本: 3.0

  • 重现方式:
    新项目
    添加2D,Sprite,名A,附加2D物理组件Rigidbody和BoxCollider
    复制A为B,放在A下面,改Rigidbody的Type为Kinematic
    复制A为C,转为预制件,从场景管理器删除C
    创建脚本:
    @property(Prefab)
    prefab:Prefab=null!;
    start () {
    var cld=this.node.getComponent(Collider2D)
    console.log(“start”, cld)
    cld?.on(Contact2DType.BEGIN_CONTACT, _=>{
    const obj=instantiate(this.prefab) as Node
    obj.parent=this.node
    })
    }
    脚本拖给A
    打开A的EnableContactListener
    预制件C托给脚本的prefab属性
    运行

  • 首个报错:
    rigid-body.ts:197 Uncaught TypeError: Cannot read property ‘SetActive’ of null
    at b2RigidBody2D.setActive (rigid-body.ts:197)
    at b2RigidBody2D.onEnable (rigid-body.ts:53)
    at RigidBody2D.onEnable (rigid-body-2d.ts:505)
    at OneOffInvoker.invokeOnEnable [as _invoke] (component-scheduler.ts:318)
    at OneOffInvoker.invoke (component-scheduler.ts:148)
    at NodeActivator.activateNode (node-activator.ts:191)
    at Node._onHierarchyChangedBase (base-node.ts:1320)
    at Node._onHierarchyChanged (base-node.ts:1261)
    at Node.setParent (base-node.ts:454)
    at Node.setParent (node.ts:370)

  • 编辑器操作系统: win10

  • 重现概率:必现

  • 其他: 用addChild替换parent=,也是一样的结果

刷新场景后也不行?能把这个demo发一下吗?

CC3Bug.zip (10.9 KB)

应该不需要library文件夹吧?!

不需要,library本地生成

抱歉,现在回调里不能创建或者销毁刚体,得记录一下状态放到下一帧做,后面会进行优化的。

1赞

这是刚需啊,做引擎应该先替我们用户做个延迟,再出品这个大版本呀!
再退一步,实例化函数的文档里提一句也行啊!
刚入门,这坑把我折腾一天,还以为是我的问题……实验各种方法:sob:

1赞

什么时候能支持发布qq小游戏

我也是 这么重要的 事都不说一下

好坑呀 现在 3.4.2都没解决这个问题

3.6也没有解决

天啊,这个问题困扰我好几天了,还是得延迟一帧处理啊

顶一下顶一下

新手被掉这坑里了!被折腾了半天,还好看到了,要不然真出不来。