- Home /
Performance issue: Updating list for a simple crowd simulation
I am making a simple flok- or crowd-simulation.
The behaviour is decent for my needs, but the performance is not.
Basicly I have "alot" of objects(soldiers), which need to spread out while moving to a waypoint.
Ive written a simple version of my code here:
List<Soldier> avoidList = new List<Soldier>();
foreach (Soldier s in gameWorld)
{
if (this == s)
continue;
if (Distance(s, this) <= 5)
{
avoidList.Add(s);
}
}
CalculateNewDirection(avoidList);
So basicly, each soldier checks the distance of every other soldier in the scene, and calculates a direction based on the soldiers which are too close.
Right now im running through x^2 objects.
So if I have 100 objects, i run through 100^2 = 10.000 objects, just to update each individual objects avoidList.
And if i crank it up to 500 objects, i run through 250.000 objects.
Theres gotta be a different and smarter way to do this!
(I've tried using colliders as triggers to add/remove from the avoidList, but that is way slower than this)
Hope someone can enlighten me :)
Answer by Tsanas · Mar 04, 2012 at 11:23 PM
Just want to update for other people with a similar problem.
I got some great from a guy at stackoverflow . Check it out.
Answer by fameunity · Aug 22, 2014 at 07:21 AM
Would you like to take a look at this api and see if it will help in your development? Link --> https://www.assetstore.unity3d.com/en/#!/content/14444