gamedev-skills/unity-build-pipeline
> IL2CPP vs Mono scripting backend, managed code stripping, scripted BuildPipeline.BuildPlayer, and CI/headless builds. Use when configuring or automating a build, choosing a scripting backend, shrinking build size, or when the user mentions Unity build, player settings, IL2CPP, code stripping, or Addressables.
npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill unity-build-pipeline
Configure, script, and automate Unity 6 player builds: scenes, platform target, scripting
backend, stripping, and headless/CI builds. Targets Unity 6 (6000.0 LTS).
(Mono vs IL2CPP), reducing build size with managed stripping, scripting a repeatable build
with BuildPipeline.BuildPlayer, or wiring a CI/headless build.
ProjectSettings/EditorBuildSettings.asset or a CI build script.When *not* to use: authoring a CI service config end-to-end is DevOps; this skill covers
the Unity-side build API and settings. Console/platform certification specifics are
platform-NDA territory. Storefront submission → steam-publish / itch-publish.
EditorBuildSettings.scenes). Only listed, enabled scenes ship; scene 0 is the start scene.
(BuildTarget / EditorUserBuildSettings).
IL2CPP (AOT C++; required for many platforms, better perf, harder to reverse). IL2CPP
needs the platform's C++ toolchain installed.
and protect reflection-only code with a link.xml. Set Quality Settings per platform.
BuildPipeline.BuildPlayer(BuildPlayerOptions) and **inspect thereturned BuildReport** — a non-Succeeded result must fail your pipeline.
-batchmode -quit -executeMethod, and check the exit code.without throwing.
using UnityEditor;
using UnityEditor.Build.Reporting;
using UnityEngine;
public static class BuildScript
{
[MenuItem("Build/Windows x64")]
public static void BuildWindows()
{
var options = new BuildPlayerOptions
{
scenes = new[] { "Assets/Scenes/Main.unity", "Assets/Scenes/Level1.unity" },
locationPathName = "Builds/Windows/Game.exe",
target = BuildTarget.StandaloneWindows64,
options = BuildOptions.None, // add BuildOptions.Development for a dev build
};
BuildReport report = BuildPipeline.BuildPlayer(options);
BuildSummary summary = report.summary;
if (summary.result != BuildResult.Succeeded)
throw new System.Exception($"Build failed: {summary.totalErrors} errors");
Debug.Log($"Build OK: {summary.totalSize} bytes in {summary.totalTime}");
}
}
# Exit code is 0 on success; -quit ensures the editor closes; -nographics for build servers.
Unity -batchmode -quit -nographics \
-projectPath "/path/to/Project" \
-executeMethod BuildScript.BuildWindows \
-logFile -
link.xml<!-- Assets/link.xml — keep types the linker can't see are used (reflection, JSON, plugins). -->
<linker>
<assembly fullname="MyGameRuntime" preserve="all"/>
</linker>
scene list (or is disabled). SceneManager.LoadScene only sees listed scenes.
tools, Android NDK) isn't installed. Mono has no such requirement.
MissingMethodException/TypeLoadException only in the build — managed stripping removedreflection-only code. Lower the stripping level or add a link.xml preserve entry.
BuildReport.summary.result;it can return with errors.
com.unity.addressables) need a*separate* content build (Build → Addressables) and a profile pointing at the right load
path; a player build alone doesn't rebuild them.
BuildOptions.Development enables the profiler/debuggingand is slower; use BuildOptions.None for release.
argument parsing, exit codes) and an Addressables content-build call, read
references/ci-build-script.md.
ScriptReference/BuildPipeline.BuildPlayer, Unity Manual build sections(player settings, managed code stripping).
steam-publish / itch-publish — distributing the player you just built.unity-csharp-scripting — editor scripting conventions used by build scripts.Take gamedev-skills/unity-build-pipeline from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.