Skip to content

FontPatcher is a tool that automates font conversion for Unity games.

Notifications You must be signed in to change notification settings

LKAYHot/FontPatcher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FontPatcher

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)

Screenshots

Main window Folder Editor Folder Editor


Русский

1) Π§Ρ‚ΠΎ это

FontPatcher автоматичСски:

  1. ΠŸΠΎΠ΄Π±ΠΈΡ€Π°Π΅Ρ‚/Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Unity Editor (ΠΈΠ»ΠΈ ставит Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· Unity Hub, Ссли Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ).
  2. Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Unity-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.
  3. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡˆΡ€ΠΈΡ„Ρ‚ (.ttf/.otf/.ttc/.otc).
  4. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ TMP Font Asset.
  5. Π‘ΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚ AssetBundle.

Π˜Ρ‚ΠΎΠ³: Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ bundle ΠΈ .manifest Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅.

2) ВрСбования

  • Windows 10/11 (Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Unity.exe ΠΈ Unity Hub.exe).
  • .NET 8 SDK.
  • Доступ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° автоустановка Unity/Hub.
  • ЛицСнзия Unity для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ вСрсии Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° окруТСния:

dotnet --version

3) Установка ΠΈ сборка

git clone https://github.com/LKAYHot/FontPatcher.git
cd FontPatcher
dotnet restore
dotnet build FontPatcher.sln -c Release

4) Быстрый запуск (CLI)

ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Π°Ρ конвСрсия:

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 -- --help

5) Запуск GUI (Avalonia)

dotnet run --project .\FontPatcher.Avalonia\FontPatcher.Avalonia.csproj

Π Π΅ΠΆΠΈΠΌΡ‹ Π² UI:

  • Single: ΠΎΠ΄ΠΈΠ½ ΡˆΡ€ΠΈΡ„Ρ‚.
  • Batch: запуск ΠΏΠΎ JSON-манифСсту jobs.
  • Unity: Π²Ρ‹Π±ΠΎΡ€/ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Unity.
  • Advanced: Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ настройки Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ.

6) ΠŸΠΎΠ»Π½Ρ‹ΠΉ список CLI ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ОписаниС
--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 Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅.

7) Batch jobs JSON

Π€ΠΎΡ€ΠΌΠ°Ρ‚

ΠšΠΎΡ€Π΅Π½ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°:

{
  "jobs": [
    {
      "id": "job-1",
      "font": "D:/insertpath/fonts/source-font.ttf",
      "output": "D:/insertpath/output"
    }
  ]
}

Поля job

  • id
  • font
  • output
  • unity
  • unityVersion
  • targetGame
  • buildTarget
  • bundleName
  • tmpName
  • epoch (auto|legacy|mid|modern)
  • useNoGraphics
  • pointSize
  • padding
  • scanUpperBound
  • atlasSizes (array of int)
  • includeControl
  • keepTemp
  • forceDynamic
  • forceStatic
  • dynamicWarmupLimit
  • dynamicWarmupBatch

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π’ batch ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ job ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ΡΡ с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ CLI-опциями:

  • Ссли ΠΏΠΎΠ»Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² job -> бСрСтся job-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;
  • ΠΈΠ½Π°Ρ‡Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΉ CLI ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ послС merge: font ΠΈ output.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ jobs Ρ„Π°ΠΉΠ»Π°

{
  "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
    }
  ]
}

8) Как выбираСтся Unity

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°:

  1. --unity (ΠΈΠ»ΠΈ UNITY_EDITOR_PATH).
  2. Поиск установлСнной вСрсии ΠΏΠΎ --unity-version/--target-game.
  3. Автоустановка Ρ‡Π΅Ρ€Π΅Π· Unity Hub (Ссли Π½Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°).

Для Hub:

  • ΠΏΡƒΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ --unity-hub (ΠΈΠ»ΠΈ UNITY_HUB_PATH),
  • ΠΏΡ€ΠΈ отсутствии ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ автоматичСски,
  • install root настраиваСтся Ρ‡Π΅Ρ€Π΅Π· --unity-install-root.

9) Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΈ ΠΊΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

  • УспСх: bundle <output>/<bundle-name> ΠΈ <bundle-name>.manifest.
  • Π’ single-Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° 0 ΠΏΡ€ΠΈ успСхС, 1 ΠΏΡ€ΠΈ ошибкС, 2 ΠΏΡ€ΠΈ ошибкС парсинга Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².
  • Π’ batch ΠΊΠΎΠ΄ 0 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли всС job ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹, ΠΈΠ½Π°Ρ‡Π΅ 1.

10) Диагностика ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

  • Ошибка Exit code 199 ΠΎΡ‚ Unity: ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
    • ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Unity ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅,
    • Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ,
    • ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ запуск.
  • Если Π½Π΅ находится Unity:
    • ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ --unity ΠΈΠ»ΠΈ --unity-version,
    • Π»ΠΈΠ±ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ автоустановку (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ --no-auto-install-unity).
  • Для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ --keep-temp.

11) Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° рСпозитория

FontPatcher.Cli/
  Bootstrap/
  Cli/
  Batch/
  Pipeline/
  Common/
  Unity/
  BuilderScripts/
    Definitions/
    Sources/

FontPatcher.Avalonia/
  Views/
  ViewModels/
  Services/

English

1) What It Does

FontPatcher automates:

  1. Unity Editor resolution/provisioning.
  2. Temporary Unity worker project creation.
  3. Font import (.ttf/.otf/.ttc/.otc).
  4. TMP Font Asset generation.
  5. AssetBundle build.

Output: bundle and .manifest in your output directory.

2) Requirements

  • Windows 10/11 (current implementation uses Unity.exe and Unity 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 --version

3) Install and Build

git clone https://github.com/LKAYHot/FontPatcher.git
cd FontPatcher
dotnet restore
dotnet build FontPatcher.sln -c Release

4) Quick Start (CLI)

Single 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-error

CLI help:

dotnet run --project .\FontPatcher.Cli\FontPatcher.Cli.csproj -- --help

5) Run GUI (Avalonia)

dotnet run --project .\FontPatcher.Avalonia\FontPatcher.Avalonia.csproj

UI modes:

  • Single: one font conversion.
  • Batch: job-manifest-based processing.
  • Unity: Unity selection/checking.
  • Advanced: generation tuning.

6) Full CLI Parameter Reference

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.

7) Batch Jobs JSON

Format

Document root:

{
  "jobs": [
    {
      "id": "job-1",
      "font": "D:/insertpath/fonts/source-font.ttf",
      "output": "D:/insertpath/output"
    }
  ]
}

Job fields

  • id
  • font
  • output
  • unity
  • unityVersion
  • targetGame
  • buildTarget
  • bundleName
  • tmpName
  • epoch (auto|legacy|mid|modern)
  • useNoGraphics
  • pointSize
  • padding
  • scanUpperBound
  • atlasSizes (array of int)
  • includeControl
  • keepTemp
  • forceDynamic
  • forceStatic
  • dynamicWarmupLimit
  • dynamicWarmupBatch

Value precedence

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.

Full sample

{
  "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
    }
  ]
}

8) Unity Resolution Logic

Editor resolution order:

  1. --unity (or UNITY_EDITOR_PATH).
  2. Installed editor search using --unity-version/--target-game.
  3. Unity Hub auto-install flow (if enabled).

For Hub:

  • set explicit path via --unity-hub (or UNITY_HUB_PATH),
  • it can auto-install when missing,
  • install root is controlled via --unity-install-root.

9) Outputs and Exit Codes

  • Success output: <output>/<bundle-name> and <bundle-name>.manifest.
  • Single mode exit codes: 0 success, 1 runtime failure, 2 CLI argument parse error.
  • Batch mode: 0 only when all jobs succeed, otherwise 1.

10) Troubleshooting

  • Unity Exit code 199: usually licensing bootstrap.
    • Open that Unity editor version interactively once,
    • complete activation,
    • rerun FontPatcher.
  • Unity not found:
    • verify --unity or --unity-version,
    • or allow auto-install (do not pass --no-auto-install-unity).
  • Use --keep-temp for deep pipeline diagnostics.

11) Repository Layout

FontPatcher.Cli/
  Bootstrap/
  Cli/
  Batch/
  Pipeline/
  Common/
  Unity/
  BuilderScripts/
    Definitions/
    Sources/

FontPatcher.Avalonia/
  Views/
  ViewModels/
  Services/

About

FontPatcher is a tool that automates font conversion for Unity games.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages