: Mafkers Docs

Unity Engine Support

Complete guide to translating Unity games with Mafkers, including version support, detection methods, and common issues.

Supported Versions

VersionStatusNotes
Unity 4.x❌ Not supportedPre-UnityFS format
Unity 5.0 - 5.3❌ Not supportedPre-UnityFS format
Unity 5.4+⚠️ Best effortUnityFS format introduced
Unity 2017.x⚠️ Best effortLegacy
Unity 2018.x⚠️ Best effortLegacy
Unity 2019.4 LTS✅ SupportedStable, UnityPy mature
Unity 2020.3 LTS✅ SupportedStable
Unity 2021.3 LTS✅ SupportedStable, Localization Package 1.x
Unity 2022.3 LTS✅ SupportedStable
Unity 6 (6000.x)✅ SupportedAddressables 2.0 (with workaround for bug)

How Mafkers Detects Unity

Mafkers detects Unity by looking for:

  1. *_Data/ folder in game root
  2. globalgamemanagers or globalgamemanagers.assets file in the Data folder
  3. .assets files
detection/unity.ts typescript
// Example detection logic
const hasDataFolder = fs.existsSync(path.join(gamePath, 'GameName_Data'));
const hasGlobalGamemanager = fs.existsSync(
path.join(gamePath, 'GameName_Data', 'globalgamemanagers')
);
const hasAssets = fs.existsSync(
path.join(gamePath, 'GameName_Data', 'globalgamemanagers.assets')
);

if (hasDataFolder && (hasGlobalGamemanager || hasAssets)) {
return 'Unity';
}

Where Strings Are Stored

Unity games store text in different locations depending on the localization system used:

Pre-2019 (No Localization Package)

Strings are usually inline in MonoBehaviour components:

  • TextMeshPro.m_text
  • UI.Text.m_Text

These are stored in .assets files and AssetBundle files.

Unity Localization Package (com.unity.localization 1.x)

String Tables are stored as Addressables:

  • Assets/Localization/Localization Settings.asset
  • Assets/Localization/Locales/*.asset
  • Assets/Localization/String Tables/*.shared.asset

I2 Localization (Asset Store)

Custom format stored as I2Languages.asset ScriptableObject.

IL2CPP vs Mono

TypeCode ProtectionString Accessibility
MonoC# DLL (easily decompiled)✅ Strings in AssetBundle accessible
IL2CPPC++ native (encrypted)✅ Strings still accessible in AssetBundle

Mafkers works with both Mono and IL2CPP - strings live in AssetBundle which is identical format for both.

IL2CPP Games

You don’t need to decompile IL2CPP code for translation. Strings are not encrypted, only the C# code is. If you need to read code (rare for translation), use Il2CppDumper to extract metadata.

Tools Used

  • UnityPy (Python, MIT) - primary tool for asset extraction
  • AssetRipper (C#, GPL) - fallback if UnityPy fails (called as subprocess)
  • UABEA (C#, MIT) - for binary asset editing

Common Issues

“Serialized Data Missing” (Unity 6 Addressables 2.0)

Unity 6 has a bug where Addressables 2.0 produces “Serialized Data Missing” error.

Workaround: Downgrade to Addressables 1.22.3 in the game’s ProjectSettings.

IL2CPP Games

For IL2CPP games, Mafkers can still extract strings from AssetBundle. You don’t need to decompile the IL2CPP code - strings are not encrypted, only the C# code is.

If you need to read code (rare for translation), use Il2CppDumper to extract metadata.

tools/il2cpp.sh bash
# Il2CppDumper usage (if needed)
./Il2CppDumper GameAssembly.dll global-metadata.dat output_folder

Was this page helpful?