【求组3.8.X】为什么无法通过碰撞回调来设定精灵的位置

该精灵自带刚体【Kiematic】和碰撞器【CircleCollider2D 】
我通过碰撞回调要设置改精灵的坐标为setposition(1000,1000)就是无法设置
我通过按钮是可以直接设置成功的

然后我查询了一下,似乎是碰撞回调和物理冲突了,我打印的信息来看,确实是设定成功,但是因为物理系统又被拉回去了
image

然后我尝试在修改坐标前禁用其刚体组件,修改坐标后,再启用刚体组件,但是提示我无法禁用
image

我是真的整不会了 有哪位大佬能帮忙解决一下吗

如果你需要自己设置位置的话,也许你不需要使用带物理的碰撞系统,可以用另一个不带物理的碰撞系统 :thinking:,可以在项目设置->功能裁剪,在哪切换Builtin物理系统来完成需求

延时一帧设置

好的 明天我试试

怎么设置呢

放把修改位置的代码套个这个在外面试试

setTimeout(()=>{
//改位置的代码
})


你看我是加在那个位置呢?
这个if是在碰撞函数里面的

套这里

好的 我试试 谢谢 可以了 但是现有个新问题

我只是在初始化的时候 碰撞时触发一次碰撞回调
后面两个精灵分离后 再碰撞就无法触发碰撞了 这个我要怎么设置呢?

之前会吗?

之前就不行
我的代码里面是 ,先初始化map,然后再初始化hero(它们在同一个位置生成)

但是我实际制作出来后,只有hero初始化出来与map触发了一次map自身的碰撞回调, 然后我就控制hero离开map,但是当我再次控制hero与map碰撞时,就无法触发map自身的碰撞回调了

因为你禁用了刚体组件?禁用了刚体组件,box2d碰撞系统就运行不了 :thinking:

我不知道你的功能能不能用Builtin物理系统来做,如果你现在用Box2d物理系统就不应该取消禁用刚体组件,只有Builtin才可以不用刚体组件直接运行,只不过没了物理的模拟

我的代码里面并没有禁用刚体 不过在我设计的功能中 应该还是要用到刚体的吧
因为在我的设计中 像英雄、怪物、子弹这类会用到移速参数,但是角色和怪物之间就会有碰撞体积了,就像war3里面一样怪物之间不会重叠站位

你这里不是说禁用了刚体组件,而且速度可以用代码来实现的

这里是之前的 我已经改好了 现在是这样的


就是按照你说的来做的 能实现我想要的功能

现在就剩 无法重复碰撞的问题了

你有没有启用这个东西
捕获

开了 两个预制体 都开了

可能是因为延迟一帧修改了位置导致了碰撞一直没有onCollisionExit(),一直在onCollisionStay() :thinking:
你给节点加一个onCollisionExit()的监听看看on’CollisionExit()有没有触发

现在似乎没有连续碰撞的碰撞监听了 我看这里只有碰撞开始和碰撞结束?

那我是不是要添加一个状态之类的变量呢?比如碰撞开始就关闭,碰撞结束就关闭,我晚点试试看