Working on a 3D A* algorithm for Embers of Empire

It’s been a bit of gap since my last post and that’s not for want of doing gamedev! I’ve been working on completing a Web Developer program over the last 6 months so I generally have not had much head space to work in Unity and C#. I have become a better programmer, however, and hope that I can apply some of the things I’ve learned to my gamedev sideprojects.

(Sorry if I am talking too quietly on video – everyone was asleep in my house!)

Recently I been working on Data Structures and Sorting Algorithms and it made me think back to my pathfinding problems I was working on last fall. Getting a better understanding of algorithms made me want to tackle A* and see if I could create a version adapted to a 3D space game without grinding the framerate to a halt. If I can get it to  work, I can get my AI to navigate the giant Ember ships during dogfights much more convincingly. One challenge is the A* complexity increases as you add a 3rd dimension since you go from testing 8 neighbor nodes per pass to testing 26! Not to mention the vast playing field makes the grid huge!

A couple things I am doing- AI ships will still do some Raycasting to see if they just have a clear shot to their target. If they get too close to an obstacle and its in the way they ask the A* pathfinder to find a path.

I plan to add a way to check if the path brings the ship to an open shot to the target early thus they can abandon the path. Also I could figure out a test that determines if a pathfinding can end at an early node because that node has line of sight. This will cut down on lots of searches when an AI is just jumping around one asteroid. I also want to add a way to cancel a path if the target moves into the open, etc.

Additionally, I may tap Unity’s job system to let a new thread handle the pathfinding to keep the program from stuttering as it calculates. I figure paths could be generated async with far enough lead time that the ship wont crash.