Integración de Ink con Unity

En este artículo vamos a cubrir la integración de Ink con Unity, tratando de hacerla lo más fácil posible y sin complicarnos mucho la vida. Si lo que te interesa es aprender a usar Ink, puedes ver estos dos tutoriales:

 Instalación

Abre un proyecto de Unity vacío, y descarga el paquete de Ink para Unity. Aparecerá el cuadro de diálogo para abrir el paquete en Unity o guardarlo. Puedes abrirlo directamente.








A continuación, aparecerá el diálogo de importación de Unity con todos los contenidos del paquete. Pulsa el botón Import para que Unity instale el plugin. Si todo ha ido bien, debe haberse creado la carpeta Plugins, y dentro de ella, verás la carpeta Ink. En su interior tenemos todo el contenido del plugin.











Hola Mundo

Lo primero es lo primero: vamos a hacer que ésto funcione, y a partir de ahí vemos qué se puede hacer. Así que preparemos un "Hola mundo". El objetivo será escribir algo en un archivo de ink y verlo por la consola de Unity. En la carpeta del plugin tienes una subcarpeta llamada Example donde puedes ver un ejemplo de funcionamiento, pero nosotros vamos a ir de 0. Aún así no la borres, porque te puede servir de consulta.

Lo primero que necesitamos es un archivo ink. Para ello, selecciona la carpeta Assets y haz click derecho -> Create -> Ink. También tienes este menú bajo Assets en la barra de menú. Llama al archivo como quieras. Se crearán 2 archivos en vez de 1. Un json y un ink. Abre el .ink para editar (pincha 2 veces y se abrirá Visual Studio o tu programa predeterminado).

 


Escribe Hola Mundo en el archivo. Guarda y regresa a Unity. Si pinchas en el archivo, podrás ver que en el inspector se ve el contenido y un botón de "Play". Si lo pulsas será como si estuvieses ejecutando el programa en inky, como en los anteriores tutoriales.

 


Es decir, lo que tenemos en el inspector es un intérprete de ink. Leerá y podremos explorar toda la historia como si estuviésemos en Inky. Pero nosotros queremos dar un paso más. Queremos hacer nuestro ese texto y sacarlo por consola. Vamos allá (hora de guardar la escena si aún no lo has hecho).

 

Crea un nuevo script (Botón derecho sobre Assets->Create->C# Script) y llámalo como quieras. Será el script que lea el texto de ink, así que puedes llamarlo ExtractorInk por ejemplo. En dicho script, copia el siguiente código


using UnityEngine;
using Ink.Runtime;

public class ExtractorInk : MonoBehaviour {

    public TextAsset inkAsset;
    Story historia;

    void Awake()
    {
        historia = new Story(inkAsset.text);
    }

    void Start()
    {
        while (historia.canContinue)
        {
            Debug.Log(historia.Continue());
        }
    }
}

Guarda el archivo. A continuación, crea un objeto vacío en la jerarquía y llámalo Ink, por ejemplo. Añade el script como un componente. También puedes arrastrar el script directamente al objeto o a la cámara.

 


Con ésto, estamos dando a ese GameObject el comportamiento del script. Pero tenemos una variable que debemos enlazar en el inspector. Se trata de la variable inkAsset. Pincha en el GameObject "ink" que has creado, y mira en el inspector. Verás que pone "none (TextAsset)" junto al nombre de la variable. Arrastra hasta ese hueco el json que se creó antes. Para saber cuál es el json, puedes fijarte en la barra de estado de Unity, donde te dice la extensión del archivo pinchado.

 

Ya lo tenemos todo listo. Pulsa Play en Unity, y en la consola podrás ver que aparece el contenido de tu historia.

 


¿Qué está ocurriendo realmente? El archivo ink se transforma en un archivo json, que es lo que verdaderamente parsea el plugin. De hecho cada vez que hagas cambios verás que Unity "se pone a pensar". En nuestro código cogemos ese json y lo parseamos. Bueno, nososotros no, ya lo hace la librería de Ink gracias a

 

historia = new Story(inkAsset.text);

 

Después, en la función Start, hemos creado un bucle que dice "si la historia puede continuar -es decir, si no hemos llegado al final-, entonces imprime por consola la sioguiente línea." 

Éste bucle es la base para ir trayendo todo el texto desde ink.

Ya hemos cumplido el objetivo de este artículo, pero aún nos queda por ver cómo manejar por ejemplo las opciones y decisiones. En el siguiente artículo crearemos una botonera y algo de interfaz de usuario para ir reflejando la historia en Unity. Pero si quieres seguir investigando por tu cuenta, te recomiendo el manual en inglés de los creadores de ink.

¡Hasta la próxima

Comentarios