This package includes high performance, modular and scalable navigation for agents. It is developed with DOTS in mind. As a result, it takes advantage of Unity's latest technology stack, like SIMD mathematics, Jobs, Burst compiler and EntityComponentSystem. Additionally, there is hybrid mode support that enables using it with GameObjects in Object Oriented Programming.
What navigation features are contained in this package?
Unity NavMesh multithreaded support 3D
Avoidance 2D/3D
Flocking (Alignment, Cohesion) 3D
Separation 2D/3D
Collision 2D/3D
Can I use this in non ECS/Dots code?
Yes, there is a hybrid workflow where Game Object are synced with Entities. This allow to use this package in Object Oriented Programming too. Of course, it should be expected that performance going to be slightly worse.
Can I use it with ECS?
Yes, this package uses ECS.
What game genres this navigation targets?
This package was developed as a foundation for any navigation needs. However, this early version is currently focused on 3D/2D RTS, Moba, RPG, Shooter style genre games navigation.
Can I extend functionality?
Yes, the package was designed in mind that it could be extended as every game has unique needs for AI navigation. This solution is very modular and allows trivial adding/removing of existing behaviors. However, to extend functionality efficiently, you will need to have knowledge of ECS.
Can I use this package with other pathing solutions (etc. A* Pathfinding Project Pro, AnyPath)?
The solution in this package is very modular, so users can extend it to use different solutions without needing to modify this package. There are plans in the future to do collaboration with other pathing packages.
Can I use this for crowd flow?
Yes and no. As currently there is no implementation of motion fields/vectors, which usually produces the best results for huge crowds. However, current navigation also produces smooth motion in big groups. In the future, I plan to add motion fields.
Is it deterministic?
All systems are running in fixed update. In theory, it should be deterministic for Intel/AMD platforms (Burst). However, it still uses floats for navigation operations, which will not produce deterministic code across all the platforms. In the future, I plan to address this by introducing fixed point types.
How does this package differ from Local Avoidance?
This is a new version of local avoidance. It is a separate package as it contains a much bigger scope than just avoidance, but full navigation (etc. global pathing, boids, collisions...). For those who have a Local Avoidance package, they can do a paid upgrade instead of paying full price.