✅ Hacer un SISTEMA MULTILENGUAJE en UNITY ➡️ PARTE II

00:13:33
https://www.youtube.com/watch?v=brhSSYhEa4k

Ringkasan

TLDREn este tutorial en video, se describe cómo crear un sistema de texto dinámico en Unity que permite alterar textos durante el desarrollo del juego, útil para novelas visuales o sistemas con contadores de elementos cambiantes, como de monedas. Se hace uso del paquete de localización de Unity para gestionar estos textos de manera multilingüe, facilitando el cambio automático de idioma según las preferencias del dispositivo. Además, se proporciona una guía sobre cómo gestionar archivos ScriptableObject para almacenar textos en distintos idiomas y cómo ajustar la interfaz para que se actualice el texto automáticamente cuando se cambia de idioma o al interactuar con la interfaz.

Takeaways

  • 🛠 Learn to implement multilingual text change in Unity.
  • 💬 Handle dynamic and static text differently in games.
  • 🎮 Use Unity's localization system efficiently.
  • 🌐 Adapt game text to multiple languages dynamically.
  • 📄 Utilize ScriptableObjects for text management.
  • 📜 Understand text switching in interactive novels.
  • 🔄 Real-time language change in games.
  • 📝 Script dynamic text changes with code.
  • 🔧 Integrate language options seamlessly.
  • 🚀 Enhance game interface with language support.

Garis waktu

  • 00:00:00 - 00:05:00

    In a previous video, I showed how to create a multilingual system in Unity for a program to automatically change to the language of a device when playing a game. We achieved this without programming. Today, I will teach you how to handle dynamic text systems. These are texts that can be altered during the game, similar to those that appear in interactive novels or graphical novels, or a coin counter text I displayed at the top left. First, I’ll show you how to change the text of coins, and later I’ll create a dynamic text component similar to an interactive novel or a graphical novel and teach you how to change it to different languages. For this, the localization package needs to be installed, which I have done already. I'll go to Window, open the localization window, and create an entry for the coins with three languages: Spanish, Italian, and English. Since the coin amount is dynamic, it differs from static texts, requiring variables to store coin amounts. The script linked to the text component is crucial, and once created, variables are used in the localization table for dynamic text linking.

  • 00:05:00 - 00:13:33

    If you are using Unity version 2021, you may face an issue when filling the string reference field; it might appear empty due to the latest Unity versions. This can be fixed by adjusting preferences. In the second part of the tutorial, I will show how to place text in different languages into a scroll view. As you progress, the text displays a new block with the selected language. This involves creating a script sliceable object in Unity, which stores text for each language. With the scroll view configured, I demonstrated attaching these scriptable objects, allowing language-specific text to be referenced and altered in the game. I further illustrated how to automate text changing with a button, including issues such as refreshing localization to ensure proper display and noting solutions for potential text update errors. Despite certain complexities, we achieved functional dynamic text localization by integrating specific Unity components. The tutorial concludes with a functioning example, illustrating the successful implementation of a dynamic text system adaptable to various languages.

Peta Pikiran

Mind Map

Pertanyaan yang Sering Diajukan

  • How can Unity games automatically change the language of the text?

    The video explains how to use Unity's localization package to manage in-game text dynamically, allowing for real-time language changes based on the device's settings.

  • How to handle dynamic text like changing coin counts in Unity?

    You need to create dynamic text entries using scripts that leverage Unity's localization features, allowing for variable content such as coin counts that change during gameplay.

  • What does the video teach about handling text in multiple languages?

    The tutorial covers creating scripted text assets which can store text in multiple languages and ways to switch text content based on user interactions.

Lihat lebih banyak ringkasan video

