My favorite part about game development apart from systems architecture is working in the Unity scene editor. I've put in hundreds of hours integrating and placing objects with gameplay, aesthetics, and scalability in mind. I assemble scenes with organized hierarchies and strong tooling.
I was the chief builder of the deployment scene in Leviathan, which had a massive, 2 km² play area. I adjusted terrain, implemented networked gameplay objects, placed buildings, props and water, and edited the artists' foliage, trees, and decorations as needed. I also set up the hierarchy standards, and built several tools for object placement and debugging.
More than just decorations or obstacles, these objects are placed and programmed to function in networked environments. See below for a description of multiple types of gameplay objects I was responsible for placing across the scene.
One of the main objectives in Leviathan is to find and loot chests. Chests come in 10 different types; each containing a different category of items. I had to strategically place the chests so that each kind of items are supplied with an ease of access that related to the rarity and gameplay function of their contents. Chests would often get buried in the terrain by the artists, so I developed a tool to automatically detect and fix those issues.
I developed the system for AI spawning, and placed the hundreds of spawners and spawn points throughout the scene. Each spawner has 5-10 spawn points, from which AI can appear, and each area has a manager that selects which spawners are active for the current interval. Spawners can be themed to a faction or enemy type, and that added to design decisions when placing them. I also developed editor tools to ensure points are snapped to nearby NavMesh positions.
In order to keep your loot in Leviathan, you need to reach one of the many Extractors scattered across the Wilds. Each deployment there are 16 Extractors selected to be present, 7 of which are visible on the map at any given time. The extractors needed to be placed in a generally spread out way, though I did also write code to ensure that Extractors in the same area would not be active at the same time.
Agents who find Vendors in the Wilds are able to sell their unneeded items as well as buy from a selection of random items the Vendor holds. Some vendors are visible on the map, while some are only visible on the mini-map. The rarest vendor variety is not found on either map. A random set of Vendors are chosen to spawn each match. There are also Vending Machines which stock ammo and restoratives, and are always present rather than spawning in randomly.
Ziplines are placed to help players navigate the Wilds more quickly. They are often placed to aid in crossing over water or between rooftops. For these, my co-worker developed an editor tool to update the wire between the two poles. I improved upon this tool to have it also angle the metal attachment point mesh to match the wire angle.
For 12 of the map's 13 areas we have either a "Crucible of Offering" or a "Recycler". Originally, these were meant to be Quest Locations, where players would have to bring specific items to them, but through testing, the design team decided they should simply return money in exchange for items, except each location offers different exchange rates per item. I designed those rates for each station and implemented them through the project database I developed.
I chose the locations for the scene's 24 spawn points considering safety from AI for players spawning in, and access to ammo for players entering unprepared. I selected 2 locations for each area (aside from the always-dangerous Wracked Crater.) Half of these locations (1 per area randomly) also function as respawn locations for reviving teammates.
The AI in Leviathan use Unity's NavMesh system. This worked great for the most part, but I also needed to place NavMesh Links to help the AI better navigate the field. This would allow them to jump across gaps, down from elevated positions, and up from short distances. Links would often be buried, so I built tools to check and adjust them in the case their placements became invalidated.
Another object type that helped AI behaviors was Cover Points. Using a k-d Tree, AI find nearby Cover Points when deciding to retreat or regroup from enemy fire. While I did place hundreds of these on the map, we were also able to place these on a per-prefab basis, which sped things up. I also built tools ensuring these points were sufficiently close to the NavMesh.