This is my master's project and involves navigating characters through an environment in a socially believable way. It's implemented in the Unity game engine and relies only on core features of the game engine, no external libraries. To navigate through the static environment I used the built in navigation system in Unity.
Unity's navigation system uses reciprocal collision avoidance (RVO) for it collision avoidance. Although RVO excels performance vise it doesn't exhibit very socially believable behaviors. I therefor used Unity's navigation for path finding and path following but disabled the RVO collision avoidance, then added my own collision avoidance.
In Unity I used a Nav Mesh Agent to navigate a Nav Mesh. A Nav Mesh can be baked into any Unity environment. The Nav Mesh Agent outputs a velocity that a character needs to maintain to reach its destination. I took that velocity and performed extra collision detection on it, then if there was a collision imminent, collision avoidance was applied. The collision avoidance was a velocity-based one from Ioannis Karamouzas. This produced very socially believable behaviors in open areas but very crowed areas can exhibit some glitches where characters intersect with one and another.
For further information feel free to download my master's report.
It's also possible to download a Windows executable of my system here.