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:

  • 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