He comenzado a hacer un simple juego de fichas en 2D con Unity para comprobar lo que se puede conseguir. Parecía una tarea fácil, pero me he encontrado varios problemas que me ha costado entender y resolver. He decidido abrir esta página por si a alguien le puede servir mi experiencia.
Si ya has programado antes en otro lenguaje no te costará mucho hacerte con la lógica de Unity. Si no lo has hecho, y quieres empezar a programar desde cero, estás de suerte. Existen muchos tutoriales en la red que te enseñan paso por paso a hacerlo. Para empezar yo haría los cursos de Unity Learn. Además de enseñarte la interface y filosofía de Unity, te introduce en la programación en C# que es bastante versátil.
También he creado una página con unos pocos conceptos de C# que guardo para recordar.
Hay tres conceptos previos que es importante entender al iniciarse en la filosofía de programación de Unity.
Objetos: La programación en Unity se realiza a través de objetos de juego (gameObject). Si quieres insertar un código que haga algo tienes que ponerlo en un objeto del juego, ya sea una cámara, una imagen, un botón, un modelo en 2D o 3D, un emisor de sonidos, un objeto vacío —si solo quieres ejecutar un simple código—, etc.
Inspector: Unity pretende ser visual. Los objetos tienen en su interior componentes que los transforman o les obligan a hacer algo. Estos componentes se añaden/modifican desde el inspector.
Prefabricados: Son lo que llaman prefabs y son importantes en la filosofía Unity. Son objetos finales con todos los componentes que vamos a necesitar en nuestro juego. En lugar de estar continuamente creándolos cada vez los requiramos, la idea es crearlos una vez, guardarlos en una carpeta y luego replicarlos o instanciarlos todas las veces que queramos en un juego.
Ejemplo de un objeto, en este caso un cubo, con el inspector a su derecha donde se le han asignado varios componentes.
Ejemplo de inspector en otra versión de Unity donde se aprecian varios componentes añadidos a un gameObject.
Para crear un prefab arrastra el objeto ya acabado desde la escena (ventana hierarchy) hasta la ventana assets
En este enlace encontrarás mi biblioteca de scripts en C# de Unity, algunas con las instrucciones comentadas.
Unity proporciona muchos objetos ya acabados con todos los componentes necesarios para que los puedas modificar fácilmente. Entre ellos están los llamados UI (interfaz de usuario), que son los que sirven para construir pantallas que comuniquen al usuario con el juego, es decir, textos, botones, listas desplegables, imágenes, etc. Mi juego de fichas se va a basar únicamente en dos de estos, pues solo necesito botones y textos.
Para fabricar la fichas voy a crear un botón que tenga una sola letra en el centro. Para ello selecciono los botones estándar con todos sus componentes necesarios (imagen, texto y sistema que capta el click del ratón para hacer algo) que Unity ya trae montado por defecto: Menu: GameObject > UI > Button
Una vez que he cambiado los colores y tipo de letra del botón desde el inspector, lo voy a transformar en un prefab para poder usar este botón todas la veces que quiera.
Crear un prefab en Unity es muy fácil. Solo tienes que arrastrar el objeto, en mi caso el botón, desde la ventana donde se listan todos los objetos del juego hasta una carpeta dentro de la ventana Project. Yo he creado una carpeta llamada "prefabs" para guardarlos allí.
Después, tengo que crear un número de botones definido por una variable que yo pueda cambiar según la dificultad del juego. Para ello necesito instanciar varias veces el prefab que he construido antes con el botón. Esto requerirá mi primer script.
Para crear un script, basta con seleccionar en la ventana project, con el botón derecho, nuevo C# Script. Después, le damos doble click y se nos abrirá la aplicación Visual Studio de Microsoft. Esta aplicación hay que instalarla por nuestra cuenta la primera vez que usemos Unity. No viene en el instalador de Unity, por lo que estamos obligados a descargarla de la web de Microsoft (la edición Community es gratuita para personas y está disponible para Windows y MacOS). Pero ¡¡¡¡atención!!!! una vez instalada, hay que instalar desde Visual Studio el paquete de herramientas Unity. Tienes más información en este artículo.
Lo primero que nos choca cuando abrimos un script de Unity son las declaraciones de colecciones, en las primeras líneas, que comienzan por using. Estas son necesarias según el tipo de componentes que vayas a usar. Por ejemplo, si vas a trabajar con componentes de UI (un botón) deberás declarar esta colección poniendo al principio de tu script using UnityEngine.UI;
Iluminación
Para obtener una iluminación estándar con colores vivos modifica lo siguiente:
Quitar la Directional Light que vien por defecto.
Edit > Project settings > Player > Color space = Linear
Window > Rendering > Lighting = Se elimina el Sky Box
Enviromental Lighting = Color
Añade a tu escena Reflexion Probe a todo para que haya reflejos.