Local Avoidance
Lightweight and high performant local avoidance solution that can be easily integrated.
This package contains fast lightweight solution for local avoidance. It is developed with DOTS in mind, as result it takes advantage of Unity latest technology stack like SIMD mathematics, Jobs and Burst compiler.
Local avoidance allows agent to avoid dynamic obstacles, with accuracy, speed and not requiring pre processing. However keep in mind it does not replace global navigation (etc. A* Pathing solutions) which is designed to find most optimal path around static obstacles. Local avoidance it is intended to be used in complimentary with such a system in full scale game.
At its core it uses novel solution, which is heavily inspired by Starcraft 2 game.
Is there components that I can use?
No, the whole logic is separated into single structure and no components are used. Thus allowing easy integration in any existing Global Pathing system, regardless if it's OOD or DOD.
For this reason this package is highly recommended for people who have coding experience as it is expected from user to integrate the solution into their own ecosystem. There are component ready demos, but they are solely there as examples.
For those, who want mono components or ecs based implementation you can check version 3.0 as Agents Navigation.
What is the API?
The whole avoidance solution is contained in a single structure called SonarAvoidance. The usage of structure is composed of mainly 4 steps: construct, add obstacles, find avoidance direction and cleanup.
- var sonar = new SonarAvoidance(...)
- sonar.InsertObstacle(...)
- sonar.FindClosestDirection(out float3 direction)
- sonar.Dispose()
Key Behaviours
- Manages navigation out of concave obstacles
- Circles target
- Avoids head to head moving
- Accurately respects radius
- Predicts collisions and avoids based on that
- Avoids only when necessary
Dependencies
- Tested with Unity 2019.4
- Package com.unity.mathematics
- Package com.unity.collections
- Package com.unity.burst
Note: This does not include Global Avoidance which is typical archieved using A* algorithm on data structures like NavMesh or Grid and targeted for static obstacles. Local avoidance typicaly used as complimentary system for it to target dynamic obstacle avoidance.
Technical details
- Local Avoidance API
- Samples
- Documentation