-
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发一下吗?
不需要,library本地生成
抱歉,现在回调里不能创建或者销毁刚体,得记录一下状态放到下一帧做,后面会进行优化的。
1赞
这是刚需啊,做引擎应该先替我们用户做个延迟,再出品这个大版本呀!
再退一步,实例化函数的文档里提一句也行啊!
刚入门,这坑把我折腾一天,还以为是我的问题……实验各种方法
1赞
什么时候能支持发布qq小游戏
我也是 这么重要的 事都不说一下
好坑呀 现在 3.4.2都没解决这个问题
3.6也没有解决
天啊,这个问题困扰我好几天了,还是得延迟一帧处理啊
顶一下顶一下
新手被掉这坑里了!被折腾了半天,还好看到了,要不然真出不来。