Solo Project Interactive Simulation

Autonomous Agents: Humans vs. Zombies

Timeframe: 2 Months
Role: Game Developer
Tools: Unity, Visual Studio
Skills: C#

An interactive simulation designed in Unity where autonomous human and zombie "players" move independently through a system of steering forces. These forces are based on their desires to either flee from zombies or catch any humans. Both humans and zombies will also avoid obstacles, stay within the boundaries, and separate from each other if they are extremely close to prevent stacking. The simulation has defaults for the amount of humans, zombies, and obstacles but the player is able to add more in realtime. There are also options for multiple camera views and debug mode which gives more details about each object's movement during runtime.

Movement is done through forces instead of directly manipulating each "player's" velocity or position so that there can be multiple pushes or pulls trying to direct each "player" that all add to the net force that is ultimately what drives the movement. But because of this, every force needs to be given a proper weight and the entire collection of forces needs to have a maximum limit.

    Challenges:
  • Learning and implementing Craig Reynolds' versions of pursue, evade, separation, obstacle avoidance, and boundary evasion steering forces.
  • Balancing each of these forces and each object's properties so that humans still most importantly want to stay alive and zombies still want to convert humans, but they don't get stuck as often and rarely pass through obstacles.

    What I did well:
  • Gave each of the forces acting on the "players" its own weight so that all forces are still present but some have more priority than the others.
  • Zombies chase the humans based on their predictions of where the humans will be. Both humans and zombies have markers of their future positions after a set period of time at their current velocity. These calculated positions are what the zombies chase. This also allows the humans to escape the zombies in most cases with their fast, snappy movement.
  • Both zombies and humans don't overlap and pile together into one when chasing or running away.
  • All movement is restricted to the bounds of whatever gameobject is set as the play space.

    What I would change/improve:
  • Convert the basic shapes used for each of the objects into more interesting and meaningful models.
  • Make it so the zombies avoid the obstacles as well as the humans do without giving them a larger max net force and causing them to chase the humans faster.
  • Add pausing/playing features and rewind functionality to the simulation.