Universal font pipeline for Unity games:
font file -> TMP Font Asset -> AssetBundle.
The project includes:
FontPatcher.Cli(automation and batch processing)FontPatcher.Avalonia(desktop UI that launches the same CLI)
FontPatcher Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
- ΠΠΎΠ΄Π±ΠΈΡΠ°Π΅Ρ/Π½Π°Ρ ΠΎΠ΄ΠΈΡ Unity Editor (ΠΈΠ»ΠΈ ΡΡΠ°Π²ΠΈΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· Unity Hub, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ).
- Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Unity-ΠΏΡΠΎΠ΅ΠΊΡ.
- ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΡΠΈΡΡ (
.ttf/.otf/.ttc/.otc). - ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ TMP Font Asset.
- Π‘ΠΎΠ±ΠΈΡΠ°Π΅Ρ AssetBundle.
ΠΡΠΎΠ³: Π³ΠΎΡΠΎΠ²ΡΠΉ bundle ΠΈ .manifest Π² Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅.
- Windows 10/11 (Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ
Unity.exeΠΈUnity Hub.exe). - .NET 8 SDK.
- ΠΠΎΡΡΡΠΏ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π°Π²ΡΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Unity/Hub.
- ΠΠΈΡΠ΅Π½Π·ΠΈΡ Unity Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ:
dotnet --versiongit clone https://github.com/LKAYHot/FontPatcher.git
cd FontPatcher
dotnet restore
dotnet build FontPatcher.sln -c ReleaseΠΠ΄ΠΈΠ½ΠΎΡΠ½Π°Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡ:
dotnet run --project .\FontPatcher.Cli\FontPatcher.Cli.csproj -- `
--font "D:\insertpath\fonts\source-font.ttf" `
--output "D:\insertpath\output" `
--target-game "D:\insertpath\game\Game.exe"ΠΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ (batch):
dotnet run --project .\FontPatcher.Cli\FontPatcher.Cli.csproj -- `
--jobs-file ".\sample.jobs.json" `
--max-workers 2 `
--continue-on-job-errorΠ‘ΠΏΡΠ°Π²ΠΊΠ° CLI:
dotnet run --project .\FontPatcher.Cli\FontPatcher.Cli.csproj -- --helpdotnet run --project .\FontPatcher.Avalonia\FontPatcher.Avalonia.csprojΠ Π΅ΠΆΠΈΠΌΡ Π² UI:
Single: ΠΎΠ΄ΠΈΠ½ ΡΡΠΈΡΡ.Batch: Π·Π°ΠΏΡΡΠΊ ΠΏΠΎ JSON-ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΡ jobs.Unity: Π²ΡΠ±ΠΎΡ/ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Unity.Advanced: ΡΠΎΠ½ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ.
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|---|
--font <path> |
- | ΠΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΡΠΈΡΡΠ° (.ttf/.otf/.ttc/.otc). ΠΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½ Π² single-ΡΠ΅ΠΆΠΈΠΌΠ΅. |
--output <dir> |
- | ΠΠ°ΠΏΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π° Π² single-ΡΠ΅ΠΆΠΈΠΌΠ΅. |
--jobs-file <path> |
- | JSON Ρ Π·Π°Π΄Π°Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ batch-ΡΠ΅ΠΆΠΈΠΌΠ°. |
--max-workers <int> |
1 |
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² batch-ΡΠ΅ΠΆΠΈΠΌΠ΅ (>0). |
--continue-on-job-error |
false |
ΠΠ΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ batch ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. |
--unity <path> |
auto | Π―Π²Π½ΡΠΉ ΠΏΡΡΡ ΠΊ Unity.exe. |
--unity-hub <path> |
auto | Π―Π²Π½ΡΠΉ ΠΏΡΡΡ ΠΊ Unity Hub.exe. |
--unity-version <version> |
auto | Π¦Π΅Π»Π΅Π²Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 2021.3.38f1. |
--target-game <path> |
- | .exe, UnityPlayer.dll ΠΈΠ»ΠΈ *_Data Π΄Π»Ρ Π°Π²ΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ Unity ΠΈΠ³ΡΡ. |
--unity-install-root <path> |
%LOCALAPPDATA%\FontPatcher\UnityEditors |
ΠΠ°ΡΠ°Π»ΠΎΠ³ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ/ΠΊΠ΅ΡΠ° Unity. |
--epoch <auto|legacy|mid|modern> |
auto |
ΠΡΠ±ΠΎΡ Π°Π΄Π°ΠΏΡΠ΅ΡΠ° ΡΠΏΠΎΡ ΠΈ Unity. |
--use-nographics |
adapter default | ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ -nographics. |
--no-nographics |
adapter default | ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠΈΡΡ -nographics. |
--no-auto-install-unity |
false |
ΠΠ°ΠΏΡΠ΅ΡΠΈΡΡ Π°Π²ΡΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Unity Editor. |
--no-auto-install-hub |
false |
ΠΠ°ΠΏΡΠ΅ΡΠΈΡΡ Π°Π²ΡΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Unity Hub. |
--prefer-non-lts |
false |
ΠΡΠΈ Π°Π²ΡΠΎ-Π²ΡΠ±ΠΎΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ non-LTS. |
--bundle-name <name> |
<fontname lower> |
ΠΠΌΡ AssetBundle (ΡΠ°Π½ΠΈΡΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ). |
--tmp-name <name> |
TMP_<fontname> |
ΠΠΌΡ TMP asset (ΡΠ°Π½ΠΈΡΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ). |
--build-target <target> |
StandaloneWindows64 |
Unity BuildTarget. |
--atlas-sizes <csv> |
1024,2048,4096 |
ΠΠ°Π½Π΄ΠΈΠ΄Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π°ΡΠ»Π°ΡΠ° (256..8192). |
--point-size <int> |
90 |
Π Π°Π·ΠΌΠ΅Ρ ΡΠ΅ΠΌΠΏΠ»ΠΈΠ½Π³Π° ΡΡΠΈΡΡΠ° (>0). |
--padding <int> |
8 |
Padding Π³Π»ΠΈΡΠΎΠ² (>=0). |
--scan-upper-bound <int> |
1114111 |
ΠΠ΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° ΡΠΊΠ°Π½Π° Unicode (>=0). |
--force-static |
false |
ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ. |
--force-dynamic |
false |
ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ dynamic multi-atlas ΡΠ΅ΠΆΠΈΠΌ. |
--dynamic-warmup-limit <int> |
20000 |
ΠΠΈΠΌΠΈΡ pre-seed Π³Π»ΠΈΡΠΎΠ² Π² dynamic. |
--dynamic-warmup-batch <int> |
1024 |
Π Π°Π·ΠΌΠ΅Ρ Π±Π°ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ΅Π²Π° dynamic (>0). |
--include-control |
false |
ΠΠΊΠ»ΡΡΠ°ΡΡ control-ΡΠΈΠΌΠ²ΠΎΠ»Ρ < U+0020. |
--keep-temp |
false |
ΠΠ΅ ΡΠ΄Π°Π»ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Unity worker ΠΏΡΠΎΠ΅ΠΊΡ. |
-h, --help |
- | ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΏΡΠ°Π²ΠΊΡ. |
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅: --force-static ΠΈ --force-dynamic Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅.
ΠΠΎΡΠ΅Π½Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°:
{
"jobs": [
{
"id": "job-1",
"font": "D:/insertpath/fonts/source-font.ttf",
"output": "D:/insertpath/output"
}
]
}idfontoutputunityunityVersiontargetGamebuildTargetbundleNametmpNameepoch(auto|legacy|mid|modern)useNoGraphicspointSizepaddingscanUpperBoundatlasSizes(array of int)includeControlkeepTempforceDynamicforceStaticdynamicWarmupLimitdynamicWarmupBatch
Π batch ΠΊΠ°ΠΆΠ΄ΡΠΉ job ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ CLI-ΠΎΠΏΡΠΈΡΠΌΠΈ:
- Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² job -> Π±Π΅ΡΠ΅ΡΡΡ job-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅;
- ΠΈΠ½Π°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΉ CLI ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ merge: font ΠΈ output.
{
"jobs": [
{
"id": "game-main",
"font": "D:/insertpath/fonts/source-font.ttf",
"output": "D:/insertpath/output/game-main",
"targetGame": "D:/insertpath/game/Game.exe",
"buildTarget": "StandaloneWindows64",
"epoch": "auto"
},
{
"id": "legacy-override",
"font": "D:/insertpath/fonts/source-font.ttf",
"output": "D:/insertpath/output/legacy",
"unityVersion": "2020.3.49f1",
"epoch": "legacy",
"useNoGraphics": false,
"pointSize": 90,
"padding": 8
}
]
}ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°:
--unity(ΠΈΠ»ΠΈUNITY_EDITOR_PATH).- ΠΠΎΠΈΡΠΊ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎ
--unity-version/--target-game. - ΠΠ²ΡΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ΅Π· Unity Hub (Π΅ΡΠ»ΠΈ Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π°).
ΠΠ»Ρ Hub:
- ΠΏΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ
--unity-hub(ΠΈΠ»ΠΈUNITY_HUB_PATH), - ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ,
- install root Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π·
--unity-install-root.
- Π£ΡΠΏΠ΅Ρ
: bundle
<output>/<bundle-name>ΠΈ<bundle-name>.manifest. - Π single-ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠ΄ Π²ΡΡ
ΠΎΠ΄Π°
0ΠΏΡΠΈ ΡΡΠΏΠ΅Ρ Π΅,1ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅,2ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². - Π batch ΠΊΠΎΠ΄
0ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π²ΡΠ΅ job ΡΡΠΏΠ΅ΡΠ½Ρ, ΠΈΠ½Π°ΡΠ΅1.
- ΠΡΠΈΠ±ΠΊΠ°
Exit code 199ΠΎΡ Unity: ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.- ΠΡΠΊΡΠΎΠΉΡΠ΅ Π½ΡΠΆΠ½ΡΡ Π²Π΅ΡΡΠΈΡ Unity ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅,
- Π·Π°Π²Π΅ΡΡΠΈΡΠ΅ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΡ,
- ΠΏΠΎΠ²ΡΠΎΡΠΈΡΠ΅ Π·Π°ΠΏΡΡΠΊ.
- ΠΡΠ»ΠΈ Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Unity:
- ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅
--unityΠΈΠ»ΠΈ--unity-version, - Π»ΠΈΠ±ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π°Π²ΡΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
--no-auto-install-unity).
- ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅
- ΠΠ»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
--keep-temp.
FontPatcher.Cli/
Bootstrap/
Cli/
Batch/
Pipeline/
Common/
Unity/
BuilderScripts/
Definitions/
Sources/
FontPatcher.Avalonia/
Views/
ViewModels/
Services/
FontPatcher automates:
- Unity Editor resolution/provisioning.
- Temporary Unity worker project creation.
- Font import (
.ttf/.otf/.ttc/.otc). - TMP Font Asset generation.
- AssetBundle build.
Output: bundle and .manifest in your output directory.
- Windows 10/11 (current implementation uses
Unity.exeandUnity Hub.exe). - .NET 8 SDK.
- Internet access if Unity/Hub auto-install is enabled.
- A valid Unity license for the selected editor version.
Environment check:
dotnet --versiongit clone https://github.com/LKAYHot/FontPatcher.git
cd FontPatcher
dotnet restore
dotnet build FontPatcher.sln -c ReleaseSingle conversion:
dotnet run --project .\FontPatcher.Cli\FontPatcher.Cli.csproj -- `
--font "D:\insertpath\fonts\source-font.ttf" `
--output "D:\insertpath\output" `
--target-game "D:\insertpath\game\Game.exe"Batch mode:
dotnet run --project .\FontPatcher.Cli\FontPatcher.Cli.csproj -- `
--jobs-file ".\sample.jobs.json" `
--max-workers 2 `
--continue-on-job-errorCLI help:
dotnet run --project .\FontPatcher.Cli\FontPatcher.Cli.csproj -- --helpdotnet run --project .\FontPatcher.Avalonia\FontPatcher.Avalonia.csprojUI modes:
Single: one font conversion.Batch: job-manifest-based processing.Unity: Unity selection/checking.Advanced: generation tuning.
| Option | Default | Description |
|---|---|---|
--font <path> |
- | Input font (.ttf/.otf/.ttc/.otc). Required in single mode. |
--output <dir> |
- | Output directory. Required in single mode. |
--jobs-file <path> |
- | JSON job manifest for batch mode. |
--max-workers <int> |
1 |
Batch concurrency (>0). |
--continue-on-job-error |
false |
Continue remaining jobs after a failure. |
--unity <path> |
auto | Explicit path to Unity.exe. |
--unity-hub <path> |
auto | Explicit path to Unity Hub.exe. |
--unity-version <version> |
auto | Target editor version (for example 2021.3.38f1). |
--target-game <path> |
- | Game .exe, UnityPlayer.dll, or *_Data for version detection. |
--unity-install-root <path> |
%LOCALAPPDATA%\FontPatcher\UnityEditors |
Unity install/cache root. |
--epoch <auto|legacy|mid|modern> |
auto |
Force/select epoch adapter. |
--use-nographics |
adapter default | Force -nographics. |
--no-nographics |
adapter default | Force disable -nographics. |
--no-auto-install-unity |
false |
Disable Unity editor auto-install. |
--no-auto-install-hub |
false |
Disable Unity Hub auto-install. |
--prefer-non-lts |
false |
Prefer newest non-LTS when auto-selecting. |
--bundle-name <name> |
<fontname lower> |
AssetBundle name (sanitized). |
--tmp-name <name> |
TMP_<fontname> |
TMP asset name (sanitized). |
--build-target <target> |
StandaloneWindows64 |
Unity BuildTarget. |
--atlas-sizes <csv> |
1024,2048,4096 |
Atlas candidates (256..8192). |
--point-size <int> |
90 |
Font sampling size (>0). |
--padding <int> |
8 |
Glyph padding (>=0). |
--scan-upper-bound <int> |
1114111 |
Max Unicode code point scan (>=0). |
--force-static |
false |
Force static mode. |
--force-dynamic |
false |
Force dynamic multi-atlas mode. |
--dynamic-warmup-limit <int> |
20000 |
Dynamic pre-seed glyph limit. |
--dynamic-warmup-batch <int> |
1024 |
Dynamic warmup batch size (>0). |
--include-control |
false |
Include control chars < U+0020. |
--keep-temp |
false |
Keep temporary Unity worker project. |
-h, --help |
- | Show help. |
Constraint: use only one of --force-static or --force-dynamic.
Document root:
{
"jobs": [
{
"id": "job-1",
"font": "D:/insertpath/fonts/source-font.ttf",
"output": "D:/insertpath/output"
}
]
}idfontoutputunityunityVersiontargetGamebuildTargetbundleNametmpNameepoch(auto|legacy|mid|modern)useNoGraphicspointSizepaddingscanUpperBoundatlasSizes(array of int)includeControlkeepTempforceDynamicforceStaticdynamicWarmupLimitdynamicWarmupBatch
Each job is merged with base CLI options:
- job field wins if provided,
- otherwise global CLI value is used.
Required after merge: font and output.
{
"jobs": [
{
"id": "game-main",
"font": "D:/insertpath/fonts/source-font.ttf",
"output": "D:/insertpath/output/game-main",
"targetGame": "D:/insertpath/game/Game.exe",
"buildTarget": "StandaloneWindows64",
"epoch": "auto"
},
{
"id": "legacy-override",
"font": "D:/insertpath/fonts/source-font.ttf",
"output": "D:/insertpath/output/legacy",
"unityVersion": "2020.3.49f1",
"epoch": "legacy",
"useNoGraphics": false,
"pointSize": 90,
"padding": 8
}
]
}Editor resolution order:
--unity(orUNITY_EDITOR_PATH).- Installed editor search using
--unity-version/--target-game. - Unity Hub auto-install flow (if enabled).
For Hub:
- set explicit path via
--unity-hub(orUNITY_HUB_PATH), - it can auto-install when missing,
- install root is controlled via
--unity-install-root.
- Success output:
<output>/<bundle-name>and<bundle-name>.manifest. - Single mode exit codes:
0success,1runtime failure,2CLI argument parse error. - Batch mode:
0only when all jobs succeed, otherwise1.
- Unity
Exit code 199: usually licensing bootstrap.- Open that Unity editor version interactively once,
- complete activation,
- rerun FontPatcher.
- Unity not found:
- verify
--unityor--unity-version, - or allow auto-install (do not pass
--no-auto-install-unity).
- verify
- Use
--keep-tempfor deep pipeline diagnostics.
FontPatcher.Cli/
Bootstrap/
Cli/
Batch/
Pipeline/
Common/
Unity/
BuilderScripts/
Definitions/
Sources/
FontPatcher.Avalonia/
Views/
ViewModels/
Services/


