每帧更新1000个节点的position怎么优化?

正在开发一个割草游戏,子弹怪物的移动更新是通过setposition进行处理的,需要每帧进行更新,更新时游戏会有严重掉帧,game logic性能指标直接飙到 30ms+,求解~

setPosition 并不会耗时太多,应该是别的地方,渲染压力吧,或者是碰撞检测的逻辑导致的。

做了测试 ,单一变量,不开启setposition game Logic在10ms,开启之后直接就飙到30+了,dc都做了优化,1000之怪物也就50的dc

仅1000个节点 更新位置,没多少消耗, 逻辑耗时严重,还是用chrome分析一下 看看具体什么方法耗时高

上代码,看看 setPosition 附近的逻辑

恐怕是节点上挂了物理组件?
还是要用profiler具体分析比较好。

框的地方就是更新位置逻辑

使用了 安卓profiler分析了,内存也有问题,一直在增加

这个地方只要关闭,怪物创建出来后,位置不变,其他逻辑都执行,gamelogic就会显著降低,所以我判断是这里的问题

2000个,运动 + 边缘反弹 + 碰撞测试,小米10 pro 手机, 也就5ms不到.

平时逻辑,注意使用语法,减少中间变量的申请,使用高效的碰撞算法。

体验地址:仅供体验,源码为准

商店地址:高性能割草框架(2d/3d)

是由物理组件,用于检测碰撞的,这个会有影响吗?

要高效就自己写碰撞,用个空间分割格子就挺快了,不要用自带的物理。
物理引擎为了通用和刚体计算,做了很多没有必要的操作,一般这种大量物体的,都会自己写碰撞。

你不如买个楼上的插件用着算了。

我的项目在电脑上跑也没问题,就是在安卓上会有卡顿的问题

位置更新的时候会触发物理组件更新的小哥哥,你还是买一个上面的插件或者自己写一个吧,或者别用物理

电脑的性能肯定远远优于手机,不能这样对比

是的,格子也是最简单有效办法。
大方向对了,剩下就是扣细节,优化都是这样。

碰撞是单独的一层,我尝试不更新碰撞,效果还是一样的

坐标计算单独做,setposition不需要每帧更新,2帧或者分批更新都行,或者updatelater里面更新,

我这更新1w个,用的dots,但是加上避障等各种逻辑,帧率也hold不住