0
\$\begingroup\$

I have enemy with simple behavior: Reach the player's current position. In game are increasing waves, which are increasing the number of enemies. But when are more enemies (like 14), and they got too close to each other, there is big physics spike in profiler.

Problem

There are significant drop of performance... And as Profiler says, it's because of Physics...

Profiler Profiler2

Now I am little lost, I tried turn of the ignore collision on layer (which was turned on), so they don't overlap, but there is still little touch of course, when they group up, so still so much to process...

What is the best solution here?

I build it around rigidbodies for the use of Velocity, and detection of collisions with walls (edge collider), so when the object reaches there, it is easily stopped... But for this cases it seems now like not the best solution.

\$\endgroup\$
7
  • \$\begingroup\$ What does the profiler say? Also, are you sure you are not leaking destroyed/dead enemies? \$\endgroup\$
    – wondra
    Sep 18, 2020 at 13:04
  • \$\begingroup\$ @wondra Everything is clearing, I even have option to start at whatever wave I demand, and there is nothing forgotten. I will try the profiler. \$\endgroup\$
    – Zechy
    Sep 18, 2020 at 13:07
  • 2
    \$\begingroup\$ Can you show us 1) How you've configured the rigidbodies and colliders on these enemies, 2) How you're moving them? It looks like you might be getting them into a nasty inter-penetration case that the physics engine spends lots of time trying to solve each frame, before your gameplay code undoes its work and smashes them back together anyway, and there are quite a few things we can do to lessen or eliminate that problem, depending on the details of the causes. \$\endgroup\$
    – DMGregory
    Sep 18, 2020 at 16:01
  • 1
    \$\begingroup\$ That info should go in your question. Is it necessary to use a polygoncollider here instead of a more efficient circle or box? In your screenshot it looks like your enemies can overlap. Are they on a physics layer that ignores self-collisions to ensure you're not wasting cycles handling these overlaps? \$\endgroup\$
    – DMGregory
    Sep 18, 2020 at 17:50
  • 1
    \$\begingroup\$ Well... I must laugh now... I have tried the circle collider... That solves everything... The polygon collider is of course very complex (generated automaticaly), so that's probably it. I create simplier one. See what I get and post answer here. \$\endgroup\$
    – Zechy
    Sep 18, 2020 at 17:59

1 Answer 1

2
\$\begingroup\$

Ok, as was stated in comments, I tried to use simple circle collider... And now was everything working. The original polygon collider was generated automaticaly by Unity, which was trying cover whole shape of sprite, see below. There was two array of points (one with 22 point, another with 120 points).

Original Collider

As I would like to cover the shape of sprite with the collider, I set up custom, much simplier with 4 points. And is working like with the Circle collider. From 6 thousand contacts to compute, there is only around 30 with the 15 enemies stacked in group.

Simplified Collider

Beware of complex shapes!

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Nice simplification! \$\endgroup\$
    – DMGregory
    Sep 18, 2020 at 18:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .