3. Technical Game Development Pipeline
3.1. Overview
While the game Game Production Cycle covers making and executing design decisions at a high level, this guide teaches the user how to make the game run smoothly on target platforms (e.g. Mac, Windows, WebGL) at each stage of the production cycle.
3.2. Pre Production Technical Pipeline
3.2.1. Goals
If your game was based on a prototype, throw out the prototype code and build the game from scratch. Often prototypes contain hacky code for getting the game produced quickly without considering performance. Basing the game on a bunch of hacks is not a good start for any project.
Note
If you are interested in prototyping a game concept first before committing to developing a full game see Prototyping
Check that all planned features work on all target platforms (e.g. Mac, Windows, WebGL). Consider contratins regarding memory management, multithreading, networking, and plugin support.
Establish minimally supported devices (consoles, web browsers) for your project. These should then be available to the developers and QA team.
Establish budgets to reach frame rate targets:
How many models can we render
How much detail should models and textures have
What percentage of frame time do we allocate for scripting, rendering, effects, etc.
Split levels into scenes. Consider additively loading scenes if it can save on performance.
If levels are unlocked over time, Establish the mechanism that locks scenes.
Understand your asset pipeline. Establish asset formats and specs with your artists. Also (if you are working in Unity) setup Asset Postprocessors to automate asset importing
Designate a machine for building your game. Alternatively you can use services like Unity Cloud Build that automatically creates a build of your game when changes are pushed through by a developer.
Establish a process for publishing features to the release build -> testing new builds (with test automation) -> recording statistics for key performance indicators.
If you plan on releasing your game in a marketplace like the Apple app store, make sure to review the markeptlace’s guidelines to make sure your game adheres to their requirements. These guidelines can include sections regarding safety, game design, and performance.
3.2.1.1. Unity Specific Goals
Establish objects as prefabs and even make consider common components in objects prefabs.
3.2.2. What Can Go Wrong
If performance issues arise in the middle of development and no roadmap has been set it may require an extensive overhaul of assets and features that can greatly lengthen development time in production.
3.2.3. Resources
3.2.3.1. Unity Resources
3.3. Production Technical Pipeline
3.3.1. Goals
Set up correct version control.
Consider using something like a Cache Server to store and retrieve multiple platform asset representations without bogging down your local machine. For large teams, importing new assets from project modifications takes an increasing amount of time, especially when developers switch between target platforms.
Profile and optimize early on in development. Consider frame, memory, and disk size budgets.
Learn as much as possible about target platforms and their bottleknecks.
Ensure that minimally supported devices are constantly tested and maintain realistic performance and frame rates. Additionally profile content on the target devices. Profiling in the editor only can cause you to miss some performance bottlenecks.
Prune unused assets, plugins, and duplicate libraries from the project. If you need them in the future retrieve them from version control.
Automate repetitive tasks.
Make sure you can play the game from any scene.
Setup QA process for the game. QA should be happening during development.
Establish and document architectural conventions for other developers to follow. (e.g. Define which manager is responsible for which objects. Don’t use different methods to accomplish the same tasks like having 2 event managers based on different conventions)
Use DeltaTime for FPS independent scripts.
3.3.1.1. Unity Specific Goals
Setting up correct version control:
Use text serialization in your unity project
Setup built in YAML merge tool. (SmartMerge)
Setup Unity Commit Hooks
Avoid storing static data in JSON or XML files since this can result in slow loading times. When dealing with static data use ScriptableObjects
Check the dependencies of assets that you download from the Unity Asset Store. You may find that you have something like 5 different JSON libraries in your project after importing a few.
Consider a solution, such as Cloud Build, that automates the build process.
For larger teams, Unity Build Server licenses can be a useful option because they offload project builds to network hardware.
3.3.2. Resources
3.3.2.1. Unity Resources
Use Unity Backtrace to automate the collection analysis of crash and exception reports.
Use Unity Game Simulation to automate playtesting of your game and identify balance issues.