Dapatkan akses instan ke ringkasan video YouTube gratis yang didukung oleh AI!
Teks
es
Gulir Otomatis:
  • 00:00:00
    [Música]
  • 00:00:04
    muy buenas en un vídeo anterior te
  • 00:00:06
    enseñe cómo hacer un sistema multi
  • 00:00:08
    lenguaje en múnich para que el programa
  • 00:00:11
    reconociera el idioma del dispositivo en
  • 00:00:13
    un juego y cambiar a dicho idioma de
  • 00:00:15
    forma automática
  • 00:00:16
    todo eso lo hicimos sin programar si no
  • 00:00:19
    viste el vídeo te recomiendo que antes
  • 00:00:21
    de ver este vayas a ver lo primero
  • 00:00:23
    porque te enseño cómo instalar el
  • 00:00:25
    sistema de localizaciones de juniti y
  • 00:00:26
    vincularlo a nuestros componentes de
  • 00:00:28
    texto pero hoy voy a enseñarte cómo
  • 00:00:31
    manejarte con sistemas de texto
  • 00:00:33
    dinámicos se trata de textos que pueden
  • 00:00:35
    ser alterados durante el juego como los
  • 00:00:37
    textos que aparecen en una novela
  • 00:00:38
    interactiva o una novela gráfica por
  • 00:00:40
    ejemplo o el texto que puede aparecer si
  • 00:00:43
    tienes un contador de monedas como ese
  • 00:00:45
    que acabo de hacer ahí arriba a la
  • 00:00:47
    izquierda en un primer vistazo voy a
  • 00:00:48
    enseñarte cómo cambiar este texto de
  • 00:00:51
    monedas y luego más adelante voy a hacer
  • 00:00:53
    un componente de texto dinámico aquí
  • 00:00:54
    como el que pudiera tener una novela
  • 00:00:56
    interactiva o una novela gráfica y te
  • 00:00:59
    voy a enseñar cómo cambiarlo a
  • 00:01:00
    diferentes idiomas así que vamos allá de
  • 00:01:04
    acuerdo como expliqué en el vídeo
  • 00:01:06
    anterior
  • 00:01:07
    es instalar todo lo que tiene que ver
  • 00:01:09
    con el sistema de localizaciones del
  • 00:01:10
    unite y eso ya lo he hecho aquí así que
  • 00:01:13
    de nuevo te invito a que veas el primer
  • 00:01:15
    vídeo si no lo has hecho para saber cómo
  • 00:01:17
    instalar este paquete de localizaciones
  • 00:01:19
    pero lo único que tengo que hacer ahora
  • 00:01:20
    es venirme aquí a window y abrir mi
  • 00:01:23
    ventana de localizaciones que está aquí
  • 00:01:26
    voy a crearme una nueva entrada que va a
  • 00:01:28
    corresponderse con la de las monedas y
  • 00:01:31
    te seleccionado tres idiomas que van a
  • 00:01:33
    ser español italiano y el inglés por
  • 00:01:35
    ejemplo donde voy a cambiar en cada uno
  • 00:01:37
    de ellos este texto y además como es
  • 00:01:40
    dinámico es decir como cada vez voy a
  • 00:01:42
    tener una cantidad de monedas distintas
  • 00:01:43
    esto va a hacerse de una forma un poco
  • 00:01:46
    diferente a cómo se haría un texto
  • 00:01:48
    tradicional estático de modo que voy a
  • 00:01:51
    crearme aquí en la entrada y voy a
  • 00:01:53
    rellenar estos textos deben poner un
  • 00:01:55
    nombre
  • 00:01:57
    a continuación tendría que rellenar
  • 00:01:59
    estas casillas con los diferentes tipos
  • 00:02:01
    de texto en los diferentes idiomas pero
  • 00:02:03
    antes de eso voy a cerrar aquí porque lo
  • 00:02:05
    que necesito es crear una variable que
  • 00:02:08
    me diga cuántas monedas tengo de modo
  • 00:02:10
    que aquí en la carpeta de script voy a
  • 00:02:12
    quedarme uno que va a estar asociado a
  • 00:02:14
    mi componente de texto es muy importante
  • 00:02:17
    que este script que me cree esté aquí
  • 00:02:19
    asociado sea un componente de el lugar
  • 00:02:22
    donde tengo el texto exactamente aquí
  • 00:02:25
    donde tengo este tex-mex prof
  • 00:02:29
    [Música]
  • 00:02:31
    muy bien no lo tengo no hubiera asociado
  • 00:02:33
    y lo voy a abrir para crear me la
  • 00:02:35
    variable de las monedas todo esto mes
  • 00:02:37
    ahora va a ser algo muy sencillito voy a
  • 00:02:39
    crear una variable pública
  • 00:02:43
    te lo tengo no necesito nada más me voy
  • 00:02:46
    a volver a juniti y ahora es muy
  • 00:02:48
    importante que recordemos el nombre de
  • 00:02:51
    la clase que hemos creado y el nombre de
  • 00:02:53
    la variable porque es lo que vamos a
  • 00:02:54
    escribir en la ventana de la tabla de
  • 00:02:57
    localizaciones
  • 00:03:06
    muy bien fijaos cómo va el formato es
  • 00:03:08
    quedó aquí la primera parte en inglés
  • 00:03:09
    ihab y luego le he puesto el nombre de
  • 00:03:12
    la clase es decir este de aquí y a
  • 00:03:16
    continuación el nombre de la variable y
  • 00:03:18
    ambos están puestos entre corchetes muy
  • 00:03:21
    importante tenemos que poner esta
  • 00:03:23
    casilla aquí en el modo
  • 00:03:25
    escribiríamos todo lo que está puesto ya
  • 00:03:27
    lo tengo escrito y cuando lo hayamos
  • 00:03:29
    terminado pulsamos aquí en el botón de
  • 00:03:30
    debod y ya está de modo que voy a hacer
  • 00:03:33
    exactamente lo mismo para las otras dos
  • 00:03:35
    casillas
  • 00:03:44
    muy bien pues ya tengo los tres lo tengo
  • 00:03:46
    en inglés en español y el italiano no sé
  • 00:03:49
    si exactamente se dice así en italiano
  • 00:03:50
    espero que me perdonéis quienes sepáis
  • 00:03:53
    hablar este idioma y ya tengo puesto
  • 00:03:55
    todos los textos ahora sólo tengo que
  • 00:03:57
    venirme aquí al texto de las monedas y
  • 00:03:59
    dentro de mi componente de texto voy a
  • 00:04:01
    abrir estos tres puntitos y voy a
  • 00:04:04
    decirle que menos localice me ha abierto
  • 00:04:07
    este nuevo componente aquí le voy a
  • 00:04:09
    reseñar mi string de tabla de monedas y
  • 00:04:12
    muy importante tenemos que bajarnos
  • 00:04:15
    hasta esta ventana que tenemos aquí le
  • 00:04:18
    vamos a dar a más y voy a bajar hasta
  • 00:04:20
    objeto de referencia me pone dos
  • 00:04:23
    casillas en la primera de ellas debe
  • 00:04:25
    poner el nombre de la clase y en la
  • 00:04:27
    segunda de ellas lo voy a arrastrar el
  • 00:04:28
    texto que tengo justo aquí arriba de
  • 00:04:31
    acuerdo pues aquí lo tengo está en
  • 00:04:33
    español si vengo aquí y cambio italiano
  • 00:04:35
    va a aparecer el texto dinámico en cada
  • 00:04:38
    uno de los idiomas muy bien esta primera
  • 00:04:40
    parte ya está finalizada pero ahora voy
  • 00:04:43
    a construir me una ventana para colocar
  • 00:04:45
    aquí un texto y vamos a probar cómo
  • 00:04:47
    podría hacerse esto con un texto
  • 00:04:50
    dinámico que cambiará dentro de la
  • 00:04:51
    ventana como el que podría aparecer en
  • 00:04:54
    una novela gráfica o una novela
  • 00:04:55
    interactiva voy a hacerlo pero antes de
  • 00:04:57
    que se me olvide os comento un dato muy
  • 00:04:59
    importante es posible que os ocurra a
  • 00:05:01
    aquellos que estéis utilizando 22.021
  • 00:05:04
    fijaos en la versión en la que estoy yo
  • 00:05:06
    puede pasar que cuando vayáis a rellenar
  • 00:05:08
    este campo el steam reference vale con
  • 00:05:10
    la tabla no os aparezca nada parezca
  • 00:05:12
    completamente vacío esto pasa en últimas
  • 00:05:15
    versiones de unity de acuerdo hay una
  • 00:05:17
    forma de solucionarlo y es viniendo aquí
  • 00:05:19
    a edit venimos aquí a preferencia y veis
  • 00:05:22
    que están aquí estos tres elementos
  • 00:05:24
    normalmente están los tres chequeados yo
  • 00:05:26
    recomiendo que quitáis este porque os va
  • 00:05:29
    a poner una versión anterior para
  • 00:05:31
    encontrar estas tablas y lo vais a poder
  • 00:05:32
    ver si os hará clara de acuerdo para la
  • 00:05:34
    segunda parte de este tutorial voy a
  • 00:05:37
    enseñar cómo podríamos colocar dentro de
  • 00:05:39
    este scroll view una cantidad de texto
  • 00:05:42
    en diferentes idiomas y que este texto a
  • 00:05:45
    medida que vayamos pasando por ejemplo
  • 00:05:47
    con un botón que todavía no he hecho
  • 00:05:48
    pero que haré a medida que vayamos
  • 00:05:50
    pasando el texto se vaya colocando pues
  • 00:05:53
    el nuevo bloque con el idioma que
  • 00:05:56
    tengamos seleccionado esto es un poco
  • 00:05:58
    más complejo pero no mucho más he creado
  • 00:06:01
    este escribir view y voy a crear aquí un
  • 00:06:03
    botón para poder ir cambiando los
  • 00:06:05
    diferentes bloques de texto que van a ir
  • 00:06:07
    apareciendo para crear un scroll view
  • 00:06:09
    donde el texto sea dinámico y se ajuste
  • 00:06:11
    a la caja con independencia de su tamaño
  • 00:06:13
    voy a dejarte un tutorial justo aquí
  • 00:06:16
    arriba donde te explico cómo crear esta
  • 00:06:19
    caja de texto de una forma muy fácil y
  • 00:06:21
    sencilla el primer paso es crear un
  • 00:06:23
    script que va a ser un objeto script
  • 00:06:25
    table también tengo un tutorial donde te
  • 00:06:27
    hablo en concreto sobre los objetos
  • 00:06:29
    script tablets que son una valiosísima
  • 00:06:31
    herramienta y unity también te dejo un
  • 00:06:34
    tutorial en la descripción para que
  • 00:06:35
    puedas echar un vistazo con mayor
  • 00:06:37
    detenimiento pero básicamente como veis
  • 00:06:39
    es algo muy pequeñito le cambio de su
  • 00:06:42
    herencia le da directamente de script
  • 00:06:43
    tablet objet aquí arriba le especificado
  • 00:06:46
    un create asset menú para poder crear un
  • 00:06:49
    script ale o 10 dentro de unity y justo
  • 00:06:51
    aquí me he creado tres strings el texto
  • 00:06:53
    en inglés el texto en español y el texto
  • 00:06:55
    en italiano que están separados por un
  • 00:06:58
    espacio de 20 este de aquí y este de
  • 00:07:01
    aquí y que cada uno de ellos tiene una
  • 00:07:03
    caja un poco más grande una caja que va
  • 00:07:05
    a tener un mínimo de tres espacios de
  • 00:07:07
    tal modo que si me vuelvo a juniti y
  • 00:07:10
    vengo aquí a create voy a poder crearme
  • 00:07:13
    mi objeto script table veis tiene esta
  • 00:07:15
    apariencia y aquí aparecen las tres
  • 00:07:17
    cajas para que yo pueda poner el texto
  • 00:07:19
    que quiera en inglés en español y en
  • 00:07:21
    italiano
  • 00:07:22
    muy bien pues me he creado tres objetos
  • 00:07:23
    script tablets aquí lo tengo el texto 1
  • 00:07:25
    entonces todo hacia el texto 3 y cada
  • 00:07:27
    uno de ellos los he llenado con algunas
  • 00:07:29
    frases para que luego puedan verse en la
  • 00:07:32
    ventana cada una de ellas en el idioma
  • 00:07:34
    que corresponda voy a crearme un nuevo
  • 00:07:36
    script que va a ser el que va a
  • 00:07:38
    controlar todo esto y que voy a asignar
  • 00:07:40
    al contenido de mi scroll view que es
  • 00:07:42
    justo donde tengo el text mes pero de
  • 00:07:44
    momento completamente vacío de acuerdo
  • 00:07:46
    pues ya lo tengo aquí está mi control de
  • 00:07:48
    textos que he asignado aquí a mi
  • 00:07:50
    contenido y cuando me voy a visual
  • 00:07:52
    estudio aquí lo tengo vacío voy a
  • 00:07:54
    crearme un par de variables la primera
  • 00:07:56
    de ellas va a hacer una referencia al
  • 00:07:58
    objeto texto dentro de unity y la
  • 00:08:00
    segunda va a ser un array que va a
  • 00:08:02
    contener los objetos script tablets que
  • 00:08:04
    me he creado
  • 00:08:12
    genial ya los tengo voy a irme a hoy uni
  • 00:08:15
    para asociarlos y para incluir todos los
  • 00:08:17
    elementos de la rai aquí está voy a
  • 00:08:19
    asignar el contenido y en la rai voy a
  • 00:08:22
    incluir todos los objetos script tablets
  • 00:08:25
    el siguiente paso es que me voy a crear
  • 00:08:27
    tres variables de tipo string que van a
  • 00:08:29
    ser las que correspondan al texto en
  • 00:08:31
    español en inglés y en italiano y además
  • 00:08:34
    voy a quedar una última variable que va
  • 00:08:36
    a ser el índice que va a ir recorriendo
  • 00:08:38
    mi arraiga a medida que yo pulse el
  • 00:08:40
    botón
  • 00:08:48
    el siguiente paso es crearnos el método
  • 00:08:51
    que va a corresponder estos strings con
  • 00:08:54
    los que tengo creados en mi plantilla
  • 00:08:56
    para que se puedan mostrar en pantalla
  • 00:09:09
    [Música]
  • 00:09:12
    y por último voy a crearme el método que
  • 00:09:14
    está enlazado al botón de unit y que
  • 00:09:16
    aumentará la cantidad de este índice
  • 00:09:18
    para que pueda ir mostrando el siguiente
  • 00:09:21
    elemento de la raíz
  • 00:09:26
    el siguiente paso se parece un poco lo
  • 00:09:28
    que habíamos visto al principio voy a
  • 00:09:30
    abrir otra vez mi tabla de
  • 00:09:32
    localizaciones y voy a crearme una nueva
  • 00:09:35
    que va a corresponderse con nuestro
  • 00:09:38
    texto dinámico es decir voy a recurrir a
  • 00:09:41
    este script y voy a llamar a estas
  • 00:09:44
    variables justo a estas de aquí
  • 00:10:03
    ya tengo las referencias y ahora también
  • 00:10:06
    como había hecho antes voy a localizar
  • 00:10:08
    mi texto vengo aquí desde hoy ya
  • 00:10:11
    localicé y voy a hacer las referencias
  • 00:10:15
    que había hecho antes junto con las
  • 00:10:17
    monedas
  • 00:10:24
    fijaos me ha pasado aquí algo muy
  • 00:10:26
    interesante me ha dado un error y esto
  • 00:10:28
    es porque las variables que estamos
  • 00:10:30
    referenciando en nuestras tablas de
  • 00:10:32
    localización tienen que ser públicas yo
  • 00:10:35
    las he puesto aquí privadas y se
  • 00:10:36
    realizadas así que voy a cambiarlas
  • 00:10:41
    además he creado el miedo de estar y
  • 00:10:43
    estoy llamando al método mostrar textos
  • 00:10:45
    para que se muestre el primero de todos
  • 00:10:47
    ellos de acuerdo ahora sí me aparece el
  • 00:10:50
    texto y si cambio aquí me va a parecer
  • 00:10:52
    en italiano y me va a parecer en inglés
  • 00:10:54
    y además me está cambiando
  • 00:10:56
    aquí también todo esto parece que puede
  • 00:11:00
    funcionar pero nos falta un pequeño
  • 00:11:01
    elemento y es que queremos cambiar
  • 00:11:03
    primero el texto 1 luego el texto 2 y
  • 00:11:05
    luego al texto 3 con un botón fijaos lo
  • 00:11:08
    que va a ocurrir me he creado un botón
  • 00:11:09
    dándole aquí al botón derecho y guay y
  • 00:11:11
    aquí en el botón voy a asignarle en la
  • 00:11:14
    caja de eventos el método que ya
  • 00:11:17
    habíamos creado así que me vengo aquí a
  • 00:11:18
    contenido texto que es donde está
  • 00:11:20
    nuestro script y aquí voy a buscar mi
  • 00:11:22
    clase que es esta y aquí voy a buscar el
  • 00:11:24
    método que nos habíamos creado este
  • 00:11:26
    método es este de aquí que es el que va
  • 00:11:29
    a ir sumando uno más al entero y
  • 00:11:31
    mostrarnos el texto no he puesto un
  • 00:11:34
    límite así que si vamos más allá del
  • 00:11:36
    número de objetos que tenemos dentro de
  • 00:11:38
    nuestros ray nos va a dar un fallo pero
  • 00:11:39
    para este ejemplo nos va a valer así que
  • 00:11:41
    fijaos lo que va a pasar va a ocurrir
  • 00:11:44
    algo muy interesante y es que aunque yo
  • 00:11:45
    tengo completamente bien asignado esto
  • 00:11:47
    se va a mostrar el primer texto aquí en
  • 00:11:49
    pantalla pero cuando yo le di a él más
  • 00:11:51
    no se va a mostrar nada a pesar de que
  • 00:11:53
    realmente me está sumando y fijaos que
  • 00:11:55
    aquí ya me ha mostrado el error de que
  • 00:11:57
    me he pasado de los límites de la raya
  • 00:11:59
    no se está mostrando porque no se está
  • 00:12:02
    actualizando el texto de la localización
  • 00:12:04
    y eso lo tenemos que arreglar dentro de
  • 00:12:07
    nuestro script vamos a intentar
  • 00:12:09
    actualizar nuestro texto haciendo un
  • 00:12:12
    refresh y para eso tenemos que llamar a
  • 00:12:14
    un nuevo espacio de nombres que va a ser
  • 00:12:16
    el que está relacionado con los
  • 00:12:17
    componentes de las localizaciones
  • 00:12:19
    [Música]
  • 00:12:21
    ahora voy a crear una variable pública
  • 00:12:23
    que va a contener un evento de
  • 00:12:25
    localización
  • 00:12:28
    este evento es el que va a componer el
  • 00:12:30
    componente de localización que tiene
  • 00:12:32
    nuestro texto lo vais a ver luego cuando
  • 00:12:34
    lleguemos a juniti y aquí al final lo
  • 00:12:35
    que vamos a hacer es darle un refresh
  • 00:12:38
    muy bien pues ya lo tengo todo me vuelvo
  • 00:12:40
    a juniti y aquí en mi contenido que es
  • 00:12:43
    donde tengo mi script voy a venirme aquí
  • 00:12:45
    fijaos aquí tengo el script no tengo
  • 00:12:46
    nada así que voy a arrastrar esto sin
  • 00:12:49
    más y en teoría ya debería funcionar
  • 00:12:52
    fijaos que voy a darle al play va a
  • 00:12:56
    aparecer primero el primer texto y se le
  • 00:12:57
    doy a + aparece el segundo y se lo había
  • 00:12:59
    más aparece el tercero y por supuesto
  • 00:13:01
    puedo cambiar de idioma a italiano le
  • 00:13:04
    doy al siguiente e incluso aquí
  • 00:13:06
    podríamos dar el melloco y cambiarme
  • 00:13:08
    al inglés y cambiaría al segundo texto y
  • 00:13:12
    con eso ya estaría nuestro tutorial
  • 00:13:14
    sobre cómo hacer un tipo de texto
  • 00:13:16
    dinámico con el sistema de
  • 00:13:18
    localizaciones de juniti muchas gracias
  • 00:13:20
    y nos vemos la semana que viene con un
  • 00:13:22
    nuevo vídeo sobre desarrollo de
  • 00:13:24
    videojuegos chao
Tags
  • Unity
  • dynamic text
  • multilanguage
  • localization
  • interactive novel
  • graphical novels
  • game development
  • ScriptableObject
  • text localization
  • programming