Uno de los objetivos más importantes dentro del desarrollo de un videojuego es la implementación e integración de los elementos que conforman el entorno jugable, los cuales facilitan y encauzan la inmersión del jugador durante la experiencia de juego. Entre ellos hay que destacar el papel de los agentes inteligentes. Un desarrollo bien ejecutado de los sistemas que componen los agentes, así como sus estrategias de interacción con el entorno puede generar en el jugador retos durante el tiempo de juego, que contribuyan a una experiencia de juego satisfactoria.
El objetivo de este proyecto es la implementación de un sistema inteligente compuesto por agentes coordinados dentro de un videojuego de disparos en primera persona, estudiando estructuras ya establecidas como las máquinas de estados finitos, los sistemas de rutas o los árboles de comportamiento. Como resultado se dispone de una versión de demostración del videojuego propuesto, en la que es posible escoger diferentes niveles de dificultad que generan en la escena de juego agentes con sistemas de diferente nivel de complejidad.
Para el desarrollo se empleó el motor Unity, que provee de herramientas para una puesta en producción rápida de un producto de este tipo, y el lenguaje de programación C#, nativo del propio motor. Además, para la prueba y verificación se hizo uso de la librería NUnit, orientada a la prueba y verificación del código implicado. Por otro lado, se emplearon herramientas de modelado, como SketchUp para modelos y bocetos del entorno. Se codificaron varias versiones de un mismo enemigo, centrándose el proceso en el análisis e implementación dos estructuras habitualmente empleadas para construir sistemas inteligentes, las máquinas de estado y los árboles de comportamiento. Se realizaron además simulaciones sobre las diferentes versiones de los árboles construidos para comprobar el aumento de dificultad para un jugador de características similares.
Una vez finalizadas las pruebas y analizadas ambas estructuras, se concluye que los árboles ofrecen mayores beneficios respecto a las máquinas de estado, dada su estructura modular, su escalabilidad potencial y su capacidad de optimización, entre otros aspectos.
One of the key goals in the development of a videogame is the implementation and integration of the elements that make up the playable environment, which ease and channel the player's immersion during the gaming experience. Among them, the role of intelligent agents should be highlighted.
The aim of this project is to implement an Intelligent System on a First Person Shooter, composed by coordinated Intelligent Agents, on a First Person Shooter, analysing already established structures and paradigms, such as finite states machines, waypoint routes selectors or behaviour trees. As a result, a demo version of the proposed game is available. It is possible to switch between different levels of difficulty, each one generating agents with escalating complexity within the game scene.
Unity engine will be used for the development of the game, as it provides tools for a fast production start-up of an asset of this type, and C# to code. In addition, the NUnit library will be used for testing and verification of the code. On the other hand, modelling tools, such as Blender3D, will be employed for the realization and modification of models within the game. Modelling tools, such as SketchUp, were used for sketching during preliminary stages. Several versions of a default enemy were coded, pivoting the process around analysis and implementation of two commonly used structures in this area, finite state machines and behaviour trees. Simulations were conducted on the behaviour trees built during development to verify the increase in the overall difficulty level between versions.
Once the tests have been completed and both structures have been analysed, it is concluded that behaviour trees offer greater benefits compared to state machines, given their modular structure, their potential scalability and their capacity optimization, among other aspects.