7.1. DESCRIPCIÓN.
El editor de código que se ha implementado en el videojuego es la principal característica que hace único al control. Permite la interacción entre el usuario y las diferentes partes del juego que se han definido para ser modificadas. Básicamente es una interfaz GUI de Unity[10][11] donde se cargan las partes de código modificables y que cuenta, también, con un InputEditor que permite al usuario introducir un texto que sustituya al actual definido en el código.
Como se ha dicho anteriormente, no ha sido requisito funcional en ningún momento la creación de un complejo editor que permita la compilación de cualquier tipo de comando introducido. Esto solo ya podría constituir un proyecto en sí mismo y no ha sido para nada la voluntad de intentar acercarse a ese alcance.
Se ha diseñado pensando en la accesibilidad de cara al usuario, mostrándole la información de forma permanente, y con un nivel de funcionalidad básico que permitiera modificar texto y validar que la entrada de información sea válida.
7.2. ARQUITECTURA DEL EDITOR
Teniendo en cuenta estas consideraciones a la hora de abordar la implementación del editor, se optó por el siguiente modelo de arquitectura de clases.
Como se puede ver es un sencillo modelo con tres clases involucradas principalmente.
Por una parte, el InputEditor constituye la entrada de información por parte del jugador hacia el videojuego en forma de cadenas de texto. En este punto no hay ningún tipo de validación del comando introducido.
Como pasarela de la información está la clase PasarelEditor que recoge la información transmitida a través del InputEditor y la envía a la clase del objeto al que hace referencia el comando introducido. También sirve para devolver el estado de la ejecución hacia el InputEditor de nuevo y que éste pueda mostrar en consonancia un mensaje de error o hacer efectivo el cambio del texto del código en el editor.
Por último están las diferentes clases a las que les llega la información del comando. Son estas las encargadas de validar que el código esté dentro de los parámetros establecidos. Esta decisión de diseño viene dada porque la validación es propia para cada tipo de clase y bastante diferenciada entre ellas, aunque es cierto que comparten algunas validaciones de sintaxis comunes.
Una vez validado el comando en la propia clase, se efectúa el cambio en el propio código si ha sido favorable y se devuelve el resultado para que la parte de control del InputEditor pueda mostrar un error o cambiar el texto.
7.3 DEFINICIÓN DEL CÓDIGO MEDIANTE XML
Para poder definir y editar cómodamente las partes que el usuario puede ir obteniendo en las diferentes fases, se ha optado por usar el formato XML por su sencillez, eficiencia y fácil obtención de datos mediante Unity. Para cada una de las fases se ha creado un archivo de texto en formato XML con la siguiente estructura:
</codigoFase> <codigoFase>: Engloba los códigos de una misma fase por si se quiere tener un solo archivo XML con todos los códigos juntos, aunque se ha optado por separar en diferentes ficheros para que sea más directo acceder al contenido que se quiere modificar.
<codigo0bjeto>: Engloba el identificador y el código que pertenecen a un mismo objeto en Unity.
<idCodigO>: Entero que sirve para identificar el código con el objeto de Unity que lo carga en el editor. Solo hace falta que sea único en el archivo pero puede estar repetido entre fases ya que la programación de juego se encarga de discernir cual debe cargar según la fase en la que se encuentre.
<codigo>: El código que se cargará en el editor. Contiene diferentes separadores que identifican los saltos de línea y las partes interactivas según su tipo dentro del juego.
Unity tiene predefinida una estructura de directorios concreta para poder acceder a elementos externos desde el propio script de un elemento del juego. La ruta es: /Assets/Resources. Basta con guardar los ficheros en la ruta especificada y acceder mediante la función
Resources.Load(«CodigoColeccionable/CodigoFase0«+nivel) as TextAsset; desde código.
Como se explica más adelante, debido a las peculiaridades del parseo del contenido de los campos del fichero (concretamente el campo <codigo>) no debe modificarse los saltos de línea del fichero de texto. Debido al uso de separadores para delimitar las partes de código interactivas así como los saltos de línea dentro del editor del juego, una normalización de los saltos de línea del fichero provocaría problemas a la hora de visualizarlo dentro del juego. Esto es especialmente significativo ya que el editor MonoDevelop pregunta por ello cada vez que el archivo es abierto provocando, como me ocurrió en una ocasión, errores que pueden ser difícilmente localizables.
7.4 SEMÁNTICA DEL XML
La semántica usada en el XML del código de cada nivel es muy simple. A continuación se describen los diferentes separadores y se pone un ejemplo de un código de uno de los niveles para ilustrarlo.
# Representa los saltos de línea dentro del texto. Hacen que el documento XML sea legible.
$¡ Inicia el principio de creación de un texto editable. El final viene marcado por el separador $ o por el final de la línea si no se incluye ninguno más $¿ Igual que el anterior pero con la peculiaridad de que este identifica al texto como una función que puede ser invocada pero no modificada.
Un ejemplo de código usado con esta sintaxis es el siguiente;
7.5 PASOS DE USO PARA CREAR UN CÓDIGO EDITABLE
La metodología empleada para la creación e implementación de un código editable pasa por los siguientes pasos:
- Crear el código en el XML correspondiente con la sintaxis creada específicamente para el proyecto.
- Crear los scripts necesarios en el código de Unity que implementen los cambios en el código y las validaciones pertinentes.
- Crear las nuevas llamadas en el código de la clase PasarelaEditor y enlazarlas con las funciones creadas en los scripts de los objetos afectados.
7.6 MENSAJES DE ERROR
Los mensajes de error son mostrados por pantalla cuando la validación de un comando ha sido negativa. Se introdujeron en la implementación con la intención de facilitar la compresión de lo que estaba ocurriendo en pantalla al jugador. Suelen venir acompañados de pequeñas indicaciones para poder evitarlos notificando el tipo de comando que se espera. Son visibles durante un corto espacio de tiempo y no necesitan de intervención del jugador para desaparecer, intentando informar sin resultar molestos.
Un editor de código es una herramienta esencial para desarrolladores de software, incluyendo aquellos que trabajan en la creación de videojuegos:
- Visual Studio Code:
- Desarrollado por Microsoft, Visual Studio Code (VSCode) es un editor de código fuente gratuito y de código abierto. Es altamente personalizable, admite una amplia variedad de extensiones y ofrece características como resaltado de sintaxis, autocompletado, y depuración integrada. Es ampliamente utilizado en la industria de desarrollo de software y videojuegos.
- Atom:
- Atom es otro editor de código de código abierto desarrollado por GitHub. Es conocido por su interfaz de usuario moderna y su facilidad de uso. Atom es altamente personalizable mediante la instalación de paquetes y temas, y cuenta con características como búsqueda y reemplazo en tiempo real, previsualización en vivo y gestión de paquetes.
- Sublime Text:
- Sublime Text es un editor de código ligero y rápido. Ofrece una interfaz de usuario limpia y es conocido por su velocidad y eficiencia. Sublime Text es altamente extensible mediante la instalación de paquetes y tiene características como edición múltiple y resaltado de sintaxis personalizado.
- Eclipse:
- Eclipse es un entorno de desarrollo integrado (IDE) ampliamente utilizado en la industria del software. Aunque es conocido por su uso en Java, también es compatible con varios otros lenguajes de programación, incluyendo C++ y Python. Eclipse ofrece herramientas de desarrollo avanzadas, como depuración, perfilado y control de versiones.
- IntelliJ IDEA:
- IntelliJ IDEA es otro poderoso IDE utilizado principalmente para el desarrollo en Java, Kotlin y otras tecnologías relacionadas con Java. Ofrece características avanzadas de refactorización, autocompletado inteligente y análisis estático del código.
- Brackets:
- Brackets es un editor de código de código abierto enfocado en el desarrollo web. Es conocido por su interfaz ligera y extensible, y cuenta con herramientas integradas para el desarrollo web, como la vista en vivo y la inspección en tiempo real del código.
- NetBeans:
- NetBeans es un IDE de código abierto que ofrece soporte para múltiples lenguajes de programación, incluyendo Java, PHP, y C++. Proporciona herramientas avanzadas de desarrollo y una interfaz de usuario intuitiva.
- Xcode:
- Xcode es el IDE oficial de Apple para el desarrollo de aplicaciones macOS, iOS, iPadOS y watchOS. Ofrece un conjunto completo de herramientas para el desarrollo de software en el ecosistema de Apple, incluyendo la creación de juegos para dispositivos iOS y macOS.
- PyCharm:
- PyCharm es un IDE especializado en Python desarrollado por JetBrains. Ofrece características específicas para el desarrollo en Python, incluyendo análisis de código, depuración, y soporte para frameworks como Django.
- Unity Code Editor:
- Para el desarrollo de videojuegos con Unity, el propio Unity Editor incluye un editor de código integrado. Aunque muchos desarrolladores prefieren utilizar editores externos como Visual Studio Code o Visual Studio, el editor integrado de Unity también es una opción viable.