How do you set up your project for multiplatform development? What do you plan ahead of time knowing that you have multiple platforms to target?

Andrew: We have our own build tool that updates the Unity settings for each platform. One button click builds the executable the same way on any machine, keeping the builds constant. This is then used by our automated build system that can build all six platforms and deploy for testing. This is essential for us when working with this many platforms.

For each platform, we decide what the best texture resolution is to scale the source graphics down for the screen resolution supported by the platform. This scale becomes a part of our process when adding new objects.

Rodrigo Fernandez: For the technical aspect, we made sure we set up different branches where we could work on each platform-specific content. Our publisher also provided a compliance team to assist us during the certification processes as well as an experienced QA team for each platform.

Do you maintain unique code bases for each platform, or do you try to maintain one code base?

Andrew: Each project has its own single code base. We try to keep any platform-specific code in their own classes and use conditional assembly when building to activate each platform. During our build process we can copy platform files into the project to keep everything compartmentalized (support files, packages etc).

Rodrigo: We have a single code base with the core gameplay systems and set up branches for each platform-specific features and Unity version.

It was extremely important to isolate systems for files, input devices, video, achievements, and localization to avoid mixing code between platforms.

How do you handle platform optimization? Is it part of the core production phase or a dedicated phase after production is complete?

Andrew: During development, it was critical for us to keep the FPS on PC close to 60, as this was the main platform the team was working and testing on. Throughout the project, we kept an eye on console performance through developer analytics and added tasks into the sprints to stop it from lagging too far behind.

For each milestone, the last week was focused on bug fixing and polishing only, and some optimizations were also done here, where needed.

In the last six months (pre-alpha) of development, we hired an extra senior generalist engineer to focus on optimizations and shaders for our lowest platform, which would cascade improvements on all platforms.

Rodrigo: We used the Nintendo SwitchTM as our base for platform development, which allowed us to run monthly builds to test the performance and avoid future issues.

Before we started the submissions for platform certification, we dedicated additional time to optimize Greak: Memories of Azur so it could run at 60 FPS on all platforms.

Using the Unity Profiler, Frame Debugger, and Dynamic Resolution were key to achieving this on the small window that we had planned for optimization.

Source: Unity Technologies Blog