Introducción
En este artículo vamos a ver cómo trabajar con los componentes Text Mesh Pro desde un Script, concretamente vamos a crear un objeto texto en un Canvas y otro Text Mesh para el espacio 3D y crearemos un Script dentro del cual vamos a escribir el texto TextMesh Pro a través de código.
También vamos a ver cómo cambiar el color del texto a través de código.
Crear objetos TextMesh Pro para World Space y Canvas
Comenzamos creando los objetos Text que posteriormente modificaremos desde un Script, vamos a crear dos tipos de objetos TextMesh Pro, uno para usar en la interfaz gráfica y otro para usar como un objeto 3D de la escena.
Creación de Text Mesh Pro Text para la interfaz gráfica
En Unity los objetos Text Mesh Pro que están en la sección UI deben colocarse como hijos de un objeto Canvas, por lo que vamos a asumir que ya tenemos uno de estos objetos en la escena. Para crear un nuevo objeto Text Mesh Pro vamos a la jerarquía, hacemos clic derecho sobre el Canvas (o algún objeto hijo del Canvas), vamos a la sección UI y elegimos la opción «Text – Text Mesh Pro», como se observa en la imagen 2.A.
Creación de TextMesh Pro Text para el World Space
La otra opción para escribir texto en pantalla es usar un componente Text de Text Mesh Pro como un objeto 3D y por lo tanto que se encuentre en una posición del mundo, este objeto lo encontraremos en la ventana de creación dentro de la sección 3D, como se observa en la imagen 2.B.
Primera vez usando TextMesh Pro
En caso de que aún no hayamos configurado Text Mesh Pro nos saldrá la ventana de la imagen 3 donde nos dá la opción de importar los componentes necesarios para usar Text Mesh Pro, le damos clic en «Import TMP Essentials», como se observa en la imagen 3. El segundo botón para importar ejemplos y extras es opcional.
Resultado de la creación de los objetos
Una vez creados los objetos, les hice unas pocas modificaciones en el inspector (tamaño de fuente, text) y el resultado es el siguiente:
Una vez creados los objetos e importado Text Mesh Pro ya podemos comenzar a usar el componente Text Mesh Pro Text desde el inspector o escribirlo a través de un Script. En la imagen 5 vemos el componente Text en la ventana Inspector, tiene muchas más opciones de configuración comparado con la antigua solución para textos.
IMPORTANTE
En la imagen 5 vemos el campo para editar el texto que aparece en pantalla, actualmente tiene escrito el valor «Canvas Text», ese es el campo que queremos editar por código y para hacerlo tendremos que editar la variable «text» de ese componente.
Script para escribir texto en componente Text Mesh Pro
Para poder escribir un componente Text Mesh Pro por código voy a crear un script y asignarlo a algún GameObject de la jerarquía, como se observa en la imagen 6. En este caso mi Script se llama «ModifyTextMeshPro«, dentro de este script voy a modificar los textos.
Importar namespace TMPro en nuestro Script
Para poder usar los componentes Text Mesh Pro cómodamente es conveniente importar el namespace «TMPro» agregando en la cabecera de nuestro script la línea «using TMPro;» como que se observa en la imagen 7.
Declaración de las variables a utilizar
Vamos a declarar dos variables de tipo «TMP_Text» donde estarán alojadas las referencias de los componentes Text que queremos modificar, en este casos los nombres de mis variables serán «canvasText» y «worldText» en estas variables colocaré las componentes Text Mesh Pro Text del canvas y del espacio respectivamente.
DETALLE
Los nombres «canvasText» y «worldText» son los nombres que elegí para esas variables, se puede usar cualquier otro nombre siempre que contenga los caracteres permitidos.
Inicialización de las variables (Asignación de referencias)
La inicialización de este tipo de variables no primitivas es crucial, si no nos encargamos de colocar dentro de la variable el objeto preciso al que queremos referirnos nos dará error de referencia null («Null Reference Exception»).
Hay muchas formas de asignar las referencias en Unity, en este caso lo haré de una de las formas más simple que es arrastrando los GameObjects que contienen los componentes Text que quiero modificar a los espacios de las variables en el inspector.
No aparece la variable en el inspector
En el caso de que no aparezca la variable en el inspector normalmente es porque su visibilidad es privada, se puede solucionar declarando las variables como públicas como se observa en la imagen 8, anteponiendo la palabra «public», o también se pueden declarar como privadas pero indicando que sean serializadas por el inspector, de la siguiente forma:
[SerializeField]
TMP_Text canvasText;
O también:
[SerializeField]
private TMP_Text canvasText;
Otro motivo por el que las variables no aparezcan en el inspector puede ser cuando hay errores en consola y los cambios hechos en los scripts no se actualizan, para resolver esto deberemos solucionar todos los errores que haya en consola, una vez hecho esto Unity compilará y aparecerán las nuevas modificaciones.
Instrucciones de código para modificar el texto Text Mesh Pro a través de Script y pruebas
Una vez que hemos inicializado las variables podemos utilizarlas, en este caso si queremos modificar el texto que muestra el componente TextMesh Pro, deberemos modificar la variable «text» definida en su interior, para ello usamos el operador punto que nos permite acceder a las variables y funciones públicas definidas dentro de un objeto,