Unity Engine Support
Complete guide to translating Unity games with Mafkers, including version support, detection methods, and common issues.
Supported Versions
| Version | Status | Notes |
|---|---|---|
| Unity 4.x | ❌ Not supported | Pre-UnityFS format |
| Unity 5.0 - 5.3 | ❌ Not supported | Pre-UnityFS format |
| Unity 5.4+ | ⚠️ Best effort | UnityFS format introduced |
| Unity 2017.x | ⚠️ Best effort | Legacy |
| Unity 2018.x | ⚠️ Best effort | Legacy |
| Unity 2019.4 LTS | ✅ Supported | Stable, UnityPy mature |
| Unity 2020.3 LTS | ✅ Supported | Stable |
| Unity 2021.3 LTS | ✅ Supported | Stable, Localization Package 1.x |
| Unity 2022.3 LTS | ✅ Supported | Stable |
| Unity 6 (6000.x) | ✅ Supported | Addressables 2.0 (with workaround for bug) |
How Mafkers Detects Unity
Mafkers detects Unity by looking for:
*_Data/folder in game rootglobalgamemanagersorglobalgamemanagers.assetsfile in the Data folder.assetsfiles
// 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_textUI.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.assetAssets/Localization/Locales/*.assetAssets/Localization/String Tables/*.shared.asset
I2 Localization (Asset Store)
Custom format stored as I2Languages.asset ScriptableObject.
IL2CPP vs Mono
| Type | Code Protection | String Accessibility |
|---|---|---|
| Mono | C# DLL (easily decompiled) | ✅ Strings in AssetBundle accessible |
| IL2CPP | C++ 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.
# Il2CppDumper usage (if needed)
./Il2CppDumper GameAssembly.dll global-metadata.dat output_folder