C# para Unity 100 ejercicios prácticos. Cómo mejorar tu kungfú
Jorge García Colmenar
Área: Ingenierías, Libros, Sistemas e Informática
Editorial: Ediciones de la U
Coedición: Fundación Confemetal Editorial
ISBN: 9789587927153
Precio en Dólares: USD$ 32.78
*Este valor puede ser aproximado y podrá variar al momento del pago.
Descripción
Con este libro podrás practicar las técnicas básicas de las artes marciales de la programación de videojuegos. Encontrarás una serie de ejercicios resueltos que te servirán para conocer los entresijos del motor de videojuegos Unity a la vez que comprenderás mejor el lenguaje de programación C#. Los ejercicios, pensados para profesores y alumnos, están ordenados por dificultad y tiempo de resolución. En cada uno de ellos se te propone una solución y se añade una explicación detallada del código, línea por línea.
Si estás aprendiendo programación de videojuegos o formas a alumnos, este libro te ayudará, mediante ejemplos concretos, a entender el significado de las herramientas que tienes a tu disposición o plantear retos cada vez más sofisticados: manipular las físicas, leer el input del usuario, alterar las cámaras, controlar sistemas de partículas, dar los primeros pasos en la programación procedimental, etc. Aquí encontrarás ejemplos para las mecánicas más básicas del motor, incluyendo la programación de la interfaz de usuario.
Tabla de contenido
Sobre el autor
Introducción
Cómo no usar este libro
¿Cómo usar este libro?
Apunte para profesores
Primera parte
Cien ejercicios básicos de programación
1. Crea una nueva variable llamada velocidad y asígnale el valor de 5.0F. Imprime su valor por consola
2. Utiliza dos variables públicas de tipo float para mostrar por consola sus valores sumados, restados, multiplicados divididos
3. Creados variables privadas de tipo string, concaténalas y muestra el resultado por consola
4. Crea una variable privada booleana y dos variables públicas int. Si al ejecutar el juego la suma de las variables int es par, la booleana debe ser true. Muestra su valor por consola.
5. Crea un script que imprima por consola «Hoy es jueves» si es jueves, y «Hoy no es jueves» en caso contrario
6. Calcula el factorial de un número dado por una variable pública de tipo int
7. Crea un script que demuestre el orden de ejecución de los métodos Start y Awake de MonoBehaviour
8. Crea un script que imprima por consola, en cada fotograma, el tiempo que ha transcurrido desde el fotograma anterior
9. Crea un script que imprima por consola el tiempo que ha pasado desde el inicio de la ejecución cada 100 fotogramas
10. Crea un script que inicialice una probabilidad aleatoria entre 0 y 100 y que cada 10 segundos genere un número entre 0 y 100. Si el número es mayor que la probabilidad, imprime por consola «Acierto» y si no, imprime «Fallo». Transformaciones y destrucciones
11. Crea un cubo que se desplace en el eje X a una velocidad de 1 unidad por segundo. Al llegar a la posición 10, debe recolocarse en la posición 0
12. Haz que un cubo rote a la izquierda o a la derecha respondiendo a las pulsaciones del teclado correspondientes a los cursores !, " o a las letras A y D
13. Haz que un cubo aumente la escala si mantenemos pulsada la tecla espaciadora y la disminuya si no la pulsamos. La escala mínima debe ser 1 en cada eje
14. Crea un cubo que se desplace uniformemente entre x=0 y x=10. Debe ir y volver continuamente
15. Crea un simple controlador de personaje que desplace un cubo en los ejes X y Z al pulsar los cursores
16. Crea un objeto que se desplace en el eje Z una unidad al soltar la tecla espaciadora
17. Crea un cubo que se destruye al clicar en él
18. Crea un cubo que se destruya a los tres segundos de clicar en él
19. Crea un cubo que se desactive entre tres y cinco segundos después de clicar en él
20. Crea un cubo que cambie de nombre para indicar cuántas veces has clicado en otro cubo
Segunda parte
A vueltas con los bucles
21. Crea un bucle que sume los primeros quinientos números pares
22. Crea una línea de diez cubos en el eje X usando un bucle, sin usar prefabs
23. Instanciar una pared de cubos vertical usando un prefab Variables y asignaciones
Bucle anidado
Instanciación de cubos
24. Instanciar un cubo hecho de cubos usando un prefab
25. Instanciar un bloque de cubos como en el ejercicio 24, pero utilizar diferentes prefabs para generar capas de piedra, tierra y césped, como si fuese una sección de suelo del juego Minecraft
El operador ternario
26. Instancia una pirámide hecha de cubos
Colecciones y bucles
27. Crea un cubo que se desplace uniformemente entre los puntos de un array o lista pública de vectores 3
Un poco más sobre diferencias entre listas y arrays
28. Crea un cubo que se desplace uniformemente entre los puntos de un array o lista pública de Vector3, pero que elija aleatoriamente el siguiente punto de la colección al que desplazarse
29. Crea unos cuantos objetos con el tag «desaparecer» en la escena, manualmente. Al pulsar la tecla espaciadora, todos los objetos deben desactivarse. Los objetos no pueden tener ningún script añadido. El ejercicio ha de funcionar sin modificar el código aunque se añadan o quiten objetos de la escena
El bucle foreach
30. Instancia diez cubos en la escena en posiciones aleatorias entre -10 y 10 en cada eje. Al pulsar el espacio, deben destruirse los que tengan posiciones positivas en el eje X
Key Code
Tercera parte
A por los componentes
31. Crea una esfera que cambie de color cuando se clica en ella El método GetComponent
32. Crear dos esferas. Al clicar sobre una, la otra cambia de color
La propiedad material
33. Genera un efecto de movimiento modificando el offset de la textura de un material de un plano o quad
La función SetTextureOffset
A por las físicas
34. Crear una esfera en el punto Y=10 y un suelo en el Y=0. Hacer que la esfera caiga al pulsar el espacio. La esfera tiene que rebotar como un balón de baloncesto
35. Crea una esfera en el punto Y=10 y un suelo en el Y=0. Haz que la esfera caiga al pulsar el espacio. La esfera tiene que rebotar como un balón de baloncesto
La función Comparetag
36. Crea una esfera en el punto Y=10 y un suelo en el Y=0. Haz que la esfera caiga al pulsar la tecla espaciadora. La esfera tiene que rebotar como un balón de baloncesto y destruirse al rebotar dos veces
37. Crea una esfera en reposo sobre un suelo. Al pulsar la tecla S, recibe una fuerza puntual hacia arriba y hacia la derecha
38. Crea una esfera en reposo sobre un suelo. Mientras la tecla S permanezca pulsada, la esfera debe recibir una fuerza constante hacia arriba y hacia la derecha
39. Crea unos cuantos objetos con el tag «newton». Al pulsar espacio, debe activarse l gravedad de todos esos objetos.
Los objetos no pueden tener ningún script añadido. El ejercicio tiene que funcionar sin modificar el código aunque se añadan o quiten objetos de la escena
40. Crea un Raycast que nos diga en qué objeto de la escena hemos hecho clic
41. Al clicar en un objeto, destruir todos los demás que estén en rango 10 desde ese objeto.
El caso de Camera.main
42. Crea una cápsula centinela que rota sobre sí misma. Emite un Raycast de distancia 5 que destruye solo a esferas si las toca
43. Crea una cápsula centinela que rota sobre sí misma. Emite un Raycast de distancia 5 que destruye las esferas solo si las toca
Más componentes: ¡luces, cámara, acción!
44. Utilizando dos luces point roja y azul, crea el efecto de un coche de policía apagándolas y encendiéndolas alternativamente
45. Crea un efecto de luces de navidad. El script debe funcionar independientemente del número de luces. Utiliza point light y un array público para enlazarlas (referenciarlas) al script. Basta con que cada luz alterne, no es necesario programar diferentes modos
46. Crea un efecto de luces de navidad. El script debe funcionar independientemente del número de luces. Utiliza point light y un array público para enlazarlas (referenciarlas) al script. Basta con que cada luz alterne, no es necesario programar diferentes modos
47. Crea un efecto «bombilla a punto de fundirse»
Ventajas de las corrutinas
Limitaciones de las corrutinas
48. Crea un semáforo de tráfico, incluyendo la luz ámbar. Como buen semáforo, debe pasar más tiempo en rojo que en verde
49. A l clicar con el botón izquierdo del ratón, cambia el color de fondo de la cámara. Al clicar con el botón derecho, el fondo se pone blanco
50. C rea un escenario simple y coloca cuatro cámaras. Cada una debe renderizarse en una cuarta parte de la pantalla, como en el Mario Kart, por ejemplo
51. Crea cinco objetos en las posiciones X=0, X=10, X=20, etc. Pulsando los números 1 a 5, la cámara debe desplazarse para enfocar al objeto adecuado (el número 1 se corresponde con el objeto en X=0)
52. Crea un sistema de partículas que emita solo cuando las teclas Q y P estén pulsadas a la vez
53. Crea un objeto con un Audiosource que solo reproduce sonido mientras no se ve
El componente AudioSource en Unity
Cuarta parte
Interfaces de usuario (UI)
54. Crea un sencillo reproductor de música
55. Añade un Slider para cambiar el volumen a tu reproductor de música
Crea un Slider
Configura el Slider
Asigna el Slider
El evento onValueChanged
56. Sobre el ejercicio anterior, el volumen debe permanecer de una ejecución a otra (usando PlayerPrefs)
57. Crea un botón de UI que al pulsarse instancie una esfera en una posición aleatoria entre -10 y 10 en cada eje
58. Crea un temporizador de diez segundos con una imagen radial
59. Crea una interfaz de usuario simple con un texto o una imagen centrada en la pantalla a modo de mirilla. Haz que la cámara rote en función del movimiento del ratón (como en un juego de primera persona)
60. Sobre el ejercicio anterior, lanza un Raycast, en dirección de la mirilla al hacer clic, que instancie un sistema de partículas a colisionar
Desglose del SRP
61. Crea un sistema de diálogo simple, estilo novela visual, con arrays o listas para el guion, y un panel y texto en la interfaz de usuario. Al pulsar la tecla espaciadora aparece la siguiente línea de guion
Principales características y funciones del componente Text
62. Sobre el ejercicio anterior, carga el guion desde un archivo en la carpeta Resources
Carpetas especiales
63. Crea un contador de clics sobre un botón de UI
64. Sobre el ejercicio anterior, hacer que el contador permanezca de una ejecución a otra (sin usar la clase PlayerPrefs)
La serialización
La directiva Using
65. Sobre el ejercicio anterior, crea un botón para resetear los clics
La encapsulación
Quinta parte
66. Crea un objeto que se mueva de forma senoidal en un eje. El eje y la amplitud del movimiento deben estar dados por parámetro
67. Crea una esfera que siga suavemente al objeto del ejercicio anterior
68. Crea una trampa de pinchos que aparece y desaparece del suelo
69. Crea tres escenas. Cada una debe tener 2 botones que permitan ir a las otras escenas
Scene Manager
70. Crea la clase Glitchosaurio. Los glitchosaurios tienen fuerza, resistencia y tamaño. Pueden moverse, comer, esconderse y buguearse. No es necesario que implementes
el interior de los métodos
71. Crea la clase Cria que hereda de Glitchosaurio.
Las crías de glitchosaurio tienen carisma y sabor
72. Los glitchosaurios pueden comer cualquier glitchosaurio de menor tamaño si su fuerza es mayor que la resistencia de la víctima. Si la víctima es una cría, la fuerza del cazador se incrementa tanto como el valor del sabor de la cría
73. Genera 300 glitchosaurios con valores aleatorios y guárdalos en una lista. Los patrones de diseño
74. Elimina todos los glitchosaurios de la lista cuya fuerza y resistencia sean iguales
Las expresiones lambda
Language Integrated Query (LINQ)
75. Imprime por consola el nuevo número de glitchosaurios
76. Crea un script que genere una esfera cada 0.25 segundos y esta reciba una fuerza aleatoria hacia arriba y a la derecha
Variables públicas
Aplicación de la fuerza ascendente
77. Sobre el ejercicio anterior, crea un suelo debajo del punto de instancia. Las esferas que toquen el suelo recibirán una fuerza ascendente hacia la izquierda, también aleatoria
78. Sobre el ejercicio anterior, el generador inicia «apagado» y se enciende y apaga pulsando la tecla espaciadora
La función CancelInvoke
79. Sobre el ejercicio anterior, crea un texto en la UI que lleve la cuenta de las esferas generadas
80. Crea un cubo. Cada vez que hagas clic en él con el botón derecho, debe recibir una fuerza hacia arriba y un torque aleatorio
81. Haz un script para que un objeto se vuelva rojo cuando sube y azul cuando baja, teniendo en cuenta su velocidad (puedes usar el cubo del ejercicio anterior)
La propiedad velocity
82. Haz que una cámara siempre apunte a un objeto (puedes usar el cubo del ejercicio anterior)
83. Crea un cubo que instancia otro cubo al clicar en él, y luego se destruye. El cubo instanciado debe tener el mismo comportamiento
84. Aumenta o disminuye la intensidad de una luz con la rueda del ratón
85. Crea un contador de clics y muestra el número en la UI
86. Imprime por consola la posición del puntero del ratón en la pantalla
87. Haz que un cubo sea más rojo cuanto más cerca esté de la cámara
La clase Color en Unity
88. Crea dos escenas y permite que se pueda cambiar de una a otra. Crea un AudioSource en la primera escena y haz que la música siga sonando al cambiar de escena, pero que no se duplique
89. Haz que dos objetos se intercambien los nombres cuando colisionan
90. Crea cinco cubos. Cada cubo debe corresponderse con los números 1 al 5. Al pulsar uno de esos números, el cubo correspondiente aumenta en 0.1 su escala en Y. Usa solo un script para todos los cubos
91. Escribe un script que imprima por consola el número de objetos que haya en la pantalla cada vez que se pulse la tecla espaciadora
92. Haz que un objeto que sale por la parte derecha de la pantalla entre por la izquierda y viceversa (como los asteroides y la nave del mítico Asteroids)
93. Haz un objeto que avance hacia la cámara mientras la cámara no lo ve
94. Haz que una esfera siga al ratón. La cámara debe estar en Z=-10 y la esfera en Z=0
95. Haz que el color de fondo de la cámara cambie de forma progresiva y aleatoria
96. Crea un script que modifique la gravedad de la escena cada vez que se pulsan los cursores. La flecha de cada cursor indica la dirección de la gravedad
97. Crea dos capas (layers) para cubos y esferas y crea algunos cubos y esferas con sus correspondientes capas. Deja las capas desactivadas en la propiedad Culling Mask de la cámara. Luego haz un script que active y desactive la capa de los cubos pulsando la tecla C y la de las esferas pulsando la tecla E
98. Añade un SphereCollider a una luz de tipo point. Haz que el radio del Collider sea igual al rango de la luz. Haz que el rango de la luz aumente si se pulsa el botón izquierdo del ratón y disminuya si se pulsa el derecho
99. Genera un triángulo desde código
100. Genera un plano desde código (usando dos triángulos)
Referencias bibliográficas
Recursos
Contenidos extra
JORGE GARCÍA COLMENAR
Ha trabajado como programador en importantes empresas (RD Sistemas, Grupo ZED, etc.), implementando bases de datos y algoritmos para juegos por SMS. Además, como autónomo, desarrolló aplicaciones y videojuegos de smartphone para clientes como José Luis Moreno o las Hermanas Hospitalarias.
Desde 2013 ha estado permanentemente formando en el desarrollo de videojuegos, habiendo sido profesor y coordinador de grado en escuelas como CES o Alfonso X el Sabio, e impartiendo cursos de formación para ADECCO. Principalmente enseña las asignaturas de programación y diseño de videojuegos, aunque también ha desarrollado conferencias y seminarios en diversos eventos como el Madrid Games Week, Valencia Indie Summit o ESADA.
Jorge es el desarrollador principal de cKolmos Narrative, un estudio indie de videojuegos, con el que ha publicado juegos comerciales en ocho idiomas y en plataformas como PlayStation, Nintendo Switch o XBOX, además de haberlo hecho en tiendas de juegos como Steam o Meta Quest, incluyendo juegos de realidad virtual.
Entre sus aficiones está la pasión por el go, un juego muy relacionado con la inteligencia artificial, tema de su interés y en el que tiene estudios de máster por la UNIR.