Physics2D.DestroyShapes() has an enormous impact on performances even when very few Physics Shapes Exist
In my project, I'm allowing users to control some settings influencing the spawn of objects.
I have some objects that fuse when they collide with one another.
Under some settings, a lot of those objects can be created very close, to one another, leading to a lot of initial fusions. This causes a big initial lag spike, as expected since there's a lot of objects being created than destroyed.
However, afterward, even if only very few of those big fused objects remain (like ~10 of them), and very few fusions are happening (1 every few frames), the performances remain very bad (2-3 fps).
Looking at the profiler, it seems like the culprit is Physics2D.DestroyShapes(), which can be called multiple hundred times per frame, with a cost of ~1ms for each call. The multiple DestroyShapes() are called From Physics2d.SyncTransformChanges(), which is itself called from either Physics2D.Simulate(), or another function where My Agents use OverlapCircleNonAlloc(), but only the first time it's called?? depending on the time speed
This doesn't make sense to me... I've seen in some other thread that this can be linked to modifying transform.position instead of rb2d.transfrom.position, but I've reviewed my code and I don't find any instance of this in the related scripts.
Weird Thing: Disabling the fuse on collision so that they just collide like any other objects, we still get the initial lag spike as expected with the enormous amount of collisions, but once all the collisions are resolved and the objects separate we return back to normal performances. Even weirder, saving the game, than loading it right away doesn't solve anything, but returning to the menu, then loading the same game now works fine and the performances are back to normal (60 fps), even if the same rate of object fusion (when an item is pawned into one of the giant items and fuses with it).
This seems to indicate that some things are not destroyed properly when a lot of objects with colliders/rigidbodies (All 2D) are spawned and destroyed at once.
Any Thoughts/Help? I would be glad if it's just something I've done and can fix. I can provide profiler data
Your answer
Follow this Question
Related Questions
Turning On DX12 Causes Crash 1 Answer
Drastically worse performance with IL2CPP compared to Mono on Android 1 Answer
Destroying large CustomCollider2D takes very long time 0 Answers
[VIDEO] Animator controller stopping physics? inheritance problem or bug? 1 Answer
RelativeJoint2D reverse engineering 0 Answers