Cómo traducir un juego de Unity al inglés
Traduce juegos de Unity con RuneTranslate — leyendo TextAssets, campos de MonoBehaviour (Mono e IL2CPP) y StreamingAssets, por qué es solo texto externalizado, y cómo el guardián de identificadores evita que rompas el juego.
Unity es el motor detrás de una porción creciente de juegos indie y novelas visuales japonesas — y el más complicado de los motores comunes de traducir, porque Unity no tiene un único formato de texto. El diálogo puede vivir en blobs TextAsset, en campos de cadena de MonoBehaviour, en scripts sueltos de StreamingAssets o compilado directamente en una DLL de C#. Esta guía recorre la traducción de un juego de Unity con RuneTranslate y, igual de importante, explica la única regla que hace a Unity diferente: solo texto externalizado.
La gran advertencia primero: solo texto externalizado
RuneTranslate traduce el texto de Unity que vive en datos — archivos de recursos que el motor carga en tiempo de ejecución, incluidos los campos de cadena en los componentes MonoBehaviour (diálogo, nombres, etiquetas). Lee esos campos en compilaciones tanto Mono como IL2CPP: la disposición de tipos viene de las propias DLL del juego en Mono, o se reconstruye a partir de los metadatos de IL2CPP cuando no hay carpeta Managed/. Lo que no puede alcanzar es el texto codificado a mano en el propio código C# compilado (Assembly-CSharp.dll). En la práctica, los juegos que mantienen su guion en recursos y componentes se traducen bien — y abrir el proyecto, el primer paso, te dice qué tienes.
Qué necesitas
- RuneTranslate para Windows — gratis, todos los motores y proveedores desbloqueados.
- Una carpeta de juego de Unity — el directorio con el
.exedel juego y una carpeta<GameName>_Data/(que contieneglobalgamemanagers,resources.assets,data.unity3dy archivoslevel*). - Un idioma de destino — inglés, español, francés, alemán, portugués, ruso, chino, italiano, turco, vietnamita y 20+ más.
- Un proveedor de traducción. Google Translate gratuito funciona sin más; DeepL tiene un nivel gratuito; OpenAI, Anthropic, un modelo local y cualquier API compatible con OpenAI requieren tu propia clave.
Paso 1: Abre la carpeta del juego
Inicia RuneTranslate, haz clic en Nuevo proyecto y apúntalo al directorio del juego de Unity. La detección del motor busca la carpeta _Data/ e identifica el proyecto como Unity. Un sidecar de Python UnityPy incluido (enviado dentro del instalador) abre los archivos de recursos y lista las cadenas legibles en un espacio de trabajo por proyecto bajo %APPDATA%/RuneTranslate/unity-workspace/<projectId>/. Tu carpeta de juego original nunca se modifica. Unity es un motor de mejor esfuerzo — verifica que la compilación exportada se ejecuta antes de redistribuirla.
Paso 2: Cómo se extraen las cadenas
RuneTranslate lee texto de cada lugar donde Unity lo externaliza:
- TextAssets — blobs JSON / CSV / de script incrustados en
.assetsy AssetBundles, cortados por un extractor consciente del formato. - Campos de cadena de MonoBehaviour — texto de visualización en componentes (diálogo, nombres, etiquetas), en compilaciones tanto Mono como IL2CPP (la info de tipos viene de las DLL del juego, o se reconstruye a partir de los metadatos de IL2CPP).
- StreamingAssets — archivos de script sueltos recorridos directamente en disco (
.json,.txt,.csv,.tsv,.xml,.yaml,.ksy más). - AssetBundles Addressable cifrados — los juegos que cifran con AES sus bundles de recursos Addressable se descifran automáticamente (la clave se deriva del propio nombre de archivo del bundle), así que su texto se extrae como cualquier otro bundle.
Unity es también donde la sobre-traducción hace más daño, así que RuneTranslate incluye un guardián para ello. Muchas cadenas de MonoBehaviour no son texto de visualización en absoluto — son identificadores de control y operandos de flujo: nombres de escena que una llamada LoadScene resuelve por cadena, claves de enrutamiento de mensajes, nombres de clips de animador / sonido, nombres de partes de Live2D y los valores de comparación dentro de la lógica If / SetVariable de Fungus (p. ej. una bandera como 村落出口). Traduce eso y el juego se rompe en silencio — el síntoma clásico es una pantalla de «carga» infinita sin ningún error. RuneTranslate los clasifica automáticamente como excluidos (mostrados en rojo, solo de inclusión opcional), así que el editor muestra el diálogo y las etiquetas genuinas y deja en paz la maquinaria. Las sustituciones {$var} de Fungus y el marcado {color=...} / TMP <...> se enmascaran tras marcadores de posición para que sobrevivan a la traducción intactos.
Paso 3: Traduce y revisa
Elige un proveedor y ejecuta. DeepL o un LLM leen mejor para el diálogo; Google Translate gratuito cubre menús y nombres de objetos. Pon en el glosario a tu reparto y los términos recurrentes primero — consulta Glosario 101. Cada línea cae en el editor junto a su origen; edita en línea (se guarda al perder el foco o con Ctrl+Enter), y ejecuta el refinador de IA opcional para una revisión de segundo pase. El nivel gratuito corre con un límite modesto (aproximadamente 2× más lento en los proveedores de IA, menos en los raspadores) — mismos motores, misma calidad de salida; el de pago solo corre a máxima velocidad.
Paso 4: Exporta una versión jugable
Haz clic en Exportar. RuneTranslate copia el juego y luego parchea las cadenas traducidas de vuelta en los archivos de recursos en el sitio. El mismo guardián de exclusión se ejecuta en la reescritura, así que un proyecto antiguo no puede empujar por accidente un nombre de escena traducido o un operando de flujo al reexportar. La salida es una copia completa y ejecutable del juego en la ubicación que elijas — lanza el .exe y se juega en tu idioma de destino.
¿Traduces a un idioma no latino (chino, japonés, coreano, tailandés, árabe) cuyos glifos la fuente integrada del juego no puede renderizar? RuneTranslate inyecta una fuente de reserva en la pila de fuentes de TextMeshPro al exportar, para que el texto traducido aparezca en lugar de recuadros de glifos faltantes.
Limitaciones conocidas
- Solo texto externalizado: las cadenas codificadas a mano en el código C# compilado (
Assembly-CSharp.dllen Mono, o el binario IL2CPP) no se traducen. Los campos de datos de MonoBehaviour sí — en compilaciones tanto Mono como IL2CPP. - La lectura de MonoBehaviour en IL2CPP necesita un
global-metadata.datanalizable; los metadatos muy ofuscados pueden no reconstruirse (mejor esfuerzo). - Mejor esfuerzo: confirma que el juego exportado se lanza y se lee correctamente antes de compartirlo.
- El texto en imágenes (logos, interfaz dibujada a mano, subtítulos de CG) no se traduce — fuera del alcance de la traducción automática.
Por qué esto es más fácil que la forma antigua
La traducción manual de Unity significaba desempaquetar recursos con UABE o AssetStudio, buscar qué TextAssets y campos de MonoBehaviour contenían texto real, evitar a mano las cadenas identificadoras que hacen fallar el juego y luego reimportar sin corromper la tabla de recursos. RuneTranslate pliega extraer, clasificar (para que no traduzcas la maquinaria), traducir y parchear-en-el-sitio en unos pocos clics — con el editor abierto para que tú controles la redacción.
Consulta la página del motor Unity para la lista completa de funciones, lee la guía de TyranoBuilder para un motor basado en HTML, o descarga RuneTranslate y pruébalo en un juego real.
¿Listo para probar RuneTranslate?
El plan gratuito desbloquea todos los motores y todos los proveedores de traducción. Supporter ($3/mo) desbloquea la velocidad completa.
Descargar para Windows
