17/09/2021
En el desarrollo de videojuegos moderno, la capacidad de conectar tu creación con el mundo exterior es fundamental. Ya sea para implementar tablas de clasificación, descargar contenido dinámico, autenticar usuarios o simplemente obtener datos curiosos de internet, la comunicación con servicios web es una habilidad esencial. Aquí es donde entran en juego las API y el formato de datos JSON. Esta guía te llevará de la mano a través del proceso de realizar peticiones a una API y gestionar la información recibida dentro de tu proyecto de Unity, explorando dos de los métodos más populares para lograrlo.

- ¿Qué son las API y JSON? Los Pilares de la Comunicación
- Preparando Nuestro Proyecto en Unity
- Creando el Script Controlador en C#
- Método 1: Usando la Utilidad JsonUtility de Unity
- Método 2: Integrando Newtonsoft.Json (Json.NET)
- Conectando la Lógica con la Interfaz de Usuario
- Preguntas Frecuentes (FAQ)
- Conclusión: Un Mundo de Posibilidades
¿Qué son las API y JSON? Los Pilares de la Comunicación
Antes de sumergirnos en el código, es crucial entender los dos conceptos clave que manejaremos. Si ya estás familiarizado con ellos, puedes saltar a la siguiente sección; de lo contrario, esta base te será de gran ayuda.
API (Application Programming Interface)
Imagina que estás en un restaurante. No vas directamente a la cocina a preparar tu comida; en su lugar, le das tu pedido a un camarero. El camarero toma tu solicitud, la lleva a la cocina, y luego te trae la comida cuando está lista. En este escenario, el camarero es la API. Una API es un conjunto de reglas y protocolos que permite que diferentes aplicaciones de software se comuniquen entre sí. Tu juego (el cliente) realiza una "petición" a un servidor (la cocina) a través de la API (el camarero), y el servidor devuelve una "respuesta" con los datos solicitados.
JSON (JavaScript Object Notation)
Cuando el camarero te trae la respuesta de la cocina, esta viene en un formato que puedes entender. En el mundo digital, uno de los formatos más populares y eficientes para intercambiar datos es JSON. Es un formato de texto ligero, fácil de leer y escribir para los humanos, y muy sencillo de procesar para las máquinas. Los datos se organizan en pares de clave-valor, similar a los diccionarios en otros lenguajes de programación. Un ejemplo simple de JSON se vería así:
{ "nombre": "Luna", "especie": "Gato", "edad": 3, "hobbies": ["dormir", "jugar", "maullar"] }Para nuestro tutorial, utilizaremos una API pública y divertida llamada "Cat Fact API", que nos devolverá un dato curioso sobre gatos cada vez que se lo pidamos.
Preparando Nuestro Proyecto en Unity
Lo primero es tener un entorno de trabajo listo. Asumiremos que ya tienes Unity Hub y una versión del Editor de Unity instalada (preferiblemente una versión LTS).
- Crear un nuevo proyecto: Abre Unity Hub y crea un nuevo proyecto 2D o 3D. Dale un nombre descriptivo, como "TutorialAPI_Gatos".
- Configurar la escena: Una vez que el proyecto se haya cargado, necesitamos crear una interfaz de usuario (UI) básica para mostrar los datos y un botón para solicitarlos.
- En la ventana de Hierarchy, haz clic derecho y ve a UI -> Text - TextMeshPro. Si es la primera vez que usas TextMeshPro en el proyecto, Unity te pedirá importar los "TMP Essentials". Haz clic en el botón para importarlos. Esto creará un Canvas, un objeto de Texto y un EventSystem.
- De nuevo, haz clic derecho en la Hierarchy, ve a UI -> Button - TextMeshPro. Esto añadirá un botón a tu Canvas.
- Ajusta la posición y el tamaño del texto y el botón en la vista de Scene para que se vean bien en la ventana de Game. Puedes cambiar el texto del botón a algo como "Nuevo Dato".
Creando el Script Controlador en C#
Ahora necesitamos crear el cerebro de nuestra operación: un script de C# que se encargará de la lógica de la petición API.

