60个刚体,运行起来iPhone8P帧率不到10,没法玩啊。求优化方法
emm,我这边也做了一个 子弹打小人的游戏,同屏幕大概200个刚体是没有问题的。我怀疑你的游戏帧率很低不是刚体的原因导致的。你看看
这个地方每帧花在物理上的时间。
好 我再看看,你这22帧能流畅玩么
目前来说,3D 使用的物理引擎Cannon.js有个致命问题
创建过多的刚体,我这边实验了一下,大概500个 左右吧,会挂。官方也确认了这个Bug。你使用的时候要注意一下。
我擦,牛逼了。我同屏200个刚体,物理逻辑耗时在20ms-40ms徘徊(这个其实也不能接受)。但是我有敌人还有子弹呢。你这个啥也没干,怎么会有90ms。坐等引擎组来解决这个问题
物理耗时20-40,加上渲染和逻辑,帧率估计30以下,玩起来就卡了
你那个问题解决啦?要删帖子?
咦 ,没啊 我删的是一条回复呀
你好,可以给下你测试的 Demo 吗
maxSubStep 物理每帧模拟的最大子步数,默认为 2
deltaTime 物理每步模拟消耗的时间,注意不是每帧,默认为 1 / 60
PhysicsSystem这两个属性,我不太理解,有大佬能通俗的讲一下吗?
不知道这两个属性对性能有什么影响
一般的物理模拟有两种方式:
- 不考虑实际时间的固定模拟
- 根据实际时间进行的插值模拟
现在采用的是插值模拟(目前还没有通过属性设置,后面版本会有),每帧会固定执行一次物理模拟
这是因为每帧花费的实际时间是不一样的,为了和实际时间同步,就需要根据 deltaTime 跟实际时间的比例,去执行相应的子步数 ,因此需要设置一下最大的子步数。
比如某帧花费了 1/30 的时间,如果 deltaTime 是 1/60 ,maxSubStep 是 2,哪么就会执行两步来达到实际所花费的时间
所以,帧率低的时候,花费的实际时间就长,哪么物理模拟就需要通过执行多次步数才可以达到实际花费时间
计算量更大了,帧率就会更低
@吴彦祖
发的demo工程,能分析出问题吗?希望不是底层Cannon.js 的问题,还有优化空间。
有任何可行的手段,望告知一下我来试试 [抱拳]!
如果目前还没有好的方案也告知一下 。
目前还不太清楚,应该和 ios 系统有关
安卓机帧率比iphone高点,但也不到30帧,玩起来也是卡。
@jiaxin
现在用代码控制延时enable模型的刚体组件,减少每帧处理的刚体数量。
android上可以稳定50帧左右了,但是iPhone上依然只有15帧。
你说的跟ios系统有关能具体找出原因么
iOS 环境下不支持 jit,对物理引擎这种重计算的模块非常不友好
嗯,jit这个就没法优化了,只能想想别的办法。谢谢大佬[爱心]!