
En esta clase te mostraremos donde puedes obtener la aplicación de forma legal y segura, para descargar e Instalar seguidamente.
En esta clase te mostraremos donde puedes obtener la aplicación de forma legal y segura, para descargar e Instalar seguidamente.
Nota: El uso de esta aplicación es opcional, Nosotros la utilizaremos para ir dejando avances y actualizaciones del curso, como material audiovisual etc. y demás proyectos adelantados. No es obligatorio instalar este programa de escritorio y no interfiere con el desarrollo normal del estudio.
En esta clase te mostraremos donde puedes obtener la aplicación de forma legal y segura, para descargar e Instalar seguidamente.
En esta clase te mostraremos donde puedes obtener la aplicación de forma legal y segura, para descargar e Instalar seguidamente.
Nota: No es obligatorio utilizar esta herramienta para el desarrollo de este curso. Te recomendamos que uses el programa de edición que mejor domines, pero que pueda exportar imágenes con transparencia en formatos .PNG. Nosotros usaremos Adobe Photoshop CC 2019, no es la más reciente, pero es potente y funcional para todo lo que trabajaremos en el curso. Las técnicas de diseño que manejemos las podrás replicar en el editor que dispongas.
Veamos muy por encima la interfase gráfica de Visual Studio Code. No muy lejano a cualquier editor de texto, VSCode contiene funciones y extensiones que pueden hacer más fácil el escribir código, administrar archivos y elevar la velocidad de la codificación. Poco a poco entre más avancemos conoceremos más funciones de este Editor.
Muchas maquinas con sistemas operativos Windows pueden traer ya instalado el dotnet o .NET. Pero si ese no es tu caso puedes descargar desde la pagina oficial de Microsoft o también probar si ya esta instalado en tu sistema.
Vamos a crear un repositorio de GitHub para ir almacenando y llevando control de todo el material que vayamos creando. Recuerda crear una cuenta desde la página oficial antes de intentar abrir el aplicativo de escritorio.
Para empezar a conocer sobre el lenguaje C# necesitamos un proyecto base sobre cuál trabajar, así que empezaremos por generar un proyecto por default y escribiremos nuestro primer Hola Mundo! En Consola.
Ingreso esta clase Adicional para quienes deseen instalar complementos gratuitos, existentes para trabajar mejor dentro del Visual Studio Code. Principalmente los que tienen que ver con .NET y C#. Complementos que nos ayudarán a autocompletar código y así ser mas veloces a la hora de escribir código, también ayudarnos con la IA para que sea intuitiva y recomiende líneas de código que seguramente vayamos a escribir. Como también poder ejecutar el código en terminal o consola de depuración usando F5 o Ctrl+F5 y no tener que escribir dotnet run. Esto es al gusto de cada quien y como se sientan mejor programando.
Existen varios tipos de datos muy usados durante el desarrollo de aplicaciones, veremos los más comunes con algunos ejemplos. También buenas prácticas al momento de crear nombres de variables y posibles errores registrados por consola para su posterior corrección en las líneas señaladas.
La programación está medida gran parte por el uso de operadores aritméticos o como otros los llamarían operadores matemáticos, ya que lo que hacen es eso, realizar sumas, restas, multiplicaciones y divisiones. Entonces trabajemos con ellos y hagamos unas cuantas operaciones.
En esta clase vamos a realizar operaciones aritméticas asignando un valor a una variable, pero sin realizar la operación como se haría normalmente. Todo esto utilizando los operadores de asignación. Con esto podemos reducir algo de código y también incrementar la velocidad de escritura.
En algún momento de cualquier desarrollo de algún proyecto, vamos a necesitar hacer un seguimiento de la ejecución del código, cerca a una línea o varias líneas de interés, sea porque hay fallos o solo porque se necesita ver que valores tienen las variables por ese sitio. Cuando aprendemos a programar nos enseñan algo que se llama la prueba de escritorio; se trata de ir haciendo seguimiento del valor de las variables línea por línea de ejecución para ir observando que todo marcha como debería.
Ya sabemos igualar algo de manera simple, ahora vamos a aprender como dar un valor a una variable según sea la verificación realizada utilizando los operadores de comprobación. Estos son muy usados durante cada desarrollo, toma atenta nota de ellos y práctica. Recuerda también que una verificación arroja un valor booleano cuyo resultado es False (falso) o True (verdadero).
Aprenderemos la condición más utilizada, es muy básica por ser una comprobación que realmente hace parte de nuestras vidas al momento de tomar cualquier decisión. En resumen, un ejemplo podría ser, si tengo hambre, como alimento, si no continuo mi jornada. Aprenderemos las distintas estructuras y como usamos los operadores de asignación ya vistos. Cabe anotar que también podemos hacer verificaciones con los operadores de Distinto != o Igual ==.
Ya sabemos como realizar una condición IF, ahora veamos como podemos hacer condiciones anidadas ósea más condiciones dentro de una. Conoceremos ELSE IF que nos permite volver hacer una nueva comprobación si el primer IF no fue verdadero.
Dentro de un IF podemos preguntar varias veces o realizar varias comprobaciones a la vez con la ayuda del operador && o el operador ||.
Los Arrays son conocidos como arreglos, cuando estos se le agregan más filas se convierten en matrices o Arrays Multidimensionales. En sí la función que cumplen es almacenar múltiples datos como si de cajas o contenedores dentro de una habitación se tuviesen; y ya conociendo su posición puedes conocer que guarda cada contenedor. Una forma fácil de verlo es como una variable que almacena a su vez varios valores.
Podríamos ver el Switch como un if que evalúa si el valor de una variable equivale a una constante ya fija.
Como acabamos de decir, es más utilizada para ejecutar código cuando evaluamos el valor que podría tomar una variable y es algo conocido, para así realizar dichas instrucciones y salir del Switch.
El ciclo for contiene una estructura muy agradable, ya que siempre sabe desde donde inicia y cuando termina, siempre y cuando determinemos de manera correcta el incremento/decremento para poder salir de la iteración. Dentro del código del For solo tendremos que colocar las condiciones o ejecuciones que se desean repetir.
Por otro lado, el ForEach es perfecto para trabajar con colecciones de datos como lo son los arreglos, por ejemplo. Así entonces evaluará cada valor de principio a fin y saldrá del ciclo automáticamente.
Este tipo de Ciclo tiene como función realizar iteraciones siempre y cuando se cumpla su condición Base, mientras eso suceda el código dentro de el se repetirá hasta que encuentre una salida.
Por eso ATENCIÓN! Nunca olvides ir modificando adentro la variable condicional para que pueda salir del ciclo. El do While, por otro lado, ejecuta el (do) mínimo una vez, pero si la condición al final se cumple se continuará ejecutando el (do).
Visto esto ya sabemos que un ciclo siempre será una buena idea al momento de tener que ejecutar algo donde se necesite llegar a otra cosa, encontrar un valor o ejecutar más instrucciones de manera repetitiva.
Aprendamos entonces como podemos encapsular operaciones o tareas repetitivas dentro de métodos. Observemos las características de estos y te invitamos a realizar ejemplos para que empieces a dominar más el tema. Estas estructuras son muy usadas cada día y dentro de las buenas prácticas para programadores se convierten en herramienta fundamental dentro de cada proyecto.
Con esta clase terminamos por ahora el aprendizaje básico de C#, aún falta mucho por estudiar y seguir aprendiendo de programación. Por ahora, con el conocimiento adquirido vamos a entender mejor como desarrollar código y orientarlo a la programación de videojuegos en Unity.
El aprendizaje tiene un descanso ahora para dar paso a la práctica y descuida que más adelante cuando empecemos a crear scripts en Unity seguiremos aprendiendo mucho más sobre C# y programación.
Esta Clase es OPCIONAL ya que dentro del curso las explicaciones y desarrollo de código no utilizo un ayudante generador de código como las AI presentes al día de hoy. Pero como no se trata de ir en contra de los desarrollos tecnológicos y mucho menos en contra del uso de herramientas que nos ayuden a ser mas agiles y adquirir mejor entendimiento en el desarrollo, traigo este video ADICIONAL donde explico como poder usar una AI en Visual Studio Code de manera simple.
Crear un nuevo proyecto es muy sencillo, como nuestro objetivo es 2D, elegimos este como Core y la versión más reciente de editor que tengas, un nombre y una ubicación en disco y empezamos. La creación de paquetes y demás archivos que el proyecto contendrá, podrán demorar un poco, solo ten paciencia y terminará cuando te muestre la interfase gráfica.
Unity tiene actualizaciones regulares de su Editor todos los años o meses, dentro de ellas pueden existir cambios leves en la ubicación de ciertas herramientas o funciones, pero básicamente Unity no pierde el objetivo de su editor y aunque existan cambios pueden ser muy sutiles al tiempo, como mejora grafica, velocidad, tamaño, forma o ubicación de iconos o botones. En esta clase ADICIONAL te enseño a trabajar con el mismo editor que usamos durante este curso o si es de tu elección usar una versión mas actualizada, pero aceptando que pueden algunas cosas cambiar visualmente.
Como todo programa o editor, Unity inicia con muchas ventanas por todos lados, pero descuida que aun así se necesitaran más, y poco a poco trabajaremos con todas ellas. En esta clase empezaremos por explicar que va a mostrar cada ventana de la interfase. Recuerda que puedes disponer del espacio de trabajo como mejor te guste, adecua tamaños de ventanas y reubica también si te place, lo importante es trabajar lo más cómodo posible.
Vamos a observar que un GameObject es simplemente un elemento al que se le pueden adherir una gran variedad de complementos para que tome una función dentro de la escena. Adicional al crearse entra dentro de la jerarquía y el espacio de trabajo de la escena. El inspector siempre mostrará información detallada del GameObject. En esta clase aprenderás a generar un Objeto de juego en la escena, lo moverás, cambiaras el nombre, asignaras un icono, permitirás ver o no, activar o desactivar y adherir componentes o eliminarlos.
Los Assets son todo aquel material que utilicemos dentro de nuestro proyecto, archivos... Como audio, imágenes, videos, scripts etc. Por tal motivo dentro de la estructura o directorio de archivos existe una carpeta Assets, allí almacenaremos todos los ficheros para su uso. Explicaremos en esta clase también los conceptos Sprite, Sprite Sheet y Sprite Atlas.
Así como los sprites los tiles son imágenes, representan una imagen dentro del tamaño o espacio que el diseñador elija. Con el fin de que dichos tiles tengan el papel de participar con otros tiles para construir o poder armar, pintar, dibujar algo en la escena.
Un tile es una porción, representa una imagen o sprite de igual manera.
Un tileset es una imagen con un conjunto de tiles, por lo general cada tile dentro tiene el mismo tamaño de alto y ancho.
Un tileAtlas ya representa la unión de varios tiles para construir una estructura ya prediseñada, mejorando la velocidad al pintar en la escena, por ejemplo un fondo o una superficie.
En esta clase observaremos unos tips o consejos útiles para antes de empezar a crear sprites o sprite sheets. Yo tengo el Editor Photoshop, pero cualquier otro editor que te permita por lo menos guardar tus creaciones con transparencia de fondo te será útil.
Recuerda tener en cuenta que para crear un movimiento de algún personaje, cada sprite recree con suavidad una transición a la siguiente imagen, asi va a ver más agradable en la animación. Podríamos decir que entre más sprites se generen para un mismo movimiento, su animación será de mejor calidad.
Unity trae dentro de sus herramientas algo denominado el Animation, allí podremos dar vida a los sprite sheets, colocaremos estos como si de una consecución de imágenes cuadro por cuadro se tratará; se podrá manejar frame por frame o segundo por segundo ya cada quien decide.
Realizaremos una práctica en esta clase y te dejaré de tarea la creación de las demás animaciones para el sprite sheet de los recursos. Si tienes otro Sprite Sheet con más movimientos, practica y practica... así lograrás dominar el Animation.
Nuestras animaciones no podrían ejecutarse sin esta otra herramienta de Unity. Esta trabaja como el controlador de animaciones, dice cuanto puede durar cada animación, a que otra animación puede realizar una transición y preestablece una entrada y salida dentro del ciclo de animación o ejecución del juego.
Maneja activadores los cuales establecen cuando debe iniciar una animación o cuando debe terminar, crearemos varios parámetros para entender esto.
La forma más fácil de aprender a dominar el Animator es entrar a manipular cada transición, sus tiempos, salidas, momentos donde termine una animación y empiece otra, etc. La práctica hace al maestro.
Ya habíamos aprendido a dibujar el entorno de la escena de dos formas, una con sprite x sprite (Que no es para nada recomendable) y otra colocando sprites atlas. Ahora vamos a ver como dibujar eficientemente los tiles en nuestra escena. Más adelante vamos a ver otra función del tilemap que son las reglas, pero por ahora esta forma de dibujar desde la paleta de tiles es muy recomendable.
Aprenderemos el concepto de Prefab construyendo ejemplos, cabe explicar que para crear un prefab debemos tener presente que va a hacer un objeto de uso frecuente o que dentro de sus componentes alberga gran número.
Entramos ahora a ver como nuestros objetos interactúan entre ellos; como ocurren eventos por el uso de las físicas en nuestro ambiente. Como todos saben, una de las fuerzas más grandes que nos acompaña todos los días en este planeta tierra es la gravedad, una aceleración negativa, que muchos aprendimos en nuestros años de colegio, y pues parece que si vamos a utilizar algo de lo aprendido después de todo.
Para esta clase añadiremos colisionadores a nuestros objetos y esperaremos hasta la próxima clase para ver como funcionan. Así podremos dar una definición real viendo los ejemplos.
Al adicionar el componente RigidBody 2D a nuestros objetos ya podemos observar como la gravedad, la masa de los cuerpos y las formas de los colliders interactúan con el entorno.
Empezamos a dar vida a la escena añadiendo movimiento gracias a las físicas 2D.
Todas las superficies de nuestro entorno presentan ciertas propiedades físicas como lo son los coeficientes de rozamiento, esto se traduce en sí es lizo o rugoso, áspero o delicado. O la reacción que tienen ciertos objetos al chocar con otros, unos rebotaran más que otros dependiendo, la masa y otras propiedades.
Unity trae ya pre-programados unas mecánicas para que las físicas 2d se puedan manejar según el usuario las necesite. Te aseguramos que muchas serán de tu agrado. Peor por ahora yo podría decir que un Joint es un conector, algo que se enlaza a otra cosa, un sitio o simplemente reacciona a un evento o hace interacción con otros objetos que poseen colliders y rigidbodies.
En este primer Ejemplo aprenderemos Joint Distance 2D. La forma más fácil de ilustrarlo es como si de un péndulo trata. Ósea un objeto amarrado a una soga y está a su vez sostenida de algo más arriba. Veamos de que trata , cambia propiedades y practica así aprenderás jugando con los Joints.
Mantiene dos objetos en una posición relativa del otro, por lo que los objetos siempre tienen un desfase en una posición y ángulo dado. Por ejemplo, los objetos que necesitan reaccionar como si estuvieran conectados rígidamente: No pueden alejarse uno del otro, no pueden acercarse más y no pueden girar uno con respecto al otro. También se puede utilizar este joint para crear una conexión menos rígida que se flexiona.
Reduce ambas velocidades lineales y angulares entre dos game objects controlados por la física de rigidbody a cero (ejemplo: los frena y los detiene). Por ejemplo; una plataforma que gira pero resiste el movimiento.
Permite que un game object controlado por la física rigidbody se una a un punto en el espacio en el cual puede girar.
Permite que dos game objects controlados por la física rigidbody mantengan una posición basándose en la ubicación del otro. Utilice este joint para mantener dos objetos desplazados entre sí.
Permite que un game object controlado por la física rigidbody se deslice a lo largo de una línea en el espacio, como puertas correderas, por ejemplo.
Permite que dos game objects controlados por la física rigidbody se unan como si fueran un resorte.
Se conecta a un objetivo específico, en vez de otro objeto rigid body, como lo hacen otros joints. Es un tipo de articulación de resorte, el cual puede utilizar para recoger y mover un objeto que actúa bajo gravedad por ejemplo.
Simula ruedas y suspensión. Con la Función Motor podrás dar poder al joint para que gire según sea un ángulo y se desplace en la escena.
El Area Effector 2D aplica fuerzas dentro de un área definida por los Colliders 2Ds adjuntos cuando otro (objetivo) Collider 2D entra en contacto con el Effector 2D. Usted puede configurar la fuerza en cualquier ángulo con una magnitud específica y una variación aleatoria en esa magnitud.
El Buoyancy Effect 2D define un comportamiento fluido simple como flotar y la fricción y flujo de fluido.
El Point Effector 2D aplica fuerzas para atraer/repeler contra un punto fuente que puede definirse como la posición del rigid-body o el centro de un collider usado por el effector. Cuando otro collider (objetivo) entra en contacto con el effector entonces se aplica una fuerza al blanco.
El Platform Effector 2D aplica varios comportamientos “plataforma” como lo es una colisión de una dirección, eliminación de fricción lateral / rebote, etc.
El Surface Effector 2D aplica una fuerza tangente a lo largo de las superficies de los colliders utilizados por el effector en un intento de que coincida con una velocidad especifica a lo largo de la superficie. Esto es análogo a un cinta transportadora.
Los colliders que usted utilice con el effector típicamente se configurarían como no-triggers para que los otros colliders puedan entrar en contacto con la superficie.
Antes de empezar a generar código, es muy importante conocer en donde o en que fase de la estructura de ejecución es importante realizar el desarrollo; cuando estudiamos C# al inicio sabíamos que si escribíamos código en el método Main allí se ejecutarían las líneas necesarias para que nuestro programa inicie y funcione. Pero ya en Unity vamos a aprender que podemos usar varios métodos según sea la prioridad de nuestro código y que este se ejecute.
Para entender aún mejor como funciona el orden de ejecución dentro de la escena, decidí realizar esta clase donde a manera de práctica entenderemos cuando se ejecuta cierto código y qué orden manejar. Así estamos seguros de donde vamos a escribir código cuando empecemos a generar nuevos scripts.
Recuerda que no siempre vamos a utilizar los métodos que veremos aquí en esta clase, siempre hay 3 o 4 más usados en cada script, esta vez los colocamos para entender, pero así no los llamemos, ellos siempre se ejecutan cada vez que iniciamos una escena y esta se mantiene hasta que finaliza.
El TimeScale como su nombre lo dice, es la escala por defecto que manejamos para el cambio de tiempo, donde 1 es lo normal. Con base en esta escala, transcurre el tiempo entre frames para ejecutarse cada vez durante el Update por ejemplo.
Desde Unity Editor podemos inicializar, ver cambios o modificar los valores de las variables públicas creadas en los Scripts. En esta Clase veremos varios Ejemplos de como trabajar con ellas. Es de gran ayuda poderlas modificar desde el editor, porque para el momento de las pruebas se puede ir editando valores hasta alcanzar el resultado esperado. Pero ten encuentra que una vez se finalice el playing retornarán los valores que tenían inicialmente antes de haber ejecutado la escena.
Para un programador es de gran ayuda que su Editor de código sea intuitivo y lo ayude a escribir código de una manera más rápida y segura. Por eso vamos a parar un momento y nos detendremos a validar si nuestro editor está actualizado y sobre todo si desde ya nos está ayudando a autocompletar funciones, ya no solo exclusivas de Csharp, sino también funciones propias de Unity.
Observa el video y recuerda lo que necesitas...
1. Tener actualizado el editor Visual Studio Code.
2. La extensión llamada C# instalada y habilitada.
3. Actualizado a la última versión de .NET o dotnet.
Si cumples estos pasos, es muy probable que cuando empieces a escribir una palabra que corresponda algún término de Unity, este autocomplete o muestre varias opciones para elegir.
Siempre existirán múltiples maneras de realizar una tarea, varias formas de hacerlo sin olvidar el objetivo. En esta clase fuera de aprender varios conceptos como instanciar un componente, llamar un componente del objeto y efectuar un cambio en alguna de sus propiedades. También hablaremos de términos como vectores y transforms. Nuestro objetivo es poder crear un script que pueda desplazar a un GameObject dentro de la escena, utilizaremos el teclado para dar acciones de movimiento para la derecha o izquierda y miraremos como reaccionan las físicas y su componente Rigidbody2D cuando está dentro del objeto o no.
Si lo que quieres más adelante es poder ejecutar algún tipo de código partiendo del choque o colisión de dos objetos o de ingresar un objeto dentro de un área específica y que se active algo que pueda ejecutar una mecánica, animación, etc. Estas dos características podrán servirte mucho, en esta clase veremos formas de usarlas, ya queda que practiques y desarrolles nuevos eventos.
Para iniciarte como un buen programador debes empezar también por tener buenas prácticas de trabajo al momento de generar código, entre ellos el ser muy ordenado, recuerda que es muy probable que alguien lea tu código más adelante o hasta tu mismo. Y que mejor que todo esté bien distribuido y comentado. En esta clase te enseño a serializar variables para que les puedas dar valores durante ejecución, así sean de tipo private adicional aprenderás a ordenar tu código almacenando dentro de regiones según sea el tipo de trabajo o mecánica a crear.
Los gizmos se utilizan para proporcionar ayudas visuales de depuración o configuración en la vista de escena, también los podemos mostrar u ocultar en la ventana Game.
Todo el dibujo de gizmo debe realizarse en las funciones OnDrawGizmos o OnDrawGizmosSelected del script.
Cabe aclarar que todos los trazos que dibujen algunos componentes, por ejemplo como los colliders son gizmos también.
En esta clase mostraremos como trabaja OnDrawGizmosSelected ya te dejamos de tarea mirar como funciona OnDrawGizmos por ahora te diré que se dibujan frame por frame, prueba y tal vez sea lo que necesites como ayuda.
Muy similar al Área Effector que vimos clases atrás en Físicas 2D, pero ahora nosotros controlamos la lógica y ya queda a nuestra imaginación, que funciones desarrollar para cada mecanismo. Recuerda que cada vez que un Overlap se intercepta con otro overlap o con un collider puede haber respuesta según lo configures. Puedes jugar con los detectores de Layer para pulir aún mejor esta función.
Estos rayos de detección son muy utilizados para sensibilizar el contacto de algún objeto mucho más, además el poder ejecutar cualquier proyecto al instante lo hace ampliamente útil. Te aconsejo que practiques y crees varios Raycast. Así como yo genere un método para generar los Raycast a mi gusto, tú también puedes hacer lo mismo, lo importante es tener muy presente que se necesita para que funcionen.
Trabajar con el tiempo y los frames durante la escena es fundamental para cualquier desarrollo. Por tal motivo es esencial que aprendamos como podemos utilizar el tiempo en Unity para realizar desde un conteo básico hasta utilizar su valor para desplazar objetos. Veremos algunas de las funciones más usadas con ejemplos prácticos. Te recomiendo trabajar con el Script y modificar valores para que entiendas mejor su funcionamiento.
Recuerda que en la clase de Orden de Ejecución de un Script creamos la interfase para pausar la escena.
Se conoce como vector a un segmento dirigido en un plano desde un punto a otro; así entonces este tiene una longitud (magnitud), dirección y sentido. La longitud del segmento se le llama longitud del vector, la dirección viene dada por el Ángulo que el segmento forma con la horizontal y el sentido lo indica la flecha.
Para nuestro estudio la función Vector2 en Unity será la usada, pero tiene el mismo principio, ya sea 2D o 3D solo que va dirigido en 3 dimensiones utilizándose Vector3. Aprenderemos el concepto básico y el uso práctico para agregar en nuestro código.
La resta de Vectores, la Suma y la magnitud de estos son frecuentemente usados en cada proyecto. Existen más empleos para los vectores en Unity, seguramente más adelante nos encontremos con algunos de ellos, pero por ahora estos conceptos son fundamentales para entender o recordar de que trata.
Pongamos en práctica la teoría aprendida en la pasada clase y resolvamos los ejemplos realizados ahora ejecutando un script en Unity. Dibujaremos con Gizmos los Vectores para observar los vectores muy similar a como lo vimos en la clase teórica. Descarga el Script y pruébalo tu mismo en un proyecto y comprende más a fondo como funcionan los vectores y sobre todo el propósito que tienen estos al momento de aplicarlos para alguna actividad o mecánica.
Los tags son Etiquetas que sirven para identificar aún más un GameObject fuera de su propio nombre, otorgando una clase que lo hace distinto a otros dentro de la escena.
Los Layers sirven también para identificar, pero son usados más a modo de capas principales, cuando un GameObject tiene un Layer seleccionado se le está diciendo que hace parte un conjunto de otros Gameobjects que pueden pertenecer a esa capa para más adelante poder ser encontrados, manejados, editados para un fin o discriminado para que dicho objeto con dicho Layer suceda algo. Ten presentes que el número de Layers es limitado, así que utilízalas con responsabilidad.
Para la construcción de nuestro mundo en el escenario son muy usadas las Sorting Layers, aplican un orden a los GameObjects para que se muestren unos detrás de otros o adelante como mejor guste o se necesite, en el espacio Order se pueden utilizar números enteros positivos o negativos para aplicar el orden, entre más grande, más al frente estará o menor, más atras, se suelen agrupar según el tipo o nivel; dentro de la misma escena tienen un orden en el Inspector en el área de creación, de igual manera actuaran unas sobre otras, no olvides ir allí a moverlas.
En esta clase hablaremos y practicaremos sobre estas etiquetas, capas y ordenadores. Descarga el Script y práctica, recuerda cambiar o agregar los Layers, Tags y Sorting Layers para que te funcione bien.
Para definir mejor lo que es una Corrutina dejo lo que es y para que sirve tal cual como lo dice Unity en su Documentación:
"Cuando usted llama a una función, esta se ejecuta en su totalidad antes de retornar. Esto significa efectivamente que cualquier acción tomando lugar en una función debe suceder en una sola actualización de frame (cuadro); un llamado a una función no puede ser usado para contener una animación procedimental o una secuencia de eventos en el tiempo. Una corrutina es una función que tiene la habilidad de pausar su ejecución y devolver el control a Unity para luego continuar donde lo dejó en el siguiente frame. "
Es muy común que dentro la ejecución de una escena de juego existan algunos objetos temporales. Para este caso objetos que se crean por un periodo de tiempo y luego se destruyen (Balas, disparos, objetos voladores, ítems, coleccionables, etc.). Nosotros podemos clonar prefabs para esa tarea y adicionar en cualquier momento la línea para destruirlos si eso es lo que se quiere.
En el ejemplo de esta clase clonamos y destruimos, pero no quiere decir que siempre tenga que ser así; la destrucción puede ejecutarse en otro momento o por otro script ya cada quien decide en donde y cuando.
Cabe entender que como buena práctica es mejor generar un objeto de la clase para que trabajen de manera independiente cada uno de los clones y así el tiempo de intermitencia sea autónomo, al igual que el momento de la destrucción.
Siempre es necesario trabajar con variables, pero aún mejor es trabajar con variables de otros scripts en tiempo real mientras se ejecuta la escena. Hay características que pueden manejar otros objetos que en algún momento nos puedan brindar alguna información para realizar algo o a su vez según sea el caso poder editar esas variables y cambiar su valor así no sea desde el mismo script propietario del campo.
Para esta clase veremos un ejemplo realizando un pequeño mini juego, una carrera de objetos, donde para iniciar el movimiento de los corredores se preguntara si el tiempo de salida es cero para poder empezar a correr, y esta pregunta se hace a una variable que está en otro script.
Aprende a crear instancias de tus clases y podrás interactuar con todos sus campos públicos.
Es importante aprender para qué utilizamos el Set o el Get dentro de la programación, muchas veces sin darnos cuenta usamos funciones en Unity los cuales tienen esta característica, la cual solo permite darnos un valor o acepta recibir un dato a la vez. Esto parte de que muchas variables tienen propiedades específicas que aceptan ciertos datos si y solo si se cumplen ciertas condiciones. De igual manera puede continuar para traer un valor perteneciente a una variable, el valor podrá mostrarse o ser capturado si se cumplen algunas condiciones. No es obligatorio colocar a la propiedad, el mismo nombre de la variable, como tampoco es obligatorio tener Set y Get dentro de la propiedad, solo con uno bastaría, ya depende lo que estés tratando de crear o el requerimiento.
Como aprendizaje básico y necesario, el cambiar de escena es fundamental en este curso, como no, sí vamos a crear múltiples escenarios en nuestro juego e interfaces de usuario por igual.
En esta clase, como siempre crearemos una transición entre escenarios, pero agregando un poco más de contenido que simule la presentación en un juego real.
Les recordamos agregar las escenas en el Build Settings, cargar el Using .SceneManagement en el script y utilizar la carga de la escena por medio de la función SceneManager.LoadScene().
Algo que da vida dentro de cada escena es el audio, aparte de los gráficos los sonidos se encargan de mantener también enfocado al jugador, buenos sonidos o canciones de fondo, eventos de interacción con objetos y acciones de batalla, crean un sin fin de sensaciones que capturan al usuario y hace que sea más inmersivo su participación dentro de una historia.
En esta clase aprenderás a reproducir audio en la escena, como cargar los assets y de que forma se pueden ordenar para trabajar de una manera correcta gestionando un manejador de Audios.
Los PlayerPrefs principalmente son usados para almacenar las preferencias de juego de los usuarios entre sesiones. Pero de igual manera pueden utilizarse para trabajar como memoria de juego para la aplicación, aunque se recomienda más utilizar sistemas de archivos o bases de datos, pero PlayerPrefs es una buena alternativa para aplicaciones o juegos no tan robustos.
Si quieres estudiar más sobre este tema, dejo el link de documentación oficial de Unity en los recursos.
Siempre que nos hablan de interfaz gráfica pensamos en imágenes, texto informativo, botones, campos de texto, menús desplegables, etc. Son todos aquellos elementos con los que el usuario puede interactuar para almacenar datos o editar características de aplicación.
En esta clase veremos la gran mayoría de estos elementos, usándolos para la creación de un menú principal de juego, utilizaremos conocimientos ya adquiridos como PlayerPrefs y AudioSource. Adicional podremos obtener imágenes con licencia gratuita* para adaptarla a nuestro proyecto. Haremos gran énfasis en la parte visual de todos los elementos a estudiar, más que en el Script que maneja la interfaz creada, el código estará disponible en los recursos de esta clase.
Para asegurar que el aprendizaje sea real, te recomendamos originar un menú partiendo del conocimiento adquirido y de todo lo que verás aquí, crea componentes, importa new assets (Imagenes, Audio, Fonts), presenta tu propia creatividad, con botones, fondos y demás imágenes, pero lo más importante que sea superllamativo al usuario, fácil de utilizar y funcional.
Recuerda llamar el using UnityEngine.UI para poder trabajar dentro del script con elementos de este tipo.
*Imágenes Utilizadas dentro del proyecto
Fondo
<a href="https://www.freepik.com/free-vector/neon-grid-background_4394259.htm#query=game%20background&position=2&from_view=keyword">Image by rawpixel.com</a> on Freepik
Ninja 1
<a href="https://www.freepik.com/free-vector/cute-ninja-with-sword-cartoon-flat-cartoon-style_12873504.htm#page=2&query=personajes%20games&position=13&from_view=search&track=ais">Image by catalyststuff</a> on Freepik
Ninja2
<a href="https://www.freepik.com/free-vector/cute-ninja-with-kunai-cartoon-flat-cartoon-style_12873500.htm?query=personajes games">Image by catalyststuff</a> on Freepik
Seguimos realizando prácticas de UI esta vez crearemos un pequeño inventario de objetos, aprenderemos la mecánica de como poder crear un inventario, pero desde la perspectiva gráfica más que desde la lógica de programación. Como buenas prácticas cada ítem, objeto, consumible o coleccionable debe pertenecer a un objeto con propiedades únicas previamente producidas, como nombre, descripción, imagen, sprite que lo representa, tipo de coleccionable, cantidad máxima para almacenar por espacio del inventario etc. Podemos garantizar un mejor uso a otros futuros usos para ellos, no solo almacenarlos en el inventario, sino también como usarlos, como moverlos a otros inventarios etc.
Pero por ahora solo aprender a manipular los elementos gráficos de interfase, para crear paneles con información que debe almacenarse previamente o en diferentes secciones del juego mientras este está activo y mostrar de manera actualizada dicha información cuando se necesite o siempre en tiempo real.
Utiliza el script de esta clase y replica un inventario como este o más grande, genera elementos de UI y aprende como son controlados desde el Script, con esto podrás crear grandes cosas, todo depende de tu imaginación.
Mostrar información sobre características del personaje como su vida, energía, magia, etc. Es muy frecuente en los videojuegos, es importante que el usuario este al margen del estado de su personaje, para ello en esta clase aprendemos a crear una UI para la Salud o Vida, usando el elemento UI Slider. Generamos un Script individual para manejar la UI como a su vez la programación para reducción y recuperación de salud. Añadiremos un efecto de incremento en función del tiempo para que no sea tan brusco los cambios de niveles de vida y también se cambiara el color de la barra para informar al usuario que la vida está muy baja o alta.
Juega con el Script, crea una propia mecánica o adiciona más programación para que tu proyecto se vea aún mejor.
Al igual que la barra de salud del personaje, creamos una barra de salud para el enemigo, claro, esta más pequeña y con una nueva función que informará al jugador sobre cuanto daño causo al enemigo. Recuerda que ya el Canvas va dentro de cada enemigo, como GameObject hijo, y se manejará de manera independiente para cada cual.
Para finalizar esta sección vamos a aprender hacer una UI para nubes flotantes de conversaciones entre el personaje y los NPC del juego. Cerraremos con broche de oro el tema de interfase de usuario en Unity 2D adicionando a nuestro proyecto los diálogos entre personajes con opción multilenguaje. Serán conversaciones simples sin toma de decisiones, solo diálogos informativos.
Observaremos temas ya previamente estudiados como Playerprefs, Overlap, Gizmos, Instancias de clases y Prefabs.
Aprenderemos a trabajar con caracteres dentro de las cadenas de texto, como recorrer un string y pasar carácter por carácter buscando un fin especial.
Aprenderemos a Exportar un Package desde un proyecto para ser usado en otro y poder utilizar sus componentes. Es importante extraer el package desde una versión reciente o igual a la de nuestro proyecto, destino de este package; por tal motivo al abrir el proyecto Origen se nos pregunta que es necesario hacer la conversión a una nueva versión del editor para poder trabajar, la apertura del proyecto origen puede demorar un poco, pero después solo queda seguir los pasos y eso es todo.
Dejo los links de descarga del proyecto para extraer el package en los recursos de esta clase.
Aprenderemos a importar un nuevo package en Unity. Aparecerá el menú Luminosity el cual nos permitirá configurar los Inputs a nuestro gusto. Daremos un vistazo corto de como crear un tema(Controlador o conjunto de botones) y una acción(Botón) para cualquier mecánica de juego.
Es evidente que después de instalar el nuevo Input Manager existan errores en los scripts previamente creados que utilicen el Input Manager pasado. En esta clase vamos a aprender a reconfigurar los script, llamando al using Luminosity y haciendo llamados al nuevo Manager.
Establecer controles por defecto es algo propio de su programación inicial, de como el desarrollador cree que el usuario tendrá mayor comodidad para usar los controles del juego. Sin embargo, no hay anda como darle libertad al usuario para que el mismo reconfigure esta distribución a su gusto, por tal motivo aprenderemos a realizar un panel para reconfiguración del controlador, allí no solo redistribuirá el mando, sino que también puede observar los botones como van quedando guardados en tiempo real. Al mismo tiempo se deben mostrar los textos actualizados dentro de la escena en los demás scripts para las diferentes operaciones o interacciones de usuario - controlador.
Observa detenidamente el video antes de empezar hacer pruebas, te lo recomiendo para que entiendas bien que queremos lograr durante la clase.
Pasamos ahora a actualizar el Script de movimiento Horizontal que ya teníamos para que se ajuste a una programación más abierta y ordenada. Ten hablaremos que no siempre en todas las superficies o momentos se puede permitir el movimiento, para ello creamos otro Script para administrar todos los movimientos que vayamos creando. Practicaremos Raycast en esta clase, hablaremos de los materiales 2D y de los Layers también, seguiremos colocando en práctica muchas cosas ya aprendidas tiempos atrás.
Si ya aprendimos como funciona el Script de movimiento Horizontal, ahora queda seguir con el movimiento vertical, para este caso es el salto del personaje, aplicaremos fuerzas positivas bajo el eje Y para que esto suceda, preguntaremos primero al administrador de movimientos si es posible saltar y mantendremos el salto habilitado siempre y cuando el personaje este reposado sobre superficies habilitadas para ello. Como Plus para esta clase adherimos la posibilidad no solo de saltar una vez, sino varias veces más en el aire.
Descargaremos un simulador para dispositivos móviles, este package nos permite al momento de dar play al juego en el editor de Unity observar en la ventana Game tamaños y disposiciones móviles como tables, ipads y más.
Para finalizar esta sección vamos a convertir el control de juego o inputs a botones sobre la pantalla de dispositivos móviles, iniciamos creando una UI que se mostrará sobre la pantalla en todo momento así el usuario solo tiene que tocar la pantalla para interactuar con el juego. Por ultimo enlazamos la UI a los scripts e InputManager para que todo funcione normal.
Siempre que se crea una escena, siempre viene con ella una Main Camera con una configuración estándar, para proyectos 2D básicamente se gestiona posición y tamaño así que es muy simple entender como funciona.
Unity cada vez trata de que mecánicas necesarias puedan ser empaquetadas para que los desarrolladores puedan alcanzar ciertos propósitos más rápido sin tener que programar desde cero cada cosa. Por tal motivo vamos a ver como instalar un Package que facilita el desplazamiento de la cámara para un objetivo a seguir, rangos de movimiento, suavizado en la velocidad de alcance y más propiedades. Todo esto en Cinemachine.
Cuando utilizamos el CineMachine es muy fácil aplicarle limites al movimiento de la cámara, tan solo creando un collider 2D polygon con la característica Is Trigger activa y ajustar un tamaño adecuado para que la cámara viaje dentro de el. Por ultimo agregar la extensión Confiner más el collider en la cámara virtual y eso es todo.
Ahora vamos a hacer scripting para crear nuestra propia mecánica de seguimiento de cámara para nuestro personaje, el objetivo será lograr alcanzar un efecto muy similar al visto con el package Cinemachine.
La gran ventaja que se tiene al realizar un script es que podemos generar mejoras, agregar o modificar algunas funciones que desde el Cinemachine no podrían ser controladas.
Existen varios métodos para crear fondos de escenarios, entre estos, dibujar el fondo con el TilePalette creando TileMaps, otro adicionando imágenes al escenario, extendiendo el tamaño de ellas y dándoles orden atrás de todo lo demás o también adicionando imágenes de fondo que tengan movimiento mientras la cámara se desplaza por el escenario. Al final pienso yo que podemos hacer algo de cada uno de estos métodos para generar algo realmente apropiado. En esta clase aprenderemos a usar imágenes de fondo, que puedan extenderse en el escenario sin cambiar su apariencia y fuera de eso que obtengan movimiento según sea la distancia de fondo y personaje que desees aplicar. Así poder lograr que se vea muy agradable desplazarse por la escena de juego.
Para terminar esta sección crearemos un movimiento de vibración para la cámara que podrá usarse como efectos de explosión, daño de personajes y/o enemigos.
De todas las animaciones creadas anteriormente, falta aún desarrollar el Script para el movimiento mirar arriba, en esta clase el objetivo principal es alcanzar que cuando se presione la direccional arriba, ocurra un movimiento extra de la cámara en Y positivo, ya que mirar arriba representa observar que hay en el área superior del personaje ósea aumentar su campo de visión.
Como siempre creamos un administrador para todo, esta vez necesitamos algo que maneje las animaciones del personaje, así que con unas simples líneas vamos a lograr hacer que se activen las animaciones creadas. Hay dos formas de controlar esto, una por medio de las condiciones de cada transición en el Animator y otra desde Scripting. Cuando activar un estado y cuando desactivar los demás para que se ejecuten correctamente las animaciones.
La transición entre animaciones son muy importantes para que se vea una conducta correcta durante el juego, como pasar de ir caminando a realizar un salto y que este se vea bien. En el Animator debemos ajustar varias configuraciones para lograr un buen flujo en el cambio de estados.
En este curso de Unity y C Sharp aprenderás a crear un videojuego desde cero, iniciándote en el mundo de la programación desde los conceptos más básicos, pero necesarios para comenzar a construir proyectos propios y funcionales. Paso a paso entenderás la dinámica o flujo de trabajo al producir Juegos 2D.
APRENDERÁS LO QUE SE NECESITA PARA INICIAR UNA CARRERA EN DESARROLLO DE VIDEOJUEGOS.
El objetivo principal del curso en enseñar a cualquier individuo ya tenga o no experiencia en este campo, a gestionar elementos uno por uno dentro de cada proyecto. Entiende cada tema y replícalo en un trabajo propio. Laboraremos siempre 50% C sharp y 50% en editor de Unity; las mejores mecánicas y procedimientos los obtendremos combinando el motor y el lenguaje a la vez.
Este curso va orientado a estudiantes de secundaria, técnicos y/o universitarios, profesionales en carreras afines con el desarrollo de aplicaciones móviles o sistemas de información, Diseñadores gráficos, creadores de contenido multimedia y/o audiovisual. Y cualquier otra persona con conocimientos de videojuegos, gamers, influencers etc.
Son 20 horas de aprendizaje garantizado, te invitamos a observar el contenido del curso, sus secciones y temas, para que te des cuenta del programa tan grandioso que estás por empezar. Anímate ya.