- En la ventana de Project, dentro de la carpeta Assets, haz clic derecho y ve a Create -> C# Script.
- Nombra el script "CatFactController". Es importante respetar las mayúsculas y minúsculas, ya que el nombre del archivo debe coincidir con el nombre de la clase dentro del script.
- Haz doble clic en el script para abrirlo en tu editor de código preferido (como Visual Studio).
Método 1: Usando la Utilidad JsonUtility de Unity
Unity proporciona una herramienta integrada para trabajar con JSON llamada `JsonUtility`. Es simple y eficiente para estructuras de datos sencillas, aunque tiene algunas limitaciones. Es perfecta para empezar.
Paso 1: Crear la Clase de Datos
Primero, necesitamos decirle a Unity cómo es la estructura del JSON que vamos a recibir de la Cat Fact API. Según su documentación, el JSON que devuelve es `{"fact":"Un dato curioso sobre un gato.","length":28}`. Para que Unity entienda esto, creamos una clase en C# que coincida con esa estructura. Añade el siguiente código al final de tu archivo `CatFactController.cs`, fuera de la clase principal.
[System.Serializable] public class CatFactData { public string fact; public int length; }El atributo `[System.Serializable]` es crucial. Le indica a Unity que esta clase puede ser serializada y deserializada, en nuestro caso, para convertirla desde formato JSON.
Paso 2: Escribir el Código de la Petición
Ahora, reemplaza el contenido de la clase `CatFactController` con el siguiente código:
using System.Collections; using UnityEngine; using UnityEngine.Networking; using TMPro; public class CatFactController: MonoBehaviour { [SerializeField] private TMP_Text catFactText; private string apiUrl = "https://catfact.ninja/fact"; public void GetNewFact() { StartCoroutine(RequestCatFact()); } private IEnumerator RequestCatFact() { using (UnityWebRequest webRequest = UnityWebRequest.Get(apiUrl)) { // Enviamos la petición y esperamos la respuesta yield return webRequest.SendWebRequest(); if (webRequest.result == UnityWebRequest.Result.Success) { // La petición fue exitosa string jsonResponse = webRequest.downloadHandler.text; CatFactData catFact = JsonUtility.FromJson<CatFactData>(jsonResponse); catFactText.text = catFact.fact; Debug.Log("Dato recibido: " + catFact.fact); } else { // Hubo un error Debug.LogError("Error en la petición: " + webRequest.error); catFactText.text = "No se pudo obtener un dato. Inténtalo de nuevo."; } } } }Este código utiliza una corrutina (`IEnumerator`) para realizar la petición web de forma asíncrona, evitando que el juego se congele mientras espera la respuesta del servidor. Usa UnityWebRequest para hacer la llamada GET a la URL de la API. Si la respuesta es exitosa, utiliza `JsonUtility.FromJson` para convertir el texto JSON en nuestra clase `CatFactData` y finalmente actualiza el campo de texto en la UI.
Método 2: Integrando Newtonsoft.Json (Json.NET)
Para estructuras JSON más complejas o cuando se necesita más flexibilidad, la librería de terceros Newtonsoft.Json es el estándar de la industria. Es más potente y maneja casi cualquier escenario JSON que puedas encontrar.

Paso 1: Añadir Newtonsoft.Json al Proyecto
Para usar esta librería, primero debes añadirla a tu proyecto. La forma más sencilla es a través del Unity Package Manager. Ve a Window -> Package Manager. Haz clic en el botón "+" en la esquina superior izquierda y selecciona "Add package from git URL...". Pega la siguiente URL: `com.unity.newtonsoft-json` y haz clic en Add. Unity descargará e instalará el paquete.
Paso 2: Modificar el Script
El código es muy similar, pero con algunos cambios clave. Primero, añade `using Newtonsoft.Json;` al principio del script. Luego, la línea de deserialización cambia.
using System.Collections; using UnityEngine; using UnityEngine.Networking; using TMPro; using Newtonsoft.Json; // ¡Añadimos esta línea! public class CatFactController: MonoBehaviour { [SerializeField] private TMP_Text catFactText; private string apiUrl = "https://catfact.ninja/fact"; public void GetNewFact() { StartCoroutine(RequestCatFact()); } private IEnumerator RequestCatFact() { using (UnityWebRequest webRequest = UnityWebRequest.Get(apiUrl)) { yield return webRequest.SendWebRequest(); if (webRequest.result == UnityWebRequest.Result.Success) { string jsonResponse = webRequest.downloadHandler.text; // Aquí está el cambio principal CatFactData catFact = JsonConvert.DeserializeObject<CatFactData>(jsonResponse); catFactText.text = catFact.fact; Debug.Log("Dato recibido con Newtonsoft: " + catFact.fact); } else { Debug.LogError("Error en la petición: " + webRequest.error); catFactText.text = "No se pudo obtener un dato. Inténtalo de nuevo."; } } } } // La clase CatFactData sigue siendo la misma y no necesita [System.Serializable] // para Newtonsoft, aunque no hace daño dejarlo. public class CatFactData { public string fact; public int length; }Como puedes ver, el cambio es mínimo. Simplemente reemplazamos `JsonUtility.FromJson` por `JsonConvert.DeserializeObject`. La gran ventaja de Newtonsoft es su capacidad para manejar JSON más complejos (como diccionarios o arrays anidados) sin problemas.
Tabla Comparativa: JsonUtility vs. Newtonsoft.Json
| Característica | JsonUtility (Unity) | Newtonsoft.Json |
|---|---|---|
| Integración | Integrado en Unity, no requiere instalación. | Requiere instalación vía Package Manager. |
| Rendimiento | Generalmente más rápido para estructuras simples. | Muy optimizado, pero puede ser ligeramente más lento por su mayor complejidad. |
| Flexibilidad | Limitado. No soporta diccionarios, y requiere que las clases tengan el atributo `[Serializable]`. | Extremadamente flexible. Soporta prácticamente cualquier estructura de C# y formato JSON. |
| Uso Ideal | Proyectos pequeños, configuraciones simples, donde el rendimiento es crítico y el JSON es predecible. | La mayoría de los proyectos. Indispensable para APIs complejas y cuando se necesita robustez. |
Conectando la Lógica con la Interfaz de Usuario
Ya tenemos el código, ahora falta conectar todo en el editor de Unity.
- Asignar el script: Crea un GameObject vacío en tu escena (clic derecho en la Hierarchy -> Create Empty) y llámalo "GameController". Arrastra tu script `CatFactController` desde la ventana de Project y suéltalo sobre este nuevo GameObject en el Inspector.
- Asignar el campo de texto: Con el GameObject "GameController" seleccionado, verás en el Inspector el componente "Cat Fact Controller" con un campo público llamado "Cat Fact Text". Arrastra el objeto de Texto (el que creaste en la UI) desde la Hierarchy a este campo.
- Configurar el botón: Selecciona el objeto Button en la Hierarchy. En el Inspector, busca el componente "Button" y la sección "On Click ()".
- Haz clic en el botón "+" para añadir un nuevo evento.
- Arrastra el GameObject "GameController" desde la Hierarchy al campo que dice "None (Object)".
- Haz clic en el menú desplegable que dice "No Function" y navega hasta CatFactController -> GetNewFact().
¡Y listo! Ahora, cuando hagas clic en el botón, se ejecutará el método `GetNewFact()` de tu script.
Preguntas Frecuentes (FAQ)
- ¿Qué hago si la petición API falla y veo un error en la consola?
- Primero, verifica tu conexión a internet. Segundo, asegúrate de que la URL en el script (`apiUrl`) esté escrita correctamente. Tercero, abre la URL en tu navegador para confirmar que la API está funcionando. El mensaje de error en la consola de Unity a menudo te dará una pista sobre el problema.
- ¿Puedo usar este método para peticiones POST en lugar de GET?
- Sí. `UnityWebRequest` tiene métodos para todo tipo de peticiones HTTP. Para una petición POST, usarías `UnityWebRequest.Post(url, formData)`. Las peticiones POST se usan para enviar datos a un servidor, no solo para recibirlos.
- ¿Por qué mi texto no se actualiza en la pantalla?
- La causa más común es no haber arrastrado correctamente el objeto de Texto de la UI al campo público del script en el Inspector. Asegúrate de que la referencia no esté vacía ("None").
- ¿Es Newtonsoft.Json gratuito?
- Sí, Newtonsoft.Json es una librería de código abierto y gratuita, licenciada bajo la licencia MIT, lo que la hace segura para usar en proyectos comerciales.
Conclusión: Un Mundo de Posibilidades
Has aprendido a realizar una de las tareas más importantes en el desarrollo de juegos conectados: solicitar y procesar datos de una API externa. Ya sea que elijas la simplicidad de JsonUtility para tareas rápidas o la potencia de Newtonsoft.Json para sistemas más complejos, ahora tienes las herramientas para hacer que tus juegos sean más dinámicos, interactivos y estén conectados con el vasto mundo de datos que ofrece internet. ¡Ahora ve y experimenta, innova y construye experiencias increíbles para tus jugadores!
Si quieres conocer otros artículos parecidos a Integración de API y JSON en Unity: Guía Completa puedes visitar la categoría Juegos.
