我看向前用的ecs是这样写的,可惜sap只支持2d。我用的bullt物理引擎,可以写成这样吗?
(就是在update里获得所有的碰撞结果,然后再根据碰撞体做相应的处理。)
protected execute(): void {
//碰撞检测
// this.physics.trigger((a, b) => {
// if (a.data.has(PlayerComponent)) {
// if (b.data.has(PropComponent)) {
// this.playerAndProp(a.data, b.data);
// } else if (b.data.has(EnemyComponent)) {
// this.playerAndEnemy(a.data, b.data);
// }
// } else if (a.data.has(BulletComponent)) {
// if (b.data.has(EnemyComponent)) {
// this.bulletAndEnemy(a.data, b.data);
// }
// } else if (a.data.has(PropComponent)) {
// if (b.data.has(PlayerComponent)) {
// this.playerAndProp(b.data, a.data);
// }
// } else if (a.data.has(EnemyComponent)) {
// if (b.data.has(BulletComponent)) {
// this.bulletAndEnemy(b.data, a.data);
// } else if (b.data.has(PlayerComponent)) {
// this.playerAndEnemy(b.data, a.data);
// }
// }
// })
}
支持3D,body实例用setBox或setAABB设置x、y、z轴的数据就可以了
1赞
非常感谢,我先用了自带的物理onControllerTriggerEnter实现,碰撞获得node节点后如何获取node的Entity。(node创建时已经创建了entity),如果不行的话我再改成sap。
ecs里面没有存node->enity的对应关系,你可以搞个cc的组件挂到节点上,存一下entiy的uuid。
你这种用法的话,碰撞回调不要去触发ecs里面的逻辑,应该仅仅是存数据,比如entity的组件里面或者往单例组件里面存。
好的明白了
大佬您的ecs NodeComponent setContentSize和boundingBox目前只支持2d有没有考虑过支持3d。
目前没,你可以继承或者拷贝出来实现自己的逻辑,我那个本身就是一个简易的,满足小部分使用的实现