关于手动步进物理的触发器事件概率现象

尝试手动控制物理步进,发现在定时器里的步进不一定触发触发器事件
但在update里调用一样的代码,却能100%触发触发器事件!

  • Creator 版本:3.6.1
  • 目标平台: Edge浏览器 预览模式
  • 重现方式:

定时器步进,概率触发触发器事件

  1. 打开控制台看输出
  2. 点击按钮“自动物理切换” 关闭自动模拟
  3. 点击按钮“开启定时器步进”
  4. 点击按钮“测试移动” 可切换进出碰撞区域

update步进,100%触发触发器事件:

  1. 打开控制台看输出
  2. 点击按钮“自动物理切换” 关闭自动模拟
  3. 点击按钮“开启update步进”
  4. 点击按钮“测试移动” 可切换进出碰撞区域

例子源码:TestStepPhysics.zip (2.8 MB)

是否哪里还存在关联?导致步进在update里时才能取到什么数据?

果然还是要看源码解决 :rofl:
物理世界里的各形状syncSceneToPhysics方法里,都会判断this.node.hasChangedFlags才更新
而这个值是依赖节点的渲染帧的,开始时设置为false,有更新设置为true
如果要手动步进物理世界,执行syncSceneToPhysics时,可能节点变更,但已经过去一帧了,导致更新时的hasChangedFlags=false

所以要自己实现步进,
要么简单粗暴的在更新节点变换信息后紧接着调用syncSceneToPhysics
要么自行维护一个节点变换状态表,在手动步进时,将该表中的节点hasChangedFlags=true,再去syncSceneToPhysics

1赞