Aspiring Lead Developer
During the development of Meliora Islands, I aspired to be a lead developer. To achieve this, I held code reviews with other programmers, talked with designers about how the code and design could work together and made sure the code-base was consistent and open. Designers and artists would come to me for help with Unity and code for new features.
Unity Advice
Other developers would also seek advice on how to program certain features. A great example is the building's inside-outside check.
Another developer was working on the placement of decorations and had to find a way to check whether a raycast was on the inside or outside a building. I told them about the triangleIndex and how the MeshCollider's vertex colors could be used to get such information.
Minigame Network Advice
Stations, like the ones below, use a crafting minigame. This feature was initially developed with (do)tweens for the UI minigame bar as well as the animations in the scene. At first, this seemed fine but I was quick to address potential networking issues. The tweens were hard to network, since they started as their own process. Trying to sync and prevent cheating becomes hard when there is no control. This was quickly changed and the networking became manageable as a result.
Performance Optimization
An island is big, 3km by 3km. Yet, wildlife still roams around when players are not nearby and this costs CPU time. To remedy this issue, the island is split into 10x10 regions and tracks which region contains players. 'Active' regions would update AI more frequently than 'inactive' regions. The AI update was spread over multiple frames to lower the CPU cost.
Since the game uses a third party package to render resource nodes, the rendering can be changed to suit a specific need. Before optimization, every tree would be instanced with 2 level of detail models and an imposter and the package would handle LOD switching, shadow casting and frustum and occlusion culling. Now, only trees within the player's area would render this more advanced instanced object. Trees outside of this area would only render the impostor without the expensive occlusion culling or shadow rendering. After this optimization was applied to all other resource nodes, the average GPU time was reduced by +-5 ms. This was the difference between 40 fps and 50 fps. Now, the average fps was close to 60.