SimplePath provides advanced pathfinding for any game genre. The software includes code for pathfinding, steering, pathsmoothing, dynamic obstacle avoidance, and terrain editing. The package includes everything you need to navigate your agents around the game world.
And here is a bit about myself. My name is Alex Kring, and I’ve been working in the games industry for about 4 years, working mostly on AI. I’ve shipped 4 games under The Sims franchise, and one game for the Sony Move. More recently I’ve been working on Resistance for the NGP. This past year I gave a talk on pathfinding at the GDC, I presented a pathfinding research paper at the AIIDE at Stanford, and I have several publications on pathfinding with AiGameDev [1] [2].
I look forward to hearing more about how I can improve this software, to better support this community of game developers. Please, give me your feedback!
@npsf: can you be more specific about what you are looking for? I appreciate the feedback! And I just realized the video post doesn’t show up on iPhone :x
But not quite amazed. Don’t get me wrong it is one of the best pathfinders I have seen! But the demonstration was messing (in my not vary important opinion lol) a stress test. I mean your features are great, but what about performance? I mean sure you showed 20 guys running around. But what about RTS games (a large use of path finding) where you have 100 or so guys? Or maybe 200, who knows maybe 1000? Unlikely to have that many, and path finding would be the least of your problems. But people (well me anyway lol) want to see a over the top demonstration where the know it’s everything and more then the need.
Anyway I don’t mean to rain on your parade. I just want to hear the motor purr if you know what I mean ;).
Very good work, I can see you are a real expert in pathfinding.
I would like to use your system but I don´t know if I would be able to integrate it in my project because:
My enemy characters (on land) use a character controller component but it seems a rigidbody is necessary.
All my enemy gameobjects, land characters and flying ships, already have a moving function in their AI scripts, how can I combine this with the moving function provided by your path system?
EDIT: - Does your system work with a path with different heights?
How fortuitous! I just started to think about navigation in my game and this pops up :). Question: how extendable is this to 3D paths? I want to use it for space ships.
Does it allow each unit to have a different radius, which restricts where it can travel? (IE: big units need a big space between objects, small units need a smaller space)
Im making a 2D game that works only on X Y axis, with Z being layers (irrelevant to movement) and orthographic camera.
Movement is done in 8 isometric directions using North, east, south, west, northeast, northwest, southeast, southwest directions, but is NOT tile based. Collision is done in tiles, and every character’s attacks and collidors are square tiles, but movement is free. However, one can ONLY move in 1 of 8 directions.
How difficult, if at all, will it be to use this with my 8 directional, free, (NOT-tile-based), movement?
As King also mention, I’m very interested in seeing a stress test as I’m building a game with high density of AI (crowd).
I read the user manual, and I must say it’s a bit lacking explanation in “Terrain Representation” since we don’t have the code structure in front of us. I’m saying this because I’ve already built my own system with a navmesh (polygons to reduce the nodes count) and I was wondering how it could be merged/connected with your package.
When building my own “Terrain Representation”, I supose I’ll need to code every bits of debug / inspector helper?
If you are using a character controller instead of a rigidbody, you only need to change the code in the SteeringAgentController files. This component only requires a rigidbody because it needs to set a velocity. I just counted and there are 5 lines of code in that file that reference the rigidbody. Change all those refences to a character controller, and everything should work.
I’d have to see your moving function. Does this function just set velocities, or does it do pathfinding? The PathAgentComponent outputs a list of points, and you can interpret that however you like. The SteeringAgentComponent takes that list of points as input, and moves the character forward along those points. If you are doing your own custom steering, then you can just replace the code in the SteeringAgentComponent with your own code (there is a SteerAlongPath(Vector3[ ] path) fuction that takes in a list of points, and kicks off the agent steering along those points),
The system doesn’t support this, but it is trivial to add. At the top of the SteerAlongPath(Vector3[ ] path) function, you’d need to loop over all the points in ‘path’, and set the Y value to be the height of the terrain at that XZ location. You can get this information from a heightmap.
Depends on the movement of the space ships. If they don’t need to search in 3D, it will work fine. So it depends on how sophisticated you want your movement to be. You could just navigate the spaceships in 2D, and have them play animations that move them up and down. Or maybe there are certain assumptions you can make about your game, that will allow you to vary their height in code. I hope that helps, I’d need more information to give you more specific advice.
The system does not support any sort of clearance pathfinding. Typically, this problem is solved by just having different maps for different sized units (ex: one grid for small units and one grid for large units), and you make the size of the cell match the radius of the unit. This is how it was handled in Dawn of War 2, and Company of Heroes. The latest SplinterCell also used different maps for differently sized units (but was on a nav mesh). There are a lot of problems with having the pathfinding respect the agent’s radius (ex: how do you know that your destination position is always at least X meters from any piece of collision, where X is the radius of the agent?)
That being said, SimplePath does support the industry-standard solution to this problem. You can create any number of grids, and any number of PathManagers, and decide which agents are linked to which PathManagers.
Yes you can use multiple grids, and you can theoretically mix terrain representations, though I’ve never tried it. Each PathManager is linked to a PathTerrain, and each agent is linked to a PathManager. You could have a waypoint graph for the flyers, and a grid for the ground enemies. This would require two PathManager objects.