Desarrollo de Unity: ¡crea tu primer juego de plataformas! | Tirion Learning | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Desarrollo de Unity: ¡crea tu primer juego de plataformas!

teacher avatar Tirion Learning, Software Engineer

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Avance de la clase

      0:46

    • 2.

      Lección 1: configuración de nuestra escena

      15:24

    • 3.

      Lección 2: creación de nuestro personaje

      8:00

    • 4.

      Lección 3: incorporación de movimiento del jugador

      24:28

    • 5.

      Lección 4: introducción de los prefabricados

      20:10

    • 6.

      Lección 5: generación de nuestro mapa

      32:06

    • 7.

      Lección 6: incorporación de sprites

      24:52

    • 8.

      Lección 7: animación de nuestros personajes

      22:04

    • 9.

      Lección 8: incorporación de más enemigos interesantes

      21:30

    • 10.

      Lección 9: introducción de la detección de aciertos

      19:14

    • 11.

      Lección 10: incorporación de la salud del jugador

      18:11

    • 12.

      Lección 11: introducción de gemas

      25:11

    • 13.

      Lección 12: creación de un bucle de juego

      16:05

    • 14.

      Lección 13: cómo salvar nuestro juego

      6:42

    • 15.

      Lección 14: mejora de las imágenes

      41:09

    • 16.

      Lección 15: creación de un centro de partida

      22:16

    • 17.

      Lección 16: incorporación de efectos de sonido y música

      28:45

    • 18.

      Lección 17: toques finales

      20:47

    • 19.

      Lección 18: creación y exportación

      7:51

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

311

Estudiantes

6

Proyectos

Acerca de esta clase

¡Hola, y bienvenidos a mi clase sobre cómo crear tu propio juego de plataformas en Unity!

En esta clase, desarrollaremos un juego de plataformas intermedio desde cero y aprenderemos todos los conceptos básicos de la creación de juegos en el proceso. Usaremos Unity y C# para desarrollar nuestro juego y cubriremos todo lo que necesitas saber para comenzar a desarrollarlo, desde los conceptos básicos de la codificación hasta todas las especificaciones de nuestro motor de juegos.

En los últimos años, he creado y lanzado varios juegos para móviles, aplicaciones web y plataformas de PC, completamente por mi cuenta. Ahora, con las habilidades que adquirí, la creé como una de varias clases completas que abarcan los conceptos básicos del diseño de juegos, con la esperanza de que puedas ingresar fácilmente al mundo del desarrollo de juegos ¡tomando alguna de estas!

En mi experiencia, el desarrollo de juegos puede ser bastante intimidante para los principiantes, y tener problemas y pasar horas o, a veces, incluso días, buscando en la web formas simples de superarlos puede ser un poco desmotivador. Como resultado, creé esta clase, que abarca todo lo que desearía haber sabido cuando comencé a desarrollar juegos, para que el proceso sea mucho menos tedioso para ti, sin importar tu experiencia previa.

Después de completar esta clase, ¡habrás adquirido todos los conocimientos de Unity y C# que necesitas para comenzar a crear tus propios juegos y aplicaciones tú mismo! Además, aprenderás varios conceptos más avanzados de diseño de juegos, como la generación de mapas, la gestión de audio, la animación de sprites y mucho más.

Esta clase te enseñará todo lo que necesitas saber para comenzar a crear tus propios juegos en el motor Unity, ¡ya sea para móviles, PC o cualquier plataforma!

Si decides inscribirte, aprenderás una habilidad valiosa y muy solicitada, y te divertirás mientras lo haces. Espero que tenga el privilegio de enseñarte.

¡Que tengas un gran día! :)

Conoce a tu profesor(a)

Teacher Profile Image

Tirion Learning

Software Engineer

Profesor(a)
Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción: Hola, y bienvenidos a mi clase sobre la creación de una plataforma intermedia, un juego usando el motor Unity Game. En esta clase, construiremos desde cero el juego que estás viendo ahora mismo. Y al hacerlo, aprende todos los fundamentos del diseño y desarrollo de juegos, incluido todo lo que necesitarás saber para hacer un juego exactamente así por tu cuenta Esta clase se dividirá en 18 videos, cada uno cubriendo un tema diferente del diseño de juegos y una nueva etapa en el desarrollo de nuestros juegos. Desde comenzar a escribir código hasta sistemas de partículas y administración de audio. Al tomar esta clase corta de seis horas, puedes en menos de un día, aprender todo lo que necesitas saber para comenzar a desarrollar tus propios juegos y Unity. Para obtener más información sobre esta clase y su formato, consulte el tráiler de otra clase a continuación. Y te veré en la primera lección. Salud. 2. 1. Cómo configurar nuestra escena: Hola, y bienvenidos al primer video de este curso sobre la construcción de una plataforma intermedia, un juego usando Unity. Ahora, antes de comenzar, solo quiero darte las gracias por tu apoyo para inscribirte en este curso o clase Es un apoyo como este el que me permite seguir haciendo cursos. Y realmente aprecio que hayas elegido el mío. Ahora bien, si has visto la hoja de ruta, básicamente habrás visto una visión general de lo que va a implicar este curso y todos los diferentes videos y secciones que vamos a tener. También habrás visto el juego que vamos a estar haciendo para cuando termine este curso. Ojalá, este juego se vea bastante genial y estés emocionado de poder hacer un juego así. Si se ve complicado, no te preocupes, en realidad no es tan complicado en absoluto. Y te sorprenderá bastante lo capaz que eres para hacer un juego así. No tanto tiempo en absoluto. Ahora que dicho eso, obviamente hacer un juego lleva un poco de tiempo y no podemos hacerlo todo en un solo video. Todo lo que vamos a hacer en esta lección es que vamos a presentar al editor de Unity. Y vamos a estar creando nuestra escena para configurar donde podamos empezar a hacer nuestro juego. Ahora bien, si nunca antes has usado Unity, te sugiero que veas este video completo. Si has usado Unity un poco y realmente entiendes el diseño del editor, puedes saltar adelante a una marca de tiempo o poner en la pantalla ahora mismo donde puedes saltar, porque cuando empezamos a usar realmente Unity para hacer nuestra escena Pero si no has usado Unity antes, recomiendo solo ver los siguientes minutos mientras te explico exactamente qué es todo y cómo funciona el editor. Entonces comencemos. Antes de comenzar, estoy usando Unity versión 2023, 0.1 0.5 y tengo el layout por defecto puesto. Te recomiendo que cambies al mismo diseño que yo, para que puedas seguir el camino. Lo haces es que subes a la parte superior aquí haces clic en Ventana, luego bajas a Layouts y simplemente eliges el predeterminado. Debería recargar tu escena y hacer que se vea así. No me gusta esta pequeña ventana de navegación de IA. Sólo voy a arrastrar eso ahí abajo y va a desaparecer. Y entonces básicamente tenemos nuestra disposición todo el editor de Unity. Voy a empezar de nuevo por aquí en la parte superior izquierda, Esta es nuestra escena. Y se puede ver que comenzamos con una escena llamada Sample Scene. Esta es una escena por defecto que Unity hizo para nosotros. Y si hacemos clic en esta pequeña flecha, podemos ver todo lo que hay en la escena ahora mismo es una cámara. Ahora bien esta cámara es básicamente lo que va a estar grabando nuestro juego, y esto básicamente va a ser los ojos de nuestro jugador. Esta cámara es en realidad lo que se llama un objeto, me meteré en eso más tarde. Pero básicamente se puede pensar una escena como una especie de nivel en un juego y pensar en objeto como las cosas en el nivel. Un jugador, una bala, una moneda. Estos van a ser objetos y luego un nivel sería una escena. Ahora mismo, solo tenemos un nivel y nuestro único objeto es la cámara real. Pero verás a medida que hagamos nuestro juego y nos desarrollemos cada vez más, vamos a poblar nuestra escena y añadir más y más cosas en básicamente esta ventana jerárquica aquí es donde vas a crear objetos o cosas en tu juego, quieres hacer un personaje Si quieres prácticamente cambiar algo de tu escena, lo vas a estar haciendo por aquí en términos de agregar o eliminar objetos. Entonces por aquí, esta gran ventana en el medio es realidad donde vas a estar editando el diseño de tu escena, o dónde están las cosas, qué tan grandes son, todo ese tipo de cosas. Ahí es donde vas a estar haciéndolo. Aquí, es como que esta es tu paleta y este es tu lienzo si quieres usar una analogía artística Pero a medida que usemos cada vez más al editor de Unity, esto se va a convertir en una segunda naturaleza para ti. Cómo usar estas dos cosas, sobre todo así como el inspector, a lo que llegaré en un minuto. Entonces antes de pasar al inspector, lo último que quiero mencionar es esta ventana de juego. Y esto es básicamente solo un espacio de pruebas. Es simplemente azul ahora mismo porque no tenemos nada en nuestra escena. Pero si tuviera que poner algo dentro de nuestra escena por aquí, digamos que metí un pequeño bloque dentro y fui a la ventana del juego, lo podría ver. Y te voy a mostrar eso más tarde cuando empecemos realmente a configurar nuestro primer nivel, o más bien nuestra escena. Continuando, tenemos la ventana del inspector, y aquí es básicamente donde vas a ver información sobre un objeto específico. Entonces puedes ver si no tenemos ningún objeto seleccionado, está en blanco porque no tenemos nada que estemos resaltando. Pero si hacemos clic en un objeto como nuestra cámara, podemos ver toda la información sobre nuestro objeto. Y voy a explicar esto a medida que agreguemos nuestras cosas a nuestra escena. Pero básicamente este componente de transformación de aquí, cada objeto tiene, y es básicamente cómo orientas tu objeto dentro de esta escena Tiene una posición, tiene una rotación, tiene una escala que es un tamaño. Y puedes cambiar todos estos valores. Obviamente, vamos a estar usando dos juegos D, así que realmente no necesitamos el eje z para la mayoría de estas cosas. Pero sí es útil para la rotación porque la rotación del eje z es en realidad así. Se puede ver si lo cambiamos así, en realidad podemos rotarlo. Pero independientemente, esta transformación es donde editamos la posición y nuestra rotación y la escala de nuestros objetos. Debajo de esto, tenemos una cámara. Y podrías estar confundido porque estás como, bien, bueno esta es una cámara. ¿Qué es esto? Este es en realidad un guión que está hecho por Unity. Para programar todo esto por nosotros, lo que Unity efectivamente hace es simplificar el proceso de desarrollo del juego al tener un montón de código escrito previamente para nosotros en forma de estas cosas que se llaman componentes Entonces esto puede sonar como mucho para tomar, pero créeme, se convertirá en una segunda naturaleza a medida que la uses cada vez más. Básicamente, esta cámara principal es un objeto que tiene una posición y una rotación en la escala. Y luego han agregado este script de Unity preescrito que se llama Camera, así como este script de escucha de audio, que no necesitas preocuparte, pero básicamente es parte de la cámara Y estos dos guiones hacen que este acto sea como lo hace. Y se pueden agregar otros scripts que se llaman componentes. O puede agregar sus propios scripts que solo se llaman scripts. Y básicamente así va a ser como programes tu juego en Unity. Haremos un objeto jugador. Entonces digamos que queremos agregar un sprite que sea como imagen o foto, básicamente cómo vamos a representar a nuestro jugador Vamos a agregar un componente de renderer de sprites y eso nos va a permitir agregar algo de arte a nuestro juego Vamos a agregar un componente de colisionador de cajas, que es básicamente cómo vamos a estar agregando física en Básicamente, la totalidad de Unity funciona haciendo estos objetos y agregando ya sea scripts preescritos, que son componentes, o nuestros propios scripts. Bien, ahora mismo tenemos la cámara, viene precargada con dos guiones pre escritos. Pero obviamente podemos agregar otros scripts si quisiéramos. Y cuando hagamos nuestros propios objetos, te mostraré qué guiones vamos a agregar. Si todo esto parece confuso como un poco mucho ahora mismo, no te preocupes por ello. Se volverá muy, muy simple a medida que usemos más Unity, pero básicamente esa es la esencia de cómo funciona el inspector de objetos Bajando por aquí hasta el fondo, esto es solo la ventana del proyecto. Básicamente es solo una representación de la carpeta donde se almacena tu programa o más bien se almacena tu juego. Puedes ver que tengo una carpeta aquí llamada Scenes, que está en mi carpeta Assets. Pero tengo activos y paquetes, y estos en realidad están almacenados en mi computadora. Esta es solo la forma de Unity de mostrarte, en lugar de usar el Explorador de Archivos, está en la propia Unity. Entonces es exactamente lo mismo. Así es como vamos a importar básicamente archivos a nuestros juegos o hacer nuevos archivos. Todo está guardado aquí, y luego eso realmente va en tu computadora. Esto es simplemente mostrarte dónde está. Y luego, por último, lo último que tenemos aquí mismo es una ventana de consola. Ahora bien, esto no es sorprendentemente importante en este momento porque no hemos empezado a codificar Pero es muy útil porque aquí es donde vamos a poder imprimir cosas. Si has codificado antes, estarás familiarizado con Hello World como el primer programa que escribas en un nuevo lenguaje de programación. Que básicamente imprime en la pantalla Hello World. Si escribieras esto en Unity, lo tendrías impreso por aquí. Aquí es donde recibirás mensajes de error, recibirás advertencias sobre tu juego. Obtendrás mensajes si quieres registrar cosas. Como si quieres, por ejemplo, crear un juego donde tengas jugadores peleando entre sí y aún no quieras programar la salud. Solo quieres ver si el código que dice, bien, este jugador le pegó al otro realmente funciona. Tal vez lo imprimirías esta consola y dirías que el jugador fue golpeado. Y así es básicamente como vas a usar esto. Es muy bueno para depurar o para básicamente sacar evidencia de que tu código funciona en tus juegos Ese es un resumen bastante breve de cómo funciona el editor de Unity. Si esto te pareció un poco confuso, como dije, no te preocupes por ello porque vas a recoger esto como segunda naturaleza ya que lo usamos cada vez más. Pero ojalá te haya dado solo una idea un poco mejor de cómo funciona todo. Ahora lo último que vamos a hacer en este video, ya que básicamente acabamos introducir el motor y platicar sobre el curso, es que en realidad vamos a empezar solo haciendo una escena muy sencilla para que podamos empezar con nuestro jugador el próximo episodio para hacer una escena. Pasemos ahora mismo a nuestra jerarquía. Esta pequeña estrella de aquí, creo que vale la pena mencionarla. Esto quiere decir que nuestra escena no se guarda. Si hago clic en el control S, puedes ver que se va. Si ves esa pequeña estrella ahí, tal vez solo sigue adelante y guarda tu programa. Ya sea control S o archivo guardado. Sólo para que te asegures de no perder ninguno de tus avances. Ahora queremos hacer una escena para que nuestro jugador pueda vivir cuando lo hagamos. Y aún no hemos hecho nuestra jugada. Entonces necesitamos hacer, antes que nada, como un mini mapa. Primero, voy a hacer uno increíblemente sencillo. Voy a hacer click derecho sobre aquí porque quiero hacer un nuevo objeto. Y voy a seleccionar dos sprites de objeto D y voy a elegir un cuadrado Lo que en realidad me va a hacer ahora mismo es sólo un pequeño cuadrado. Todo un cuadrado es un objeto Unity. Tiene una transformación, así que tiene una posición y su rotación y su escala, tal como mencionamos. Y tiene un renderer Sprite, que básicamente le permite tener el sprite cuadrado que está mostrando en Si le hago clic, en realidad puedo moverlo. Esto es lo que voy a usar como plataforma para que mi jugador exista. Entonces voy a hacer una pareja. Voy a hacer una plataforma aquí arriba. Voy a hacer uno ahí abajo. Y voy a hacer uno más aquí arriba. Cuando programo mi reproductor, puedo sumar en saltar y ver que todo funciona. Ahora hay un par de cosas que tenemos que hacer para configurar este mapa correctamente. En primer lugar, no podemos tener una plataforma que sea solo un cuadrado, porque es bastante difícil rebotar en eso. Empecemos haciendo clic y arrastrándolo para hacerlo más grande Puedes hacer esto en este modo aquí. Esto es básicamente como tu menú Herramientas. Si seleccionas diferentes herramientas, te permiten hacer diferentes cosas con los objetos. Por ejemplo, éste lo está moviendo. Éste lo está rotando. Este obviamente lo va a estar escalando hacia arriba y hacia abajo. Este de aquí es como una combinación. Es como lo verás en el software de edición de imágenes, pero también puedes hacer todo eso desde esta ventana de transformación de aquí. Que es lo que voy a hacer porque es un poco más exacto y básicamente puedo controlar exactamente cuánto quiero que gire o escale esta cosa . Entonces voy a establecer primero mi rotación z a cero. Esto por aquí básicamente elige si queremos que nuestra escala esté restringida para x e Y. Así que si hago clic en ella, entonces a medida que aumento x e y z, todas van hacia arriba o hacia abajo, básicamente escalas en proporción. Pero no quiero eso. Voy a asegurarme de que tiene una línea a través de él y luego voy a escalar y hacia abajo. Entonces no es una plataforma súper larga. Súper alto, lo siento. Voy a escalar x un poco ahí, diría que es una buena plataforma y sólo voy a moverla hacia abajo para allá. Ahora, antes de hacer las otras plataformas, en realidad necesito terminar de hacer ésta primero. Ahora mismo todo esto es un objeto con un sprite. Así que en realidad no es nada todavía. Es básicamente como una fotografía. Si ahora quiero sumar a un jugador, no hay nada que diga cuando aterrice en esto, debería dejar de moverme o debería hacer cualquier cosa en absoluto. En realidad es como una foto. Voy a añadir un nuevo componente que es un nuevo guión escrito por Unity. Y lo voy a llamar bid tut o mejor dicho voy a buscar, box Alida, Tout. Así se llama. Y cuando haga clic en eso, verás que agrega un nuevo guion pequeño a mi objeto. Ahora mi objeto cuadrado de aquí tiene un renderer de sprites y un colisionador de cajas Y si realmente haces zoom con el pergamino, puedes ver un tenue contorno verde fuera de esta cosa Si lo seleccionas, obviamente no puedes verlo si no lo haces, pero tal vez puedas verlo un poco mejor si habilito este motor aquí. No sé si lo puedes ver en mi pantalla, pero ojalá en la tuya puedas ver un tenue contorno verde en el exterior de tu plataforma, y ese es el colisionador de cajas Lo que básicamente hace un colisionador de cajas es que le dice Unity que esta cosa es un objeto en el espacio Si tengo algo que está cayendo y golpea el colisionador de cajas, Unity dirá, bien, deja de caer porque este es un objeto real, es una cosa, ¿verdad Unity va a poner automáticamente, en mi caso, mi colisionador de cajas perfectamente alrededor de mi plataforma Pero si quisiera cambiarlo, podría hacer clic en esta cosa de aquí, que dice Editar Collider Y entonces se puede ver que ahora básicamente puedo tener el control ahí. Se puede ver la caja verde. control sobre lo grande que quiero mi pastel de colisionadores Si yo quisiera que fuera así, entonces si un jugador se estaba cayendo, se detendría por ahí en lugar de caer todo el camino hacia abajo. En realidad no quiero eso, así que solo voy a hacer clic en control Z y voy a tenerlo justo de vuelta a donde estaba. Pero así es como editas tu colisionador de cajas. Ahora antes de continuar, otra cosa que debo mencionar es que este y cada otro tipo de etiqueta que ves por aquí son como atributos del guión. Puedes pensar en ellas como variables, pero lo que realmente son son atributos del script que básicamente te permiten cambiar cómo funciona. Este guión es obviamente un guión muy general, éste también. No se puede tener un planeador de caja que diga, bien, hacer un planeador de caja de estas dimensiones exactas porque queremos poder personalizarlo En realidad, la unidad está construida todo eso para nosotros. En términos generales, cuando agreguemos estos, voy a estar diciéndoles qué cambiar. Así que no vayas por ahí llenándolos porque sí lo cambian de manera bastante drástica A menos que obviamente sepas lo que estás haciendo o quieras hacer algo ligeramente diferente a lo que yo estoy haciendo, entonces por todos los medios. Pero ahora mismo por ejemplo, nuestro planeador de caja tiene todos los ajustes predeterminados que son realmente perfectos para nosotros. Éste por ejemplo, esto es disparador. Si tuviera que seleccionar esto, significa que este planeador de caja en realidad no influirá en la física En su lugar va a enviar una señal y decir, bien, me golpearon. Podríamos usar eso para algo como una bala o como un enemigo. Donde queremos que tal vez el jugador pueda pasar por ellos. Pero sí queremos poder saber cuándo los hemos golpeado para esta plataforma. obstante, definitivamente no queremos eso porque queremos poder hacer que el jugador se detenga cuando aterrice sobre él. Dejemos todo eso por ahora. Además del renderizado de sprites, todos estos son realmente buenos como la configuración predeterminada Y entonces lo que voy a hacer, porque no tengo ganas de volver a hacer todo esto, es solo voy a decir control C y control V y voy a copiar nuestra plataforma cuadrada y moverla hacia abajo. Dije que iba a tener uno aquí arriba y dejarme tal vez hacerlo un poco más corto y luego lo voy a hacer una vez más y voy a moverlo por aquí para tal vez bajar un poco. Voy a hacer éste más corto también y moverlo allá. Ahora hemos hecho tres objetos por aquí. Los hemos llamado cuadrado uno y cuadrado dos, que no son muy buenos nombres. Los cambiaremos en un minuto, pero básicamente estos van a ser el comienzo de nuestro juego. Estos son los tres objetos que hemos hecho que vamos a añadir un jugador en la siguiente lección. Y vamos a poder saltar sobre estos objetos para demostrar que nuestro movimiento y todo funciona. Pero me estoy adelantando. Básicamente, este es el inicio de nuestro juego. Tenemos tres plataformas, y todas tienen colisionadores de caja para demostrar que son objetos en el espacio Por último, voy a hacer es que voy a nombrarlos. Voy a nombrar a este piso uno. Voy a nombrar a este piso dos. Voy a nombrar a este piso tres. Lo último que en realidad voy a hacer es que voy a organizar un poco nuestra escena. Primero, voy a guardar porque ahí puedo ver esos íconos. Entonces voy a decir, bien, en realidad no quiero que todos estos estén al mismo nivel que la cámara principal. Quiero hacer como una carpeta, ya sabes como en Windows o en el Explorador de archivos o Mac, lo que sea, almacenarías tus archivos en carpetas. No solo tendrías todos tus archivos en el mismo lugar. Lo mismo aquí. No quiero que estos tres objetos estén al mismo nivel que mis cámaras. Voy a hacer click derecho y voy a decir crear, vacío, vacío. Técnicamente es un objeto vacío. Obviamente tiene una transformación porque cada objeto tiene que tener una posición. Pero puedes usarlo como una carpeta, como es básicamente como una carpeta vacía que usas para almacenar otras carpetas. Así es como se te ocurre. Voy a nombrar a este almacén. Voy a poner mis tres pisos dentro de almacenamiento manteniendo presionado el turno y seleccionándolos y luego arrastrándolos. Se puede ver ahora que están almacenados en su interior. Ahora tengo una escena un poco más limpia y hace que se vea un poco mejor. Si quiero ver dónde están mis defectos, simplemente hago clic en esta pequeña flecha y puedo ver que los tres están ahí. Ojalá, esa fue una introducción bastante buena a este curso y cómo se va a estructurar. Espero que hayas podido seguir adelante y solo hacer plataformas de tres niveles. No tienen que ser exactamente iguales, sino que obviamente solo tienen tres plataformas. Y vamos a empezar en el siguiente video con agregar en nuestro personaje jugador. Gracias. 3. 2. Crea nuestro personaje: Hola, y bienvenidos al segundo video de mi curso. Ahora en el último video, presentamos el editor de Unity y básicamente explicamos lo que hacen todas estas ventanas diferentes. Una vez que hayamos terminado con eso, configuramos esta escena básica para que empecemos a construir nuestro juego. Ahora todo lo que tenemos ahora mismo en nuestra escena es esta cámara principal y el objeto de almacenamiento que tiene nuestras tres piezas de defecto dentro de ella Pero esto no es mucho de un juego en estos momentos, de hecho, si que no hicimos la última vez. Pero te voy a mostrar ahora, no hay un infierno de mucho emocionante que suceda. Solo tenemos tres objetos que en realidad son solo tres sprites, así que son como tres fotos con colisionadores Entonces son objetos en el espacio, pero no son mucho más. Si queremos hacer un juego un poco más interesante que este, lo que hacemos, vamos a tener que añadir en otro objeto y en realidad un montón más objetos. Pero el primer otro objeto que vamos a agregar va a ser nuestro jugador. Porque si no tienes jugador, realmente no tienes un juego. Obviamente vamos a querer sumar en nuestro jugador. Y entonces podemos empezar a añadir en nuestros otros objetos y a nuestros enemigos, y todo lo demás. Eso hace que un juego sea un juego. Pero no nos adelantemos demasiado. Básicamente, lo que tenemos que hacer en este video es que vamos a agregar en nuestro objeto reproductor. Vamos a agregar nuestro objeto jugador exactamente de la misma manera que creamos estos objetos de piso. Vamos a hacer click derecho por aquí. Vamos a ir a crear dos, el objeto y en realidad vamos a crear un sprite cuadrado Ahora puedes ver por aquí, si creo mi sprite, tengo este bloque blanco que es nuestro jugador Por ahora, esto es obviamente un marcador de posición porque vamos a agregar sprites y arte a nuestro juego Pero por ahora tendrá que hacerlo. Voy a seguir adelante y hacer clic en eso dos veces y nombrarlo Jugador. También puede hacerlo haciendo clic en Cambiar nombre. Ahora mismo tengo mi objeto jugador, pero no hay nada que realmente lo diferencie de estos tres objetos De hecho, son más o menos exactamente iguales. Solo son cuadrados que han sido escalados de manera diferente. Lo primero que voy a hacer es que voy a cambiar el tamaño de mi jugador. Voy a hacer que sea 0.65 en vez de uno, y eso lo va a hacer un poco más pequeño Verás más adelante cuando agreguemos sprites a nuestro juego, en realidad podremos ver exactamente qué tan grande hacer todo, porque voy a estar usando pixel art No tienes que usar pixel art. Pero obviamente si quieres hacer exactamente el mismo juego que yo soy, obviamente estarás usando los mismos sprites Obviamente los vincularé enlazados dentro de cada video en el que sí los usamos, para que puedas usar los mismos que yo. Pero básicamente por ahora me estoy adelantando. Todo lo que tenemos es un cuadrado y así podemos elegir el tamaño que queramos. Ahora debajo de esto, en realidad también tenemos un componente de renderizado de sprites Y se puede ver al igual que hacen estos tres objetos de piso, eso es lo único que se agrega a este objeto. Básicamente es como un objeto vacío con un sprite con algo para mostrar el objeto ¿hay Lo primero que voy a hacer es que voy a cambiar este color de aquí a amarillo. Sólo para que pueda ver que es diferente al resto de mi escena. De hecho podemos ver eso. Ya podemos ver que nuestro piso es blanco y nuestro jugador es amarillo. Sólo para darle al jugador un poco de diferenciación, si hago clic en play ahora mismo, no muchísimo va a ser diferente de cuando jugábamos antes. De hecho, va a quedar más o menos igual. Nada se va a mover. Y este jugador no es capaz de interactuar en absoluto con el entorno, que es una de las cosas que necesitamos para nuestro juego. Así que vamos a comenzar agregando exactamente el mismo componente que hicimos a estos para hacerle saber que esto también es un objeto en el espacio y también necesita ser colisionado con Agreguemos otro colisionador de caja dos D. Como dije la última vez, prácticamente puedes dejar todos estos exactamente como están Obviamente, si quieres cambiarlo, puedes. Pero no voy a estar haciendo eso. Entonces voy a hacer clic en Control Z y volver a moverlo a como estaba bien. Ahora tenemos un colisionador de cajas. Ahora podrías esperar que si hacemos clic en Play y movemos a nuestro jugador hacia abajo a donde están los otros bloques, no voy a poder pasar de él, pero esto no es realmente el caso y es por dos razones principales. Una de ellas, que es como la subrazón, es porque el motor de física de Unity no está realmente construido para detectar colisiones, como detectar movimientos así, porque esto no es algo el jugador jamás podría hacer En realidad estoy editando mi escena en este momento y estoy diciendo, bien, el editor de Unity ahora detecta una colisión. Y aunque Unity en realidad está detectando esa colisión, realmente no puede hacer nada al respecto. Porque en realidad no he seguido las leyes de física de Unity para poner mi cosa ahí para que realmente no sepa qué hacer. Esa es una especie de subrazón. Pero la razón principal por la que la unidad en realidad no es capaz de demostrar que estamos bloqueando esto o demostrar que esa colisión está ocurriendo es porque no le hemos agregado lo que se llama un cuerpo rígido a este jugador. Y un cuerpo rígido es básicamente como un componente físico incorporado que generaliza cada aspecto de la física clásica que necesitas para un objeto Por lo que la hace capaz de acelerar, hace capaz de caer según la gravedad, hace capaz de moverse. Ahora mismo, Unity realmente no tiene ninguna forma de mover este objeto, ni siquiera vía código o lo que sea. Podrías hacerlo tal vez moviendo la transformación, Pero no hay una manera confiable para que Unity implemente realmente la física y el movimiento y las fuerzas a este objeto. Para agregar eso, solo necesitamos agregar un componente más, que mencioné es el cuerpo rígido dos D. Esto es como un componente general, como dije, que básicamente agrega física a este objeto. Esa es una forma bastante básica de ponerlo, pero es lo que hace. Voy a seguir adelante y en realidad cambiar este arrastre angular a cero. Y voy a pinchar por aquí sobre las restricciones, y voy a congelar la rotación de Z. Ahora eso puede parecer que he hecho muchas cosas y lo acabo de introducir, pero voy a explicarlo más Y te familiarizarás más con estos objetos y exactamente lo que hacen, o más bien estos componentes, a medida que avanzamos en el curso. Así que no te preocupes demasiado por cada una de estas pequeñas cosas, pero básicamente lo que hace este objeto es que agrega física. Ahora la forma en que funciona no es de enorme importancia, sobre todo para este curso, porque está integrado en Unity. Se trata básicamente de un guión muy complicado que Unity ha escrito para nosotros. Y estas son todas las variables que podemos cambiar. Para que podamos cambiar la escala de gravedad, podemos cambiar el arrastre, lo puse a cero solo porque no es de inmensa importancia, pero no hay que cambiar eso a cero. Puedes quedártelo, en realidad no va a marcar la diferencia. Y entonces lo único que cambié fue la rotación del eje Z. Y lo que eso va a hacer es si no lo hubiera cambiado y pongo mi objeto ahí, cuando haga clic en el juego, se va a caer. Y entonces en realidad va a rotar de esta manera, igual que lo haría en la vida real. Lo cual no es algo que quiera para mi juego. Y realmente no te recomiendo que lo uses para plataforma de juegos porque a menos que estés usando cuadrados, no se ve muy bien. Voy a estar usando pixel art, así que no va a quedar nada bien. Pero una vez que haya agregado este componente de cuerpo rígido y congeló la rotación en el eje Z y establezca el arrastre angular en cero si lo desea Eso es prácticamente toda la configuración que tenemos que hacer. Y ahora vamos a tener un objeto en nuestro juego que en realidad pueda obedecer las leyes de la física. Si hacemos clic en Reproducir, podremos ver que nuestro objeto se caerá y se detendrá en el momento aterricemos en otro colisionador, que es exactamente lo que queremos Y en realidad podemos volver y mover esto de nuevo hacia arriba. Y podemos ver que funciona exactamente como esperaríamos que lo hiciera. Obviamente, no vamos a poder lanzar nuestro objeto ni nada por el estilo. Y eso es algo así por la sub razón mencioné anteriormente en que este no es en realidad técnicamente motor de física de Unity en el jugador. Este soy yo editando mi juego y luego siendo como, bien, Unity Takeover Y así Unity no tiene información de lo rápido que la arrojé o si he hecho algo así Acabo de dejar caer a mi jugador hasta la parte inferior del mapa. Así que sólo voy a moverlo de nuevo. Vamos a moverlo diez minutos así. Se lo perdí otra vez. Mira lo que realmente sucede ahora es el jugador se mueve tan rápido que ya no puede detectar colisiones Lo que en realidad me lleva a otro punto importante. Si crees que vas a tener una plataforma con colisiones increíblemente rápidas, vas a querer cambiar eso a continuo Y básicamente voy a poder ilustrar lo que eso hace. Ahora si hago exactamente lo mismo que hice de antemano, y tengo al jugador caer y luego recoger velocidad, obviamente ya que acelera rápido y rápido hacia el suelo. Voy a esperar un rato, voy a cambiar esto a cinco. No, para poner eso a cero. Se puede ver que en realidad pude parar en este momento. Entonces eso no fue del todo intencional. Pero ese es en realidad un buen momento de enseñanza para cómo funciona el cuerpo rígido de la unidad. Entonces, realmente depende de ti si quieres tener esta configuración puesta. que es un poco más intensivo tener un control continuo, sí creo. Pero en realidad es en general algo que me gusta agregar a mis juegos. Entonces, en resumen, básicamente acabamos de agregar en nuestro objeto Player, tenemos un renderizado de sprites aquí mismo Hemos agregado un colisionador para decirle a Unity que es un objeto en el espacio Tenemos nuestro cuerpo rígido por aquí también, que hemos cambiado el arrastre angular. Hemos establecido la detección de colisión en continua debido a esa cosa que descubrimos accidentalmente y congelamos la rotación Z. Y estas son en realidad todas las cosas puestas a punto que vamos a necesitar hacer para empezar a hacer nuestro jugador. Ahora mismo básicamente tenemos una plataforma, un juego, pero en realidad no puedes jugarlo, solo puedes caerte. Entonces, lo que vamos a comenzar en el próximo episodio es básicamente agregar nuestro guión de movimiento para que nuestro jugador pueda saltar y caer y moverse de izquierda y derecha y todo lo demás que necesitemos. Así que vamos a empezar con la codificación en el próximo episodio, pero ahora mismo, deberías tener tu escena puesta prácticamente exactamente como la mía. 4. 3. Cómo agregar movimiento del jugador: Hola, y bienvenidos de nuevo a Unity. Ahora esta es la tercera lección de nuestro curso. Hasta ahora, lo que hemos agregado es un objeto jugador que puede caer y chocar con tres objetos de piso que creamos antes de eso Pero en realidad no tenemos un juego todavía. Lo que realmente tenemos es una demostración de física increíblemente simple. Cae y se detiene ahí. Pero esto no es lo más interesante. Y para hacerlo más interesante, lo que vamos a añadir es un guión que básicamente va a permitir que el jugador se mueva y básicamente juegue nuestro juego. Porque sin guión realmente no tenemos un juego porque realmente no tenemos ninguna manera de influir en el resultado, que es todo el punto Entonces, para comenzar, primero vamos a ir a esta carpeta de Activos por aquí. Y dependiendo de si ya te han portado archivos, si has estado siguiendo, deberías parecerte más o menos exactamente como mío con una sola carpeta de escenas. Y dentro de la escena tenemos nuestra escena por aquí que se llama Sample Scene. Ahora voy a volver a la carpeta Activos y en realidad voy a escribir click y vaya Crear nueva carpeta y llamarla scripts. Y aquí es donde voy a poner cada pieza de código que escribo para este proyecto. No tienes que seguirlo exactamente como yo. Así es como me gusta ordenar mis guiones y mi carpeta para mi juego, así que voy a hacer doble clic sobre eso. Y ahora voy a empezar a hacer mi primer guión de C Sharp. Ahora bien, si nunca antes has codificado en C Sharp, entonces obviamente vas a querer ver este video completo. Si has codificado C sharp y no necesitas tanta ayuda, entonces puedes seguir adelante y escribir tu propio guión de movimiento. Pero voy a estar escribiendo uno bastante sencillo solo para introducir la idea. Y entonces podríamos cambiarlo a medida que avanzamos. Voy a escribir Click y voy a ir a Crear C guión agudo y lo voy a llamar movimiento jugador. En el momento en que lo he hecho, podemos hacer clic en el guión y verlo en modo de vista previa. Por aquí podemos ver ahora mismo tenemos una clase que fue hecha para nosotros y tenemos dos vacíos que son como métodos Te voy a explicar todo esto. Realmente no necesitas preocuparte demasiado por la terminología de codificación, sino básicamente simplemente seguir adelante. Y deberías familiarizarte mucho más con C sharp a medida que codificamos cada vez más. Pero voy a estar explicando todo, así que no te preocupes. Sigamos adelante y hagamos doble clic en eso para abrirlo. Voy a estar usando Visual Studio como mi IDE. Lo que es un IDE, es que puedes pensarlo como un editor de código, como usarías Word o Google Docs para editar ensayos Esto es lo que usaste para editar código. Puedes usar el que quieras, pero sí te recomiendo Visual Studio. Estoy usando una versión bastante antigua, pero prácticamente cualquiera de ellos son realmente buenos, especialmente para Unity. inmediato, ábrelo, puede parecer un poco confuso, como ¿qué son todas estas palabras y qué significan los diferentes colores? Como dije, hasta ahora no te preocupes demasiado por todo. Voy a explicar todas las cosas importantes en la parte superior que tenemos. Usando. Sin entrar demasiado en la terminología de realmente lo que esto significa, piénsalo como si estuviéramos diciéndole la unidad qué partes de la unidad queremos usar. Entonces, si quisiéramos usar algo que estuviera basado en la interfaz de usuario, tendríamos que agregar una nueva línea por aquí que diga usar Unity Engine. Básicamente, esto nos está diciendo, bien, estas son las partes de Unidad que necesito. Estos predeterminados en realidad van a estar bastante bien para la mayoría de nuestros scripts que vamos a escribir. Y si necesitamos agregar uno diferente, obviamente te lo diré mientras escribo el guión porque estarás escribiendo conmigo, así que no te preocupes demasiado por eso. Debajo de aquí está nuestra clase pública. Nuevamente, no te preocupes demasiado por lo que es exactamente una clase. Pero puedes pensar en esto como un contenedor para todo nuestro código. Todo esto es terminología de codificación , que si realmente quieres, puedes ir a investigar en Internet y entender exactamente cuáles son las definiciones para todo ello. Pero no voy a estar diciendo demasiado tiempo sobre eso en este curso porque realmente no es tan importante para el desarrollo de Unity. lo que realmente nos vamos a centrar es más en cómo desarrollar juegos. Y realmente no necesitas poder definir estos diferentes conceptos, no solo necesitas saber cómo poder codificar. Obviamente, cuanto más codifiques, más descubrirás y más aprenderás sobre ellos. Pero por ahora, no te preocupes demasiado por ellos porque puede ser bastante intimidante tener que aprender todo ese tipo de cosas de memoria en este momento Y realmente no es tan importante para nosotros. Dicho esto, hay algunas cosas que hay que repasar. En primer lugar, se trata de un comentario. Y un comentario es básicamente como pieza de código que en realidad no es código en absoluto. Es como una línea para decirle a alguien que está leyendo el código, qué es lo que antes se denotan estas dos barras hacia adelante con estas dos barras hacia adelante, si lo pones así, puedes escribir lo que quieras y el IDE o el editor lo sabrán Este no es un código que deba ejecutarse. En realidad no tiene que descifrarlo. ¿Qué significa esta afirmación? Es sólo un comentario. Se trata comentarios que están escritos por Unity. Para que nos expliquemos cuáles son estos dos vacíos diferentes, dice que start se llama antes del primer fotograma, update y update se llama una vez por fotograma Ahora estos dos vacíos, lo último que quiero mencionar son como métodos Se puede pensar en métodos como secciones de nuestro código que podemos llamar en ciertos momentos. Ahora mismo hemos cargado en nuestro código. Este es nuestro programa masivo. Esta es una sección de nuestro código a la que vamos a llamar antes de la primera actualización de fotogramas. Esta es una sección de nuestro código a la que vamos a llamar a cada fotograma. Y obviamente todo esto lo hace Unity para nosotros cuando creamos nuestros propios métodos. Más adelante vamos a tener que elegir cuándo llamarlos. Pero estos son los dos métodos de los que básicamente vamos a construir todo nuestro código. Obviamente, el método start va a correr el minuto en que Unity ejecute este código, antes de que se reproduzca el primer frame, podemos escribir algunas cosas aquí y decir, bien, esto, hacer esto, hacer esto, y Unity lo hará. Y este código de aquí se va a ejecutar cada fotograma, cada fotograma individual. Esto se va a llamar. Si digo imprimir un número, cada fotograma, va a imprimir ese número. Y si digo imprimir un número aquí, lo va a imprimir una vez antes de que comience el juego, y entonces ya no va a hacer más. Eso debería ser bastante rápido y tal vez un poco confuso para ti, pero ojalá los conceptos básicos tengan sentido. Y como dije, no te preocupes demasiado por los detalles a medida que sigas, lo entenderás cada vez más Y si al principio parece un poco intimidante, no te preocupes, más adelante será más fácil Pero en términos de comenzar con la codificación real, primero comencemos por ir aquí a la cima y crear lo que se llama una variable. Ahora una variable es como un espacio de almacenamiento en código, así que vamos a crear una variable, llamémosla velocidad de movimiento. Y entonces ese es un espacio de almacenamiento donde cada vez que quiero acceder a lo rápido que debe moverse el jugador, voy a mirar en esa variable y ver, bien, lo que se almacena aquí. Tienes diferentes tipos de variables. Sólo voy a cubrir algunos brevemente y ahora vamos a empezar a la codificación real. Pero básicamente hay números enteros que son números. Hay cadenas que son como palabras o texto. También hay caracteres que son letras simples. Y entonces tienes booleanos que son verdaderos o falsos. Por último, tienes flotadores que básicamente son como decimales, así que tampoco te preocupes por demasiado esos Por el momento, como dije, todo esto va a venir de manera más natural. Pero solo quería darte una especie de descripción básica de todos los conceptos básicos de codificación que vas a necesitar para esta lección. Para empezar, vamos a crear nuestra primera variable, y vamos a llamarla pública, lo que básicamente significa que puede ser accedida por cualquier cosa en todo este script flotante. Y lo vamos a llamar velocidad de jugador. Entonces vamos a agregar un punto y coma al final. Esta velocidad de jugador público la vamos a utilizar para determinar qué tan rápido debe ir nuestro jugador. Vamos a crear uno nuevo. Flotador público, otro flotador público, vamos a llamarlo altura de salto. Ahora básicamente lo que le hemos dicho al IDE o dicho a Unity más bien, es que queremos un público para que pueda ser accedido por cualquier cosa en el script. Tampoco te preocupes por estos demasiado por el momento, pero solo copia a lo largo como lo hago flotar, lo que significa que es un número decimal y así es como se llama. La razón por la que en realidad estamos usando public es para que podamos acceder a él en los editores de Unity. Si sigo adelante y arrastro este script a un objeto, podré verlo en el editor de Unity, razón por la que estoy usando public. Pero solo sigue por ahora y haz exactamente lo que estoy haciendo. Y todo debería tener sentido porque como dije, aunque parezca un poco intimidante al principio, va a ser mucho más fácil Ahora, antes de seguir adelante, hay algunas cosas más que necesito agregar en la parte superior aquí. Primero cuatro va a ser una referencia a los componentes que hemos agregado a nuestro objeto. Agregamos un cuerpo rígido que básicamente dice, bueno, obedecer las leyes de la física, pero básicamente necesitamos poder acceder a ese cuerpo rígido en nuestros códigos. Voy a crear el cuerpo rígido público dos D y llamarlo RB. Esto básicamente va a decir, bien, ahora tengo una referencia a ese cuerpo rígido para poder efectuarlo. La forma en que vamos a crear movimiento es que vamos a estar cambiando la velocidad de mi cuerpo. Entonces voy a decir cuando haga clic en esta tecla hacia abajo, haga que se mueva así de rápido en esta dirección. Para ello obviamente necesitamos una referencia al componente físico de mi objeto, que es este cuerpo rígido. Una vez que lo he hecho, tengo prácticamente todo lo que necesito para comenzar a codificar mi script de movimiento muy básico. Voy a agregar una cosa más debajo de él, un lingote público, lo que significa un verdadero o falso Se llama toro en C sharp, y vamos a llamarlo está conectado a tierra. Esto básicamente nos va a decir ¿estamos en el suelo o no? Ahora, en el momento en que hayas hecho estas cuatro variables y esta referencia a este componente de aquí, tenemos todo lo que necesitamos para comenzar a codificar nuestro juego. Lo primero que voy a hacer es que voy a crear un nuevo vacío. Y este vacío se va a llamar actualización fija. Ahora bien, este es en realidad otro vacío que es creado automáticamente para nosotros por Unity. Es como actualización, solo está arreglada. La actualización no se basa en la velocidad de su computadora. Actualización se llama cada fotograma, ¿verdad? Obviamente, si tienes una computadora rápida, eso se va a llamar mucho más rápido. Si tienes una computadora lenta, la actualización fija se llama en cambio a un intervalo muy, muy corto. Entonces, más o menos tanto como la actualización está en la mayoría de las computadoras, obviamente, tienes una computadora súper rápida, podría ser un poco más lenta. Si tienes una computadora súper lenta, podría ser un poco más rápida. Pero es un buen método para poner física, lógica y otras cosas así en tu juego. Porque no quieres que alguien que tenga una computadora más rápida pueda hacer más en tu juego que alguien que tiene una computadora lenta. Por ejemplo, no querrías que caigan más rápido. Vamos a estar usando una forma general de actualización. Todavía se llama prácticamente a todos los fotogramas, se puede pensar en ello como lo mismo, pero es simplemente una buena convención para hacer eso. Ahora vamos a empezar a codificar el movimiento real para nuestro juego dentro de esta actualización fija, sigue como yo. Lo primero que voy a hacer es que voy a crear una nueva variable y la voy a llamar x. Y en realidad puedo hacerlo simplemente escribiendo float x. La diferencia entre la variable aquí arriba en la variable de aquí arriba es que La diferencia entre la variable aquí arriba en la variable de aquí arriba a esta variable se accede por todo en el script. Todos estos lugares a los que llamamos código pueden hablar de estas variables. Pero dentro de uno de estos, si creo una variable a la que solo se puede acceder dentro de esta. Si entro en actualización y trato de hablar de x, no va a saber de qué estoy hablando, pero dentro de actualización fija lo hará. Y eso está bien para nuestros propósitos porque en realidad solo necesitamos que este float x esté dentro de actualización fija va a ir igual a entrada, obtener eje raw, abrir paréntesis, comillas dobles, y luego escriba la palabra horizontal Lo que esto básicamente va a hacer es que es otra característica de Unity. Básicamente nos va a permitir simplificar bastante nuestro movimiento porque en vez de decir, bien, si el jugador está sosteniendo esta tecla, haz esto. Si están sosteniendo esta llave, hágalo. Lo que estamos diciendo aquí es una variable creativa llamada x. Es tipo float. Y para lo que esta variable va a ser utilizada es almacenar si el jugador está manteniendo presionadas ciertas teclas. Lo que hace esta línea de aquí, entrada obtener eje horizontal, es que dice a la unidad. Si el minuto ejecuta este código, el jugador mantiene presionada la tecla de flecha derecha o la tecla D para SD, luego ponga un valor de uno en x Si mantiene presionada la tecla A o la flecha izquierda, ponga un valor de uno negativo en. Y si no están manteniendo pulsada ninguna de esas llaves, entonces ponga un valor de cero. Entonces puedes ver básicamente lo que esto va a hacer es cada fotograma que va a decir, bien, ¿están aguantando hacia adelante? Si es así, haz esta. ¿Están sujetando hacia atrás? Si es así, haz de este menos uno. ¿No están tocando nada? ¿Bien? Haz que este cero. Y te puedes imaginar cómo esto va a ser útil para nuestro juego, porque esto básicamente nos va a permitir que cada cuadro pueda verificar si el jugador quiere que nos movamos o si debemos seguir moviéndonos o si debemos movernos hacia atrás, etcétera, etcétera Esta es la primera línea de código para nuestro script. Y debajo de esto vamos a escribir otra línea de código que va a decir R B referencia a nuestra velocidad corporal de cresta. Así que vamos a editar básicamente qué tan rápido nos estamos moviendo es igual al vector dos. Ahora bien, esto no es masivamente importante, es básicamente un vector, dos es un vector de dos componentes Digo, bien, quiero mi velocidad, obviamente velocidad, voy a tener una velocidad x y una velocidad y. Y quiero que esto sea, voy a asignarle cosas a esto usando vector. Si asigné 1.1 dice, bien, haz el x uno y haz el y uno. Si lo pongo 2.1 dice hacer el x dos y el y uno. Esto es básicamente, como dije, no es súper importante. Piense en ello como un espacio de almacenamiento. Si sabes lo que es un vector, entonces estoy seguro de que tiene mucho sentido. Pero si no te has encontrado con un vector o no has hecho mucha física, entonces solo piensa en ello como un espacio de almacenamiento para dos números o dos valores más bien. Ahora mismo estoy diciendo, bien, quiero que mi velocidad RB es este nuevo vector dos, Y voy a tener que poner en una x y una y porque obviamente tengo x velocidad horizontal y una velocidad y vertical. Voy a hacer que mi x velocidad sea igual a x y voy a separarlos por una coma y voy a hacer mi velocidad y velocidad RB velocidad Y. velocidad RB velocidad Y. Eso es básicamente como decir, bien, tomar la velocidad de mi cuerpo rígido y hacer la velocidad x x y hacer que la velocidad y la velocidad y, la velocidad y no cambie Si hiciera a este RB hacer punto de velocidad x, esta línea no haría absolutamente nada. Porque es dicho básico, bien, toma la velocidad del cuerpo rígido y haz que sea lo que es la velocidad del cuerpo rígido, lo que obviamente no tiene ningún efecto. Y eso es lo que quiero para el eje y, porque no quiero que el jugador esté a mitad de aire cayendo. Y luego hago clic en la flecha derecha y de repente empiezo a moverme en línea recta. Y eso es lo que pasaría si pongo esto a cero, por ejemplo, o algún otro número. No quiero que esto cambie, pero sí quiero que esto cambie porque quiero poder influir en dónde se mueve el jugador a izquierda y derecha. Esto es en realidad más o menos las dos líneas de código que necesitamos para construir el movimiento más rudimentario posible Si vuelvo a la Unidad y voy a mi objeto de juego por aquí. Una vez que haya terminado de recargar mi guión, voy aquí a mi objeto de juego y arrastre esto aquí Vamos a moverlo hacia abajo hasta el fondo. Y vamos a arrastrarlo por ahí. Podemos ver que tengo mi guión increíblemente simple y voy a arrastrar este cuerpo rígido por aquí que mi guión sepa dónde está el cuerpo rígido. Entonces estoy hablando, porque estoy hablando de ello, pero en realidad no lo he vinculado. Así es como lo vamos a vincular en Unity. Es una de las formas más fáciles, y en realidad no tengo que cambiar estas variables porque no las he usado en absoluto en mi guión. Pero ya verás si sigo adelante y hago clic en play. En este momento caigo como normal. Pero si hago clic en el, todas las teclas, todas las teclas de flecha también, puedo moverme igual que podría hacerlo en cualquier otra plataforma. Nuevamente, obviamente este no es un guión de movimiento muy bueno porque no puedo saltar, no puedo hacer nada. De hecho, ni siquiera puedo atravesar esta cosa sin caer en el abismo. Si lo intento, sólo me voy a caer. Entonces no es un guión de movimiento muy bueno porque no me estoy moviendo lo suficientemente rápido, no puedo saltar. Pero esta es la base de mi guión de movimiento. He dicho, bueno, dependiendo de si estoy sosteniendo ciertas teclas, establecer este valor y luego asignar ese valor a la velocidad de mi cuerpo rígido. Así que asegúrate de que me estoy moviendo en la dirección que ese valor debería hacerme mover. Pero obviamente queremos que sea un poco más interesante. Entonces comencemos multiplicando esto por la velocidad del jugador. Y aquí donde vamos a empezar a usar nuestras variables. Ahora esto nos va a permitir determinar qué tan rápido se mueve el jugador en base a qué tan rápido se mueve el jugador esta variable de velocidad de jugadores. Y en realidad voy a eliminar este tablero de inicio porque en realidad no voy a necesitarlo ahora mismo. Podría agregarlo más tarde dependiendo de cómo edite el guión. Pero por ahora, en realidad está bien tenerlo como es ahora. Ahora en realidad hay algunos cambios que quiero hacer. Esto es solo para ilustrar cómo vamos a estar construyendo nuestro guión movido. Estaba tratando de explicar cómo funcionan las diferentes variables y cómo funciona, pero queremos que esto sea un poco mejor. Entonces lo primero que vamos a hacer es ir a la cima, y vamos a crear una nueva carroza pública. Llámalo x, así que en realidad no vamos a estar refiriéndonos a una variable justo dentro de este método. Queremos que sea una variable a la que se pueda acceder en cualquier lugar dentro del script. Y luego vamos a seguir adelante y de hecho mover este código de actualización fijo al bloque de actualización. Y lo que eso va a hacer es básicamente, en lugar de basar este valor en un cierto intervalo, vamos a querer actualizar este cada fotograma Lo cual es una forma mucho mejor de codificar. Se puede pensar como regla general, hay que seguir cualquier código que se base en la entrada o lo que hacen los jugadores debe ir en actualización. Cualquier código que esté basado en la física o mover cosas en base a eso debería ir en actualización fija. Porque esto básicamente nos va a permitir decir, bien, si tienes una computadora más rápida, claro, deberías poder reaccionar más rápido. Pero entonces vas a poder moverte a la misma velocidad que alguien con una computadora más lenta porque eso es justo, sobreexagerando mucho lo mucho que esto tiene un efecto Porque te prometo que podrías codificar todo tu cosa y actualizar una actualización fija. Probablemente no podrías notar una gran diferencia, pero es muy buena convención de codificación para hacer lo que estoy haciendo aquí. Dicho esto, tenemos algunas cosas más que agregar a nuestro guión solo para que sea un guión de movimiento un poco mejor. Ya nos hemos multiplicado por la velocidad del jugador, obviamente. Pero lo último que vamos a añadir es un salto, así que en realidad podemos empezar a movernos. Y voy a crear un nuevo vacío público, que es como si quisiera un nuevo bloque de código al que pueda llamar. En cierto momento, voy a llamarlo saltar dentro de este vacío público. Voy a copiar este código por aquí. Cópiala y vuelve a ponerla ahí. Y voy a decir ahora cuando salte, quiero que mi velocidad RV, así que la velocidad de mi jugador sea otro nuevo vector dos. Rb velocidad x. Esta vez no estamos cambiando la velocidad x en absoluto. Queremos que la velocidad x permanezca igual cuando saltamos. Porque obviamente no queremos saltar hacia adelante o saltar hacia atrás, solo queremos saltar cualquiera que sea la velocidad x, ponerla en lo que era. Y también obviamente no queremos que sea que tenga que ser cero. Porque entonces si estás avanzando, intentas saltar, solo vas a saltar en su lugar, mantente a cualquier velocidad que te estés moviendo. Pero queremos saltar hacia arriba, así que vamos a establecer la velocidad y a este valor. Altura de salto, que obviamente también podemos cambiar. Ahora lo que esto va a hacer es cada vez que llamamos a este vacío, vamos a cambiar nuestra velocidad y vamos a decir, bien, muévete como estabas con x, pero salta hasta donde este valor te permita. Con la velocidad y, lo que en realidad estamos diciendo es cambiar tu velocidad a algún valor. Y así eso va a hacer que te dispares, y entonces obviamente a medida que llegue la gravedad, vas a caer de nuevo al suelo. Pero eso es lo que hace el guión. Ahora bien, esto en realidad nos lleva casi al final de nuestro guión. Es increíblemente simple. Hay tres líneas de código hasta ahora, y en realidad tenemos todo lo que necesitamos para poder movernos y saltar en Unity. Si vuelvo aquí, en realidad voy a cambiar estos valores ahora mismo. Hagamos que la altura del salto sea algo así como diez. Hagamos jugar a una velocidad de cinco. Se puede ver en realidad, si me muevo y voy así, debería poder moverme y saltar. Pero falta una cosa. En realidad nunca vamos a llamar a este bloque de código. Entonces no hay manera de que me diga a mí mismo, bien, quiero llamar a este código para eso, vamos a necesitar usar otro comando de entrada. Vayamos aquí abajo. Digamos si cual, diciendo siempre y cuando esta condición sea verdadera, haga el código debajo de ella, ingrese punto obtener tecla abajo, abrir paréntesis, espacio de código clave o lo que quiera que sea De hecho voy a usar keycode porque prefiero tener SD saltando en lugar de espacio, pero puedes usar lo que quieras. Siente el juego. Entonces vamos a poner un corchete aquí y visual Studio o lo que sea que vayas a usar va a rellenar eso automáticamente. Básicamente quieres un soporte C ahí y un soporte co ahí. Y esto nos va a decir qué código hay dentro de esta declaración if, siempre y cuando esto sea cierto, siempre y cuando estés presionando la tecla, o siempre y cuando solo presiones el WK. Entonces ejecuta este código. Y todo lo que voy a querer hacer es que voy a llamar vacío a ese salto. Entonces ojalá todo esto tenga bastante sentido. Me estoy moviendo bastante rápido y aquí hay muchos conceptos, sobre todo si nunca antes has codificado, lo que puede parecer un poco intimidante Pero básicamente todo lo que tenemos en este momento es que tenemos este espacio de almacenamiento, tenemos nuestras variables que están almacenando cosas como configuraciones. Entonces estamos estableciendo este valor en función de lo que el jugador esté moviendo. Y estamos diciendo que si están presionando el Wkey, entonces llame a este código por aquí Y este código está diciendo, bien, muévete en esta dirección. Y este código de aquí, cada fotograma está diciendo moverse en esta dirección de acuerdo a lo que el jugador esté haciendo actualmente con su teclado. Entonces, como dije, puede que no parezca súper intuitivo en este momento, pero ojalá un poco de sentido lo que estamos tratando de hacer. Y si vuelvo a mi juego, podré saltar si RESTwK Pero hay un cambio más que quiero hacer Y sólo quiero poder saltar siempre y cuando esté conectado a tierra. Así que vamos a seguir adelante aquí y vamos a añadir un doble ampersand y decir que está Y eso va a decir solo mientras estemos conectados a tierra podremos ejecutar este código. Porque no quiero poder saltar en medio de ahí. Yo sólo quiero poder saltar del suelo. Y vamos a sumar en una condición más que nos va a permitir determinar si estamos conectados a tierra aquí. Vamos a decir vacío en colisión entrar dos D, si colisión, esto básicamente es decir, una vez que choquemos esos colisionadores que agregamos antes en la caja, los colisionadores van a llamar a este vacío Mientras choques, están bien. Hemos colisionado llamar a este vacío. Esta colisión está almacenando en lo que colisionamos. Vamos a decir si colisión hacer juego objeto punto comparar etiqueta va a abrir príncipes y vamos a escribir tierra Entonces vamos a decir que está fundamentado es igual a verdad. Vamos a hacer una pieza de código muy similar para salir de una colisión Copie este código exactamente excepto establecido a tierra para forzar. Ahora bien, esto puede parecer mucho, puede parecer un poco confuso sobre todo en comparación con el resto del guión, pero en realidad es muy fácil. Este vacío de aquí, al igual que update and start son llamados por Unity, es llamado por Unity. Cada vez que chocamos con algo, el motor de física se encarga de eso, entonces estamos colisionando con esta cosa y la estamos almacenando en esta colisión variable Y debajo de eso lo que estamos diciendo es, bien, si colisionamos con lo que colisionamos o más bien el colisionador con el que colisionamos Si el objeto al que está unido tiene un suelo de etiqueta, entonces quiero asegurarme de que he establecido esta variable de aquí está conectada a tierra en true, y eso me va a permitir saltar. De lo contrario, si salimos de una colisión, si salimos de un colisionador, si el colisionador del que salimos se llama tierra, quiero hacer lo mismo excepto configurarlo Lo último que tenemos que hacer antes de que realmente vayamos a probar esto es volver a nuestro juego, entrar en nuestro almacenamiento, seleccionar nuestras cosas de tres pisos, y queremos agregar esta etiqueta con conexión a tierra. Haga clic en agregar etiqueta, por aquí, haga clic en el signo más y escriba tierra. No, voy a volver a mis pisos y voy a asegurarme de que estén todos puestos a la etiqueta del suelo. Estas etiquetas son básicamente una forma si has podido identificar ciertos objetos o grupos de objetos. Todos estos objetos son parte del piso y quiero que todos sean etiqueta de tierra. Y esto me permite escribir este código por aquí que me dice cuándo he tocado el piso o no. Eso es en realidad todo lo que vamos a necesitar para hacer que nuestros juegos se muevan. Si volvemos a jugador, vemos por aquí obviamente los editamos por última vez en modo play. Entonces cambiemos estos en modo normal, se ahorra, tengo que hacer este seis, voy a hacer el salto de altura cinco. Obviamente no voy a querer cambiar ninguno de esos porque esos son atendidos en mi código. Hacemos clic en Jugador y pulsamos, veamos qué pasa. primero es lo primero, nos caemos, igual que lo hemos hecho, y aterrizamos en el suelo. Si me desplazo hacia abajo, puedo ver que mi está a tierra, es verdad, que es exactamente lo que quiero. Y si hago clic en el WK, va de falso a verdadero. Y puedo saltar. Si hago clic en el WK mid air, no funciona. Así que mi salto en realidad está funcionando muy bien. Y si me muevo de izquierda a derecha, podemos ver que es un poco rápido. Quiero que este movimiento sea cuatro, volver a mi juego. Y esto en realidad debería ser todo lo que necesitamos para un movimiento básico, la caída del scripting Y salto y obviamente puedo moverme como necesito. Ahora bien, esto podría parecer un poco tonta, y obviamente lo vamos a ajustar a medida que avanzamos Pero esto es algo básico para nuestro juego. Lo que en realidad voy a querer, basado en la plataforma que quiero, quiero que sea una velocidad un poco más rápida, un salto un poco más alto. Y en realidad voy a querer cambiar esta escala de gravedad a dos. Y tal vez necesite cambiarlos un poco más alto. Quizá tenga que hacer este ocho por aquí. Podemos ver cómo se ve eso. Se ve un poco mejor. Sé que se ve un poco desigual con este movimiento, pero es un estilo bastante retro y fácil de mover, pero en caso de que en realidad no quieras esto, y en realidad no estoy seguro de que voy a mantener esto adentro Acabo de agregarlo originalmente porque era bastante simple. En realidad hay una solución muy simple para hacer esto diferente en este momento. Se puede ver que es una cosa bastante cecina. Si no quieres eso, entonces vas a seguir adelante con nuestro código y solo vamos a eliminar esta palabra raw. Eso básicamente le va a decir a Unity, bien, no lo redondees a 10. sea algo más gradual dependiendo cuánto tiempo llevan sosteniendo la llave. Si movemos eso, podemos ver eso en acción por aquí un poco más suave basado en cómo se quiere mover. De hecho olvidé cambiarlos de nuevo, así que sigamos adelante y hagamos de esto un 6.8 y cambiemos la escala de glarity dos Si podemos volver a jugar, podemos ver que ahora tenemos un movimiento un poco más suave y hace que se vea mucho mejor. Ahora la razón por la que lo hice gobernar primero fue porque pensé que era una forma más fácil de ilustrar el concepto. Pero generalmente es mejor usar este eje que ablanda la cosa porque se ve un poco más natural Podría cambiar esto de nuevo. Podemos retocarlo, obviamente, a medida que avanzamos a lo largo de un juego Ojalá hayas estado siguiendo y hayas podido crear este script de movimiento muy sencillo y podamos saltar. Ahora ese es el final del video. Pero hay una última cosa que quiero agregar, justo mientras hemos agregado movimiento, y es un cambio increíblemente simple, todo lo que queremos hacer es que vamos a salir aquí y queremos crear un nuevo material de física. Vamos a averiguar aquí dos materiales físicos, dos D, lo vamos a llamar jugador. Y vamos a poner la fricción a cero. Esto básicamente nos va a permitir no quedarnos pegados a las paredes. No sé si viste la última vez, vamos a agregarlo a nuestro colisionador de cajas Ahora si saltamos adelante contra la pared, no nos vamos a apegar a ella. Porque lo que pasó antes fue si aterrizamos contra la pared y nos apegamos a ella, en realidad nos pegamos ahí, pero ahora volvemos a atravesar. Ese es en realidad el final. Sé que este es un video bastante largo y había bastantes cosas que estaban pasando, pero era el primer guión. Entonces obviamente son bastantes conceptos nuevos a la vez. Así que ojalá hayas seguido y ojalá hayas podido crear este script de movimiento igual que yo. Es increíblemente simple, como dije. Y ahora me ha cambiado el acceso a esto, pero podría modificarlo a medida que avanzo mi juego porque no estoy seguro de lo mucho que me gusta, pero voy a ver básicamente que ese es el juego por ahora y eso es todo lo que necesitamos tener Entonces, si has estado siguiendo a lo largo, tienes tu movimiento igual que el mío. Genial. Y voy a ver en el siguiente video donde vamos a empezar a agregar cada vez más conceptos para hacer nuestro juego una plataforma más impresionante. Pero si tienes justo donde tengo por ahora, eso es genial. 5. 4. Presentación de prefabricados: Hola, y bienvenidos de nuevo a Unity. Ahora en el último episodio, hicimos bastantes cosas. Agregamos nuestro reproductor, agregamos nuestro script de movimiento. Bueno, hicimos nuestro reproductor para que podamos saltar y agregar nuestra primera línea de código, todo nuestro guión completo. Y luego también en realidad hicimos este material de jugador justo al final. Espero que hayas podido seguirlo todo y llegar al escenario que estoy en mi juego. Ahora si no, y el tuyo se ve un poco diferente, solo te recomiendo tal vez volver y volver a verlo tal vez una o dos veces, solo para que puedas seguir y asegurarte de que tienes todo como yo ahora mismo Obviamente, como dije, mi guión va a estar adjunto a cada video. Y prácticamente todos los archivos que hago junto a este curso van a ser adjuntos en los respectivos videos. Para que puedas seguir adelante y descargarla. Si el tuyo no está funcionando, tal vez vea dónde tu código es diferente mío o qué estás haciendo de manera diferente. Y obviamente usar mis archivos debería hacer que funcione completamente bien. Así que solo sigue adelante y no te dejes intimidar demasiado por el ritmo de las cosas Y podrías volver a ver las cosas y usar los archivos y deberías poder seguirlo y tener todo funcionando en poco tiempo Así que no te desanimes. El desarrollo de juegos es duro, pero si tienes todo al punto que yo hago ahora, gran trabajo. Porque en realidad hemos hecho bastante tiempo, el último episodio. Si escribes cogido a donde estoy, entonces eso es genial. Ahora, antes de comenzar con este episodio, que va a ser todo sobre prefabs, primero vamos a comenzar con solo reordenar un poco esta carpeta de activos Así que sigamos adelante y haga clic derecho. Vamos a crear una nueva carpeta. Y voy a llamar a esto misceláneo porque siempre hay como archivos aleatorios en el proyecto para los que realmente no necesitas tener su propia carpeta dedicada tener su propia carpeta dedicada, como este material de física. No vamos a estar haciendo un infierno de muchos de estos. Sólo voy a poner eso en mi carpeta Misk. Y cualquier otra cosa que venga en mi juego, voy a poner en esa carpeta Misk si no cabe en ninguna de las otras carpetas Ahora que dicho eso, vamos a necesitar crear una nueva carpeta aquí abajo también, y vamos a llamarla prefabs Vamos a adentrarnos exactamente en qué es un prefabricado y cómo logramos hacerlos en un minuto Pero por ahora, solo haz la carpeta porque vas a querer tener un espacio de almacenamiento para tus prefabs Ahora bien, ¿qué es exactamente un prefab? Hemos mencionado que estas cosas tenemos aquí arriba son objetos. Ahora, son los bloques de construcción de nuestro juego a los que vamos a asignar lógica en forma de componentes. Y eso nos va a permitir construir nuestro juego desde cero. Pero solo podemos crear estos objetos mientras estamos desarrollándonos en Unity en este momento. Como si quisiera crear un nuevo enemigo, tendría que ir por aquí y crear un nuevo objeto como este al objeto sprite, tal vez conseguir un triángulo, cambiar el color, agregar lógica a partir de ahí Pero en el desarrollo de juegos, generalmente, se quiere poder crear objetos en tiempo de ejecución. Lo que significa que mientras el juego se está ejecutando, mientras el jugador está realmente jugando, quieres poder crear y destruir objetos. Y para ello, vamos a usar prefabs. Ahora bien, si esto es un poco confuso al principio por qué tenemos que hacer esto, déjame darte un ejemplo. Digamos que tenemos un jugador y necesita poder disparar cosas. Cuando disparas algo, en realidad quieres crear un objeto bala. Quieres crear un nuevo objeto que dispare desde tu arma y viaje por la pantalla y haga ciertas cosas cuando golpea a un enemigo. Ahora la única forma, o la forma más fácil más bien de hacer esto es en realidad usando prefabs Porque básicamente te va a permitir crear un objeto en tiempo de ejecución, tu bala, que exista por su duración, y luego destruirlo. Cuando ya no lo necesites, digamos cuando golpea a un enemigo o a una pared, puedes destruir ese objeto. Por lo que solo existe por una cantidad limitada del tiempo de juego. Y voy a explicar exactamente cómo funcionan, cómo puedes crear estos prefabricados y cómo se pueden usar para traer objetos a tus juegos en un minuto Pero ahora mismo, todo lo que necesitas saber es que los prefabricados se utilizan para hacer objetos Entonces, ¿cómo usamos exactamente los prefabricados para hacer objetos? Bueno, lo iniciamos igual que lo haríamos con cualquier otra cosa. Pasamos aquí a la jerarquía y hacemos clic derecho en Crear al objeto. Y voy a hacer, el primer prefabricado que voy a hacer es un pico Entonces el enemigo tiene algo en lo que pueden caer y morir al triángulo del objeto sprite Sólo para hacer el primer tipo de enemigo del juego, voy a llamar a este pico. Adelante y bájala un poquito. Digamos 0.8 en la x e y, y voy a cambiar su color a rojo para que sepamos que es un enemigo. Entonces ahora tenemos a nuestro primer enemigo. Obviamente, esto no está ni de cerca hecho. Hay algunas otras cosas que tenemos que agregar. Primero, lo primero que voy a hacer es que voy a cambiar esta etiqueta, igual que hice con el suelo. Voy a hacer clic en Agregar etiqueta. Y voy a convertirlo en una etiqueta enemiga. Y no vamos a usar esto de inmediato, pero esto va a ser útil después. Así que asegúrate de no dejar este paso por ahora. Lo siguiente que voy a hacer es que voy a agregar un tipo de alida. Si busco a Alida, verás que tengo un montón de Kaliders Pero el que mejor se ajusta a este es un polígono Alider, que obviamente es como cuatro un triángulo Puedes ver si te desplazas hacia abajo, hay prácticamente colisionadores para cada tipo de objeto que puedas tener Obviamente evitar los que no son dos D, como un colisionador de esfera o un colisionador de caja, o un colisionador cápsula, porque los dos D son lo que vamos a usar Pero este colisionador poligonal solo tiene una versión dos D, así que no te preocupes, hay tres colisionadores triangulares o piramidales D, así que realmente no puedes equivocarte Pero lo que hemos hecho ahora es que hemos agregado nuestro colisionador de polígonos Y en realidad antes de que me olvide, también quiero hacer de esto un detonante ahora. Esto no es increíblemente importante el momento porque en realidad solo vamos a sumar nuestra lógica enemiga y el hecho que puedes morir cuando golpeas estos más adelante. Pero estos son solo una especie de pasos que quieres hacer ahora para que puedas configurar correctamente a tu enemigo. Entonces queremos nombrarlo, estamos nombrando. No es tan importante, sino que solo es útil. Queremos asegurarnos de que hemos puesto la etiqueta. Queremos agregar un colisionador, y queremos convertirlo en un colisionador disparador Entonces puedes ver ahora si hacemos clic en play, obviamente no va a pasar nada cuando entremos en eso. Pero deberías poder ver que en realidad somos capaces de atravesar, que es algo así como lo que queremos porque no queremos que este objeto sea algo que pueda existir en el espacio, más que sea como una señal de que cuando lo golpeo puedo recibir daños o algo así. Obviamente no quieres en realidad no poder superarlo. Porque si estás corriendo y golpeas un objeto, quieres poder atravesarlo y recibir daños, pero no parar y como que no puedas atravesar. Entonces esa es toda la configuración que necesitamos hacer por nuestro objeto en este momento. Pero asegúrate de que has seguido y has agregado el colisionador de seguido y has agregado polígonos y lo cambiaste a la etiqueta enemiga Ahora bien, esto es en realidad lo que vamos a usar para hacer nuestro primer prefabricado. Entonces hagamos doble clic en esto. Voy a llevármelo por aquí. Haga clic en el objeto. Voy a arrastrarlo hacia abajo a mi carpeta Activos. Y lo que eso va a hacer es que va a crear este nuevo archivo y se va a llamar ácido prefabricado de espiga Y se puede ver por aquí, en realidad cambia a azul. Ahora lo que es este prefabricado, se puede pensar en ello como una plantilla de objeto Entonces lo que básicamente estoy haciendo aquí es que estoy diciendo, bien, tengo este objeto que quiero hacer como una plantilla o una especie de sello. Y así puedo hacer copias de ese objeto y llevarlas a mi juego. Esta es una especie de plantilla para el objeto que estoy creando. Entonces puedo ir en algún código y puedo decir, bien, desovar en un pico Y sabe engendrar en este objeto específico con este sprite específico y este polígono específico y prácticamente todas las demás cualidades que acabo de agregar ahora mismo, sabe que a eso me refiero cuando quiero desovar Entonces voy a seguir adelante y eliminar ese extra por ahora. Y en realidad también voy a seguir adelante y eliminar esto de mi escena ahora. No te preocupes, porque esto en realidad no se deshace del pico. Podemos ver que todavía está aquí abajo en prefabs, y si hago doble clic en él, puedo editar el prefab real Entonces aquí estoy editando la plantilla real para el prefab. Si arrastro un prefab adentro, es instanciar ese objeto o crear ese objeto Crear una instancia de ese prefab es lo que se llama. Si cambio las cosas en este prefab aquí en el juego, asegúrate de tener en cuenta que en realidad no anula el prefab Está cambiando esta instancia específica de un prefab. Así que ya lo he engendrado en. Puedo hacer lo que quiera con este. Pero no va a cambiar el hecho que cuando genere otro, va a ser exactamente lo mismo Si quiero cambiar el sello real o la plantilla real, tengo que hacer eso aquí. Porque si hago esto, por ejemplo, naranja, se puede ver ahora cada vez que desove en estos prefabricados, son También tenga en cuenta que esta prefabricada, que no cambiamos, está vinculada al archivo original En el momento en que le hagamos un cambio, el enlace cambia porque he cambiado este color. Si sigo adelante y cambio esto de nuevo a rojo, podemos ver que el verde y el amarillo se van a quedar verdes y amarillos. Pero los que no he cambiado son rojos. Pero otras cantidades de ella que no he cambiado serán efectivas. Por ejemplo, si hago la escala 0.85 eso no es 85, hazla un poco más grande Podemos ver que todos estos prefabricados en realidad se hicieron bastante más grandes, pero este no lo hizo, porque este ya habíamos cambiado Era 214-41-2616 Y si vuelvo aquí y vuelvo a cambiar esto a ocho, podemos ver que permanece en 214-41-2616 Porque tenemos básicamente, al minuto que cambias cierta cualidad en este prefab, minuto que cambias cierta cualidad en este si vuelvo aquí y vuelvo a cambiar esto a ocho, podemos ver que permanece en 214-41-2616 Porque tenemos básicamente, al minuto que cambias cierta cualidad en este prefab, es su propio prefab. Y así no vas a quedar anulado por este original prefabricado que se denota con esta pequeña línea azul Estas son las cosas que he cambiado en la prefabricada. Eso es algo que hay que tener en cuenta, no es súper importante. Pero solo tenga en cuenta que si quiere cambiar su prefabricada real, tiene que hacerlo por aquí Así que voy a seguir adelante y de hecho borrar todos esos picos por ahora. Y voy a empezar antes de empezar a hacer algunos prefabricados más Déjame hacer uno más simple, crear dos el objeto y voy a hacer un círculo. Y esto va a ser otro enemigo más adelante, va a ser una bola de púas. Verás cuando agreguemos picos y sprites y todo, pero cambiemos esto a rojo también Agreguemos un colisionador circular. Y asegurémonos de que tiene la etiqueta enemiga. Asegúrate de que eso sea un detonante, eso es todo lo que necesitamos. También podemos hacer esto tal vez un poco más pequeño. Esto es en realidad todo lo que necesitamos para hacer nuestros nuevos prefabricados Entonces volvamos a arrastrarlo hacia abajo. Ya podemos ver que tenemos nuestros dos prefabricados. Voy a borrar esto. De hecho voy a cambiar el nombre de esto a bola de espiga. Ahora bien, si hacemos doble clic, podemos ver que tenemos nuestro pico y nuestra bola de espiga, ambos son enemigos y ambos son rojos. Y ambos tienen colisionadores conectados, que son disparadores Así que no se verán afectados tanto por el espacio, Pero van a dejar saber al motor del juego , bien, he golpeado algo. Es importante tener en cuenta que otros colisionadores también lo hacen Es solo que también tienen la funcionalidad añadida de existir también como objeto en el espacio-tiempo lo que puede influir en la física. Volvamos a estos prefabricados y asegurémonos de que todos estén prácticamente establecidos exactamente como queremos que sean. Porque ahora lo que vamos a hacer es vamos a crear una nueva prefabricada, y esa va a ser nuestra tesela de mapa La razón por la que estamos creando estos prefabricados es porque realmente vamos a empezar a crear nuestro script de generación de mapas Ahora mismo tenemos un jugador y tenemos tres bloqueos de los que puede saltar. Pero eso es algo así. No tenemos un juego infinito. No tenemos nada a lo que podamos movernos. Solo tenemos tres cosas, y eso es algo así como todo el juego. Entonces, aunque los he llenado de todo tipo de obstáculos interesantes, solo hay tres de ellos. Y obviamente queremos que el juego sea como que continúe y tenga el mayor número posible. Entonces para ello vamos a tener que crear un pre fab con este objeto piso y poner lo que queramos sobre él. Y entonces vamos a querer escribir código que va a generar eso en Ahora, voy a empezar a hacer precisamente eso, pero antes de hacerlo, permítanme simplemente decir un descargo de responsabilidad rápidamente. La forma en que vamos a hacer esto es que vamos a crear un montón de baldosas diferentes. Tipo de pensar en ellos como plataformas en el juego, y puedes hacer la especie de tantas como quieras. Llegaremos a eso cuando lo codifiquemos más adelante. Pero básicamente estas van a ser la lista completa de posibles fichas en las que pueda aparecer el juego Si solo haces uno con un solo pico, tu juego solo va a ser un montón de cosas con un montón de picos enteros. Eso es. Pero si hacemos uno con una espiga, uno con dos pinchos, tal vez uno con tres picos, uno con un pico y una bola de espiga, uno con dos bolas de espiga. Cuanto más añadas, más variado se va a conseguir tu juego. Y verás a medida que añadimos más enemigos y cosas más emocionantes, podemos hacer plataformas más variadas y hacer un juego más interesante. Pero me estoy adelantando. Sólo voy a empezar haciendo uno básico y mostrándote cómo puedo engendrarlo para hacer un piso pre fab Voy a hacer exactamente lo mismo que hice antes. Voy a hacer esto un poco más grande, solo creo que se trata de un buen tamaño para una plataforma. Voy a arrastrarlo hacia abajo y ahora podemos ver que tengo un nuevo prefabricado llamado piso dos Voy a nombrar esto a baldosas de piso uno. Y esta va a ser mi baldosa básica. Si hago doble clic en esto ahora puedes ver que puedo acceder a él dentro de mi editor prefab y hecho puedo personalizar este deseo exactamente alto Ahora como dije, lo que esto es que van a ser las fichas que vamos a estar desove en nuestro juego ahora mismo Es solo una ficha básica, no hay enemigos, no hay obstáculos, es solo una ficha. Entonces vamos a hacerlo un poco más interesante. Voy a empezar sumando un pico. Déjame arrastrar desde mi prefijo hasta este prefabittor. Podemos ver ahora que hemos agregado en, esto es lo que se llama un objeto hijo. Está vinculado al objeto original y si muevo el objeto original, se mueve con él. Lo vimos antes cuando almacenamos todos nuestros defectos dentro del objeto padre de almacenamiento. puede pensar en ello como el objeto mayor o como el objeto de carpeta de aquí. Se llama el objeto padre. Y estamos agregando un pico dentro de nuestro objeto padre. Voy a poner una paca ahí abajo. Está bastante bien centrado. No importa demasiado hacer que esto se vea demasiado bien, porque obviamente vamos a agregar sprites y todo lo demás más adelante Pero esto es marcador de posición, pero voy a copiar esto, y voy a poner otro por ahí Muévelo ligeramente hacia abajo. Ese es prácticamente nuestro primer objeto terminado y creado. Obviamente, no hemos creado ningún efecto de muerte ni ningún sistema de salud. No va a hacer mucho ahora. Pero si volvemos a nuestro juego y vemos nuestra baldosa, podemos ver que en realidad está vinculada a nuestro objeto y ha creado exactamente lo que queríamos cuando jugamos el juego. Vamos a escribir un guión que va a decir, bien, poner uno ahí, y poner uno ahí, y poner uno ahí. Podemos ver que tenemos una plataforma, un juego que empieza a formarse. Si pateamos, podemos movernos y podemos fingir que estamos jugando el juego. Podemos saltar por encima de esa plataforma y saltar por encima de ésta. Obviamente, ahí habríamos muerto. Pero se obtiene la esencia. Nuestro juego no va a ser tan duro, no te preocupes. Pero así va a ser como vamos a estar usando estos objetos para jugar nuestro juego y hacer nuestro interesante mapa. Entonces lo que voy a hacer con el resto de este video es simplemente hacer un par de prefabs más No tienes que seguir exactamente lo que estoy haciendo, puedes hacerlos más o menos como quieras. Yo recomendaría seguir mi bola de espiga y espiga como nuestros enemigos porque vamos a agregar algunos sprites más adelante Y si quieres usar mis sprites, ya tengo esos sprites creados. Entonces, si inventas algún otro enemigo, entonces vas a tener que hacer tu propio sprite o tener que idear un plan alternativo Pero si quieres hacer el juego exactamente como yo lo estoy haciendo, tal vez quédate con estos dos solo por ahora. Obviamente, una vez que hayas ido más allá en el curso, tal vez puedas empezar a agregar tus propios enemigos y hacer tus propias fichas. Pero sobre todo si es la primera vez que usas Unity, sigue con estos dos objetos tanto como sea posible. Pero dicho eso, puedes hacer las fichas que quieras, así no tienes que hacer dos, puedes hacer tres. Obviamente, hazlos todos posibles, porque quieres que algo en tu juego sea imposible. Pero puedes ser creativo y hacer diferentes azulejos tanto como quieras. También puedes hacer tantos azulejos como quieras. Cuanto más en realidad, como dije, tienes mejor. Porque significa que el juego va a ser más variado. Obviamente, quieres tener más mosaicos, que posiblemente puedas tener que empezar copiando esto, pegándolo hacia abajo. Y voy a llamar a esta baldosa dos. De hecho voy a hacer eso un montón de veces porque voy a empezar haciendo ocho fichas por aquí. Tengo ocho en realidad hacer diez ahora mismo. Tienen nombres raros y obviamente son todos iguales. Pero ahora voy a editarlos. Entonces tengo piso de baldosa uno, baldosa de piso dos. Voy a hacer de esta baldosa tres. Esto por supuesto, piso de baldosas cuatro. Y así sucesivamente y así sucesivamente, todo el camino hasta la baldosa diez. Mira, ahora tengo mis diez baldosas. Ahora mientras hago esto, en realidad voy a hacer que mi juego sea aún más ordenado. Voy a hacer click derecho y voy a hacer una nueva carpeta. Voy a llamar a esto baldosas de un piso. De hecho voy a poner todos estos aquí, arrastrarlos, y voy a hacer doble clic en cada uno. Y luego cuando quiera editarlos, obviamente si quiero agregar enemigos, tengo que salir enseguida, volver a los prefabricados y agregarlos así Pero significa que todas mis baldosas están guardadas aquí para que pueda hacer un seguimiento de ellas y saber dónde están todas. Así que voy a quedarme con mi baldosa como la tenía. Creo que eso es bastante bueno. Mi baldosa dos, voy a hacer una bastante simple, solo va a tener una sola paca en el medio. Y luego piso de baldosas tres, voy a tener una doble espiga cerca del final. Como dije, puedes hacer lo que quieras con estos. No tiene que ser exactamente lo que estoy haciendo. Déjame moverlo un poco hacia abajo, pero estos son los tres primeros. Voy a hacer baldosas de piso por allá, agregar el doble pico, Luego piso azulejo cuatro, voy a empezar a agregar en algo más interesante. Entonces me voy a quitar esa y voy a sumar una bola de espiga por allá. Creo que se ve bastante genial. Eso es para azulejo. Piso. Azulejo cinco. Creo que voy a tener un doble pico al principio. Entonces tal vez agreguemos una bola de espiga por aquí cerca del final. Como dije, realmente puedes hacer lo que quieras con estos. Puedes seguir adelante si quieres, pero realmente no tienes que pavimentar ocho. Creo que sólo voy a tener bolas de espiga. Déjame deshacerme de eso. Voy a tener una bola de espiga por aquí. A lo mejor uno allá abajo, así que hay que saltar por encima de él. Vamos a ajustar el guión de movimiento medida que avanzamos en el juego para asegurarnos de que siempre sea posible porque esto en realidad podría no ser un posible salto en el estado actual del juego Solo ten en cuenta que siempre estás manteniendo tus scripts lo más ajustables posible ya que puedes hacerlos ajustes. Por suerte con nuestro script, obviamente sí agregamos esas variables por aquí. Altura de salto y velocidades de juego. Podemos modificar lo que queramos sobre el guión por ahora, pero podríamos agregar otras cosas más adelante Solo asegúrate de tener en cuenta que la clave para un buen desarrollo de juegos, al menos uno de ellos, siempre es asegurarte de que estás adaptando tu juego a medida que avanzas. No te atrapen tratando quedarte con algo que no funciona antes de que vuelva a crear más llantas. De hecho voy a eliminar estos tres prefabricados. Y en realidad también voy a cambiar esta prefabricada. Lo que voy a hacer es que voy a hacer lo que se llama desempacar un prefab, que básicamente le dice al juego, En realidad ya no quiero que esto sea un prefabricada. Quiero que sea su propio objeto. De nuevo, voy a hacer click derecho en prefab y voy a seleccionar desempaquetado completamente Y luego voy a seguir adelante y deshacerme de estos picos. Ahora tengo mi objeto original de vuelta. Básicamente lo que le acabo de decir a Unity es que aunque basé todo mi prefab en ese objeto, quiero hacerlo así que sea su objeto original Nuevamente, quiero romper el vínculo entre eso y el prefabricado Todavía tengo todos mis prefabricados, pero ahora esto es solo un objeto. Nuevamente, no está vinculado. Y se puede ver que pasó de azul a color normal. De nuevo, volvamos por aquí, hagamos algunas baldosas más. Creo que es bueno tener tal vez otro con doble. Mueve eso ligeramente hacia abajo, entonces podremos tener una bola de espiga justo sobre ella. Eso va a ser bastante duro ahí. Eso es un poco similar al 45, pero creo que tal vez sea ligeramente diferente. Así que vamos a mover eso ahí. Puede moverlo, hay que hacerlo, está un poco más arriba, así que es bastante fácil supongo. Después piso de baldosas ocho. Sólo voy a hacer bastante simple. Nuevamente, esta en realidad solo va a ser una bola de pico en el medio. Obviamente los editaremos a medida que agreguemos más cosas porque esto no es muy emocionante por sí solo. Pero una vez que jugamos en el juego, obviamente vamos a tener que pasar corriendo para seguir el ritmo de la cámara. Incluso algo como esto podría ser un poco más interesante de lo que realmente parece al principio. Pero de todos modos, pasando a la baldosa nueve. Voy a tener un spipal al principio porque no creo que lo haya hecho todavía. Tenemos que pasar por debajo de eso y saltar por encima y luego piso de baldosas diez. Vamos a tener tres picos. Esas son todas mis fichas por ahora. Tengo cuatro con bolas de espiga, sin bolas de espiga, y tengo seis con bolas de espiga y todas tienen pinchos prácticamente excepto baldosas ocho. Estos van a ser los bloques de construcción de nuestro mapa. Y quiero decir eso literalmente porque en realidad son en lo que vamos a estar generando cuando escribamos nuestro script de generación de mapas Ahora bien, si sigues esta lección y tienes un juego de fichas, eso es todo lo que necesitas hacer. Lo que hemos hecho es que hemos creado nuestros prefabricados enemigos por aquí Y ahora también hemos creado un montón de prefabricados de azulejos. Vamos a empezar en la siguiente lección es que realmente vamos a escribir un guión que va a decir, bien, engendrar en estos prefabricados aleatoriamente para bien, engendrar en estos prefabricados que podamos comenzar a generar Y luego, después de que hayamos hecho eso, en realidad vamos a agregar un guión panorámico de cámara. O tal vez podríamos hacer eso primero en realidad. Así que asegúrate de que la cámara esté continuamente panorámica y que el reproductor tenga que mantenerse al día con la cámara Y eso básicamente va a sumar en nuestro juego. Así que hay que estar constantemente en movimiento para mantener toda la cámara y esquivando estos obstáculos Entonces todo eso viene en el siguiente video. Pero si sigues a lo largo de todo y tienes tus diez fichas, eso es genial y vamos a empezar a usarlas en el siguiente video. Gracias. 6. 5. Generar nuestro mapa: Hola, y bienvenidos de nuevo a Unity. Ahora, en el último video, obviamente creamos todos nuestros prefabricados y todos nuestros diferentes objetos en los que vamos a generar cuando empecemos a hacer Pero ahora tenemos que escribir realmente el código que va a decirle a Unity que genere en nuestros objetos Esto puede parecer una tarea bastante tediosa y complicada, pero en realidad es mucho más simple de lo que piensas Y vamos a dividirlo en dos partes. Lo primero que vamos a hacer es que vamos a escribir un guión que básicamente le dice a la cámara que se mueva constantemente por la pantalla para que tengamos algo para que el jugador siga. Entonces, en segundo lugar, vamos a escribir un guión que básicamente determine que queremos generar cosas en función de la posición de la cámara En otras palabras, cuando las cámaras aquí generan algo ahí, y cuando las cámaras de allá generan algo por ahí, constantemente tenemos estos objetos que se generan a medida que avanzamos Antes de adelantarme a mí mismo, comencemos haciendo ese guión de pan de cámara. Vamos a abrir scripts, nuestra carpeta. Vamos a dar clic derecho a ir Crear nuevo guión C sharp y lo vamos a llamar movimiento de cámara. Ahora bien, esto en realidad va a ser un guión increíblemente simple. Va a ser una de dos líneas de código, o en realidad incluso una. O vamos a tener es que primero vamos a deshacernos de ambos vacíos y vamos a usar la actualización fija porque simplemente vamos a tener salida basada en la física, o más bien cálculos y procesos basados en la física aquí Y no vamos a usar ninguna entrada ni nada para este script. Todo lo que vamos a tener es este vacío por aquí, que obviamente va a correr cada intervalo fijo alrededor de un fotograma. Y vamos a crear dos variables. El primero de ellos va a ser un cuerpo público de cresta dos D y lo vamos a llamar RB. No tienes que preocuparte se te ocurran diferentes nombres siempre y cuando estén en diferentes scripts, puedes usar los mismos nombres. Obviamente, no se pueden nombrar dos cosas, R B en un guión, pero aquí se nos permite usar el mismo nombre R B, aunque en realidad estamos hablando de otra cosa. En fin, lo segundo que vamos a tener es una carroza pública, y vamos a llamarla velocidad de cámara. Todo el código que necesitamos por aquí es en realidad muy similar al código que escribimos para el movimiento del jugador. Vamos a ir rígido cuerpo perdió su nuevo vector dos. Vamos a ponerla a velocidad de cámara y a cero. En realidad no necesitamos poner esto a cero, también podríamos ponerlo en el RB do losityty, pero como generalmente no queremos que nuestra cámara se mueva hacia arriba y hacia abajo, realmente no hace tanta diferencia Solo sigamos adelante y pongamos ese cero, no importa. También podrías simplemente configurarlo en blosityy, porque ya verás cuando montemos nuestro cuerpo rígido, realmente no va a hacer ninguna diferencia porque básicamente lo vamos a lograr diferencia porque básicamente para que la cámara no se vea afectada por la Voy a llegar a eso en un minuto. Pero esto es en realidad todo el código que necesitamos para tener una cámara que vaya a desplazarse a medida hacemos nuestro juego cada vez más complicado. Podríamos arreglar esto y tal vez hacer que la cámara se acelere con el tiempo. En cuyo caso vamos a tener una variable que aumente con la distancia. Y luego cada pocos, um, metros, o cada pocos cientos de metros o lo que sea, vamos a aumentar la velocidad de la cámara. Pero por ahora, esto va a funcionar bien. Regresemos a Unity y vayamos a nuestro objeto de cámara principal. Vamos a arrastrar nuestro guión de movimiento de cámara sobre él. Ahora tenemos nuestro cuerpo rígido y nuestra velocidad de cámara, pero en realidad no hemos agregado un cuerpo rígido a esta cámara principal. Si tratamos de ejecutar el guión, nos va a dar un error diciendo, no sé qué es este cuerpo rígido. Estás tratando de referirte básicamente a ello diciendo, oh, ponernos velocidad a esto, pero no tengo nada ahí así que en realidad no puedo hacerlo. Vamos a necesitar agregar un cuerpo rígido a nuestra cámara y vamos a agregar cuerpo rígido componente dos D y hacer clic en Reproducir. Podrías estar pensando, bueno, ¿esto no va a hacer que se caiga la cámara? Y estarías 100% en lo cierto. De hecho, si ahora mismo vamos a ver que nuestra cámara en realidad se va a caer. Puede parecer que todo está subiendo, pero la cámara en realidad se está cayendo. Se puede ver que va ahí abajo, que realmente no es lo que queremos, pero en realidad es algo muy fácil de arreglar. Porque no vamos a estar usando el mismo tipo de cuerpo rígido que usamos para nuestro jugador. Nuestro jugador utiliza lo que se llama un cuerpo rígido dinámico. Y eso es básicamente un cuerpo Ridgid, que se ve afectado por las fuerzas y la gravedad y un montón de cosas externamente por Unity Hay otro tipo de cuerpo rígido, al que se le llama cuerpo rígido cinemático, el cual está influenciado únicamente por Esto es como el cuerpo ridgid normal y automatizado de una manera como si hiciera las cosas por ti Cae en el espacio libre. Sabe cuándo parar y sabe cuándo moverse y deslizarse. Obviamente se le puede agregar más movimiento a eso como hicimos aquí como hicimos, bien. Al hacer clic en este botón, luego muévase en esta dirección. Pero obviamente hace un montón de cosas para nosotros también, específicamente la caída y el movimiento antes de agregar cualquier codificación. Ahora si voy a mi cámara principal, no quiero eso para esto. Quiero que esta cámara sólo se mueva cuando le diga que se mueva. Específicamente, como en un guión, realidad podemos ver por aquí, la variable R B de movimiento de cámara no ha sido asignada, fue el error que aparecía por aquí y lo conseguimos cada fotograma, que es lo que dije que pasaría Para arreglar esto, lo que vamos a hacer es que vamos a cambiar este tipo de cuerpo a lo que se llama cresta cinemática Cuerpo puede ver en el momento en que hacemos eso, todas estas variables de forma masiva en una escala de gravedad de arrastre, todas desaparecen instantáneamente. Porque un cuerpo rígido cinemático no se ve afectado por la gravedad ni por nada más Sólo se mueve cuando le digo que se mueva. Y vamos a seguir adelante y arrastrar eso a mi guión. Ahora lo que tengo es un cuerpo rígido que es como un cuerpo rígido que es completamente manual, así que tengo que decírselo, bien, quiero que su velocidad sea esta, igual que lo he hecho por aquí, ¿de acuerdo? Establezca la velocidad a esta velocidad variable de la cámara. Cuando cambio esta velocidad variable de la cámara, en realidad va a cambiar la velocidad. Se ve una acción por aquí. Si hago clic en play, va a cargar mi juego, y ahora mismo está puesto a cero. Creo que hago clic en jugar dos veces. Volvamos a hacer clic en eso. Haga clic. En este momento está puesto a cero, así que no se mueve en absoluto. Pero si configuro esto en uno, podemos ver que la cámara lentamente comienza a desplazarse. Si le dijera a menos uno, me voy a mover en la misma dirección. Si pongo algo así como cinco, se ve que voy mucho más rápido. Y menos diez me acerco hacia atrás. Obviamente puedes editar esto para que sea lo que quieras. Voy a empezar con una velocidad básica de pánico de tres porque creo que eso va a ser bueno para el inicio, sobre todo mientras estoy desarrollando mi juego como dijiste, obviamente puedes ajustar todas estas cosas Ahora, eso en realidad podría ser un poco rápido. Voy a hacer este 1.8 que me parece mucho mejor. Y ya se puede ver que puedo seguir junto con la cámara. Obviamente no puedo dar ese salto todavía, pero básicamente ahora tenemos un guión que le dice a la cámara, bien, muévete a esta velocidad. Eso es todo grado y todo, pero no tenemos un mapa que generar. En realidad no sabemos en qué engendrar, y realmente no sabemos a dónde saltar porque no podemos Lo primero que quiero hacer es que voy a mover eso allá abajo. Porque en realidad no quiero que sea un mapa imposible, sobre todo si es lo primero que te encuentras cuando juegas el juego. Lo que voy a hacer es que ahora voy a empezar a escribir código, que básicamente va a decirle a la cámara o el objeto que quiera, pero voy a usar la cámara para generar en ciertos objetos Al minuto que llego a cierta longitud, en cierto intervalo, quiero desovar en un objeto Y la forma en que voy a hacer esto es voy a mirar la longitud de mis objetos, ir a abrir prefabricados, y voy a ver lo lejos que están mis objetos Voy a empezar limpiando algunas de estas llantas de piso que tenía originalmente, no de forma permanente, pero voy a hacer click en tres de ellas y voy a hacer clic en el pequeño icono sobre ellas. Están ocultos de la pantalla. En realidad no necesito seleccionarlos, no hace diferencia. Pero por ahora los acabo de esconder. Siguen ahí, pero no quiero que estén en mi pantalla. Puedes ocultarlos o mostrarlos usando un pequeño icono. De hecho, puedes ocultar toda la escena si quieres, pero nosotros no queremos hacer eso. Sólo quiero esconder mis tres objetos de piso. Lo que voy a hacer es que voy a agregar nuevos objetos. Quiero un objeto por ahí. Creo que quiero que los objetos espaciados sean así de grandes. A ver si tengo mi primer objeto. Voy a establecerlo como una posición más fácil. Hagámoslo negativo 6.5 Voy a hacer mi nuevo objeto 1.5 Ver por aquí. Ahora tenemos dos objetos que están bastante espaciados de manera uniforme. Agreguemos otro por aquí y vamos a hacer esto 19.5 Agregamos uno más después de eso Vamos a agregar en baldosas de piso siete, y luego tal vez baldosas ocho de eso, podemos hacer 17.5 Podemos hacer 25.5 Podemos ver que tenemos negativo 6.5 entonces tenemos 1.5 luego tenemos 9.5 Tengo 17.5 y tenemos 25.5 Podemos ver que queremos estas sean unas ocho unidades de distancia cada una, así que voy a tener Y voy a decir cada ocho unidades que mueva la cámara, voy a querer engendrar en un nuevo objeto porque significa que me habré movido sobre una de estas cosas La forma en que voy a hacer eso es que voy a crear un nuevo guión. Y voy a llamarlo generación de mapas. En el momento en que ese guión ha sido mutilado, voy a hacer doble clic para abrirlo Aquí es donde realmente voy a crear la lógica para engendrar en mi objeto diferente Voy a empezar primero haciendo un nuevo vacío público. Voy a llamarlo pieza de mapa de desove. Lo que este método va a hacer es que básicamente va a tomar una de las piezas de mapa aleatorias que diseñamos anteriormente y la generaremos en mi juego Ahora la forma en que voy a obtener una pieza de mapa aleatoria es que voy a crear una estructura de datos conocida como array. Este es un concepto de codificación bastante avanzado. En realidad es bastante rudimentaria. Pero en términos de lo que ya hemos cubierto , es todo un salto. Entonces no voy a explicar exactamente cómo funciona y todos sus usos. Básicamente, puedes pensarlo como una lista. Tengo tipos de datos, los que ya has hablado. Como quiero almacenar números, los pongo en un entero. Si quiero almacenar muchas cosas, ya sean muchos números o muchas palabras, las pongo en lo que se llama una matriz o una lista. Y la forma en que declaras una matriz es que te vas a hacer pública, vas a escribir el tipo de datos que deseas en tu lista. En realidad quiero objetos de juego porque los objetos de juego, como mencionamos antes, son los bloques de boding de nuestro juego Y todos esos mosaicos que hicimos son en realidad ejemplos de objetos aunque sean prefabricados Entonces son como plantillas de objetos. Siguen siendo del tipo de datos objeto. Para demostrar que es una lista y no sólo un juego. Lo cual voy a añadir estos dos corchetes después, lo que le dice a Unity, bien, esto no es una cosa, es una lista de cosas Voy a llamarlo mosaicos de mapa. Ahora bien, aquí es básicamente donde voy a almacenar todos mis mosaicos de mapa. Si vuelvo a Unity y vuelvo a mi cámara principal, voy a ver por aquí, si arrastro en mi script de generación de mapas, pongámoslo encima del cuerpo rígido y vamos a mover el cuerpo de la cresta hacia arriba por ahí. Ver ahora tengo estos mosaicos de mapa y actualmente no tiene nada en él Dice que la lista está vacía. Pero voy a empezar a poblarlo. Voy a poner diez cosas en mi lista. Entonces voy a cambiar este número diez. Voy a agregar en los diez mosaicos de mapa que creamos antes. Vayamos a las baldosas prefabricadas y solo pongamos en piso una baldosa dos baldosas de piso tres, baldosas de piso cuatro, etcétera, etcétera Hasta que tengamos todas las baldosas de piso que acabamos de hacer dentro de esta lista, esta va a ser la forma en que las vamos a generar aleatoriamente No te preocupes por cómo funcionan exactamente los rayos. Como dije, como hay algunas cosas quisquillosas, especialmente si has codificado antes, como empiezan en el índice cero, esto es en realidad el elemento nueve, aunque Element. Obviamente, estos objetos de juego, el concepto real de variables y todas esas cosas pueden parecer un poco confusos, sobre todo si nunca antes has codificado. Pero solo piénsalo como una lista de objetos. Hemos cubierto qué son los objetos, los bloques de construcción son nuestros juegos y tenemos una lista de plantillas de objetos, en las que vamos a generar Básicamente estamos diciendo, bien, todos estos archivos que hemos hecho, los ponemos en la estructura de datos, que se llama una matriz. Y voy a elegir uno de esta matriz aleatoriamente cada vez que quiera generar uno y ponerlo en mi juego Lo siguiente que tengo que hacer es que necesito escribir realmente el código para hacer esto. Volvamos a mi código por aquí. Y voy a decir que escoja un miembro aleatorio de mi matriz y lo genere en La forma en que voy a hacer eso es la siguiente. Voy a decir juego objeto tile. Así que tengo una nueva variable local que es como un espacio de almacenamiento local. Solo es accesible dentro de este método. No tengo que ponerlo aquí, pero simplemente es mejor para el rendimiento porque no necesito que sea accesible en ningún otro lugar. Yo sólo lo necesito aquí, digamos es igual a mosaicos de mapa. Ahora para acceder a un elemento específico de la matriz, uso corchete. Entonces esto es decir, bien, abre el primero. Lo que hará este código es que dirá, bien, tomar el primer elemento en las teselas de mapa, que es una baldosa de piso, y ponerlo en los mosaicos del espacio de almacenamiento. Pero no sólo quiero ser el primero, quiero ser uno al azar. Para hacer eso voy a usar un random, voy a ir al azar do range. Lo que esto básicamente va a hacer es, me va a permitir escoger un número aleatorio de un rango especificado como probablemente puedas adivinar el nombre va a ir a abrir paréntesis Y ahora necesitamos un mínimo inclusivo y un máximo inclusivo. Ahora no sé exactamente por qué dicen máximo inclusivo, porque el rango aleatorio 1-2 en realidad solo devolverá el número uno. El motivo por el que dicen inclusivo creo que tal vez se refiere a los flotadores, pero con enteros en realidad no es inclusivo para el top, solo es inclusivo para el valor inferior Vamos por aquí y pongamos el valor inferior a cero, que es, como dijimos, el primer elemento de nuestra matriz, que por aquí es la baldosa uno. Pero queremos que sea cualquiera de estos elementos. Y podríamos simplemente entrar del elemento cero al elemento nueve. Podríamos simplemente entrar en algo como esto. Obviamente, como dije, es no inclusivo. Tendríamos que poner diez por ahí. Pero esto en realidad va a funcionar perfectamente bien para nuestros propósitos. Esto tiene que ser un corchete, no un corchete redondo porque nos referimos a una matriz. Y una matriz, usas corchetes para decir a qué índice te refieres. De todos modos, esto funcionaría perfectamente bien para nuestros propósitos porque vas a elegir un número aleatorio cada vez. A eso lo llamamos de cero todo el camino hasta nueve. Pero la razón por la que no queremos codificarlo así, esto es lo que se conoce como codificación dura, donde pones valores exactos en lugar de lo que se conoce como, supongo, valores dinámicos o variables. La razón por la que no queremos hacer esto es porque digamos que decidimos agregar un montón de llantas nuevas. Los agregamos a nuestra matriz. Tenemos que volver atrás y cambiar este código en lugar de que se actualice automáticamente para incluir toda la longitud de la matriz, que es lo que queremos. En lugar de usar diez, vamos a ir a los mosaicos de mapa de longitud de punto. La longitud del punto del mosaico del mapa en realidad nos va a dar el número diez por aquí, porque podemos ver que tenemos diez elementos diferentes por aquí. Las teselas de mapa tienen una longitud de diez. Creo que esa es quizás una de las razones por las que el índice comienza en cero porque este comando de rango obviamente no va a incluir este límite superior. Y en realidad nunca vamos a intentar acceder al décimo elemento, lo que nos daría un error porque no hay un décimo elemento, solo hay un noveno todo el camino hasta uno cero Al principio es un poco confuso, pero deberías poder obtenerlo cuanto más uses arrays. Y es una convención en informática, supongo que al cabo de un tiempo también te acostumbras a ella. Pero independientemente, este código de aquí va a decir, bien, dame cualquier elemento en toda la matriz. Puede parecer un poco confuso, pero básicamente todo lo que estamos haciendo es decir, bien, tenemos esta lista de cosas y en el índice específico, desde el índice más pequeño hasta uno más el índice más grande, lo que nos dará todo el camino hasta el índice más grande. Dame un índice a partir de ahí. Eso nos va a dar ahora una ficha aleatoria cada vez, que es la mitad. Lo que tenemos que hacer ahora, todo lo que tenemos que hacer es en realidad desovar en esa baldosa Entonces vamos a decir instanciate tile como objeto de juego. Esta línea de código de aquí es básicamente lo que vamos a usar para generar en nuestro prefab Así que estamos diciendo, bien, ya tengo esta corbata por aquí y quiero ponerla en mi juego. Pero podemos ver por aquí nos sale un mensaje de error que dice, bueno, solo incremento de llamada de asignación, decremento un peso. Y nuevas expresiones de objeto se pueden usar en una declaración. Lo cual es básicamente como decir, tenemos media declaración aquí, tenemos igual a cinco, no tenemos el otro lado. Entonces digo, bien, quiero instanciar como un objeto de juego, pero ¿qué quiero hacer con eso? Vamos a tener que almacenar eso en otra variable. Llamar a este juego objeto mapa azulejo es igual a instanciar azulejo como objeto de juego Esto no es increíblemente como el código necesario. Realmente no necesitábamos esta variable porque en realidad podríamos haber tomado esto y ponerlo ahí. Pero lo voy a exponer así solo porque hace que sea un poco más agradable de leer Primero, tenemos esta ficha de objeto de juego, que es una ficha aleatoria. Y luego vamos a instanciar este mosaico y vamos a llamarlo Mosaico de Mapa o más bien Azulejo de Juego El mosaico real bien puede cambiar el nombre a Azulejo engendrado. Podemos diferenciar entre lo que íbamos a engendrar y una vez que realmente lo hayamos generado, ahora nos estamos refiriendo al objeto real creado, no al prefabricado. Entonces esta es la prefabricada El objeto real que hizo. Y tenemos que añadir algunas cosas. En primer lugar, necesitamos cambiar donde está su posición. En realidad, eso es todo lo que necesitamos agregar, porque ahora mismo va a estar desovándolo, pero no sabemos dónde va a estar desovándolo, queremos cambiar donde está su posición Vamos a hacer eso cambiando esta variable, un mosaico generado Vamos a desovar en mosaico, la posición transformada es igual. Entonces vamos a tomar nuestra posición actual de nuestra cámara. Podemos hacer eso usando un objeto de juego minúscula, lo que está diciendo, bien, referirse al objeto de juego que se adjunta actualmente este script, que va a ser nuestra posición de transformación de cámara. Eso es básicamente decir, bien, establecer nuestra oposición transformada de nuestro mosaico de engendro a exactamente donde está la cámara Realmente no queremos que esté exactamente donde está la cámara, queremos ser un poco diferentes. Vamos a crear un nuevo vector tres. Esto es decir que queremos almacenar tres cosas. Vamos a tener x, y y z. Vamos a establecer la posición de transformación del objeto del juego a nuestra posición actual de nuestra cámara más algo de desplazamiento. Y crearemos una nueva variable, desplazamiento flotante público X y lo agregaremos a nuestros jugadores en lugar de nuestras cámaras en lugar de posición actual. Ahora bien, esto va a hacer va a decir, bueno, desovar en un azulejo y ponerlo en donde sea que esté mi cámara más una posición Entonces esto debería ser lo suficientemente bueno. Pero queremos, recuerden, tampoco lo queremos realmente en la posición Y de nuestra cámara, porque nuestra cámara va a tener probablemente alrededor de una posición Y cero. Y queremos que esté en la mitad inferior de la pantalla. No queremos estar en medio de la pantalla, así que vamos a crear una nueva posición para desovar en nuestros objetos, pero queremos saber cuáles deberían ser los límites de eso Y para hacer eso vamos a volver a meternos en el editor de Unity. Vamos a ver, bien, donde debería estar. Voy a mirar esto y voy a mirar estos valores y y decidir creo que quiero que mi objeto esté en cualquier lugar de decir, -4.5 creo que eso es lo más bajo lo quiero todo el camino, todo el camino hasta tal vez -3.5 podría no parecer mucho, pero es una cantidad de espacio bastante variable, especialmente para nuestra altura de salto pequeño Podríamos cambiar esa altura de salto más adelante, pero creo que eso es bueno por ahora. Sigamos adelante y pongamos esto a menos cuatro. No puedo recordar exactamente qué era, pero creo que fue alrededor de -3.9 Ahora vamos a usar otra declaración de rango aleatorio para básicamente decir, bien, en cualquier lugar entre esos dos puntos, voy a usar esos puntos en realidad como variables Nuevamente, float público min Y y max Y, que vamos a asignar en el editor de Unity, al que llegaremos más adelante. Pero voy a decir, bien, quiero que mi posición Y esté en cualquier lugar de este rango aleatorio, tal como usamos anteriormente. Y voy a decir mi todo el camino hasta max Y. Por último, solo podemos establecer su posición a cero porque estamos usando un juego de dos D. Ahora lo que esto va a hacer es, va a decir, bien, cada vez que llamamos a esta pieza de mapa de generación, vamos a generar una nueva pieza de mapa Y queremos engendrarlo donde quiera que estemos en nuestro juego. Además de una X compensada, que descubriremos mientras jugamos el juego experimentalmente Ya vamos a ir a entenderlo. Y queremos un rango aleatorio de -4.5 -3.5 que también vamos a agregar ahora Ahora lo último que voy a hacer antes de volver a Unity es que básicamente voy a permitirme probar el guión. Voy a decir si la entrada consigue clave abajo espacio de código clave, entonces llame a mi pieza de mapa de generación No agregué el código por aquí. Esto es lo mismo porque es sólo una línea de código. En realidad no los necesitas, pero puedes dividirlos si quieres y solo asegurarte de que esté dentro de ese bloque. Pero solo para que conste, tener una línea sangrada es exactamente lo mismo Simplemente se ve un poco más ordenado por aquí estamos diciendo bien, cada vez que hago clic en la barra espaciadora, ejecuta este código Esto en realidad nos va a permitir probar nuestro script de generación de mapas Para asegurarnos de que funcione, volvamos enseguida a Unity. Veamos, directamente en nuestro guión de la cámara principal. Lo primero que queremos hacer es que queremos configurar este offset sabio. Voy a adivinar que va a ser, si voy por aquí y lo muevo, voy a querer engendrarlo por ahí Eso es como cámaras de 15 horas a cero. Entonces voy a adivinar que va a estar por ahí. Pero obviamente voy a poder configurarlo a medida que avance. Creo que esto fue 6.5 Sigamos adelante y pongamos esa compensación y en 15. Queremos que nuestro min Y sea -4.5 max y sea 3.5 Veamos si eso funciona Voy a empezar por no mover mi cámara en absoluto, solo para poder ver si ese desove realmente mira a mi alrededor donde quiero que esté adelante voy a golpear Se puede ver en realidad cuando hago clic en mi juego, mis tres pisos que golpeé antes en realidad todavía están aquí. Volvemos ahí y seguimos adelante y eliminamos esta baldosa. Y lo tengo como lo tenía antes. De hecho voy a mover estos un poco. Yo no. Parece que se han ajustado. No estoy del todo seguro de por qué. Interesante. Independientemente, sigamos adelante y hagamos clic en Reproducir. Y luego veamos qué pasa si hacemos clic en la barra espaciadora. Volvemos a nuestra escena. Podemos ver, bien, en realidad tenemos una cosa aleatoria desove, lo cual es genial Queremos, si lo alejamos, volvemos a hacer clic en una barra espaciadora, tenemos una cosa diferente desove Y eso en realidad me parece bastante perfecto. Si hago clic en él un montón de veces, en realidad tienen altura variable. Entonces algunos de ellos están desove ligeramente más altos que los viejos, y tenemos diferentes cosas desove, lo cual es perfecto, esto es en realidad exactamente lo que queremos Lo último que tenemos que hacer ahora es asegurarnos de que esto esté sucediendo automáticamente. Siempre y cuando la cámara se mueva cada ocho unidades, queremos generar una nueva Entonces, la forma en que van a hacer eso va a regresar directamente a nuestro código. Y lo primero que vamos a hacer es que nos vamos a deshacer de este código de prueba porque no quieres desovar en nuestras fichas cada vez que cocinamos la barra espaciadora, queremos desovar en cada vez que viajemos una cierta distancia Lo primero que vamos a hacer es que vamos a crear algunas variables de movimiento. Vamos a crear un flotador público y lo llamaremos Posición de Spawn Esto va a hacer un seguimiento de exactamente dónde en el avión X generamos nuestra última pieza de mapa Entonces sigamos adelante bajo nuestro vacío de inicio y engendremos una pieza de mapa Esto es básico, va a decir al comienzo del juego, reber estos paréntesis cuando estás llamando a un bloque de código específico al inicio de nuestro juego antes incluso de empezar a jugar Spawn en una Porque podemos ver si vamos a Unity, en realidad no tenemos nada sobre esto. Queremos hacerlo en el momento en que engendremos. Pero entonces lo último que vamos a hacer para asegurarnos de que sabemos generar en uno nuevo cada vez que necesitamos uno, va a bajar aquí a la variable de posición de generación y vamos a establecerla en nuestra posición de transformación actual x Esta es básicamente una forma abreviada de decir la posición de transformación del objeto del juego X. En realidad, no necesitamos esta por aquí porque usar una minúscula se refiere a la transformación adjunta a este objeto de juego que ves por aquí. Si nos movemos, nos lo explica. Esto es decir, bien, establecer nuestra posición de generación actual el punto X de oposición transferido de nuestro objeto de cámara el momento en que engendramos en una pieza de mapa, mantén un registro de dónde está lo generamos en el plano X. Entonces vamos a agregar en nuestra declaración if a nuestro plato vacío. Diremos mi posición actual menos mi posición de engendro. Es decir, si mi desplazamiento desde donde estoy actualmente hasta donde engendré por última vez mi última ficha es mayor a ocho En otras palabras, si he movido ocho unidades desde que generé una última ficha, es hora de generar una nueva Tenemos que escribir si mi punto de oposición transferido x menos posición de desove, poner paréntesis alrededor de esos es mayor o igual a ocho En otras palabras, si hemos movido ocho o más mosaicos, entonces queremos llamar a nuestra pieza de mapa de generación Eso obviamente va a restablecer nuestra posición de spawn a mi posición actual de transferencia a X. Entonces la próxima actualización, esta ya no será ocho. Si todo está escrito aquí correctamente, debería aparecer en cada ocho piezas es una nueva pieza de mapa, y deberíamos verlo en acción O vuelves al juego. adelante y hagamos clic en eso, asegurémonos de que todo esté configurado como necesitamos para poder volver a establecer esto en 1.8 Hagamos un seguimiento de la variable de posición de generación a medida que hacemos clic en reproducir Sigamos adelante y golpeemos play. Mira lo que sucede moviéndote, parece que nuestro primer azulejo sí desove perfectamente bien Y en realidad si miramos a lo largo, podemos ver que está desove justo como necesitábamos ser Entramos en la vista de escena, de hecho podemos ver que estos azulejos se hacen a medida que avanzamos, justo en el momento perfecto. Por aquí, un nuevo estilo de engendro brota exactamente como necesitábamos hasta el minuto antes de que llegue a la pantalla Tenemos nuestra nueva ficha por allá, y obviamente los jugadores se quedan un poco atrás aquí. Pero en realidad podemos ver que esto está creando un mapa de generación automática bastante genial. Y esto en realidad va a ser el corazón de nuestra plataforma, un juego. Obviamente vamos a cambiar esto y agregar muchas cosas nuevas y geniales, y diferentes objetos, y diferentes plantillas a medida que nos adentramos en nuestro juego. Pero esta básicamente va a ser la plantilla de cómo vamos a empezar a hacer nuestro juego y cómo va a funcionar todo. este momento, en realidad hemos creado la base de lo que es un sistema bastante genial para generar en mosaicos y crear un mapa de generación automática Ahora lo último que tenemos que hacer es asegurarnos de que realmente eliminamos las teselas que ya no estamos usando. Si seguimos adelante y golpeamos play, podemos ver que podemos desovar en fichas geniales. Y en realidad funcionan perfectamente. Podemos ver allá, se crean por aquí, pero en realidad nunca se van. A medida que esto continúa, si aumento la velocidad, esto realmente funcionará igual bien porque se basa en la posición, no en nada que tenga que ver con el tiempo. Así que en realidad podemos ver que hacemos más y más mosaicos, y todo funciona perfectamente. Pero estas fichas están aquí y en realidad están obstruyendo mi escena Y en realidad no quiero que estén ahí. Después de un rato, lo que voy a hacer es añadir una línea de código más, que voy a adjuntar a los mosaicos. Voy a tener una pequeña línea de código en cada ficha que dice, si estoy tan lejos de la cámara, puedo destruirme. Sigamos adelante y medimos lo que eso no debería ser. Creo que las minuciosas fichas están por aquí, probablemente deberían ser destruidas. Esto se encuentra actualmente en la Exposición 111.8 Digamos que 112 y la cámara está a las 01:20 Digamos que es 130, digamos en el minuto en que están 18 unidades detrás de la cámara, entonces pueden destruirse Y ese es un guión increíblemente fácil de escribir. Vamos a hacer clic derecho, Crear guión agudo en C, lo llamaremos tile clear. Voy a agregar esto a cada ficha individual, Haga doble clic para abrirla. Y solo vamos a necesitar una variable por aquí, y en realidad va a ser una referencia a nuestra cámara principal. Entonces voy a crear una transformación pública. Esto en realidad se refiere a un objeto de juego, pero estoy diciendo que solo necesito la posición y la rotación y la escala del objeto de juego. Voy a hacer referencia a mi cámara en esta variable, pero solo quiero su posición. No necesito nada más. Llámalo. Ahora lo importante a tener en cuenta es que solemos asignar estas transformaciones en el editor de Unity. Si lo arrastramos a nuestro prefab y decimos, bien, quiero esa cámara Pero la cosa es porque los prefabricados no son realmente objetos en el juego, técnicamente son archivos en nuestro programa, realidad no podemos hacer lo mismo aquí De hecho, quiero seguir adelante y arrastrar el guión a cada uno de mis prefabricados Entonces puedo hacerlo yendo a cada uno de mis prefabricados y haciendo clic en Agregar Componentes, y nuestro nombre, como lo llamo, tile clear Este azulejo claro guión a cada uno de ellos. Simplemente hazlo rápido. Creo que en realidad puedes hacerlo varias veces, una vez si seleccionas todos ellos y luego agregas tile clear, debería agregarlo a cada uno de estos. Creo que eso funcionó. Puedes ver que cada uno de ellos tiene este script de mosaico claro ahora adjunto, lo cual es bastante genial. Pero el problema es que en realidad no podemos hacer referencia a esta cámara porque como dije, esta cámara, está buscando un objeto y no podemos arrastrar en la cámara porque se trata de un objeto de archivo. Necesitas escribir algún código para encontrarlo. Es bastante sencillo. Vamos a decir que cam es igual a objeto de juego. Encuentra, llámalo cámara principal porque así es como se llama. Y eso va a decir en el momento en que me meta en el juego, el momento en que empiece a existir, encuentre la cámara principal, que tenemos justo por aquí, y la asigne a esta variable. Básicamente es como si lo arrastráramos igual que antes. Es solo una forma diferente de hacerlo. Y voy a seguir adelante e ir a transformarme, porque sólo necesito la transformación de ese objeto de juego. Entonces el último bit de código que solo necesitamos decir básicamente destruirme a mí mismo cuando muy lejos es digo si mi posición transforma punto posición x menos la posición de las cámaras. Es decir, la posición de la leva x. decimos si estoy más de 18 unidades por detrás, si mi posición es cero y la posición de la cámara es 18, voy a ser negativa 18 para decir es menor o igual a negativa 18. De hecho podría escribir esto al revés y decir si la posición de las cámaras menos mi posición es más de 18, si el desplazamiento es mayor, esto es exactamente lo mismo. Entonces voy a decir destruir objeto de juego. En otras palabras, sacarme de la escena. Este es en realidad todo el código que vamos a necesitar para encargarnos de ese problema del que estamos hablando antes. Antes de hacer eso, hay una cosa más que voy a hacer por aquí. Y solo va a ser una solución realmente simple. Voy a crear una nueva transformación pública. Voy a llamarlo almacenamiento de azulejos debajo por aquí. Una vez que he creado mi mosaico de desove, Spawn tile transform. Establecer padre, que básicamente está diciendo, bien, establecer el objeto padre. Vamos a usar una carpeta tal como hicimos en el pasado y vamos a configurarla para almacenamiento de teselas. Eso básicamente solo va a decir, bien, el momento en que haga mi nuevo objeto, lo pongo debajo de este objeto vacío, que voy a crear ahora lo llamo almacenamiento de teselas de mapa. Pongámoslo a cero por aquí. Esto va a ser lo que vamos a poner todos nuestros objetos en esto. Volvamos a la cámara principal y arrastremos eso aquí al almacenamiento de azulejos para que tengamos nuestra nueva transformación. Por último, lo último que vamos a hacer es asegurarnos de que nuestro script de generación de teselas funcione Elimine el script en lugar de hacerlo. Sigamos adelante y hagamos clic en reproducir. Y deberíamos ver que todo funciona tal como ha sido. Ver por aquí, se puso en el almacenamiento de baldosas, lo cual es genial. Y veamos lo que sucede a medida que avanzamos. Tenemos todas nuestras nuevas fichas aquí. Este mosaico de aquí tiene el script de mosaico claro. En el momento en que esté a cierta distancia de la cámara, en realidad debería borrarse y dejar de existir. Creo que lo hará. Ahí vas. Esto realmente funcionó muy, muy bien. Esta va a ser la base de nuestro juego. Podemos hacer esta cámara lo más rápido que quieras. Realmente no hace la diferencia. Podemos ver exactamente cómo va a funcionar. Así va a jugar el juego. Vamos a tener todos estos azulejos que se están haciendo ranoalmente Se puede ver que algunos tienen duplicados, pero esta va a 7. 6. Cómo agregar sprites: Hola, y bienvenidos de nuevo a Unity. En las últimas lecciones, hemos creado lo que es más o menos la base de una plataforma, un juego. Hemos creado un personaje que puede moverse. Hemos creado un mapa que puede generar aleatoriamente. Y tenemos obstáculos que podemos esquivar. Y tenemos una cámara que está continuamente panoramizando, con la que tenemos que seguir el ritmo Eso es prácticamente todo lo que necesitamos para hacer una plataforma básica, un juego como ya lo hemos hecho, pero faltan algunas cosas. En primer lugar, puedes toparte con los obstáculos y no pasa nada. En segundo lugar, la cámara en realidad no hace que te quedes con ella. Puedes salir y volver a entrar. No hay penalización por eso. Tercero y casi lo más importante, el juego no se ve muy bien. Tenemos un cuadrado, saltando sobre otros rectángulos y esquivando triángulos y círculos que son amarillos, blancos Eso es. Puedes hacer un juego con formas. Lo he hecho bastantes veces en el pasado en realidad, Pero para esta plataforma específica, porque es un juego de plataformas intermedio, pensé que sería bueno usar sprites y voy a estar usando pixel art ahora todos los sprites que voy a estar haciendo para mi proyecto van a estar vinculados a lo largo Los puedes encontrar todos como enlaces descargables a medida que avanzo e importo nuevos archivos Cualquier archivo que use a lo largo de todo este proyecto, deberías poder encontrar también. He hecho un montón de sprites para este juego. Si quieres usar los mismos sprites que estoy usando, solo tienes que seguir adelante y descargarlos desde la descripción de este video o debajo del curso, puedes encontrar un enlace para las descargas de este video Ahora como dije, no tienes que usar mis sprites. Puedes usar tus propios sprites, o puedes usar cuadrados y triángulos Realmente no hace la diferencia. Pero si quieres seguir y usar los sprites que estoy usando, entonces vas a tener que descargar obviamente esos archivos Puedes usar los mismos. Dicho eso, como dije, no tienes que usar los mismos sprites que yo. Pero es importante tener en cuenta que los sprites hacen de bastantes maneras determinar cómo vamos a equilibrar nuestro juego Por ejemplo, si tuviéramos los sprites que voy a estar usando van a ser menores, y las nubes Y así voy a querer retocar algunas cosas sobre el juego Quizá le vaya a hacer saltar más alto. Queremos hacer que el engendro se aparte más solo para que se vea más como nubes Y ese tipo de retoques que podemos hacer porque tenemos variables en nuestros scripts que nos permiten controlar eso Como si tuviéramos una altura de salto aquí y tenemos una distancia de desove para las formas de aquí Obviamente no tienes que copiar mis valores exactos. Pero si es tu primera vez codificando y Unity y haciendo un juego, te recomendaría seguir conmigo ya que importo sprites y uso los mismos sprites que estoy usando, así como quizás los mismos valores Porque va a hacer que sea un poco más fácil comparar tu juego con el mío. Y te sorprendería la cantidad pequeños ajustes que pueden hacer que un juego se sienta diferente No tienes que hacer exactamente lo que yo estoy haciendo. No tienes que usar los mismos sprites, yo soy. Pero te recomendaría si quieres hacer el mismo juego. Estoy tal vez use los mismos sprites y tal vez solo lo modifique como lo hago porque se sentirá muy igual Como si no quisieras quedarte atascado con un juego similar. Eso no es realmente lo que querías. Con todo eso dicho, como dije , totalmente tu decisión. Pero voy a empezar a usar mis propios sprites. Voy a bajar aquí a la carpeta del proyecto, clic derecho. Voy a ir a crear una carpeta y voy a llamarla sprites. Ahora hay algunas formas en las que puedes poner sprites en tu juego sprites son en realidad solo archivos, son representaciones visuales de objetos, es lo que me gusta llamarlos. En realidad tenemos algunos listos. Como si tuviéramos ahí un sprite cuadrado y sprites rectángulos aquí abajo. Bueno, en realidad solo son sprites cuadrados estirados. Pero queremos algo un poco más interesante. Vamos a necesitar importar archivos a nuestro juego. Hay algunas maneras de hacer esto. Puedes hacer doble clic en la carpeta de sprites y puedes ir a importar New Asset Puedes abrir el Explorador de archivos y arrastrarlos a esta ventana de aquí. O puedes ir al Explorador de archivos, encontrar dónde se guarda tu juego y simplemente copiarlos en esta carpeta específica que acabas de crear. Esta no es la mejor manera de hacerlo. Te recomiendo elegir uno de los dos primeros. Mencioné solo porque la forma funciona Unity es cuando importas un archivo, crea otro archivo que necesita llamado metarchivo Por cada archivo que importes, digamos que importas algo p cuatro, va a crear algo meta o algo p cuatro DomTAI'm, no estoy seguro exactamente como lo llama, pero básicamente crea una metafila Que sin necesidad de entrar en demasiados detalles, es como funciona unity con los archivos importados. Lo necesita para funcionar correctamente. Y estas metafiles se crean automáticamente cuando importas tus archivos Pero si no tienes Unity abierto, o incluso si lo haces, y lo haces directamente con File Explorer, entonces no va a hacer esos archivos por ti. Unity hace un trabajo bastante bueno al crearlos automáticamente en el lanzamiento y cosas así, pero solo para evitar cualquier molestia que pueda surgir, te recomiendo importar tus archivos usando esta importante ventana de activos nuevos por aquí. Vamos a entrar en nuestra carpeta. Vamos a importar nuevo activo. Pongamos estos cuatro activos de sprites que han hecho, como dije, estos obviamente están todos vinculados debajo del video, así que solo puedes importarlos a tu juego así Hay algunas cosas que tenemos que hacer antes de ponerlas en nuestro juego. Voy a seleccionarlos a todos. Lo primero que voy a hacer es que voy a cambiar este modo de filtro a Punto Sin Filtro, porque esta es una configuración que quieres para Pixelate y en realidad obviamente puedes tener que hacer clic en Guardar antes de que te muestre Pero también puedes hacer clic en Aplicar aquí. Ahora tienes Punto Sin Filtro, y haces clic en Aplicar para agregar eso. La razón de eso es porque este modo de filtro en realidad difumina ligeramente el sprite Y si usas pixel, no se ve muy bien. Te voy a mostrar que si arrastro el sprite a mi juego y me desplazo hacia abajo para poder ver el sprite ahí, puedes ver todos los píxeles Si elijo el filtro bilineal y hago clic en Aplicar, puedes ver que lo hace muy borroso, que no es lo que Quiero elegir Punto sin filtro para que tenga todo el sprite claro Entonces lo segundo que voy a hacer es que voy a cambiar estos pixeles por unidad porque no quiero que el sprite sea tan pequeño Quiero que sean tal vez diez. Y en realidad, cuanto menor sea este número, más grande va a ser el sprite Creo que es un ajuste bastante bueno para mí por ahora diez píxeles por unidad. Y obviamente voy a querer cambiar eso a todos ellos aquí afuera, asegúrate de que todos estos píxeles por unidad estén establecidos en diez. Y el modo de filtro es 0.0 Filtrar y haga clic en Aplicar. La forma en que pude ver ese sprite es arrastrándolo directamente a mi juego Y lo que esto hace es crear un objeto para mi sprite con un render de sprite Así que en realidad es lo mismo que hacer clic derecho, nuevo objeto elige un triángulo. Es exactamente lo mismo, es solo que esto usa un triángulo y esto obviamente establece cualquier sprite que haya arrastrado como el sprite predeterminado Pero voy a borrar estos porque no quiero realmente querer hacer ningún objeto nuevo. Quiero asignar estos archivos directamente a los renderizadores de sprites que ya tengo, que son el cuadrado y el cuadrado stretch y el triángulo y el círculo Esa es mucha terminología que te estoy lanzando y puede ser un poco confuso pensar en todo en el contexto del desarrollo de juegos. Pero solo debes saber que por el momento todo lo que hemos hecho es que hemos importado estos cuatro archivos que vamos a usar para agregar un poco de juego de estilo de vida. Y actualmente tenemos renderizadores de sprites, que están renderizando tipo de sprites predeterminados Vamos a reemplazarlos con estos sprites que hemos creado Así que asegúrate de obtener la configuración como yo. Y luego vamos a empezar primero con el jugador. Vamos al jugador y tenemos una calidad de sprite por aquí, que es donde vamos a arrastrar en nuestro sprite Vamos a arrastrar en menor. Vemos al instante, se ve un poco enfermizo. Y eso es porque tenemos el color todavía puesto en amarillo. Pongamos eso a blanco, diría yo. Ese es en realidad un tamaño bastante bueno para mi jugador. Quiero que sea un jugador bastante pequeño en medio de la pantalla, creo que eso es realmente bueno. Pero hay algunas cosas que necesito cambiar. Y esto es a lo que me refería cuando dije que los sprites afectan bastante a tu juego Obviamente, todos los colisionadores y las alturas de salto y todas las demás variables o ajustes que tengas que hacer, tu juego se centra en lo grandes que son los sprites o más bien cómo se ven los sprites Si estás usando mis sprites, lo cual sí te recomiendo que hagas, será mucho más fácil seguir exactamente lo que estoy haciendo que si usas el tuyo propio Pero dicho eso, puedes usar tuyo propio si sabes lo que estás haciendo, porque solo tienes que hacer ajustes similares para tu juego En fin, dicho eso, primero déjame cambiar este Box Glider para asegurarme de que se ajuste a mi sprite Y podrías pensar que esto es en realidad un tipo bastante bueno de ajuste para mi sprite, pero en realidad voy a hacerlo un poco más pequeño Y la razón de eso es si estamos jugando un juego y tienes algo así como una bala o un proyectil golpea esta parte superior de tu pantalla de aquí Entonces digamos que algo va y te pega como ahí. Eso no es realmente golpear al sprite, sino que golpearía el colisionador Y así el enemigo, prefieres que el jugador sufriera daño, lo que puede ser bastante frustrante si estás jugando a un juego Entonces, en general, es una buena idea poner este render de sprites lo más bajo que puedas por aquí, para que obviamente no caigas por el suelo Pero entonces queremos que sea un poco más pequeño, así que queremos que sea algo así. Ahora si te golpean aquí, técnicamente no morirás. Pero si te golpean por ahí, en cualquier lugar dentro de este bloque, que es el jugador principal, en realidad podemos incluso hacerlo un poco más pequeño, como por ahí. Entonces vas a recibir daños o tal vez incluso morir y tienes que empezar de nuevo el juego. Pero básicamente, solo hace que sea un poco más divertido para el jugador jugar un juego en el que no está siendo penalizado constantemente por ser golpeado en el píxel superior derecho del personaje Sigue eso a lo largo. Obviamente, sea cual sea el jugador tengas para asegurarte de que encaje dentro de los límites del clider de caja, pero no exactamente que tengas espacios en blanco Creo que eso es bastante bueno. Por ahora. He cambiado mi caja Clider. No necesito cambiar nada más. El cuerpo de la cresta no se ve afectado por los sprites. El movimiento del jugador debería estar bien. Es aproximadamente del mismo tamaño y he cambiado mis sprites. Si seguimos adelante y pulsamos Play, puedes ver ahora que en realidad tengo un personaje menor y puedo moverlos y saltar. Obviamente no tiene ninguna animación, así que se ve un poco tonta Pero este es en realidad el comienzo de agregar en el juego de estilo sprite Y se puede ver que en realidad hace una mejora bastante considerable en cómo se ve nuestro juego. Quiero decir, obviamente, como dije, ahora se ve tonto. Pero si como que acabas de tomar un fotograma congelado por ahí y lo miraste , aunque realmente no encaja con el estilo artístico, se ve mucho más agradable cuando tienes cosas reales en tu juego que los cuadrados Muchas veces, como dije, los cuadrados pueden ser geniales. He hecho muchos juegos con solo formas. Pero en este tipo de instancias, para este tipo de juegos, hace que parezca un poco más profesional tener sprites reales. Entonces no paremos ahí. Sigamos adelante y agreguemos todos los otros sprites que necesitamos a nuestros otros objetos Hay algunos cambios que vamos a necesitar hacer aquí. Lo primero es porque vamos a estar usando nubes como plataformas, obviamente necesitamos que todas sean del mismo tamaño porque solo tenemos un sprites de nube Todos necesitan ser así de grandes. Eso no es realmente un problema para todas nuestras fichas de aquí, porque todas son del mismo tamaño. Pero estos tres al principio son de diferentes tamaños. Entonces vamos a tener que cambiarlos un poco. Voy a llegar a eso. Pero comencemos por ir aquí a mi carpeta de sprites y arrastrando en esta nube Ahora podemos ver ya hace que se vea un poco raro. Tenemos una nube increíblemente larga y plana, y voy a arreglar eso poniendo la escala de nuevo a una. Tenemos el tamaño predeterminado para nuestra nube. Voy a hacer eso con los otros dos objetos de piso también. En realidad no voy a elegir tres porque dos son más que lo suficientemente grandes para mi juego. Voy a retocar esto un poco a medida que me lleve más adelante en mi juego, pero por ahora, eso está bien como punto de partida para mi juego Lo último que tengo que hacer es obviamente cambiar los colisionadores. Porque esa no es la colisión. Yo quiero, quiero que sea algo más como esto. Vamos a arrastrarlo un poco hacia arriba. Allá y abajo al otro lado. Como dije, obviamente no quieres que el colisionador sea necesariamente así porque entonces pueden pararse sobre nada, pero tampoco quieres que esté aquí Como están a mitad de camino a través de la nube Yo diría que un buen equilibrio estaría en algún lugar por ahí. Todavía puedes ponerte un poco detrás de las nubes, pero aún puedes verte a ti mismo, tal vez moverlo un poco hacia arriba, obviamente hacia abajo. Importa menos porque probablemente no los vas a estar saltando desde abajo. Pero eso debería ser bueno. No quieres realmente hacer este tipo de cosas con proyecto, con nubes tanto. Porque en realidad no querrías caerte si ahí hay nubes. Pero puedes hacerlo un poco, tal vez algo así. Como dije, esto no tiene por qué ser perfectamente exacto, pero lo vas a tener una idea medida que juegues tu juego y puedas modificarlo Estos son obviamente tus colisionadores. De hecho voy a eliminar este defecto y simplemente copiar este a lo largo porque no tengo ganas de cambiar el tamaño de eso otra vez Y todos deberían tener el mismo tipo de colisionador de tamaño. Si sigo adelante y le pego a play ahora ya podemos ver cómo se ve eso. Salta y puedo caer sobre esta nube y puedo moverme a lo largo de ella. Y quiero decir, se ve bonito. Bien. El único problema es que el jugador está un poco continuamente frente a la nube. Y eso en realidad no es lo que quiero. Prefiero que el jugador esté detrás de la nube. Para hacer eso, en realidad voy a usar una variable dentro de este script renderer Sprite, y se llama orden en capa Voy a poner las nubes para que estén en orden en la capa seis. Voy a poner a mi jugador en orden en la capa cinco. Ahora podemos ver cuando seguimos adelante y jugamos el juego, deberíamos poder ver al jugador realmente caer detrás de las nubes solo un poquito más de lo que yo quería. Y creo que eso se ve un poco mejor en términos de diseño de jugabilidad. Ahora, obviamente acabamos de agregar estos sprites para las dos primeras plataformas No hemos agregado ninguna de las baldosas del piso por aquí. Todavía hay el rectángulo por defecto, así que vamos a necesitar arreglarlo. Empecemos volviendo a sprites y arrastrando esa nube de nuevo hacia adentro, estableciendo la escala de nuevo en estableciendo la escala de nuevo Y ahora va a ser un poco complicado porque vamos a tener que cambiar esto exactamente como hemos estado tratando de hacer todo el tiempo. Primero tenemos que cambiar el planeador Box, y luego vamos a tener que ajustar cada uno de estos objetos hijos para que tengan el tamaño correcto para el sprite Esto desafortunadamente va a ser bastante trabajo porque ahora tenemos que rehacer todos nuestros sprites eso o más bien todos nuestros mosaicos que ya hemos hecho en términos de los nuevos Si tuviéramos que entrar en cada uno, tenemos que editar el planeador Box, tenemos que agregar cosas nuevas, tenemos que cambiarlo todo Es un poco confuso y es bastante trabajo. En realidad hay una manera fácil de solucionarlo. Puede parecer un auto poco intuitivo, pero lo que vamos a hacer es que en realidad vamos a retroceder el espacio que tenemos exactamente como lo teníamos antes. Configúrelo como era normalmente antes de que agregáramos en ese sprite Y luego vamos a crear diez nuevos prefabs, y los vamos a utilizar como puntos de referencia para hacer nuestros nuevos prefabs con nuestros Entonces sólo vamos a eliminarlos después. Esto puede sonar como mucho más trabajo, pero en realidad es considerablemente más fácil a la larga hacerlo de esta manera que lo que hacíamos antes. Lo primero que vamos a hacer es que vamos a cambiar los prefabricados de spike y spike ball porque ese es en realidad el primer paso Tenemos que recordar que estos prefabricados dentro de nuestros prefabricados son en realidad ellos mismos prefabricados . Entonces tenemos que cambiar estos. Empecemos cambiando el pico por el sprite de picos Mira que en realidad no se ve tan mal. Tenemos que volver a cambiar la escala a una. Es muy importante que uses la misma escala cuando usas pixel art. Debido a que no se puede hacer que un píxel sea más pequeño que el tamaño del otro, se ve muy mal. Asegúrate de que todas tus básculas estén establecidas en una sola. De hecho necesito recordar hacer eso con el jugador también. Antes de que me olvide, podría tener que cambiar el tamaño de los sprites por unidad de píxel, que configuramos originalmente por aquí, estos píxeles por unidad Pero asegúrate de poner todo a la escala uno, lo contrario no va a quedar genial. Tenemos nuestras nubes a la una y nuestro jugador a la una. Eso es bueno. Volvamos a nuestras modas pre y demostremos que nuestro pico está en uno, y necesitamos que nuestra bola de espiga también esté en una En fin, volvamos aquí. Empecemos por hacer que el color sea un color normal, que es el blanco. Entonces no vamos a cambiarlo de ninguna manera. Y entonces en realidad voy a quitar este colisionador de polígonos, y voy a agregar en un simple colisionador de caja Y se podría pensar que tiene más sentido agregar en tal vez tres colisionadores de polígonos, pero créeme, esto es increíblemente sobrecomplicado para lo que estamos agregando aquí Solo tiene que ser una especie de error básico de colisionadores que cometen muchos desarrolladores nuevos de Unity, es que intentan hacer que sus colisionadores sean lo más precisos posible como agregar tal vez una línea aquí, una línea aquí, línea aquí Realmente no es un buen uso de tu tiempo. Y puedes hacer algo como esto y conseguirá que el trabajo se haga perfectamente bien. De hecho, hace que el juego sea un poco más agradable jugar porque no quieres morir si golpeas, como dije, la pequeña parte superior de un pico ahí mismo y el jugador ni siquiera cuenta cuando está jugando el juego. Simplemente puedes usar deslizadores de caja para muchas cosas, Obviamente vamos a usar un círculo aquí Pero para esto, un planeador de caja hará más que bien. En fin, abramos la bola de espiga y hagamos lo mismo aquí. Ve a sprites y arrastra en el sprite de bola de espiga, cámbialo a blanco para que tengamos el color normal Y entonces en realidad podemos simplemente aumentar un poco el tamaño del circ lide En lugar de usar este colisionador de edición, voy a usar este radio establecido 0.6 creo que en realidad ya es bastante bueno porque como dije, no quieres morir si llegas al final Pero esta es la mayoría del sprite, así que está bien. Sí, ese patín ahora mismo, tenemos nuestros prefabricados para nuestros sprites Hemos cambiado el sprite y hemos editado los colisionadores y nos aseguramos de que esté configurado para escalar uno Ahora si volvemos a nuestras baldosas, podremos verlas agregarlo a un juego. Pero tal vez no se vean tan bien. Como por ejemplo, éste está en la nube y son un poco más grandes de lo que eran antes. Algo así es fusionarlos juntos, Obviamente están mucho más abajo. Entonces hace que ese salto sea un poco más difícil porque también son más anchos. Como dije, todos estos prefabricados en realidad están un poco arruinados ahora en cierto modo Pero vamos a hacer lo que dije antes y en realidad solo usaremos un montón de nuevos prefabricados porque creo que en realidad lo va a hacer más fácil a la larga Puedes de cualquier manera probablemente va a tomar aproximadamente la misma cantidad de tiempo porque podríamos simplemente cambiar cada uno de estos sprites, agregar el cuadro Clyde, agregarles, pero luego tenemos que mover todos estos hacia arriba para ajustarlos al nuevo tamaño Tú Dios, tienes que cambiar prácticamente todo lo que ya añadimos. Y es realmente, en mi opinión, no tanto más rápido o incluso rápido en absoluto que solo hacer nuevos prefabricados Así que sigamos adelante y arrastremos por un piso nuevo. Entonces tenemos un nuevo prefab. Y comencemos solo por desempaquetar este prefabricado. Ya no está vinculado. Acabamos de crear una referencia, ahora tenemos nuestro nuevo prefabricado Llamémoslo baldosa, una A. Iba a copiar esto diez veces. Tenemos baldosa una A, vamos a tener baldosa dos Una baldosa de piso tres Una baldosa de piso cuatro A, etcétera, hasta que tengamos las diez baldosas del piso con una copia de ellas mismas hechas Una vez que hayas hecho eso, prácticamente puedes comenzar a rehacer todos tus viejos prefabricados como nuevos Voy a saltarme porque es un proceso bastante tedioso y realmente no necesitas verme editando mente Pero básicamente con los nuevos sprites, solo haz un montón de nuevos prefabs basados en los viejos que tenías. Y asegúrate de que una vez que hayas terminado tus prefabs, tengan todos los atributos que tenían los antiguos. Así que tu mosaico, guión claro y tu caja se deslizan y todas esas cosas. Asegúrate de que eso esté todo en los prefabricados. Y una vez que lo hayas hecho, entonces estás listo para irte. Una vez que hayas terminado de hacer todos tus prefabricados, eso debería ser todo lo que necesitábamos hacer, pero hay algunos cambios más que tenemos que hacer En primer lugar, tenemos que eliminar todos nuestros mosaicos antiguos de aquí porque ya no los necesitamos. Tenemos nuestros nuevos azulejos con todos nuestros sprites. Tenemos baldosas de piso una A, hasta las diez A. La otra cosa que sí tenemos que cambiar es que tenemos que ir aquí a esta cámara principal. Podemos ver que ya faltan nuestros mosaicos de mapa. Porque lo que hemos hecho es una matriz por aquí que dice, bien, usa este mosaico de mapa, pero el mosaico de mapa ya no está ahí. Dice, no sé dónde está el archivo. Necesitamos reemplazarlos todos con estos nuevos mosaicos que hemos creado aquí porque en realidad son nuevos objetos que hemos o más bien nuevos archivos que hemos hecho. Eso es en realidad todo lo que necesitamos hacer para crear nuestro nuevo juego basado en sprites Sigamos adelante y golpeemos play. Y podemos ver ahora tenemos nubes y un menor saltando sobre nubes. Tenemos nuestros nuevos sprites desovando en tal como queríamos que lo hicieran. Tenemos nuestro sprite por aquí, que tiene dos nubes, y ahí tenemos un pico El único problema, sin embargo, es que notarás que los sprites en realidad están demasiado cerca el uno otro y el pozo de salto no es lo suficientemente alto Todos estos son retoques que necesitamos hacer. Tuvimos que probar nuestro juego para verlas, pero las nubes en realidad están desovando una encima de la otra Eso no es bueno. Esto no es exactamente lo que queremos. Sigamos adelante y en realidad arreglemos esto un poco. Lo primero, afortunadamente, es que en realidad hemos creado todos nuestros scripts de forma prácticamente dinámica. Tenemos esta variable de desplazamiento por aquí, que denota qué tan lejos deberían estar las nubes unas otras antes de generar una nueva, miramos esta, es negativa 5.55 esta es 4.2 Estas son técnicamente menos de 15 separadas, pero cuando realmente empezamos a agregar en nuestro script, no funciona exactamente así Lo que estamos tratando de cambiar es con qué frecuencia son, no cuánto engendran Volvemos al guión aquí que genera nuestro mapa. De hecho, podemos, hemos codificado este valor aquí a ocho y en realidad no es una variable que hayamos usado. Vamos a arreglar eso. Volvamos aquí y llamémoslo frecuencia de desove Asegurémonos de que establecemos eso a la variable de aquí. Obviamente, el offset es en realidad qué tan lejos se genera frente a la cámara Lo siento, me olvidé de eso. Por eso esos no sumaron. Pero qué tan lejos se reproducen el uno del otro está esta nueva variable en la que en realidad teníamos codificada y la arreglamos Ahora volvamos a la cámara principal y cambiemos eso a algo así como 12. Y veamos si eso se ve un poco mejor. La compensación es actualmente de 15. Veamos si engendramos en el primero de allá y el segundo Bien. 12 es un poco alto. Vamos a ponerla en algo así como diez. ver si eso funciona. Diez se ve bastante prometedor. Creo que eso podría ser bueno. Sí. Todo bien. De hecho voy a hacer 11 solo porque sí quiero cambiar algunas cosas más sobre esto. La segunda cosa que en realidad quiero hacer, detener esto. Quiero cambiar esto a 11. Segundo, no me gusta el hecho de que las nubes estén desovando justo en la parte inferior del mapa, así que déjame cambiar esta Y mínima a menos cuatro De hecho voy a hacer que la Y máxima sea algo así como dos. Es un poco más fácil mover las nubes hacia arriba y hacia abajo. Entonces obviamente necesito cambiar mi altura de salto de jugadores a algo más como diez, o tal vez incluso 12, para que puedan saltar correctamente a las nuevas nubes. Veamos, con todos estos retoques, ahora tenemos un juego de sentimiento ligeramente diferente El jugador puede saltar mucho más alto. A lo mejor 12 es un poco alto, pero puedo arreglarlo obviamente. Hagámoslo tal vez diez y volvamos a ver cómo se ve. Ahora con la altura de salto de diez, yo diría que se ve mucho mejor. La escala de gravedad podría ser un poco más baja. Ccigüeñas flotando hacia el suelo, pero esto en realidad parece una figura bastante decente para mi juego Yo puedo dar ese salto, solo que a lo mejor tengo que cambiarlo un poco también. Podría hacer que la altura del salto sea un poco más alta, pero luego la escala de gravedad también. Pero parece que todos estos son realmente posibles con esta nueva variable que he decidido que en realidad es bastante buena. Y podemos ver ahora que hemos hecho un juego un poco más guapa. Todo está un poco más limpio y todo se ve mucho mejor. Lo único que voy a cambiar antes de terminar este video, sé que ha sido bastante largo, es que voy a hacer todos los sprites cada vez un poco más pequeños Voy a hacer uno, hacerlos un juego bastante más pequeño. Vamos a decir a 12. Si, yo diría que 12 es bastante bueno, como dije. Porque ahora he decidido hacer mis sprites un poco más pequeños Voy a tener que, obviamente, ajustar todos mis colisionadores y tal vez la frecuencia de generación de la nube para que sigan estando a la misma distancia Pero debido a la forma en que hemos codificado nuestros guiones, esto es en realidad bastante fácil de hacer. Y sí te recomiendo que sigas adaptando tu juego a medida que lo desarrollas. Es un aspecto muy normal del desarrollo de juegos cambiar tu juego a medida que lo estás haciendo. Y esto puede parecer molesto estar constantemente haciendo cambios en tu juego y tener que ir a arreglar las cosas. Pero créeme, es mucho mejor que la alternativa de tener un juego, con el que no estás particularmente contento porque no querías cambiar nada. Así que asegúrate de estar adaptando constantemente tu juego para que refleje exactamente lo que quieres. Quiero que mi juego tenga sprites un poco más pequeños. Voy a tener que ajustar todas mis fichas, mis prefabricados así como los colisionadores sobre Tal vez en casi todos mis sprites en realidad en mi reproductor también Y entonces solo voy a tener que tal vez ajustar el script de generación de mapas con qué frecuencia tienen deporte, porque quiero que estén al mismo tipo de distancia entre sí Así que voy a tener que hacer de eso un valor un poco más pequeño también. Pero una vez que haya hecho todo eso, no debería tardar demasiado y voy a tener un juego, que probablemente voy a estar mucho con el que probablemente voy a estar mucho más contento porque refleja algo de lo que tengo en mente. Fresco. Y entonces lo último es simplemente probar. Quizá tengamos que cambiar estas variables una vez más antes de terminar el video, pero déjame ver. Porque como que quería estar saltando de nube en nube. Oh, se me olvidó ajustar el planeador de caja del jugador. Hagámoslo rápido. Y la propia nube en sí, creo que debería estar bien, pero déjame asegurarme de que debería ser buena para el jugador. Veamos las nubes. Solo ajusta esos también. Debería estar bien. Voy a copiar este componente, así que tengo que hacer lo mismo por aquí y pegar sus valores. Es como copiar y pegar debería ser bueno. Voy a hacer lo mismo con todos los prefabricados solo para asegurarme de no tener que rehacer esos Permítanme seguir adelante y pegar los valores de los componentes para todos estos. Ahora sé que parece que hemos hecho un montón de cosas y luego lo cambiamos, y luego lo hicimos de nuevo y lo cambiamos. En realidad no es algo malo. Significa que estás siguiendo un juego específico que tienes en mente. Y el hecho de que estés ajustando las cosas y cambiándolas significa que se parece un poco más a un organismo real que a esta cosa estática Y eso es lo que debería ser un juego a medida que lo estás desarrollando. Pero de todos modos, veamos si eso es realmente pre adaptado con lo que quiero. Tengo saltos altos, tengo de nube en nube. Esto en realidad se ve mucho mejor, en mi opinión. Creo que en realidad es bastante bueno. Esto es realmente genial. Tenemos prácticamente todo lo que trato de guardar la escena en modo play, que no se te permite hacer. Tenemos prácticamente todo lo que realmente quería en este momento del juego. Tienes nubes a las que puedes saltar, tienes obstáculos en ellas. Esto en realidad es bastante genial. Obviamente no se ve genial porque el jugador no está animado y pincha bolas. Ahora los picos se mueven o cualquier cosa. Vamos a comenzar la animación en el siguiente video. Pero ojalá que si lo siguieras, tienes un juego un poco más parecido. A pesar de que acabamos de agregar sprites y en realidad no cambiamos mucho más, puedes ver, obviamente tuvimos que ajustar muchas de las partes de nuestro juego porque agregamos los sprites en, puedes agregar sprites desde Pero creo que muchos desarrolladores prefieren construirlo primero con plantillas y luego simplemente ajustar las cosas a medida que van porque lo hace más fácil. No tienes que hacer todo el arte antes de empezar. Pero esto es en realidad todo lo que queremos hacer hoy. Y creo que es seguro decir que nuestro juego se ve mucho mejor ahora que al inicio del video. Vamos a ver en el siguiente video, después de haber agregado en animación, cómo el juego realmente comienza a cobrar vida. Y vamos a hacer algunos retoques más con el jugador para hacerle enfrentar al revés cuando esté girando a izquierda y derecha Lo que mejorará mucho cómo se ve el juego. Pero por ahora creo que se ve mucho mejor que cuando empezamos. Y ojalá hayas podido seguir y agregar estos o tus propios sprites al juego. Gracias. 8. 7. Animar a nuestros personajes: Aquí y bienvenidos de nuevo a Unity. En el último episodio, agregamos todos nuestros sprites a nuestros juegos Tenemos un menor para nuestro jugador. Tenemos un montón de nubes para las plataformas. Y tenemos bolas puntiagudos y picos en las nubes para las cosas que tenemos para esquivar los obstáculos Obviamente, tuvimos que pasar bastante tiempo el último episodio ajustando las cosas y moviéndolas para que estén todas en la posición correcta Tuve que hacerlo un poco después solo para asegurarme de que en realidad todos estén exactamente donde deberían estar Pero eso va a ser subjetivo para ti. Obviamente sabes dónde está la posición correcta para tu juego y para tu proyecto también. A pesar de que aunque estés siguiendo conmigo, no va a parecerse exactamente a la mía. Los vas a tener exactamente en la misma posición. Entonces, siempre y cuando todo se vea bien y esté todo en la posición correcta para tu juego, entonces eso es genial podemos pasar a la animación. Porque si jugamos el juego ahora mismo, podemos ver aunque todos los sprites y todo se vea bien, ahora se ve bien como un marco congelado Pero en el momento en que empezamos a movernos, el hecho de que el jugador no se mueve en absoluto y como simplemente se desliza y está bastante sin vida En realidad, hace que el juego parezca un poco barato o apresurado, y obviamente no queremos que nuestro juego se vea barato o apresurado, pero queremos parecernos un poco más a un juego real que verías en Steam o en arcade, o donde sea. Entonces para hacer eso, en realidad vamos a tener que agregar animación a nuestro juego. Y la forma en que vamos a animar, te voy a mostrar, es un proceso decentemente complicado si te metes bastante Porque obviamente hay trabajos enteros construidos alrededor de la animación para juegos en esos juegos masivos que ves como Treble Studios Es muy diferente a lo que vamos a hacer hoy, pero en Unity, aunque es un proceso bastante complicado, en realidad proporciona una manera bastante fácil de hacerlo. Y te voy a estar guiando a través de ello y vas a encontrar que probablemente lo vas a conseguir bastante rápido. Antes de adelantarme demasiado, solo presentemos lo que vamos a estar haciendo. Vamos a estar animando solo al jugador por ahora. Obviamente, a medida que avanzamos más en el juego, puede que haya otras cosas que tengamos que animar. Y podríamos animar cosas nuevas a medida que las agreguemos. Pero por ahora, empecemos a animar al jugador porque esa es la parte más importante Para comenzar, vamos a entrar en los activos y crear una nueva carpeta llamada Animación. Aquí es donde vamos a almacenar todos nuestros archivos de animación. Ahora al igual que como son los sprites los archivos, nuestro código son archivos. Incluso nuestras escenas y nuestros prefabricados son en realidad archivos también Las animaciones que creamos también van a ser archivos. Y aquí es importante para alguna terminología. Una animación o un clip de animación es como un video en círculo de una cosa específica Como una animación de running. O una animación de salto. Eso va a ser un video en circuito, puedes llamarlo, pero es un cambio de loops de Entonces va a tener un movimiento de cierta manera. Así va a ser como se llama una de las animaciones. Entonces la forma en que vamos a animar en Unity es que vamos a almacenar esos archivos de animación porque están guardados como archivos dentro de esta carpeta Entonces vamos a crear un nuevo objeto llamado el controlador va a decirle a Unity cuál usar en qué punto, y ahí es donde ponemos en nuestra lógica. Pero antes de adelantarme demasiado, empecemos con las animaciones reales. Ahora, en términos de los sprites reales que vamos a usar, obviamente he hecho algunos sprites más para las animaciones Vamos a estar haciendo lo que se llama animación basada en sprites, donde tienes un montón de sprites diferentes Como si tuvieras un sprite corriendo donde tal vez esta pierna se levante hacia arriba y luego una hacia abajo, y luego una a un lado, y luego otra hacia abajo otra vez Y obviamente ya hice esos sprites. Por supuesto que estarán vinculados por este video. Básicamente, todo lo que nuestra animación va a hacer es decirle a Unity cuál de esos sprites cambiar a qué hora. En realidad es bastante fácil. Hay otro tipo de animación donde básicamente tomas todo el objeto que has creado aquí y haces todas estas pequeñas partes del sub objeto del cuerpo. El un brazo sería un objeto, la una pierna sería un objeto. Básicamente dígale a Unity, bien, rote esto en este momento, luego muévelo hacia atrás en este momento. Y eso es bastante más complicado de lo que vamos a hacer hoy. Obviamente es una forma mucho mejor de animar para cosas más complicadas Como si no estás creando un juego de Pixelart, por ejemplo Eso es más o menos como vas a tener que animar en realidad Porque no puedes crear un sprite diferente para cada fotograma que quieras que sea Pero para Pilar, tal como solían hacerlo en los viejos tiempos, vamos a usar la animación basada en sprites Y en realidad se ve mucho mejor para piloto en mi opinión. Nunca puedes realmente conseguirlo exactamente como lo quieres sin usar esto para Pix L, Eso es lo que vamos a estar haciendo. Ahora, obviamente, una vez que hayas descargado todos esos archivos sprite, voy a portar los mismos. Estos van a ser los sprites que necesitamos para nuestra animación de running Y son sprites menos del dos al seis. Ahora en realidad los acabo de poner en el lugar equivocado. Déjame cortarlas y ponerlas en sprites. Debido a que son sprites, hay animaciones. Pero obviamente cuando lo importas directamente la carpeta sprite y necesitamos hacer los dos cambios que hicimos la última vez, establecer esto en 12 y establecer esto a punto. Sin filtro. Podemos ver ahora que son exactamente los mismos que todos mis otros sprites. Si voy aquí a menor, podemos ver que no hay absolutamente ninguna diferencia entre estos dos excepto el nombre. Si voy a mi jugador, en realidad puedo arrastrarlos como sprites. Diré, bien, quiero que el jugador sea un sprite corriendo. Y podemos ver ahora que simplemente está atrapado ahí. Pero siempre no queremos que nuestro jugador esté siempre en ese sprite corriendo Queremos que cambie de un sprite a otro. Y para ello vamos a necesitar un nuevo componente llamado animador, como ya hemos buscado, pero tenemos que agregar este animador Este animador básicamente permite que la unidad diga, bueno, esto es algo que tiene un controlador de animación, o esto es algo que tiene animaciones Va a estar intercambiando entre. Explico toda la terminología a medida que lleguemos a ella, pero este componente de aquí es básicamente solo una referencia al hecho de que lo estamos animando La referencia al hecho de que cuenta con un controlador. Ahora para agregar un controlador, que es lo clave que necesitamos aquí, vamos a la animación de ventana, y luego a la animación otra vez. Y eso va a abrir la segunda ventana por aquí. Animación de ventana. Animación. O puedes hacer clic en el control seis y abres esta ventana de animación y va a decir, para comenzar el reproductor animado, crear un clip de animación que sea como correr o saltar. Ese es el clip real del que estábamos hablando. Esto realiza un seguimiento de qué objeto hemos seleccionado actualmente. Si seleccionamos cámara principal, dice. Crea un animador y un clip de animación. Obviamente solo decía crear un clip de animación porque ya tenemos un animador para jugador Pero creo que si haces clic en crear aquí, solo va a crear ese objeto animador para ti automáticamente Simplemente es bueno crearte a ti mismo para puedas ser consciente de que es parte del proceso. De todos modos, para crear un clip de animación, simplemente hacemos clic en el lugar de aquí. Queremos entrar en animación assets, porque ahí es donde voy a estar almacenando mis clips y voy a llamarlo player run. Ahora he creado lo que se llama un clip, y podemos ver que mucho de esto ahora en realidad se ha llenado. Ahora tenemos lo que se llama un controlador. Si cerramos esto y volvemos a nuestra animación, tenemos dos archivos. Tenemos esta carrera de jugador, que es mi nuevo clip. Pero también tengo este nuevo objeto por aquí que se llama controlador animador más bien Este es el corazón del animador. Esto va a ser lo que le está diciendo qué animación hacer, en qué momento. Si hacemos doble clic sobre esto, en realidad podemos ver esta nueva ventana abierta por aquí. Y este es mi controlador, este es mi animador reproductor Este de aquí es mi clip de animación. Para dar un breve resumen un poco atrás, este es un componente que acabamos de agregar. Esto básicamente solo dice, bien, este objeto es algo que tiene un controlador. Este controlador es lo que estoy viendo por aquí. Esto es decir, bien, ¿en qué animación quiero estar, en qué momento? Y esta animación es este clip de aquí, que son las cosas específicas. Voy a tener uno corriendo, voy a tener uno saltando, voy a tener uno inactivo. Y entonces mi controlador va a decir, bien, estar en esta cuando esté haciendo esto, Estar en esta cuando esté haciendo esto, estar en esta. Cuando estoy haciendo esto, puedes pensar en la carrera del jugador. O las animaciones como hacer un ciclo de videos, correr, saltar, caer, etcétera. Se puede pensar en este jugador como lo que le dice a Unity, bien, ¿qué video reproducir, a qué hora? Y entonces este controlador animador básicamente solo le dice al objeto, bien, tengo este controlador de reproductor conectado Utilízalo tipo de cosas. Entonces esto es mucho menos importante. Pero se basa solo diciendo, bien, esto es algo que tiene un controlador y hay que usar el controlador. Obviamente es importante. Si deshabilitaba no funcionaría. Pero este controlador es en realidad un archivo dentro de mi juego. Entonces necesito crear un enlace a este controlador y a este objeto específico, que es lo que Unity ha hecho por mí aquí. Pero de todos modos, no te preocupes demasiado por lo que significan cada una de estas cosas, solo sigue como estoy haciendo, obviamente acabamos de crear un animador y luego tenemos animación de animación de ventana Y hemos creado un nuevo archivo para mi reproductor llamado player run. Y eso creó un controlador para nosotros automáticamente. Así que comencemos a animar las carreras de los jugadores. Vamos a acercarnos a mi reproductor. Y voy a hacer clic en este botón Grabar, que básicamente dice que actualmente estoy grabando cosas. Mi animación. En la primera parte de mi animación, quiero estar en este sprite de aquí Voy a elegir menos dos por aquí. Este es el primer sprite que quiero. La razón por la que tengo este botón de grabación abajo es que básicamente dice que los cambios que están haciendo editor ahora son en realidad parte de la animación. Si lo muevo por aquí que va a cambiar mi posición como parte de la animación. Pero en realidad no quiero eso. Yo sólo quiero que sea el sprite. Voy a cambiar mi sprite a menos dos, Mover un cuarto de segundo Obviamente 60 es un segundo en esta vista de aquí. Y si hago clic en Reproducir, aún no puedo ver nada porque no he hecho nada. Pero te lo mostraré más tarde. Voy a cambiar a menos tres. Quiero que en realidad sea a los 15. Entonces a los 30 quiero elegir menos cuatro. Entonces a los 45 quiero elegir menos cinco. Tengo los cuatro sprites que vas a hacer mi animación de running Se puede ver que se juntan ahí. De hecho quiero agregar una cosa más por aquí. Realmente no importa lo que agregue, pero mientras tenga algo aquí, voy a volver a menos dos. Mientras tenga algo ahí, la unidad sabe que esta animación es exactamente de 1 segundo de duración. Este marco en realidad solo dura un fotograma, y luego vuelve a allí. No tengo esto aquí, aunque técnicamente no es parte de la animación de running. Unity va a saltarse esto o más bien ejecutarlo por un fotograma y luego volver a ese. No quiero eso, déjame asegurarme de que tengo algo aquí. Si hago clic en reproducir, en realidad podemos ver ese tipo de unión y se ve bien. Se ve bastante genial. En mi opinión, no soy el mejor animador, pero esta va a ser nuestra animación de running para nuestro juego Siempre podemos ajustar la velocidad y cosas así dentro de este controlador real Si estamos por aquí, pincha sobre la animación, podemos cambiar la velocidad de reproducción cuando estemos en el juego, pero por ahora es como una animación básica. Yo diría que se ve bastante bien para correr. Sigamos adelante y creamos dos animaciones más. Jugador Ídolo. Esto en realidad va a ser algo increíblemente sencillo. Solo vamos a asegurarnos de que Unity sepa que queremos estar en este sprite, así que no es realmente una animación, es como una configuración de sprite Pero vamos a estar usándolo para decirle a Unity. Bien, asegúrate de estar en ese sprite. Entonces nuestra animación es solo un solo sprite. Vamos a hacer exactamente lo mismo para saltar, Jugar un salto, y vamos a elegir sprite menos seis, que es nuestra animación de salto Ver por aquí ahora está fuera saltando. Si o bien vamos a ser así, si estamos corriendo, vamos a estar haciendo eso. Así que ahora tenemos todas nuestras animaciones completadas y arregladas. Ahora lo que queda por hacer es construir la lógica para decirle cuál hacer en qué momento. Y entonces lo último que tenemos que hacer es simplemente agregar un poco de código que va a ser crucial para definir esa lógica. Para crear esa lógica, vamos a ir a estos parámetros aquí. Y estas son como condiciones que queremos establecer. Entonces queremos tener una condición para saber si estamos corriendo o no, obviamente, porque necesitamos saber si reproducir las animaciones en ejecución. Vamos a llamarlo está funcionando. Vamos a crear otros mil millones que vamos a llamar está fundamentado porque queremos saber si estamos saltando o no o mejor dicho si estamos en el suelo por aquí. Si realmente miramos estos, estos son dos mil millones. Pueden ser verdaderas o falsas. Lo que voy a hacer ahora es que voy a crear una lógica que básicamente define estas tres animaciones como jugar en ciertos momentos en función de cuál de estas es verdadera y cuáles son falsas. Entonces para hacer eso, voy a ir por aquí a cualquier estado. Esto en realidad es muy, muy útil en términos del animador Y básicamente es decir, bien, no importa qué animación se esté reproduciendo, porque estos son lo que se llaman nodos de estado. Y son como decir, bueno, siempre y cuando esté en la animación de ejecución del jugador, estoy en este estado de ejecución del jugador y puedo estar en el estado inactivo del jugador. Puedo estar en estado de salto de jugador. Estamos creando una máquina de estado muy básica. Pero esto cualquier nodo de estado básicamente nos permite decir, bien, no importa en qué estado me encuentre, ir de ahí a esto. Y la forma en que vamos a ir de ahí a esto, o más bien entre estas diferentes animaciones, es usar transiciones. Si sigo adelante y leo por aquí, puedo ir a hacer la transición, ¿de acuerdo? Transición de eso a eso. Y dentro de esta transición es donde puse mi lógica. Digamos que quiero, mientras no esté corriendo, es correr es falso. Quiero ir a ralentí. Mientras no esté conectado a tierra, quiero pasar de ocioso a saltar. Y mientras esté conectado a tierra quiero ir de saltar a correr. Esto podría quedar bien como si tuviéramos un tipo de estructura rudimentaria bastante básica aquí Pero esto en realidad es muy defectuoso porque no tenemos ninguna forma, primer lugar, de ir de carrera a salto Mientras estemos corriendo y saltando, solo podremos ir a ralentí. Si estamos corriendo y no paramos de correr y saltamos, no nos vamos a mover, vamos a quedarnos en mi animación de running. Encima de eso, si estoy saltando y de hecho estoy quieto, cuando aterrice, todavía voy a volver a correr y luego voy a hacer la transición a ocioso porque tengo esta cosa por aquí. Pero es una muy especie de máquina defectuosa porque ni siquiera tengo estados definiendo para todo Si quiero que esto sea realmente completo, tendría que hacer una transición ahí, una transición por allá, así como una transición por allá. Y entonces sería un poco más completo. Pero todo esto es una forma bastante complicada de hacerlo. Y no voy a estar usando esto. Quiero borrar estos. En cambio voy a usar este modo de cualquier estado, lo que va a hacer que este proceso sea mucho más fácil. En primer lugar, voy a ir de cualquier estado, voy a decir hacer la transición tal como lo hizo la última vez, clic derecho y clic. Hacer transición para ir a ralentí. Y digo, mientras no esté corriendo, mientras esté castigado, quiero estar inactivo porque eso significa que estoy quieto en el suelo por aquí. Quiero decir que mientras esté conectado a tierra, decir, no estoy en el aire y estoy corriendo, entonces quiero estar corriendo por aquí. Quiero decir que cada vez que no estoy conectado a tierra, quiero estar saltando. Porque mi animación de salto es en realidad más como una caída en la animación. Puedes ver por aquí si entramos en el juego y hacemos clic en animación, seleccionas al jugador, miramos nuestra animación de salto, jugamos, en realidad es como una animación de caída. Obviamente funciona para saltar o caer, pero va a quedar bastante bien cuando lo usamos porque va a jugar cada vez que saltemos o incluso si simplemente nos caemos de algo, que es exactamente lo que queremos. Ahora bien, esto es prácticamente casi todo lo que necesitamos hacer por nuestra máquina lógica. Pero hay algunos retoques más. En primer lugar, vamos a establecer esto como el valor predeterminado hacemos clic derecho a ir a establecer como estado predeterminado de capa. Realmente no hace mucha diferencia, pero simplemente parece que la animación inactiva debería ser una predeterminada en lugar de la que se ejecuta. Se configuró automáticamente para correr porque es el primero que hicimos. Pero en realidad no hace diferencia, está completamente bien. Lo segundo que queremos hacer es que queremos establecer esta caída de duración de transición de ellos a cero. Porque encuentro que con Pixi Lad se ve mucho mejor si es cero. A veces puedes retocar con un poco porque quizás quieras ser 0.1 0.2 Prefiero poner a cero, pero en realidad podría cambiar eso también Veré, sólo por ahora, voy a poner a cero y asegurarme de que todas mis condiciones sean las adecuadas. Mientras no esté corriendo y esté conectado a tierra, quiero estar inactivo arriba. Mientras esté conectado a tierra y corriendo, voy a estar corriendo. Sí. Y cada vez que no estoy castigada quiero estar saltando. Perfecto. Así que esto es en realidad prácticamente todo lo que necesitamos hacer realmente. Si hago clic en reproducir ahora mismo puedes ver que tengo a mi jugador y se va a quedar en la animación de salto porque no estaba castigada. Y en realidad está, si solo lo miramos por aquí, actualmente tenemos un jugador y está saltando. Pero en base a lo que elijo, digamos que establecí tierra verdadera. Ahora en realidad voy a estar inactivo. Ya ves que me quedo ahí. Si configuro correr verdadero, debería estar en mi estado de funcionamiento, que creo que soy. Parece que todo eso está funcionando. Todo debería estar funcionando bien por aquí. De hecho, parece que nuestras transiciones son bastante buenas. Pero obviamente no queremos tener que estar haciendo clic en esto basándonos en lo que queremos cuando realmente estamos jugando el juego. Queremos poder decir, bien, cuando estoy haciendo esto en concreto, establecer estos, hacer algo cuando estoy corriendo, configurar esto para correr, lugar de que me haga venir y hacer clic ahí. Y vamos a usar código para hacer eso. Vayamos aquí a mis scripts de código. Y voy a abrir movimiento de jugador. Vamos a usar exactamente el mismo guión que usamos para denotar cuando me muevo para básicamente mostrar si voy a estar reproduciendo ciertas animaciones Y voy a antes que nada, crear una referencia a ese animador, llamarlo Anum A pesar de que me refiero al animador, estoy confiriendo al controlador animador Dice interfaz para controlar el sistema de animación Mec Anum Pero sí, básicamente me refiero al controlador. Voy a estar haciendo referencia a estos parámetros que acabamos de definir. Voy a ir por aquí, volver a mi guión y voy a decir debajo de estas cosas de colisión porque aquí es cuando básicamente cambiamos, esto es variable de tierra. Se puede ver que atualmente ya tengo una variable aquí que me dice si están en el suelo De hecho, necesito asegurarme de que básicamente esté alineado con mi parámetro animador Entonces accedes al parámetro animadores, vamos anambool, abrimos paréntesis y dices el nombre del bool, vamos anambool, abrimos paréntesis y dices el nombre del bool, My b está castigado. Entonces voy a configurarlo a mi variable con conexión a tierra. En realidad solo voy a hacer esto por aquí, y por aquí, podría hacer esto en cada fotograma si quisiera. La razón por la que solo lo estoy haciendo aquí es porque estos son en realidad los únicos dos puntos en todo mi guión donde cambié la variable ground. Y no hay ningún otro lugar donde pueda cambiar. Entonces esta es la única vez que necesito actualizar mi animador y decir, bien, si he chocado con algo es verdad Y luego asegurarme de que mi animador lo ponga en verdad. Si dejo algo es falso. Y asegúrate de que mi animador sepa que tengo que poner en falso Y esto es en realidad solo la base de lo que necesitamos para nuestro sistema está a tierra. Si tuviéramos que jugar el juego ahora en realidad debería funcionar bastante bien. Cada vez que aterrizamos vamos a tener está conectado a tierra, este conjunto a true y luego va a reproducir la animación correcta ya sea inactivo o saltar. Pero todavía no tenemos ninguna forma de controlar mi animación está ejecutando. Así que vamos a agregar una línea de código por aquí. Y esa sección, para ser muy sencilla, sólo vamos a anim Set bool, igual que la última vez. Queremos establecer el bulow está corriendo donde vamos a determinar si estamos corriendo o no está usando este x float Ahora recuerda que este x float se cambia en función de qué teclas están presionando hacia abajo. Siempre y cuando estén presionando hacia abajo a o D, o las flechas hacia atrás o hacia adelante, básicamente va a decir, bien, establecer x en un número que nos permita decir, siempre y cuando x sea un número que estamos ejecutando. Pero mientras x no sea un número, no estamos corriendo. Y no tenemos que preocuparnos por si estamos corriendo en el aire o no. Porque si recordamos, nuestro controlador de animación en realidad no tiene en cuenta si estamos corriendo o no en el aire. Todo lo que necesitamos para correr es el hecho de que estamos conectados a tierra y corriendo. Y mientras no estemos conectados a tierra, aunque estemos corriendo, todavía va a reproducir la animación correcta. Deberíamos tener que preocuparnos por establecer esta variable se está ejecutando en función de si nos estamos moviendo o no. Eso lo vamos a hacer. Vamos a escribir se está ejecutando, establecerlo en x no es igual a cero. Eso va a decir cuando x es igual a cero, esto va a ser falso porque esto dice que x no es igual a cero. Mientras x no sea cero, esto va a ser cierto. Se va a decir, bien, conjunto corriendo a esta declaración. Esta afirmación en realidad está devolviendo un booleano verdadero o falso Cuando x es cero, devuelve false. Y cuando x no es cero, devuelve true. Estamos diciendo bien, siempre y cuando x no sea cero. En otras palabras, siempre y cuando estemos moviendo el conjunto va corriendo a la verdad. Cuando x es cero, set se ejecuta a false. Esto en realidad va a ser todo el código que necesitamos para configurar perfectamente a nuestro animador Si volvemos a Unity, entrar en nuestra escena, asegurarnos de que tenemos una referencia a ese animador que acabamos de crear por aquí, arrástrelo adentro, así como así. Golpeamos play. De hecho, deberíamos ver que todas las animaciones cobran vida perfectamente bien. Podemos ver que caemos, aterrizamos, y tenemos nuestra animación de running. Oh, no parece que esté funcionando. Parece que es solo el primer fotograma lo cual es bastante interesante. Entonces tenemos algo que tenemos que resolver ahí fuera, pero por ahora, esto en realidad parece que todo lo demás está funcionando bien. Deberíamos tener que aclarar ¿por qué nuestra animación en ejecución solo reproduce el primer fotograma? Y es esto de aquí puede hacer la transición a uno mismo. En realidad es algo que olvidé mencionar, esto puede hacer la transición solo del autoestado. Realmente tienes que recordar no usar si estás usando este controlador de estado alguno. Me olvidé de eso. Pero lo que va a pasar es con estas dos animaciones, no lo notamos porque estas animaciones en realidad no son realmente animaciones. Son una especie de solo tipo de marcos que estábamos continuamente haciendo la transición hacia ellos. Pero no notamos una diferencia porque son solo un fotograma. Pero podíamos ver con player run, solo estábamos haciendo la transición al inicio de la animación Si desmarcamos eso, no nos va a permitir continuamente básicamente estar refrescando esto Estamos diciendo que solo te muevas a ello una vez y no sigas moviéndote a él. Puedes quedarte en él siempre y cuando no te mudes a la otra. Mientras desmarcamos esto, en realidad va a arreglarlo todo y lo va a hacer para que no siga refrescando continuamente su transición a esta cosa Simplemente transita una vez. Y entonces cuando se trina para hacer la transición a otros lugares, lo hace Pero no necesita seguir yendo hacia sí mismo, lo cual es bueno. Y si minuto hemos hecho esa solución, en realidad eso debería ser todo lo que necesitamos hacer para tener un sistema de animación que funcione. Ahora podemos ver que corremos como normales, tal como queríamos. Obviamente no damos la vuelta todavía, que es lo último que voy a añadir antes de cerrar este video. Pero sí corremos y saltamos, tal como queríamos. Lo primero que voy a hacer es que solo voy a hacer esto un poco más rápido porque creo que uno es un poco lento. Y ojalá eso sea todo lo que necesitamos para que nuestro juego se vea un poco más realista Sí, ya lo podemos ver. Se ve bastante bien ahora en realidad tenemos todo funcionando, y tenemos un salto. Y en realidad todo se ve mucho mejor de lo que era antes. Pero hay una cosa que tenemos que cambiar, y es el hecho de que el jugador siempre está de cara hacia adelante. Y eso en realidad es un cambio muy fácil. Todo lo que vamos a hacer es que vamos a ir por aquí, bajar a esta declaración de actualización fija. Y vamos a decir si RB, velocidad x es menor que cero. En otras palabras, si nos estamos moviendo hacia atrás, entonces establece que los jugadores transformen su rotación. Vamos a escribir Cuaternion Euler. Sólo una forma elegante de decir ángulos. No te preocupes demasiado por ello. Vamos a establecerlo a nuestro x cero, nuestro Y a 180, y nuestro X00 Si entramos en nuestro juego, en realidad podemos ver qué va a hacer eso. Abre mi juego de plataformas aquí, ve al jugador. Podemos ver que los tenemos puestos a cero. Si pongo una y en 180, va a darle la vuelta a mi jugador, que es exactamente lo que quiero. Y entonces mientras me haya puesto a cero, no lo es. Y eso va a actualizar todas nuestras animaciones así así para nosotros. Porque en realidad estamos rotando el objeto mismo, lo que en realidad es bastante útil. Sólo vamos a agregar una línea más de código por aquí que diga otra cosa si R vlocity x es mayor que cero, decir, si estamos avanzando, entonces queremos estar teniendo una rotación normal Esto obviamente, como dije, va a encargarse de toda la animación en realidad para nosotros, debería ser todo hecho automáticamente. Si le pego play, ya podemos ver este nuevo código nos va a permitir enfrentarnos al revés, lo que en realidad va a quedar mucho mejor en nuestro juego, ojalá ahora se pueda ver que todo cobra vida, y nuestro juego se ve mucho mejor que antes. Y tenemos todas mis animaciones y todo funcionando bastante a la perfección. Eso es bastante genial. Ojalá hayas podido seguirlo y tienes un juego de aspecto bastante similar y se ve mucho mejor de lo que tenía originalmente. Y como que te metes en una idea de cómo vamos a estar haciendo el resto de este juego. Pero siempre y cuando por ahora, si tienes todo funcionando igual que yo, eso es increíble. Y espero que hayas podido seguir lo que hemos estado haciendo, y hayas podido animar a tu propio jugador de la misma manera que yo En el siguiente video, vamos a estar agregando enemigos y un montón de nuevos enemigos interesantes. Y vamos a estar haciendo un montón de llantas más con esos enemigos sólo para hacer nuestro juego un poco más variado. Y luego a partir de entonces empezaremos con todas las últimas cosas que tienes que hacer, que obviamente es la detección de golpes, y el audio y el sonido, todo lo demás después de eso. Así como algunos toques finales solo para que se vea mejor. Y también un bucle de juego por supuesto. Pero ahora mismo tenemos los mismos bloques de construcción de nuestro juego como que están terminados. Y hemos añadido en sprites para que se vea mucho mejor. Entonces eso es todo para este video. Y en el siguiente video, como dije, vamos a agregar algunos enemigos más interesantes. Pero por ahora, si tienes todo funcionando como yo, eso es genial. Y vamos a empezar con algún nuevo desarrollo siguiente video. Gracias. 9. 8. Añade enemigos más interesantes: Hola, y bienvenidos de nuevo a Unity. Ahora en este episodio, vamos a estar agregando algunos enemigos más interesantes a nuestro juego. Porque ahora mismo solo tenemos pinchos y bolas puntiformes. A pesar de que estas son algo variadas en todas las llantas que tenemos, no son los tipos de enemigos más interesantes y en realidad son solo obstáculos. Vamos a agregar dos nuevos tipos de enemigos, y obviamente ya he construido picos para estos. Uno de ellos va a ser un enemigo patrullero, y el otro va a ser como un enemigo cronometrado. De vez en cuando es peligroso, pero luego se apaga y luego no es peligroso. Y para empezar, primero vamos a importar todas las necesidades de la bola de sprites Voy a hacer clic derecho en Importar Nuevo Ácido. Y estos son en realidad todos los nuevos sprites que necesitamos para nuestro enemigo Así que tenemos cuatro sprites robot, dos sprites para este impactante enemigo, y luego un sprite extra para nuestra La razón por la que obtuvimos este sprite de bola de pico extra es porque en realidad vamos a estar animando un poco nuestra bola de espiga Y eso es en realidad con lo que voy a empezar primero, y para asegurarme de que todos estos estén establecidos en la configuración correcta obviamente. Y en realidad haz esto con solo seleccionar cada sprite individual Los va a sobrescribir, pero está bien siempre y cuando sean todos iguales Filtro de 12 puntos y pulsa Aplicar y todo lo que ahora sabemos es lo mismo. Y así también es como puedes comprobar que tienes todos tus sprites igual Siempre y cuando estos estén llenos, estás bien. Vamos a entrar en prefabricados. Vamos a crear un par de nuevos prefabs. Voy a abrir este y en realidad solo voy a copiar estos a través así que mantengo las etiquetas iguales. Este va a ser nuestro robot, y este va a ser como una batería. Antes de hacer eso, en realidad voy a arreglar primero mi bola de espiga animando y voy a ir a animación de ventana, animación Todas esas cosas extra que hicimos en términos de fases y estados y todas esas cosas, eso es animación. Y es bastante simple, pero podemos tener una animación aún más simple si solo tenemos una animación. Si queremos un tipo de animación continua que esté jugando todo el tiempo, que es lo que quiero con una bola de espiga, todo lo que tengo que hacer es ir a crear, entrar en mis activos, ir a la animación, y llamarlo bola de pico Entonces cada medio segundo voy a querer cambiar al segundo sprite de bola de espiga, que es el que tengo allá Copia esto al otro lado y ve allí. Eso se puede ver en acción aquí. Esta va a ser nuestra animación de spikeball. Simplemente hace que el juego se vea un poco más interesante. Eso es en realidad todo lo que tenemos que hacer, porque si abrimos nuestra animación, podemos entrar en animación. Podemos abrir nuestra bola de espiga. Verás, tengo un estado. Claro. Pero no necesito ningún parámetro ni tránsito ni nada porque este es el único estado en el que quiero estar si vuelvo, siempre y cuando sea una bola de espiga obviamente, cual es ese objeto. Siempre y cuando vuelva a mi juego y pueda ver en el momento en que me sale una bola de pinchos, vea que la animación está funcionando perfección y hace que el juego se vea mucho mejor. Podría tener que mover estos un poco porque todavía se ven bastante cerca. Todo sigue siendo bastante grande, pero en realidad se ve bastante bien por ahora. Y las bolas de escupir se están animando tal como necesitamos que lo hagan. Ese es el tiempo de animación que vamos a tener para el resto de nuestros enemigos también. Volvamos por aquí con nuestro robot y empecemos, antes que nada animando este Voy a borrar el colisionador circular y voy a cambiar esto a sprite robot Entonces exactamente lo mismo es antes. Va a hacer un animador para mí, voy a ir a animación Assets Llámalo animación de robot. Entonces estoy, creo que tengo cuatro sprites robot diferentes. Y ellos solo van a ser el giro de la rueda. Y los ojos ligeramente cambiando de color. Ahí estamos. Podemos ver que en acción por aquí, la rueda obviamente va a girar. Y los ojos, y si lo puedes ver, cambian ligeramente de color y vuelven. Esa va a ser toda la animación que necesitamos para nuestro robot. Ahora ya tenemos nuestro robot ordenado. Hagamos exactamente lo mismo con nuestra última, que va a ser nuestra batería. Y éste va a ser un poco más complicado. Empecemos primero por ir. He cogido sorpresa en los archivos, no estoy seguro de por qué, Pero este va a ser el arranque para nuestra batería Tenemos esta batería por aquí. La forma en que va a funcionar esta animación, va a ser un poco diferente. Yo soy do, la razón por la que lo digo para el final es bastante específica. Todavía sólo vamos a tener una animación, pero va a ser una animación con un poco de lógica a ella de una manera diferente a la que teníamos antes. Vamos a llamarlo punto de batería. Básicamente no queremos querer animarlo. Digamos un buen rato, digamos 3 segundos. No queremos que pase nada durante los primeros 3 segundos, solo queremos quedarnos en este sprite actualmente estamos preparados impresionar a uno, nos quedamos ahí Entonces el minuto 3 segundos están arriba cuatro. Los siguientes 2 segundos queremos estar teniendo la animación de choque, que tengo sprites por aquí Solo asegúrate de que sea como 3 segundos. Para los próximos 2 segundos vamos a estar haciendo eso, y luego vamos a volver a lo normal. En realidad no necesitamos ponerlo después porque lo va a hacer por nosotros. Pero luego para el siguiente medio segundo por aquí, minuto 3 segundos están arriba, lo que podemos usar estas pequeñas cosas para saltar a lo siguiente. Un fotograma después, queremos cambiar a esta nueva animación de aquí, que es shock er, dos. Y podemos ver si ahí empezamos a cambiar la animación. Y ahí desde 1 segundo o más bien un fotograma después de 3 segundos hasta 20 fotogramas después. Vamos a querer entrar en esa, vamos a querer cambiarla y luego volver a ésta a los 40 y luego cambiarla otra vez. Podemos ver que se va a quedar así. Creo que deberíamos tenerlo una vez más. Cambiar hacia arriba. Creo que ese es el marco que queremos. Eso está mal, perdón, he copiado el mismo dos veces. Déjame ponerlo ahí. Entonces por aquí vamos a querer terminar la animación. Entonces va a estar quieto por 3 segundos y luego va a tener eso activo, y luego va a parar de nuevo. Y luego 3 segundos después se va a mover. Y esa va a ser la mesita de nuestro sprite de aquí. Y así también va a ser como trabaja el enemigo. Y tenemos que añadir un poco de lógica a esta animación, porque por fin hemos conseguido que esto funcione bien. Pero necesitamos tener algo que diga al juego cuándo está en este estado y cuándo no. Vamos a usar por aquí lo que se llama eventos. Así que asegurémonos de ir exactamente a un fotograma después de 3 segundos. Agreguemos un evento por aquí. Y también justo al final de nuestra animación por aquí. O mejor dicho en realidad lo voy a poner al inicio del nuevo, solo para que lo tengamos por aquí justo al inicio de nuestro marco para tener un evento más por aquí. Y voy a explicar cómo funcionan estos, pero básicamente hay formas de acceder al código adjunto a esta batería para decir, bueno, sí, esto es ahora tiene que estar activo y esto es lo que hay que hacer en este punto. Voy a empezar a agregar mis colisionadores. Ahora explica cómo vamos a conseguir que esta batería funcione, pero en realidad va a ser bastante simple. Empecemos por agregar el colisionador a esto. En realidad, agreguemos un colisionador de cajas. Estas son todas las partes que queremos que sean el minuto en que esté activo lo impactante. No quieres poder tocar nada de esto, todo este bit por aquí, así como esto de aquí, que va a ser la batería real en sí. Perfecto. Sólo voy a asegurarme establecer ambos de estos dos disparadores. Obviamente, si esto fuera un enemigo por sí solo así, sería completamente imposible de esquivar porque no hay forma de que no puedas tocar nada de esto. Pero ahí es donde los eventos van a ser útiles. Sólo vamos a tener estos planeadores de caja activos para ese periodo porque ambos son disparadores, así que obviamente vamos a estar caminando por ello de todos modos Pero para ese periodo van a estar activos y luego cuando ese periodo termine, no van a volver a estar activos. En realidad, vamos a codificar eso rápidamente. Vamos a crear un nuevo guión. llamaremos guión de batería. Vamos a cargarlo. Y también tendremos que crear un guión para otro enemigo también, el robot, al que llegaré en un minuto. Pero primero hagamos este guión de batería. Y en realidad sólo vamos a tener dos vacíos simples. Va a tener un vacío público, llámalo batería apagada. Voy a crear otro debajo y llamarlo batería encendida. Vamos a crear una referencia a nuestros dos planeadores de caja. Caja pública, diapositiva dos D, vamos a tener la casilla uno y llamarla caja dos. Todos estos chicos van a decir es cuando la batería está habilitada la casilla uno es igual a false, casilla dos habilitada es igual a false, Entonces vamos a hacer exactamente lo mismo con la batería encendida excepto configurarlas en true. Lo que va a decir es que el momento en que llame a este vacío por aquí, batería encendida permite a ambos planeadores de caja Pero en el momento en que llamo a este vacío por aquí batería los deshabilitan. En realidad vamos a empezar con ellos discapacitados también. Esto va a decir que en el momento en que este objeto se genere, no tiene nada activo Pero en el momento en que se está reproduciendo la impactante animación, queremos que esta esté activa y esta esté activa. Y porque es una etiqueta enemiga, entonces vamos a codificar lógicamente dice, bien, hay que recibir daño. Pero entonces cuando eso termine, queremos que esto vuelva a apagarse. Vamos a volver a nuestra animación por aquí. Volvemos a nuestro evento por aquí. Y en realidad solo llegamos a elegir una función a la que llamar aquí, pero tiene que ser una función de un guión que se adjunta. Entonces vamos a arrastrar nuestro script de batería. Vamos a movernos derecho al fondo y ponlo por ahí. Y podemos ver por aquí tenemos nuestro script de batería ahí mismo. Tenemos guión de batería aquí, que está escrito ahí abajo, y tenemos nuestro guión real. Descubrí que a veces cuando estás agregando cosas con nombres como script de batería o algo script, podría darte un error que dice, oh, no podemos encontrar el guión. Asegúrate de que la clase exista. Y podría ser porque has nombrado tu guión o palabra reservada. Por ejemplo, quiero intentar llamar a mi cámara de guion único. Y seguí recibiendo un error y no sé qué es. Es porque en realidad no puedes usar la palabra cámara. La forma en que resuelves esto es simplemente cambiando esta palabra por aquí y esta palabra por aquí. Y así es como le cambias el nombre a tu guión. Si me preocupaba éste, porque he tenido algunos errores en el pasado, pensé que acababa de mencionarlo. Yo lo llamaré batería. Entonces me va a dar un error aquí porque ahora en realidad no sabe qué es la batería o en realidad no, pero debería. Entonces voy a por aquí a batería también, y voy a cambiarle el nombre a batería. Y asegúrate de cambiar el nombre de ambos. Asegúrese de cambiar el nombre del archivo y el nombre real de la clase dentro del archivo. Y entonces deberías tener problema resuelto. Si encuentras algún problema todo el tiempo que estamos desarrollando, así es como los arreglas. Pero de todos modos, eso debería ser todo lo que necesitamos. Y agreguemos nuestros planeadores de caja ahí mismo. Volvamos a nuestra animación, que tenemos abierta por aquí. Y vayamos a nuestro evento y elijamos métodos de batería de este evento. Y luego elegimos la batería apagada para el inicio. Solo por aquí elegimos batería encendida, batería encendida allí y batería apagada por allí. Eso debería funcionar perfectamente bien. Ahora hemos creado un prefab con nuestro script por aquí. Mientras se esté reproduciendo esta animación, el momento en que llegue a este punto aquí, va a llamar a este vacío y va a activar estos colisionadores Y no lo verás aquí, pero lo verás cuando realmente estemos jugando el juego. Entonces puedes ver que en realidad debería funcionar perfectamente bien, lo cual es realmente, realmente genial. Volvamos a salir y volvamos a nuestros prefabricados. Todavía tenemos una prefabricada más aquí, que son robot prefabricada, que aún no hemos terminado Agreguemos un colisionador de caja dos D. Vamos a redimensionarlo solo un poquito por aquí Ten en cuenta que esto en realidad no va a ser donde pueda caer, etcétera Va a ser donde esté el hit box. Hagámoslo un poco más pequeño que. costumbre, igual que tenemos todo el tiempo pero no demasiado pequeño porque sí queremos que pueda golpear, sobre todo con estas pequeñas cosas rojas. De hecho, vamos a sacar esto un poco y hacia abajo. Eso debería ser bueno por ahora. Vamos a asegurarnos de que lo configuramos para que se active. Solo asegúrate de que todos los demás también estén ajustados a disparadores si acaso hemos olvidado algo que son de hecho, lo cual es genial, tenemos nuestros animadores en estos dos y solo tenemos a nuestro animador por aquí Tenemos a nuestros tres enemigos animados, así como a nuestro Spike, que es el único que no hemos animado. Eso es en realidad prácticamente todo lo que tenemos que hacer excepto agregar algo de lógica para nuestro patrullaje robot, porque este es un enemigo patrullero Antes de hacer eso, vamos a crear unas cuantas llantas más rápidamente solo para mostrarnos contra estos nuevos enemigos. No voy a hacer demasiados, pero obviamente puedes agregar bastantes más. Y sólo por el bien del tiempo, voy a añadir un poco más entre este y el siguiente video. Pero bien. Sólo voy a hacer tres solo para mostrar a estos nuevos enemigos. Y van a ser muy aburridos. Todos van a tener ya sea un solo robot o robot, y lo más sorprendente Entonces esta de aquí, en realidad solo voy a usar una sola de estas baterías. Ponlo ahí. Ahora obviamente mi enemigo de batería es bastante difícil de ver. Si lo pusiera como normalmente me gustaría algo así, entonces realmente no podrás ver el cable, lo que lo hace bastante difícil. Entonces voy a poner esto al frente, voy a decir orden en capa a seis o mejor dicho siete. Y voy a hacerlo para que esté frente a todo lo demás en la nube. Se ve un poco raro, pero podemos retocar eso a medida que avanzamos Simplemente lo hace para que sea un poco más fácil de ver. Vamos a moverlo hacia arriba. Creo que eso debería estar bien. Obviamente, como dije, podemos retocarlo a medida que avanzamos, pero por ahora, eso debería ser bastante bueno como enemigo en el juego Esa es nuestra baldosa 11, creo. Asegurémonos de ir a la baldosa 12. Y vamos a agregar un solo robot justo por ahí. Debería haber estado bajando un poco porque obviamente podemos ver sin eso, asegurémonos de que siempre esté montando en el suelo. Sí, eso debería ser bueno. Entonces, por último, vamos a tener digamos un robot y un pico. Solo para mostrar obviamente puedes usar múltiples por cosa. Eso debería ser todo lo que tenemos que hacer. Ahora bien, lo último que tenemos que hacer es simplemente codificar en nuestra lógica para que el robot patrulle de ida y vuelta Aquí vamos a usar algo bastante fácil. Sólo vamos a tener una variable aquí la cual establece los límites. Patrulla dos ahí y patrulla dos ahí. Y luego solo vamos a tener algún código que diga, bien, siempre y cuando me mude, siempre y cuando esté delgado de esta manera, siempre y cuando menos que esto, muévase de esa manera. Y te voy a mostrar exactamente cómo escribir el código. Pero antes de hacer eso, en realidad necesitamos agregar un cuerpo rígido, nuestro robot, para que pueda moverse. Pero queremos asegurarnos de que lo colocamos en un cuerpo rígido cinemático para un cuerpo rígido cinemático que no caiga a través de la nube Debido a que no tiene un colisionador real atado a él, simplemente se mueve de acuerdo con el código Entonces vayamos a Scripts y escribamos rápidamente nuestro script de robot muy sencillo. Llámalo robot mover. Sigamos adelante y haga doble clic en eso para abrirlo. Entonces todo lo que tenemos que hacer, como dije, es que tenemos que poner, antes que nada, hagamos un flotador llamado velocidad a lo rápido que va. Entonces vamos a tener dos carrozas. Lo llamaremos min x y max x, que básicamente van a ser las dos posiciones de donde pueda ir. Entonces sólo vamos a tener dentro nuestro fijo, actualizarlo por aquí. Vamos a codificar en nuestro cuerpo rígido. Vamos a hacerlo público, Richard, cuerpo dos, D, llamarlo R B. Entonces vamos a decir RB, velocidad es igual al vector tres, vector dos. Vamos a querer establecer nuestra velocidad aquí en algunos valores x. Vamos a crear una variable más, llamarla X. Entonces queremos nuestro RV Y velocidad dos B cero siempre porque no vamos a estar moviéndonos arriba y abajo con un robot. Entonces lo último que tenemos que hacer es por aquí en este marco de actualización. Tenemos que decir si la posición de transformación x es menor que nuestro valor x mínimo. En otras palabras, si pasamos nuestro valor mínimo x, entonces tenemos que hacer dos cosas. En primer lugar, tenemos que asegurarnos de que estamos enfrentando el camino correcto y vamos a rotar el robot tal como lo hicimos el jugador trans stop rotation es cuaternion.u0 0.0 Entonces lo segundo que vamos a hacer es que vamos a poner nuestra x a nuestro valor positivo para la velocidad. Entonces de lo contrario vamos a escribir un curso de L s y vamos a decir si transformar la posición de punto x es mayor que nuestra x máxima. En otras palabras, si no somos menores que nuestra x mínima, pero no somos mayores que nuestra x máxima porque tampoco queremos ser demasiado grandes. Demasiado lejos, ¿verdad? En otras palabras, vamos a copiar esta cosa exacta por aquí y cambiar este valor ahí a 180 y esto a velocidad negativa. Lo que va a hacer este código va a decir, cada verificación de fotogramas, no estoy por debajo de este límite mínimo. Si lo soy, entonces dame la vuelta. Si soy mayor que este límite máximo, decir, si no soy mayor que el límite mínimo, eso es genial. Pero esto implica que soy más grande que los límites mínimos. Podría estar moviéndome a la derecha. Si soy más grande que el cierto otro límite, entonces gíreme para otro lado. Esto en realidad debería ser todo el código que necesitamos para escribir nuestra lógica de robot. Vamos al robot. Vamos a agregar en el guión de aquí. Movimiento de robot. Asegurémonos de que asignemos el cuerpo rígido por ahí. Quiero escoger una velocidad inicial de algo así como cinco, luego este mínimo X, Y, realidad voy a elegir basado en el azulejo para este primer azulejo. Creo que quiero que mi x mínima sea -2.9 Vamos aquí. Está en mínimo x -2.9 Estoy asumiendo que mi x máxima va a estar bastante cerca de 2.9 Sí, lo voy a hacer 2.8 En realidad aquí mi x máxima es 2.8 Se puede ver por aquí, esto está en negrita porque estos son valores que estoy editando para este ejemplo específico de la plantilla, la instancia específica. Pero eso en realidad está bien, eso es en realidad lo que quieres. Esta variable x obviamente va a depender de las velocidades. Veremos ese cambio a medida que avanzamos. Pero lo último que puedo hacer para ver a estos robots en acción, realidad voy a cambiar rápidamente este guión de la torre de mapas. Voy a hacer que solo tenga dos elementos en él para poder probarlos. Primero voy a poner en mi uno con el robot de aquí. Tow, en realidad voy a poner tanto el Rob como ahora, porque esa es la única manera que he probado, Solo para asegurarme de que sí funciona, voy a golpear play. A ver si me encuentro con algún error. Podría haber algo que pueda pasar donde están, eso es lo que pensé que podría pasar. Entonces las carreteras en realidad actualmente vuelan de las nubes y es porque nos referimos a una posición específica por aquí cuando escribimos el código. Y lo ponemos en este prefabricado, vemos que tenemos estos valores por aquí que dicen, bien, siempre y cuando no seas menos que esto y menos que esto, pero lo que estamos olvidando es que en realidad este es un objeto hijo de este objeto padre más grande Entonces eso es elegir un punto en el espacio, no un punto de referencia a esta nube. Para arreglarlo, todo lo que tenemos que hacer, tenemos que cambiar esto para transformar la posición local punto x. Cambiar esto para transformar la posición local do x. Entonces en realidad me di cuenta de que he intercambiado estos alrededor Entonces esto debería ser 180, esto debería ser cero porque aquí es donde estamos avanzando, y aquí es donde nos estamos moviendo hacia atrás. Entonces lo último que queremos hacer es que queremos ir por aquí y en realidad queremos agregar en nuestro inicio vacío atrás. Queremos comenzar estableciendo x igual a velocidad porque esta variable x denota si nos estamos moviendo y solo se le asigna si superamos uno de los límites. También queremos fijarlo al principio. Todos esos cambios que acabamos de hacer han tenido sentido. No te preocupes demasiado por las posiciones locales. Pero básicamente no estaba funcionando porque nos referíamos a posiciones globales cuando en realidad queríamos posiciones locales. Y acabamos de agregar este tweak. Así que empezamos por mudarnos también, y nos hemos asegurado de girar en el camino correcto, porque en realidad ese era un problema que teníamos. Um, así que sigamos adelante y volvamos a nuestro juego, y veamos si esto funciona ahora. Ojalá todo sea bueno. Se puede ver por aquí tenemos un robot. Annie camina hacia el final. Annie en realidad se da la vuelta, lo cual es perfecto. Si puedo ponerme al día, no sé si voy a poder lograrlo. Así que empecemos de nuevo. Deberíamos poder ver nuestro juego ahora con nuestras animaciones Y todo puede correr y podemos encontrarnos con estos robots, y obviamente vamos a tener que intentar esquivarlos. Pero eso es algo genial. Es un gran enemigo nuevo para tener en nuestros juegos. Y están como patrullando al lado. Obviamente, no van a verse así porque ahora están todos un poco sincronizados, que lo hace mucho más difícil. Pero a medida que añadimos como diferentes fichas y cosas y establecemos diferentes posiciones, eso va a ser todo bueno. Sigamos adelante y abramos esta nueva. Y en realidad va a ser un poco diferente. Voy a querer que este se detenga por ahí, que es -1.17 voy a establecer la y máxima en 2.72 0.8 Aparte de eso, todo eso debería ser bueno. Lo último que tenemos que probar es este azulejo de batería de aquí. Así que volvamos a nuestro juego y asegurémonos de que añadimos en la ficha de la batería, 11 A y veamos si funciona perfectamente bien. Vamos a probar si en realidad solo vamos a pausar el juego y mirar las etiquetas para asegurarnos de que todo funcione según sea necesario. Así que actualmente tenemos un robot para comenzar, un robot después de eso. Ojalá, pronto vamos a tener una batería. Parece que tenemos una batería, por lo que actualmente el mecánico de choques sí parece que está funcionando. Pero vamos a tener que hacer una prueba más minuciosa. Vamos a detenerlo ahora porque ahora es cuando los colisionadores deberían estar activos Vamos a ir aquí a esta llanta de piso. Vamos a ir a la batería. Y vamos a ver. Bien, ambos colisionadores están activos. Que es exactamente lo que queremos porque ahora lo enemigo lo es. Detengámoslo y esperemos a que se detenga. Y podemos ver que ambos están desactivados. Entonces eso es en realidad todo lo que necesitamos ahora completado para nuestros nuevos enemigos. Como dije, obviamente puedes hacer un montón de llantas nuevas. Acabo de hacer algunos ahora, pero voy a hacer algunos más para el próximo video para que tengamos un juego un poco más variado. Puedes hacer tantos como quieras, sobre todo con estos nuevos enemigos que hemos agregado ahora deberían tener un montón de cosas extra que puedes hacer. Y podríamos encontrarnos con uno o dos bichos con estos nuevos enemigos a medida que avanzamos. Debido a que son nuevas incorporaciones a nuestros juegos, vamos a ver cómo tenemos que modificarlo al lado Pero ojalá esté en un estado bastante estable en el momento. No he encontrado nada que haga que no funcione. Y así ojalá todo esté bien en estos momentos y tu juego esté funcionando igual de bien como menos. Vamos a comenzar en los videos posteriores sobre la adición de detección de aciertos, así como un sistema de salud real. Así que tenemos un juego donde realmente puedes perder y reiniciar. Y entonces en realidad solo vamos a tener que agregar todas las cosas adicionales como el procesamiento posterior y arreglar el cielo y todas esas cosas para que el juego se vea un poco mejor de lo que tiene ahora. Pero ojalá tengas la base para una plataforma bastante genial, un juego escrito en Unity. Hasta el momento, actualmente tenemos 12 o 13 fichas diferentes. Y voy a añadir algunos más ahora, como dije, Y esto debería permitirte volver a hacer una plataforma bastante variada y genial. Así que un buen trabajo al hacerlo a través de este video fue bastante difícil, sobre todo bastantes conceptos nuevos. Y tenemos un enemigo patrullando y un enemigo que sólo está activo en ciertos momentos Pero ojalá pudieras seguirle. Y te veré en el siguiente video donde vamos a empezar a agregar en Hit Detection. Gracias. 10. 9. Introducción a la detección de impactos: Hola, y bienvenidos de nuevo a Unity. Ahora, en el último episodio, agregamos un montón de nuevos enemigos, además de animar a algunos enemigos que ya habíamos agregado al juego Y luego básicamente hizo un montón de algunas fichas nuevas para probarlas y asegurarse de que todas funcionen perfectamente. Te dije que si quieres agregar más fichas, puedes. Y como dije, sí hice algunas fichas más entre el último video y este. Ahora tengo el mosaico completo, 13 A, y luego en realidad no los he nombrado todavía, pero 141-516-1718 19.20 Así que lo primero que tenemos que hacer es arreglar nuestra tira de desove para que vuelva a ser desove de todo Porque lo último que cambiamos fue que estábamos probando los nuevos, pero ahora queremos volver a ser todos ellos. Y como dije, ya tengo 20. Así que agreguemos rápidamente todos esos a esta lista. Una vez que hayamos agregado todo a esta lista de mosaicos de mapa, deberíamos poder presionar play y ver nuestro juego completo con todas las fichas nuevas agregadas. He hecho algunos, como uno con dos robots, uno con dos de estas cosas de batería. Obviamente, tendrías que saltar ahí. Esto sería muy duro. Tal vez tengamos que ajustar la duración de esta animación porque es bastante regular O podría tener que cambiar el propio bloque real. Pero actualmente esto se ve bastante bien hasta ahora. En mi opinión, también tenemos estos 12 robots. Sí, obviamente son bastante difíciles de esquivar, pero esta va a ser la base de los bloqueos que vamos a tener en mi juego. Lo que necesito agregar ahora es un sistema de detección de aciertos. Porque actualmente todo esto está bien y bien. Pero no puedes morir. Ni siquiera puedes perder el juego. De hecho, aunque saltes todo el mapa, no puedes perder. lo que voy a empezar en este video es que la detección de golpes funcione. Y luego el siguiente video, vamos a empezar con un sistema de salud y vamos a hacer un sistema de salud y una capacidad de morir realmente. Pero este episodio, lo único que vamos a hacer es la detección de aciertos, que en realidad es bastante simple. Entonces todo lo que tenemos que hacer es hacer un nuevo guión. Voy a llamarlo Player Health. Vamos a abrirlo. En realidad, todo lo que vamos a agregar aquí es un vacío para asegurarnos que sabemos cuándo estamos recibiendo daños. Vamos a empezar con todas las demás cosas de salud más adelante. Ahora mismo, todo lo que necesitamos es un vacío público, recibir daños. Vamos a hacer lo que se llama un parámetro, que es como un valor que puedes pasar a un vacío. Ahora como dije, un vacío es un método, es un bloque de código al que puedes llamar. Este parámetro es un valor que puedes poner en este bloque. Cuando lo llames, voy a decir en daño. Entonces cada vez que llamo a este bloque de código, puedo elegir cuánto daño quiero hacer. En otras palabras, puedo elegir lo que quiero que sea este valor. Voy a deshacerme de eso. Yo sólo voy a escribir imprenta. Entonces voy a poner mi daño variable daño full stop. Agrega un espacio por ahí y voy a asegurarme de que esto diga dos cadenas, así que es el tipo correcto de variable. Ahora bien, esto está usando algunas cosas que en realidad no hemos cubierto. Como dije, parámetros y dos métodos de cadena, pero no es tan importante. Básicamente, como dije, un método es algo a lo que puedes llamar en un momento determinado y el código dentro de él va a ejecutar todo este entero por aquí está diciendo cuando llamo a esto, también llego a elegir en un valor. Así que ahora puedo elegir diferentes cosas, puedo hacer diferentes cantidades de daño. Como a lo mejor un robot puede hacer dos daños, pero un pico solo hace uno. Entonces todo lo que hago cuando llamo a esto es decir que imprimo en la pantalla. Yo digo que este jugador se llevó y luego doy la cantidad de daño que recibí. Entonces escribí daño. Y porque es un entero, tengo que cambiarlo por una cadena. Si quiero usarlo en una declaración impresa, entonces digo daño. Ahora en realidad todo lo que necesito hacer es crear un nuevo vacío. Voy a llamarlo un vacío en el gatillo dos D y en realidad es muy similar a esto en el vacío de colisión que hemos usado antes excepto que son solo cuatro colisionadores que se han configurado para disparar que todos los que hemos usado en nuestros enemigos Vamos a decir si colisión juego objeto punto comparar etiqueta, tal como lo hicimos antes. Esta vez si es un enemigo tipo etiqueta, entonces lo que queremos hacer es que ahora queremos acceder a la cantidad de daño que necesitamos hacer. Para ello, vamos a necesitar escribir otro guión. Vamos por aquí y vamos a crear un nuevo guión, llamémoslo información enemiga. Dentro del script, vamos a crear un montón de variables. Esto es como una columna de estadísticas para el enemigo. Entonces vamos a crear T pública, entonces vamos a llamarla daños de jugador. Vamos a agregar el guión a cada uno de nuestros enemigos. Y entonces cada vez que choquemos con un enemigo, vamos a ir a ver ese guión con el enemigo particular con el que has chocado Y ahí es de donde vamos a obtener nuestra variable de daño. Esto puede parecer un poco confuso, pero solo tengan paciencia conmigo. Si hemos chocado con algo que es un enemigo, diremos colisión punto juego objeto punto obtener componente En otras palabras, obtener un componente apegado a lo que acabamos de colisionar Colisión es el colisionador con el que acabamos de colisionar. Si el objeto de juego al que eso está unido, decir, nuestro enemigo es un enemigo, entonces ve y consigue otro guión adjunto a este enemigo, que se llama información enemiga. Paréntesis después de eso. Después de esto y luego vamos daño jugador. Ahora podemos acceder a la variable explícitamente. Esto es básicamente, esta afirmación en realidad no está haciendo nada, pero está diciendo obtener daño al jugador de lo que sea que hayamos chocado con Ahora todo lo que tenemos que hacer es poner esto como nuestro parámetro de daño. Entonces vamos a escribir para tomar daño bloque abierto y vamos a poner este código aquí dentro. Como dije, aunque esto es sólo técnicamente dos líneas de código, puede parecer un poco confuso, pero en realidad no es tan malo. Todo lo que estamos haciendo es que hemos definido este código aquí arriba que dice, bien, cuando llamo a esto quiero jugar me costó tanto daño. Obviamente, vamos a encarnar esto más adelante. Pero en este momento todo lo que hace es que dice, bien, un jugador recibió daño, pero la cantidad de daño que recibimos está determinada por este vacío de aquí en gatillo entrar dos D. Estamos diciendo que cada vez que entramos en un colisionador de gatillo, si ese colisionador está unido a un enemigo, entonces llama a esto tomar daño Es decir, ejecuta este código y establece la cantidad de daño que quiero recibir a la cantidad de daño que se almacena en esta columna de información enemiga, que vamos a asignar cuando agreguemos esto a cada uno de nuestros enemigos. Volvamos a salir. Entra en nuestros prefabricados Por aquí es donde se guardan todos mis enemigos. Y voy a agregar información enemiga a cada uno de estos. Información del enemigo derecho. Vamos a hacer que la batería se dañe. Creo que el robot solo debería hacer un daño. Spike creo que también debería hacer un solo daño. Y entonces voy a hacer que la bola de espiga haga un daño también. Es solo la batería en realidad. O tal vez hagamos que una bola con pincho haga dos daños. Simplemente haz las cosas un poco más interesantes. Ahora, cada una de estas cosas tiene adjunto este script el cual va a almacenar la cantidad de daño que hace. Lo último que vamos a hacer es que queremos asegurarnos todos estén listos para etiquetar al enemigo. Parece que lo son. Ahora todo lo que tenemos que hacer es tener que volver con nuestro jugador. Agreguemos en este nuevo guión que acabamos de llamar Salud del Jugador. Póngalo debajo del movimiento del jugador. En realidad no necesitamos asignar nada aquí porque no tenemos ninguna variable por aquí. Acabamos de tener un vacío que dice tomar daños. Tenemos un evento. Siempre que choquemos con el colisionador, recibimos tanto daño Ahora bien, ¿qué debería pasar si seguimos adelante y despejamos esa consola y hacemos clic en Reproducir? Ya podemos ver nada está impreso, pero a medida que corremos , vayamos e interactuemos con ese Spipal y veamos qué pasa Y ahí podemos ver, tenemos jugador recibió dos daños. Lo vuelvo a hacer, vuelve a correr Aquí, jugador se llevó un daño. Aquí el jugador recibió un daño. Y vamos a tratar de hacerlo. El jugador recibió dos daños, dos daños, debido a que ambos jugadores recibieron dos daños, jugador recibió un daño, un daño, un daño. Perfecto. Esto en realidad está funcionando muy, muy bien. Ahora bien, lo último que sí quiero agregar solo para que el siguiente video no sea demasiado largo, es un tiempo de invencibilidad Esto en realidad también es bastante fácil de hacer porque este es el guión que vamos a usar para toda la salud de nuestro jugador. Sólo voy a empezar a desarrollarlo ahora, pero básicamente todo lo que tenemos que hacer es que tenemos que hacerlo, volvamos a recuperar nuestra actualización nula. Así que cada cuadro individual. Y entonces vamos a tener un flotador aquí arriba. Llámalo tiempo máximo de invencibilidad. Entonces vamos a tener otra carroza que se va a llamar tiempo de invencibilidad Todo lo que vamos a hacer es dentro de esta actualización de vacío, vamos a decir si el tiempo de invencibilidad es mayor que cero, entonces vamos a disminuir el tiempo de invencibilidad por la cantidad de tiempo que ha pasado desde el último fotograma, Lo que va a hacer es que va a decir cada fotograma si este valor no es cero, es decir, si son cinco menos mucho tiempo que haya pasado desde el último fotograma. Entonces en otras palabras, básicamente cuenta regresiva. Bueno, esto en realidad sólo va a funcionar como tiempo, pero vamos a decir si es mayor que cinco, entonces cuenta atrás a cero. Y entonces todo lo que vamos a hacer es debajo de este tomar daño vacío. Vamos a agregar en otra condición de declaración if arriba aquí. Vamos a decir si hemos chocado con el enemigo y nuestro tiempo de invencibilidad es menor o igual En otras palabras, si actualmente no estamos en una época en la que somos invencibles Agreguemos algunos paréntesis más por ahí entonces, y sólo entonces tomemos daños. Lo último que en realidad voy a hacer es que solo voy a quitar esta palabra Enter y cambiarla a una palabra quedarse. La razón por la que podemos hacer esto ahora es que este evento desencadenante de aquí en realidad se llama una vez por fotograma por cada colisionado con usted que esté tocando En otras palabras, si tuviera que chocar con algo y me quedara ahí, continuamente dañaré cada cuadro individual Pero como hemos agregado en este tiempo de invencibilidad, ahora podemos escribir el código así y establecer un tiempo en el que no podamos sufrir daños. Porque la razón por la que no hice esto originalmente fue porque habríamos visto 100 mil mensajes cada vez que tocamos algo. Porque va a correr cada fotograma. Pero porque ahora sólo estamos recibiendo daños cada vez que podemos. En otras palabras, solo cada intervalo establecido que vamos a establecer aquí, no podemos recibir daños todo el tiempo. Ahora puedo escribir este código así. Y esto en realidad es mucho mejor porque significa que si nos quedamos en unas espigas o algo así, vamos a recibir daños continuamente mientras estemos en los picos. Y eso es en realidad lo que queremos. Antes de que realmente volvamos a mi juego, hay una última cosa que tengo que hacer. Necesito asegurarme de que siempre pongo mi tiempo de invencibilidad aquí igual a mi tiempo máximo de invencibilidad siempre y cuando acabe de recibir daño En el momento en que me haga daño, reinicié ese tipo de tiempo. Básicamente, eso es prácticamente todo el código que deberíamos necesitar escribir para tener un sistema básico para recibir daños. Volvamos a la Unidad. Pongamos mi máximo, mi tiempo a 1.5 segundos. Veamos esto en acción. Si sigo adelante y le pego play, puedo correr a lo largo. Y en realidad vamos a ver estas dos variables. Para que podamos ver si está funcionando. Mira este. Cada uno a 2 segundos, voy a recibir daños. Se puede ver por ahí, el jugador recibió un daño, juego recibió un daño, el juego recibió un daño proporcionado. Me quedo en estos colisionadores, hecho continuamente tomo daños cada vez que estoy en uno, que es exactamente lo que quiero Ahora hay un cambio más que quiero hacer siempre y cuando esté ocupado haciendo cosas en mi juego. Y va a estar sumando en una animación de detección de aciertos. De hecho vamos a seguir adelante con mi jugador y podríamos animarlo para que cada vez que reciban daño, haya cierto efecto que juega, etcétera, etcétera Y eso lo escribimos en la ventana de animación de aquí. Eso va a complicar bastante las cosas porque ya tenemos todas estas animaciones por aquí y agregando una animación herida. Entonces necesitamos lastimar mientras estamos inactivos, lastimados mientras corres, etcétera En cambio, vamos a usar un efecto simple, que va a ser un bloque rojo que va así. Cuando tomo daños y luego me vuelve a cambiar. Voy a destellar rojo momentáneamente. Y luego voy a parar. La forma en que en realidad vamos a hacer eso es completamente usando códigos. Vamos a ir por aquí en mi guión de salud de jugador, vamos a escribir lo que se llama una co-rutina. Entonces vamos a escribir numerador, tomar daños. Esto nos va a permitir programar en como temporizadores realmente esperar esta cantidad de segundos. Voy a escribir lo siguiente. Voy a decir en la parte superior aquí, voy a tener una referencia pública a mi Sprite Renderer, llamarlo Voy a decir dentro de mi toma de daño vacío. No te confundas con esto. Esto es básicamente, solo piénsalo como un vacío. Pero puedo usar comandos que me permitan esperar una cierta cantidad de segundos. Eso no es exactamente lo que es, pero eso es justo para lo que vamos a estar usando. Solo piensa en ello como un vacío con una habilidad extra, obviamente. No uses esto en lugar de vacíos. Úsalo solo de la forma en que lo estoy usando ahora, pero no te preocupes demasiado por ello. Vas a decir rendimiento retorno peso por segundos. Entonces vamos a ingresar una cierta cantidad de segundos. Voy a usar invariable para decidir eso es lo que voy a decir Tiempo de cambio de color de flotación pública. Esta variable de tiempo de cambio de color es lo que vamos a utilizar para determinar cuánto tiempo debemos esperar antes de cambiar los colores. Primero voy a ir sprite color igual color blanco. Entonces voy a seguir adelante y esperar por mucho tiempo que sea mi tiempo de cambio de color. Entonces voy a cambiar de, en realidad voy a poner rojo en la parte superior de aquí. Originalmente me pongo rojo, espero cantidad de segundos, luego me pongo blanco. Y eso es en realidad prácticamente todo lo que vamos a necesitar hacer. Vamos a poner el color del sprite rojo en el momento que queramos, y luego cuando hayamos terminado de recibir daño, lo vamos a volver a poner en blanco Y obviamente esto es cada vez que tomamos daños, vamos a llamar a esto co rutina. Ahora dos cosas. En primer lugar, esto en realidad se llama lo mismo que vacíos Voy a llamarlo tomar efecto daño en cambio es un poco mejor nombre. Y en segundo lugar vamos a tener que invocar esto cada vez que voy a debajo de esto y escribir start co rutina de nuevo No te preocupes demasiado por esta cosa. Realmente no es tan importante y en realidad no quiero dedicarme demasiado tiempo a ello. Pero básicamente solo pensarlo como un vacío que nos permita esperar una cierta cantidad de tiempo. Entonces vamos a llamar a este vacío específico aquí que nos permite recibir daños. Y esto significa que cada vez que recibamos daños, vamos a cambiar a rojo. Y entonces por mucho tiempo que queramos ser rojos, nos vamos a quedar con él. Y luego vamos a volver al blanco. Esto es prácticamente todo lo que tenemos que hacer para que tengamos un indicador de acierto. Adelante, volvamos a Unity. Vuelve a jugar. Vamos a establecer el tiempo de cambio de color a 0.2 segundos. Ahora bien, si todo funciona como debería, deberíamos poder correr como lo hemos estado normalmente. Al igual que de lo normal cuando tomamos daños, deberíamos cambiar a rojo. No hemos asignado sprite, asegurémonos de hacerlo. Arrastra esto por aquí. Asigne la variable sprite a la cosa sprite. Intentemos eso otra vez, corriendo, si tomamos daños, parpadeamos en rojo, que es exactamente lo que queremos. Y eso en realidad es bastante bueno en mi opinión. Puedes ver claramente cuando recibes daños y puedes ver, obviamente, si te quedas dentro de él, recibes daños continuos. Eso es bastante bueno. Lo único último es cuánto tiempo somos invencibles cuatro y vamos a escribir otra co rutina para eso también Vamos a ir aquí abajo y tomar enumerador llamarlo invencibilidad tiempo Vamos a decir mientras que en otras palabras, haz esto hasta que esto ya no sea cierto. El tiempo de invencibilidad es mayor que cero. En otras palabras, mientras que actualmente somos invencibles. Sigamos adelante y destellaremos dentro y fuera de la pantalla. Vamos a hacer lo mismo que hacemos con el color. Vamos, el color del sprite es igual al nuevo color. Vamos a establecer este nuevo color para que sea más o menos exactamente como tenemos el blanco, excepto con un alfa un poco menos evidente. Va a ser algo transparente. Establezca esto en 111, que es el valor máximo, y luego estableceremos alfa. Usemos una variable para esto también. Transparencia de flotación pública. Sigamos adelante y copiemos eso y lo pongamos ahí. Esto es en realidad más o menos exactamente lo que queremos. Si bien este tiempo de invisibilidad se mantiene cierto, va a cambiar a in, vamos a cambiar a ligeramente transparentes Y luego vamos a escribir un nuevo retorno de rendimiento para esperar segundos. Voy a usar otra variable por aquí. Voy a llamar a este retraso invencibilidad. En otras palabras, cuánto tiempo queremos que sea el tiempo entre destellos. Escribamos retraso de invencibilidad por allá. Y luego sigamos adelante y volvamos a poner lo nuestro por aquí, normal 1111 De hecho voy a repetir este proceso unas cuantas veces justas. En otras palabras, vamos a cambiar el color transparente, volver a cambiar al color normal, y luego esperar otra cantidad de segundos. Después de hacer eso, nos volvemos transparentes. Esperamos, nos volvemos normales, esperamos. Y entonces si seguimos siendo invencibles, volvemos a ser transparentes Espera, esto va a repetirse una y otra vez, hasta que esto ya no sea cierto y luego va a parar. Es importante tener en cuenta que debido a que hemos, la forma en que hemos escrito este código, nunca va a parar cuando eres transparente. Porque sólo va a comprobar si tiempo de invencibilidad es mayor que cero al final de este código, no va a poder detenerse en medio del Va a correr de inmediato y luego decir, bien, ¿tengo que hacerlo de nuevo? Tienes que preocuparte por estar atascado medio transparente. Ahora, antes de volver a la Unidad, en realidad tenemos que hacer una cosa. Tenemos que asegurarnos de que en realidad llamamos a esto cotina. De lo contrario nunca va a surtir efecto y no vamos a poder verlo. Vamos a la cima aquí. Recuerda escribir en Start Corotine Invincibility Time, Esto en realidad nos va a permitir llamar a la corotina. Asegúrate de poner un punto y coma al final. Ahora bien, si volvemos a Unity, podemos asegurarnos de editar estos valores en nuestro jugador. Hagamos que esta invencibilidad retrase 0.2 segundos. Hagamos mi transparencia 0.5 tiene que ser un valor 0-1 Tengan eso en mente Ahora bien, esto debería ser en realidad todo lo que necesitamos para tener un efecto de invencibilidad que funcione correctamente A ver si funciona. Si cargo mi juego, obviamente tuvimos el efecto de daño rojo funcionando. Pero vamos a probar si éste también lo hace. Se puede ver que en realidad funciona perfectamente bien. Es solo que parece que hemos perdido nuestro efecto de daño. Y la razón de eso es porque en realidad estamos anulando nuestro color Volvamos aquí y simplemente hagamos rápidamente una pequeña solución. No vamos a querer cambiarlo. Lo que estamos pasando es que lo estamos cambiando a rojo. Pero este código de aquí lo vuelve a poner blanco. En vez de decir, bien, cámbialo a blanco, voy a decir cámbialo a lo que fuera antes. Color de punto Sprite Color Sprite. Sprite dot cool dog. Y para C roja, verde y azul, eso debería funcionar mucho mejor. Ahora, ya no vamos a estar cambiando ninguno de los aspectos reales del color excepto su canal alfa, que es exactamente lo que queremos. Volvamos aquí y veamos si esto funciona un poco mejor. Y creo que debería asegurarse de ver esa variable de tiempo de intervinibilidad Si tomamos daños, podemos ver que en realidad funciona perfectamente bien. Siempre y cuando estemos contando en tiempo espiritual, parpadeamos y en el momento en que paramos, nos detenemos, lo que nos da una indicación bastante buena de nuestro juego y del funcionamiento del sistema de daños, lo cual es genial. Eso es prácticamente todo lo que necesitamos para hacer en este video. Obviamente, ahora podemos ver que realmente podemos recibir daños y todo lo que necesitamos para comenzar ahora es nuestro sistema de salud, um, que debería ayudarnos a que este juego sea mucho más divertido y en realidad, bueno, más como un juego de lo que es ahora mismo. Entonces espero que tu juego esté funcionando igual de bien como menos en este momento. Obviamente, necesitamos ajustar esto y asegurarnos de que todo esté funcionando igual que menos antes de continuar con el siguiente video donde vamos a comenzar con nuestro sistema de salud. Gracias. 11. 10. Añade salud al jugador: Hola, y bienvenidos de nuevo a Unity. Ahora en el último episodio, agregamos en Hit Detection, lo que permitió a nuestro jugador mostrar cuándo ha recibido daño y también cuánto tiempo es invencible para antes de que pueda recibir De nuevo, podemos ver todo eso en acción por aquí con el daño recibido y el parpadeo mientras puedes ver dónde acabas de dejar de recibir daño y ahora eres invencible Y luego, cuando se desgasta también, eso está muy bien, pero todavía no tenemos un sistema que realmente muestre, bien, ¿cuánta salud tengo y cuánto tiempo hasta que realmente muera? Y se acabó el juego porque el jugador no tiene salud infinita. No sería un juego muy interesante si nunca pudieras morir. Lo que hay que agregar en este episodio es un sistema de salud para mostrar, bien, al jugador le queda tanta salud, y cuando el jugador alcanza esta salud entonces muere. Y para hacer eso, en realidad solo vamos a usar exactamente el mismo guión que hemos estado usando todo el tiempo, este script de salud del jugador. Así que entremos en guiones y hagamos doble clic en la salud del jugador para abrirla. En visual studio, deberíamos poder ver todo lo que codificamos la última vez. Justo por aquí. Perfecto. Ahora todo lo que vamos a hacer es agregar en un int público, llamarlo Max salud. Esto es algo que en realidad no hay que añadir a una variable porque lo que esto va a decir es cuánta salud deberíamos tener al máximo. En otras palabras, como ¿cuánta salud quiero cuando estoy plena de salud? Y podrías pensar, oh, eso es bueno tener como variable. Pero porque ya hice los sprites y todo, sé cuánta salud máxima voy a tener Van a ser seis, pero puedes agregar esto si quieres. También es una buena práctica del programa independientemente. Pero lo vamos a dejar ahí y también agregarle un nuevo público a salud actual que se va a llamar, en realidad lo llama salud actual. Fresco. Entonces todo lo que vamos a hacer es que vamos a ir por aquí a mi toma de daño vacío por aquí. Y voy a decir salud actual menos iguales. En otras palabras, la salud actual es igual a la salud actual menos. Y entonces vamos a decir daño, decir, disminuir la salud actual por la cantidad de daño. De hecho voy a quitar esta declaración impresa por aquí que dice cuánto daño tomé porque eso fue solo para probar. Entonces todo lo que necesito hacer por aquí es que necesito tener otro vacío debajo de esto que voy a llamar cheque muerto. Voy a llamar a este vacío en el momento en que me haga daño, antes incluso de hacer alguno de los efectos o invencibilidad tiempo o algo Voy a decir si mi salud actual de salud es menor o igual a cero, entonces estoy muerto. Necesito invocar otro vacío. Voy a escribir aquí abajo, muerte. Sigamos adelante y agreguemos eso ahí dentro. Daños nulos donde disminuyo mi salud actual por la cantidad de daño que recibí. Tengo mi cheque muerto vacío donde digo, bien, si mi salud actual es menos igual a cero, llame a esto. Y tengo mi vacío de muerte por aquí lo que dice bien, ahora una vez que esté muerto, lo que quiero hacer, así que en realidad voy a empezar, programa en esto. Y luego voy a agregar en una última cosa a la cima aquí que dice, bien, establecer mi salud actual al máximo de salud al principio. En realidad, ya sólo voy a hacer eso. Sigamos adelante y digamos inicio vacío salud actual es igual a la salud máxima. En otras palabras, todo está bien y bien. Estamos empezando de nuevo y tenemos mi salud actual al máximo. Entonces debajo en mi vacío de muerte, vamos a decir bien, ¿qué quiero que pase cuando muera? Bueno lo primero que quiero es En no quiero que el jugador pueda moverse más. La forma en que voy a hacer eso es que en realidad voy a acceder al objeto de juego al que este está conectado actualmente, que es el jugador. Voy a ir a Game object y luego voy a encontrar otro guión sobre esto. En otras palabras, el guión Get movement. Voy a ir Jugador hacer obtener componente Movimiento del jugador. Voy a decir habilitado es igual a la fuerza. En otras palabras, voy a impedir que ese script esté actualmente habilitado. Voy a decir bien, se ha ido. Lo que esto va a hacer es, básicamente me va a permitir desactivar el movimiento mientras Glary esté muerto Tampoco quiero que mi cuerpo rígido tenga alguna gravedad que me afecte. Ya no quiero caer. Voy a decir hacer obtener componente cuerpo rígido dos D escala de gravedad. Voy a poner eso igual a cero. Es decir, no me quiero caer, me quedo en medio del aire y actualmente no me puedo mover. Entonces hay algunas cosas más que quiero hacer. Quiero desactivar realmente el animador que está en mi componente, en mi objeto ahora mismo Ahora no puedo cambiar la animación. Entonces, por último, quiero cambiar mi sprite por un sprite de muerte específico, que voy a poner aquí Voy a decir sprite público, llámalo muerto. Voy a decir obtener componente Sprite Renderer Sprite igual y Estas cuatro líneas de código de aquí básicamente van a decir, bien, en cuanto muera, deshabilitaré mis guiones de movimiento. Ahora ya no puedo moverme porque se acabó el juego, ¿verdad? Tampoco quiero poder caer, así que pon mi gravedad ir a cero. Sólo estoy suspendido en medio del aire, no moviéndome a la derecha. De hecho voy a agregar una cosa más antes de hacer eso es que voy a decir objeto de juego, obtener componente cuerpo rígido dos D velocidad es igual al vector 20. En otras palabras, detente en el medio porque la forma en que esto funciona actualmente, si muriera y luego hice todas estas cosas, seguiría moviéndome en el medio porque la forma en que esto funciona actualmente, si muriera y luego hice todas estas cosas, por la pantalla, lo cual no quiero Entonces primero quiero hacerlo para que no pueda moverme. Quiero detenerme en el aire y desactivar mi gravedad. Entonces estoy parado en medio de la pantalla. Y más bien justo ahí en medio de la pantalla, quiero desactivar mi animador Entonces ya no tengo ninguna de las cosas, bien, si estoy castigada o no, ya sea que me esté cayendo, solo estoy deshabilitando esto de plano. Y luego voy a configurar mi componente de Sprite Renderer, lo que me dice qué sprites muestran actualmente a este sprite especial de aquí, que voy a Este es prácticamente todo el código que deberíamos necesitar para crear un sistema de salud. Voy a decir al inicio del juego, poner mi salud al máximo de salud. Y luego cada vez que recibo daño menos él de él, y en el momento en que estoy muerto, entonces llama a este Spoid de aquí, lo que básicamente deja bastante claro que he muerto Vamos a abrir Unity, Go into Player. Veamos cuál de estos tenemos que añadir. Pongamos mi salud máxima a seis y necesitamos agregar en este sprites muertos Voy a entrar en sprites, clic derecho y derecho importar un nuevo activo y es menos siete Debería vincularse debajo este video al igual que todos los demás lo fueron. Voy a actualizar estos mientras en realidad me agreguen. También voy a importar estos sprites de corazón que vamos a utilizar para nuestro sistema de salud en un poquito Sigamos adelante y hagamos esos también 12 y Point No Filter y Perfect. Vamos a comprobarlo como lo hicimos la última vez, asegúrate de que esos dos se llenen. Perfecto. Vamos a desplazarnos hacia abajo aquí y asegurémonos de tener mis sprites menos establecidos en este menos siete Veamos si todo esto funciona tal como pretendíamos. Tenemos nuestro último sprite agregado, todo lo demás. Vamos si vamos a mi jugador, podemos ver ahora mismo tengo salud actual de seis y salud máxima de seis. Ahora mi salud está a las cuatro porque acabo de recibir daños, Salud ahora está en tres. Y si tomo dos daños de esto, la salud estará en uno. Ahora, ¿qué debería pasar si me encuentro con el sprite? Debería detener a Miller y convertirme en una lápida, lo cual es perfecto Todavía tengo el efecto sordo que necesito arreglar. Pero puedes ver, obviamente no hemos desactivado todos, los guiones no están completamente muertos, pero esta lápida sí parece estar funcionando Tengo una lápida por aquí, y todo eso es genial Hay algunos ajustes más que quiero hacer a esto antes de comenzar a agregar en mi sistema cardíaco El primero, creo que la lápida debería estar un poco más arriba en el aire que cada vez que mueres Empecemos diciendo por aquí donde está todo el resto de este código. También sigamos adelante y digamos que posición de transformación es igual al nuevo vector tres. Transformar posición x, punto de oposición transformado y oposición transferida. Obviamente, esta afirmación aún no hace nada. Sólo digo que la oposición transformada es igual a la oposición transformada. Pero entonces vamos a ir a la cima aquí y vamos a sumar y offset para cuando morimos. Copiemos eso ahí abajo, y luego agreguemos eso por aquí. Y creo que algo así como dos o tres hará que esto se vea mucho mejor. Entonces después de que hayamos hecho eso, lo último que queremos hacer es agregar una nueva variable, llamarlo está muerto. Y esto nos va a permitir hacer un seguimiento de cuándo estamos realmente vivos y no por aquí al inicio del juego. Queremos establecer es muerto igual a falso, porque no estamos por aquí cuando morimos. Queremos establecer es muerto igual a verdad. La razón por la que vamos a hacer esto es que realmente vamos a encargarnos de todas esas cosas que estábamos haciendo anteriormente donde todavía estaba recibiendo daños y el tiempo de invisibilidad seguía teniendo efecto todas esas cosas Y el lugar en el que vamos a poner esto es que en realidad vamos a mover este guión por aquí. Sigamos adelante y miremos mi guión de deuda de cheques por aquí y digamos si la salud actual es menor que igual a cero muertes. Y luego debajo de esto, antes de que llamemos a las otras cosas, diremos que si no está muerto, es decir si sigo vivo, entonces puedes hacer todas estas otras cosas. Entonces puedes establecer la hora de inicio, puedes invocar las cosas de daño Pero si acabamos de morir, realmente no queremos que eso suceda. En realidad también podríamos poner esto como una declaración L. Se podría decir otra cosa, en otras palabras, si mi salud actual no está ahí, lo que voy a hacer solo para mejorar un poco los procintos, pero realmente no hace diferencia De hecho, esta variable muerta no es realmente necesaria al 100% por aquí porque podríamos simplemente escribir otra cosa y luego no usarla en absoluto. Pero creo que sigue siendo algo bueno tener solo para hacer un seguimiento de si el jugador está vivo o no. Volvamos al jugador y vamos a compensar mi Y algo así como dos y veamos si todos estos cambios van a funcionar. Vamos a hacer clic en reproducir y ver si continuamente tomo daños. Eso son dos, son cuatro, son cinco. En el sexto, podemos ver allá, dos podrían estar un poco altos, pongámoslo a tal vez uno. Pero en realidad funcionó prácticamente a la perfección. Tenemos todo funcionando bien. Si morimos frente a algo así como una espiga, iremos por delante de la espiga, pero no seguiremos daños ni se mostrarán daños. Dejemos que el robot nos mate. Casi. Eso son cuatro. Por lo tanto, si morimos aquí, ahí vamos. Deberíamos ver allá, tenemos nuestro efecto de muerte allá. Y también queremos que la cámara se detenga. Pero vamos a agregar eso ahora mismo. Vayamos aquí a mi cámara. Vayamos a buscar dónde está por aquí. Velocidad de la cámara bajo el guión de movimiento de cámara, debajo de este vacío muerto por aquí. Voy a decir juego objeto dot find. En otras palabras, entra en escena, mi cámara principal, encuéntrala. Entonces decimos obtener componente, encontrar en eso mi cámara mover guión va a establecer mi velocidad, la velocidad la cámara igual a cero. Esto es en realidad todo lo que necesitamos. Ahora en el momento en que muera, debería tener la velocidad de mi cámara puesta a cero y todo debería funcionar perfectamente bien. Volvamos a mi juego. Voy a querer ajustar mi compensación y en realidad a algo así como 0.5 Creo que uno todavía estaba un poco alto. Veamos si todo esto funciona igual que anticipamos corriendo. El bien de las pruebas, en realidad solo voy a poner mi salud a una, Tengo que seguir probando esto. Vamos a establecer la salud actual. Vas a uno y ves si nos topamos con ese pico. Podemos ver que de hecho morimos y la cámara se detiene, lo cual es genial. Es exactamente lo que queremos. Eso es prácticamente todo lo que tenemos que hacer en términos de demostrar que nos estamos muriendo. Pero aún necesitamos una forma para que el jugador vea cuánta salud le queda. Para comenzar con eso, necesitamos comenzar con nuestra interfaz de usuario. Hagamos clic derecho y vayamos a Crear. Voy a querer crear una imagen. Se puede ver que hace este lienzo masivo y esto en realidad es mucho más grande que eso. Ahí está nuestro juego ahí abajo. Esto podría parecer un poco confuso. Esta es una superposición de espacio de pantalla. Prefiero usar el modo de cámara de espacio de pantalla. Y puedes arrastrar tu cámara justo ahí y luego puedes ver tu interfaz de usuario frente a tu juego. No hay una gran cantidad de diferencia, es solo una cosa de preferencia. Pero generalmente prefiero usar el espacio de pantalla, el modo cámara. Creo que hay algunas ventajas distintas, pero nunca las he investigado extensamente porque nunca he tenido problemas con el modo de cámara Sigamos adelante y usemos cámara dentro de esta imagen de aquí. Primero cambiemos el nombre de nuestro lienzo a UI. Este lienzo es como un bloque de construcción para todos los componentes de la interfaz de usuario. Y este sistema de eventos nos permite tener botones funcionando. Todos estos van a ser creados automáticamente cuando creas una nueva imagen, igual que el animador fue creado cuando creaste, o más bien el controlador se creó cuando creaste una animación Déjalos todos. No los borres. Deje el sistema de eventos donde está y deje el lienzo de la interfaz de usuario tal como está. Obviamente sin el lienzo, ninguna de estas imágenes en realidad va a funcionar y no van a aparecer. Si lo sacamos del lienzo, podemos ver que ya no se renderizará en nuestra pantalla. Dejémoslo todo como está. Cambia esto a corazón, entonces sigamos adelante y arrastremos en nuestro corazón. Para la imagen de origen, vamos a hacer clic en Establecer tamaño nativo para que podamos ver exactamente cómo funciona. Parece que solo está renderizando una porción específica de mi sprite de corazón Creo que la razón de eso, si miramos estas flechas por aquí, podemos ver que hay tres cosas que aparecen en contraposición a todo lo demás solo tiene una. Por alguna razón, Unity automáticamente piensa que está siendo inteligente e intenta separarlos en tres sprites diferentes cuando en realidad solo quiero que sean uno Voy a seleccionar todos estos, asegúrate de configurar el modo sprite para aplicar una sola cabeza Entonces si vuelvo por aquí y trato de arrastrar en mi sprite, todo funciona mucho mejor En realidad no me di cuenta de que eso sería un problema, pero solo asegúrate de hacer eso, especialmente si usas mis sprites Ahora creo que muchos de ellos en realidad están establecidos en múltiples por defecto. Pero ni siquiera es un problema. Como por ejemplo, este menor es múltiple, pero es sólo uno. De hecho, creo que cada uno de mis otros sprites son en realidad uno, a pesar de que todos están establecidos en múltiples Así que en realidad no hace demasiada diferencia. Puedes dejar esos ahí, solo asegúrate de que este esté configurado en single, porque de lo contrario Unity, intentaremos dividirlo en diferentes sprites para ti Eso obviamente no es lo que quiero para mi juego. Ahora vamos a volver a mi corazón por aquí. Ahora necesitamos un tamaño nativo de conjunto de clics para asegurarnos de que encajen con todo lo demás. Entonces necesitamos, ahora obviamente escalar estos hacia abajo para que sean la misma proporción. Sigamos adelante y arrastremos eso hasta que los píxeles tengan el mismo tamaño. Se puede ver ahí que aún no están. Vamos a arrastrarlo un poco más. En realidad ya casi estamos ahí. Vamos a ir un poco más grandes hasta que encaje. No tiene que ser exacto, pero cuanto más lo acerques, mejor va a quedar tu juego. Realmente no hace la diferencia en este punto. Creo que eso es más o menos exacto. Eso debería ser bueno. Se va a quedar completamente bien así. Pero vamos a pasar eso a la parte superior de la pantalla. Ahora podemos ver que esos corazones van a estar ahí mientras estoy jugando el juego, lo cual es perfecto. Eso es exactamente, en realidad lo que quiero. Ahora tenemos que hacer es que tenemos que vincular estos corazones al código de aquí que básicamente establece mi salud. La forma en que voy a hacer eso es que voy a seguir adelante con mi guión de salud por aquí, que está bajo guión, voy a hacer clic en Salud del jugador. Recuerdo justo al inicio del curso, mencioné estas tres cosas en la parte superior. Si necesitas usar cosas diferentes en Unity como tienes que agregar en una línea. Y eso es lo que vamos a hacer aquí. Vamos a decir usando la interfaz de usuario del motor Unity. Eso es solo para que podamos hablar de cosas como imágenes. Vamos a ir por aquí debajo de todo esto, vamos a crear una matriz de sprites públicos, en otras palabras, una lista de sprites, y lo llamaremos corazones Queremos que estos corazones sean de cero hasta cinco. Porque va a haber seis tipos diferentes de gasto cardíaco en cuánta salud tienes, después de esto. Vamos a crear una referencia a mi imagen y esto no aparecería, pero no hemos escrito las UI Para asegurarnos de que la tienes en la parte superior ahí, vamos a llamarlo icono de corazón Ahora por aquí tenemos nuestro icono de corazones , y tenemos nuestros corazones. Déjame cambiar eso a ícono de corazón. Estas dos cosas van a poder mostrarle al jugador cuánta salud le queda. Vayamos aquí a mi vacío por aquí donde tomo daños. Y quiero asegurarme de poner mi daño o más bien mi nuevo sprite amable por aquí a lo que sea el ícono del corazón De hecho voy a ponerlo por aquí con todas mis otras cosas porque no quiero molestarme realmente en actualizarlas. Si estoy muerto, puedo simplemente configurarlo en el predeterminado, que es el más bajo, obviamente. Y en realidad voy a hacer eso también. Pero antes de adelantarme demasiado, permítanme enfocarme en cambiarlo por aquí. Voy a decir obviamente en una escala 0-6 quiero poner mis corazones icono sprite iguala corazones corchetes abiertos Y entonces vamos a tener la salud restante, salud actual menos uno, porque obviamente en un rayo comienza en cero, Si estamos en una salud, quieres la primera imagen. Esto es en realidad prácticamente todo el código real que necesitamos. Lo último que quiero hacer es debajo de mi depoide por aquí, voy a escribir el fondo, asegurarme de poner mi cosa a cero En realidad, se me acaba de ocurrir que también necesitaremos mostrar corazones diferentes si tenemos absolutamente cero salud. Entonces, en realidad, pongamos eso a la salud actual porque esa es la correcta. Por una salud queremos estar en. Lo segundo, la salud actual por aquí y el cero por allá. Volvamos a la unidad Ahora, lo último que tenemos que hacer es, antes que nada, crear una referencia a ese Heart Cycon, que sólo vamos a arrastrar ahí mismo Y segundo, en realidad necesitamos siete elementos en esta matriz porque hay seis corazones diferentes, Salud que puedes tener, y luego uno con cero. Volvamos a los sprites y arrastremos en todos estos. Tenemos corazones, siete corazones, seis corazones, cinco corazones, 432.1 Eso en realidad debería ser prácticamente todo lo que necesitamos hacer para que este sistema funcione Si seguimos adelante y golpeamos play, podemos ver que tenemos tres corazones. Y entonces dependiendo de cuánto daño recibamos, esos corazones deberían bajar. Entonces empezamos, tomamos uno. Se puede ver allá mostramos que tiene medio corazón, luego otra mitad. Y entonces cuanto más daño tomamos, obviamente, más baja salud obtenemos hasta llegar hasta llegar hasta llegar a cero corazones y luego nos convertimos en esta pequeña lápida Eso es todo lo que tenemos que hacer para construir nuestro sistema de salud. Nuestro juego en realidad está funcionando prácticamente a la perfección ahora. Incluso podemos morir y podemos perder. Obviamente, hay algunos toques finales que todavía tenemos que hacer. Tenemos que agregar en un bucle de juego. Tenemos que mejorar las imágenes y obviamente todas las cosas de audio, pero esto en realidad está resultando ser una cantidad decente de nuestro juego ya hecho por nosotros. Puede que no parezca que está hecho todavía, pero en realidad tenemos mucha de la mecánica básica en el camino. Y lo que queda después de esto es mucho más tipo de adiciones y como cosas divertidas. Hemos construido la mayoría de los bloques de construcción. Espero que hayas estado siguiendo y que hayas podido conseguir que un sistema duro funcione igual que yo, así como la salud y todos los indicadores de daños. En el próximo episodio, vamos a empezar a sumar en moneda. Vamos a agregar diamantes, y cada nube va a tener una probabilidad bastante baja de desovar en un diamante Vamos a empezar en el próximo episodio, pero ojalá hayas podido seguir hasta ahora y que tu juego esté en perfilarse. Gracias. 12. 11. Presentación de gemas: Hola, bienvenidos de nuevo a Unity. Ahora ya agregamos en nuestro sistema de salud de jugadores. Y prácticamente todo lo demás hasta ahora que un juego de plataformas necesitaría. Excepto por una mecánica de anotación o como monedas o gemas o algo que puedas recoger para demostrar que estás progresando en el juego Eso es lo que vamos a añadir en este episodio y vamos a estar usando diamantes. Ahora comencemos, importemos nuestro sprite de diamante porque ya lo hice Importar diamante dong, que obviamente está vinculado en esta carpeta del video. Luego ve a establecer esta unidad de imágenes lo que sea más y establezca el modo de filtro para que Ahora tenemos un diamante que obviamente podemos recolectar en nuestro juego, lo cual es bastante genial. Ahora bien este diamante, al igual que los corazones le han agregado un contorno a su alrededor solo para que quede un poco más claro que hay corazones y mecánico de anotación, podría quitar esto más adelante en el juego, pero por ahora creo que hace un trabajo bastante bueno de solo delinear que es diferente a todo lo demás De hecho, también voy a querer establecer que esto sea un orden y una capa más altos que el resto del juego, para que no se oculte entre las nubes. Pero voy a llegar a todo eso en un minuto. Déjame comenzar primero arrastrándolo a la pantalla como acabo Y esa es básicamente una forma abreviada de crear un objeto con un renderer de sprites Con este sprite en particular, no voy a perder tiempo en convertir esto en un prefab llamado diamante Entonces voy a eliminar este que tengo por aquí y abrir mi prefabricada de diamante Ahora bien, este diamante prefab en realidad vamos a usar, obviamente, para codificar en gran parte de la lógica que queremos para mi diamante Y antes de comenzar a escribir código, básicamente tenemos que decidir cómo va a funcionar el sistema. El sistema que me he asentado en hacer es que cada nube tenga cierta probabilidad, podemos convertirla en una de cada 31 de cuatro, lo que queramos de desovar un diamante cuando el jugador aterrice en la nube Y cuando saltas a una nube, existe la posibilidad de que la nube vaya a disparar un diamante de alrededor de una posición y vas a tener que atrapar ese diamante antes de que aterrice. Creo que empezaré con eso solo disparando directamente para que lo veas. Pero los diamantes no van a ser parte de la nube. Van a saltar y luego caerse. Así que hay que poder agarrarlo ya sea en el aire o ya que está cayendo de nuevo. Pero no va a quedarse ahí por mucho tiempo, va a saltar hacia arriba y luego volver a caer. Entonces obviamente no queremos tener un planeador de caja normal, Queremos tener un gatillo Así que comencemos. Voy a añadir un planeador circular En realidad, no un planeador de caja solo porque podría agregar un polígono también Pero en esta instancia, tener como un círculo no es lo peor del mundo porque quieres ser un poco más indulgente con los power-ups que con los hit boxes Porque a nadie le va a molestar que hayan recogido algo Obviamente, no lo hagas ridículo. Y voy a poner el desplazamiento a cero, ¿verdad? Déjame mantener eso en 0.1 0.05 Hagámoslo tres. Ahí vamos. Como dije, a nadie le va a molestar que hayan recogido algo así, pero obviamente no quieres que sea ridículo, solo hazlo de ese tamaño Y yo diría que probablemente sea bueno. Entonces asegúrate de configurarlo como un disparador y vamos a tener que crear una nueva etiqueta. Vamos a llamarlo diamante. Ahora antes de que lleguemos, obviamente, asignemos eso ahí antes de que me olvide, antes de empezar a sumar toda la lógica cómo el anotar y hacer un seguimiento de diamantes y tener como diamantes por carrera, todo eso va a funcionar. Primero acabemos con la lógica de desovar realmente los diamantes cuando queremos que generen, y luego podemos agregar todas las demás cosas Para ello, vamos a tener que entrar en mis Nubes y volvamos a mis prefabricados por aquí Y voy a querer agregar a cada uno de estos prefabricados un guión que diga, bien, tienes en estas muchas posibilidades de desovar en Empecemos con ese guión de aquí. Voy a crear un guión C sharp. Voy a llamarlo engendro de diamantes. Voy a hacer doble clic para abrirla en visual studio. Donde quiero que funcione el guión está. Quiero decir que cada vez que un jugador salta sobre mí, es cuando se calcula la oportunidad de una de cada tres de si quiero engendrar en un diamante Pero eso es un poco confuso porque es bastante difícil de diferenciar. Bien. ¿Es esta la primera vez que los jugadores me saltaron? Porque obvio no quiero que el jugador pueda saltar tantas veces que quiera y eventualmente engendrar en un diamante Quiero que se decida incluso antes de que se le haya saltado sobre él, ya sea que vaya a engendrar un diamante o no Voy a usar un método un poco extraño de codificación aquí, pero en realidad es una de las mejores formas, en mi opinión, de hacer esto. Voy a empezar bajo mi vacío original. Voy a decir que deje que un entero x sea igual a un rango aleatorio. Ten en cuenta, decidimos que el rango era inclusivo en el mínimo, pero no en el máximo. Creo que si usas flotadores es inclusivo, pero con enteros no lo es Y vamos a poner por aquí entero público y vamos a tener la oportunidad, esta es la de cuántas oportunidades? Voy a pasar de uno a mi variable de oportunidad más uno. En otras palabras, si hago 1.2 va a ir 1-3 que o bien me va a dar uno o dos. Entonces voy a decir si x es igual al azar, porque esa es probablemente la mejor manera de codificarlo, obviamente, si somos iguales al número máximo, por ejemplo, si este es tres, va a escoger 1-3 Y si es igual a tres, sabemos que siempre hay tantas posibilidades de conseguirlo. En realidad, prácticamente cualquier cosa funciona. Se podría decir casualidad menos uno o incluso 001, pero esta es una buena manera de saber que estará en el rango. Vamos a agregar corchetes alrededor de esa declaración if. Y luego dentro de este código de aquí, aquí es donde vamos a decir qué pasa si estamos en esta oportunidad. Ahora en realidad esto no es lo que queremos, queremos decir si no estamos en esta oportunidad, si consigo algo que no sea el número que quiero obtener, voy a querer destruir o eliminar este script real adjunto a mi código. Voy a decir gameobject, Get component. En otras palabras, encontrar en mi objeto de juego algo llamado engendro de diamantes que es este guión actual Y luego eliminarlo. Esto puede parecer un poco confuso, pero básicamente lo que estoy haciendo es que me voy , bien, empieza el juego. Escoge un número aleatorio de uno a digamos tres. Y si tienes algo más que tres, entonces destruye el guión. Lo que esto va a hacer va a significar, en promedio, sólo uno de cada tres de estos guiones reales va a permanecer en mi objeto de juego. Cuando tenga el juego, ¿ es así cuántas nubes van a engendrar? Hay una de cada tres posibilidades de que este guión sobreviva. Y entonces voy a escribir algún código a falta de esto que diga, bien, si interactúo con el jugador, entonces engendro en el diamante Y luego también en realidad va a eliminar el script también porque no quieren desovar en más diamantes después de que yo haya generado uno Antes de adelantarme a mí mismo, vamos a crear algunas variables más, objeto de juego público, diamante, y de hecho voy a crear una referencia a un cuerpo rígido también Entonces voy a seguir adelante en mi nulo de actualización. Lo borro, lo voy a sustituir por un vacío en colisión entrar dos D. voy a decir si colisión juego objeto punto compare tag es un jugador. En otras palabras, si acabo de chocar con el jugador. Y este código obviamente solo va a ser revisado si he acertado a esa oportunidad de 13. Si choco con el jugador quiero engendrar lo mío. Voy a decir que el objeto de juego D es instanciar diamante como objeto de juego Voy a establecer la posición de mi nueva escritura de objeto de juego de oposición transformada igual a mi posición actual en la nube que va a ser posición de transformación De hecho, podría no lanzar esto para engendrar exactamente en la misma posición que las nubes Voy a crear un nuevo vector. Tres, ir oposición transformada, hacer x, oposición transformada y más una compensación que voy a elegir ahora. Y luego transformó opsitionI'm crear un nuevo flotador, llamarlo offset. Y eso me va a permitir elegir donde por encima de las nubes quiero desovar Lo último que voy a hacer es que en realidad voy a establecer RB, que es mi referencia a un cuerpo rígido igual a D, que es mi diamante recién creado. Do get component rigid body two D. Voy a agregar un cuerpo rígido a mi diamante y así es como voy a hacer que salte en el aire. Voy a ir Rb, la velocidad es nuevo vector dos, ponlo a cero y voy a establecer, voy a crear un nuevo flotador aquí arriba que va a ser mi velocidad de lanzamiento de diamantes. Entonces solo voy a llamarlo lanzamiento. Esto va a denotar más o menos qué tan alto en el aire va a caer el diamante. Entonces en realidad voy a crear un guión separado encima de mi diamante que va a decir si voy en vivo con el jugador, haz esto, de lo contrario voy a querer eliminarme en el momento que llegue a este nivel de tipo de posición y. Porque la forma en que va a funcionar es que cada vez que aterrizo en una nube, va a disparar a un diamante. Entonces va a caer. Si el jugador no le pega, no queremos estar cayendo para siempre. Eso va a quitarle mucho tipo de cálculos y potencia informática al juego, aunque ni siquiera esté sucediendo en la pantalla. Entonces sigamos adelante y dejemos esto por ahora. Básicamente lo que estamos haciendo es lo que estamos diciendo mientras sigamos existiendo, para cuando el jugador aterrice sobre nosotros, luego desove en un diamante Establece su posición ligeramente por encima de nosotros y dispara hacia el cielo. Entonces, antes de que realmente nos armaremos, si esto funciona, hay algunas cosas que tenemos que hacer. Primero, tendremos que asegurarnos que el jugador sea tag player. Así que vamos a seguir adelante y etiquetarlo como jugador, cosa que en realidad no habíamos hecho antes. Lo segundo que tenemos que hacer es que tenemos que entrar en mi prefabricada Y necesito ir y asegurarme de agregar el guión a cada uno de estos. Sigamos adelante y escribamos mi guión de poesía que acabamos de hacer aquí. Pongamos la oportunidad a 1.3 Por ahora, vayamos a los prefabricados y engastemos nuestro diamante ya los cuerpos rígidos prefabricados se van a asignar cuando engendremos Y luego pongamos el offset en algo así como 0.5 y el lanzamiento a algo así como cinco por ahora. Obviamente podemos retocar eso más adelante, pero solo asegúrate de que obviamente esté editando cada uno de esos prefabricados que era el mío Y obviamente podemos cambiarlos según sea necesario. Pero lo último que tenemos que hacer ahora mismo, esto en realidad va a funcionar bastante bien. Vamos a desovar en nuestro diamante. Y todo va a funcionar excepto el cuerpo rígido porque todavía no tenemos un cuerpo rígido unido a nuestro diamante. Arreglemos eso agregando en un cuerpo rígido dos D. Eso es prácticamente en realidad todo lo que tenemos que hacer. Voy a congelar la rotación Z, aunque en realidad no haga la diferencia. Voy a asegurarme de que el colisionador sea un detonador, que es lo que quería Esto es en realidad todo lo que tenemos que hacer cuando estamos creando nuestro script. Tenemos este guión aquí arriba que va a decir, bien, desove en nuestro diamante Debería ser que cada una de cada tres nubes va a engendrar un diamante. Probemos si esto funciona. Vamos a golpear play y ver a medida que corremos. Tenemos una nube de desove. A ver si guardó un guión. El guión no está en esto. Supongo que esa no era la de cada tres. A ver si hay uno después de esto. Ese tampoco lo tiene puesto. Ese claramente quedó destruido. Dios mío, eso es duro. Se puede ver allá, esa fue la oportunidad de cada tres en la que podemos ver el diamante engendrado Ahora el problema es que en realidad no hemos destruido el guión, así que esto va a suceder cada vez. Pero creo que se ve bastante genial. En realidad funciona bastante bien, y tenemos un diamante desove en Quiero hacer algunos retoques. En primer lugar, quiero cambiar esa velocidad de lanzamiento a algo así como 6.8 solo para que ahora tengamos un poco mejor de posibilidades de desove Va a ser un poco más fácil atrapar ese diamante a medida que sube. De hecho voy a hacer que sea algo más como ocho, de hecho, y solo ver si eso es un poco ridículo, pero podría funcionar bastante bien. Déjame probar eso obviamente. Y luego obviamente en mi jugador también, realidad quiero hacer su velocidad un poco más baja y hacer que la altura del salto sea un poco más alta. De hecho, podría incluso aumentar un poco la escala de gravedad. Estos son sólo una especie de retoques que estoy haciendo. Entonces estoy cambiando mi escala de gravedad, voy a hacerla 2.5 voy a hacer la altura del salto 12, y voy a hacer la velocidad cinco. Y veamos cómo juega ese juego porque se siente un poco flotando en este momento. Eso en realidad es mucho mejor de lo que esperaba. Esto es mucho mejor y mucho más como lo que quiero que veas ahora. Es mucho más fácil atrapar esos diamantes. Obviamente, siguen desove infinitamente, Pero esto debería ser bueno por ahora Entonces hagamos rápidamente ese tweet que necesitamos hacer. En el momento en que engendramos un, un diamante, obviamente queremos eliminar nuestro script porque no queremos generar en múltiples Así que vamos a copiar eso de nuevo. Y entonces todo lo que tenemos que hacer después de eso es agregar un guión al diamante mismo que diga si choco con el jugador, luego aumentar esta variable en el jugador Y voy a tener un nuevo guión por aquí. Voy a tener dos nuevos guiones. Uno de ellos se le va a sumar al jugador, que va a hacer un seguimiento de cuántos diamantes tiene el jugador Y uno de ellos se va a sumar a los diamantes que hace seguimiento cuando el jugador choca con el diamante Vamos a seguir adelante y crear un guión C sharp, llamarlo jugador diamantes. Esto en realidad no va a ser mucho guión, solo va a ser un entero, lo que va a decir public int diamonds. En realidad también vamos a tener un int público de diamantes de alta puntuación. Ahí va a estar el diamante, la carrera actual y va a estar nuestra secundaria. Llegaremos a eso más tarde, pero estos son los únicos que necesitamos por ahora. Entonces todo lo que vamos a hacer después de eso es que también vamos a crear un nuevo guión. Aquí voy a crear un guión de tienda y llamarlo diamante en el guión. Todo lo que voy a tener es un solo evento vacío en gatillo entrar dos D, si colisión juego objeto comparar etiqueta jugador, entonces vamos colisión la cosa con la que colisioné en ese encontrar un componente llamado jugador diamantes Vamos a seguir adelante y de hecho poner los corchetes aquí para que podamos poner todo esto dentro la declaración y encontrar una variable en esa llamada diamantes e incrementada en uno Es decir, si choco con el jugador aumenta los diamantes en uno Y entonces tenemos que eliminar realmente la instancia de este prefab Entonces sigamos adelante destruir objeto de juego, que básicamente va a eliminar este diamante actual. Entonces lo último que vamos a hacer es sumar en una condición si chocamos con la parte inferior del mapa, en realidad también queremos hacer exactamente eso mismo, destruirme y no incrementarlo esta Para ello, en realidad vamos a agregar un colisionador al fondo de la cámara principal, porque ahí es donde va a suceder el juego Y vamos a sumar en un colisionador de borde dos D, vamos a ir a verlo por allá Esto es lo que se va a utilizar para rastrear básicamente si hemos llegado al final del mapa o no. Voy a mover el desplazamiento de la Y hacia abajo a por ahí. Podemos tener un poco debajo de la pantalla, realmente no hace la diferencia. Entonces pongamos los puntos a cinco negativos, o más bien diez negativos, tal vez incluso. En realidad, queremos ser mayores que la pantalla. Digamos negativo 12.12 Ahora bien esto va a ser también un colisionador disparador Entonces solo vamos a tener una pequeña línea de código aquí dentro que dice otra cosa si colisión juego objeto punto comparar etiqueta. Si golpeo la cámara principal, entonces todavía quiero eliminar la instancia de esta prefabricada Esto debería funcionar bastante bien si chocamos con el jugador Queremos eliminar el objeto del juego pero también agregarlo al inventario del jugador. Si chocamos con la cámara principal, también solo queremos dejar de existir A ver si esto funciona. Primero voy a tratar de no agregar un diamante en absoluto. Antes de que realmente pruebe eso, obviamente tengo que agregar en mi guión jugador diamante, que me olvidé de hacer, y un seguimiento de cuántos diamantes tenemos. De hecho, también me olvidé de agregar la escritura del diamante al diamante. Vayamos aquí y agreguemos en el guión diamante. Y creo que eso es todo. Porque el engendro de diamantes que ya agregamos. Vamos a golpear play y probar exactamente si esto funciona o no. Vamos a tener que probar para ver si los diamantes engendran o no los han engendrado todavía Vamos a tener que seguir el ritmo de la cámara, obviamente, para ver si ahí nos vamos a perder una. Diamond sí desove. Parece que dice etiqueta cámara principal no está definida. Oh, lo deletreamos mal. Esa es una solución muy fácil. Solo sigamos adelante y eliminemos ese espacio y lo probemos de nuevo, porque actualmente estamos recibiendo errores que dicen, bien, no sé qué es la cámara principal, pero esa es solo la cámara principal. Una palabra. Vamos a intentarlo de nuevo. Debería funcionar ahora. No, este juego es preocupantemente duro, pero llego ahí en un minuto Obviamente, el ajuste del juego generalmente viene de lo duro que haces estos ofscles que has creado Voy a hacer trampa un poco y devolverle mi salud a Max porque estoy a punto de morir. Pongamos la salud actual a seis. Es una de las cosas geniales de desarrollar el juego. Esto también es imposible, lo cual necesito arreglar tal cual. Ahí vamos. Ahí tenemos un diamante, y parece que sí engendró, lo cual es genial Volvamos a poner mi salud en diez esta vez. Vamos a conseguir algunos errores porque en realidad no estamos destinados a tener salud por encima de diez. Pero está bien. No va a romper el juego. Voy a tratar de recoger un diamante y parecía que funcionaba perfectamente bien. Recojo un diamante. Si vamos a mi jugador, podemos ver que tengo diamantes como uno solo. Casi todo realmente funcionó muy, muy bien. Ahora todo lo que tenemos que hacer es agregar un contador para que podamos saber cuántos diamantes hemos recogido. Vamos a entrar en mi interfaz de usuario por aquí en la parte superior, debajo de corazones, vamos a querer crear una nueva imagen. Sólo voy a copiar esto por ahora y moverlo ligeramente hacia abajo. Voy a querer que esta imagen sea un diamante. Voy a establecer el tamaño nativo establecido. Voy a querer solo obviamente necesito escalarlo hacia abajo, igual que hice con el otro, para asegurarme de que los píxeles son del mismo tamaño, es un poco más grande. Verás, eso me parece muy bien. Obviamente, como dije, no tiene que ser perfectamente exacto, pero sí tiene que ser bastante preciso. Si quieres que un juego se vea bien, entonces todo lo que tenemos que hacer, en realidad, es que tenemos que mover esto. En vez de tener directamente debajo, voy a tener esto del otro lado, así. Ahora voy a tener la partitura a la izquierda de la misma, lo que puede parecer un poco raro para algunas personas, pero puedes elegir lo que quieras hacer. De hecho podría cambiar eso más adelante, pero por ahora creo que va a funcionar bastante bien. Vamos a mover eso hacia abajo, está en la fila, entonces en realidad vamos a llamar a este diamante. Entonces todo lo que necesitamos hacer es entrar en mi UI y crear otro objeto UI, llamarlo texto, y tienes que crear una malla de texto pro. Vas a conseguir este pop up. Simplemente haga clic en Importar y va a importar todos los archivos que necesite para este paquete específico. Realmente no necesitas los ejemplos en extras, así que no voy a importar eso. Entonces voy a tomar mi nuevo cuadro de texto y lo voy a poner como objeto hijo de este diamante Voy a arrastrarlo por debajo de él, tal como lo hicimos justo al principio del juego con almacenamiento. Voy a ajustar la posición X para que sea algo así como -100 posición Y para ser cero Está en el medio. Sólo voy a ajustar el resto de esta caja como mejor me parezca. Creo que probablemente sea bueno. Muévelo hacia arriba y hacia abajo entonces. Sólo voy a asegurarme de que tengo el sentido correcto aquí. Quiero que esté bien alineado. Creo que el pin habilitado, voy a mantener ph ahora porque en realidad no puedo imaginar ninguna instancia en la que se agotaría todo el asunto. Tendrías que recoger muchos diamantes. Pero solo para estar seguro, voy a moverlo de esa manera y hecho voy a poner a wrapin No hace eso. Ahí vamos, mucho mejor. Ahora se extenderá en la medida de lo posible, arriba a través. Entonces voy a querer tener que elegir cuánto de esto obviamente quiero mostrar. Probemos en un valor predeterminado de 540 que no se ve muy bien. Vas a tener que elegir obviamente una fuente diferente y todo lo demás. A ver, tenemos una fuente drop shadow. No se ve genial. Una fuente de contorno podría verse bien. Realmente no puedes verlo ya que no hay una cantidad increíble de fuentes disponibles para ti recién integradas en Unity, por lo que en realidad he incluido otra fuente que es la misma fuente que voy a usar , que encontré en Internet. Puedes encontrar un montón de fuentes gratis en varios sitios. Asegúrese de que tengan la licencia correcta. Pero si puedes encontrar una de esas fuentes, entonces puedes encontrar una fuente que se ajuste bastante bien a tu estilo de juego. Voy a usar esa. Sigamos adelante en miscelánea y hagamos clic en Importante Nuevo Activo. Aquí está, Bloopf. Tenemos un tamaño de fuente aquí. No me metería demasiado con estos. Podemos probarlos una vez que hayamos agregado la fuente, pero solo déjelos como están. Ahora para usar una fuente extra, en realidad no podemos usar esta prosa de malla de texto Vamos a tener que eliminar esto y crear una nueva interfaz de usuario. Sólo vamos a querer un texto normal. Tengo que ir bajo Legado y hacer clic en Texto. Vamos a nombrar este contador. Entonces voy a arrastrar exactamente como lo hice la última vez. Voy a poner el desbordamiento horizontal en desbordamiento. Y voy a ponerla bien alineada. Muévelo de esta manera. Quiero que esté centrada en el medio. Quiero que sea bloop de fuentes, ya ves ahí. Se ve bien. Sin embargo, está muy borrosa Y la forma en que arreglamos eso, en realidad vamos a aumentar el tamaño de la fuente, vamos a mover la cosa tan grande como podría ser. Se puede hacer que sea un máximo de 300. Y encuentro que esto es generalmente lo tienes que hacer para que los píxeles se renderizen en ese momento solo tienes que bajar la escala hasta abajo. Vamos a escalar eso hacia abajo. Hagamos clic en estos y escalemos en proporción hasta lo que queremos. Creo que necesitamos un poco más pequeños que eso. En realidad, probemos un 0.12 Eso podría estar bien. Intentemos cambiar el color a lo que realmente queremos que sea, que es el blanco. Está alineado al centro, pero no parece que esté en el centro. Entonces lo voy a poner a fondo alineado. Y probemos 150. Eso se ve bien. Puede que no sea tu fuente favorita, pero es la que voy a usar para esta demostración. Obviamente puedes encontrar una fuente diferente en línea si quieres, pero creo que por ahora realmente funciona bastante bien. Hagámoslo un poco más oscuro, así que no sea blanco brillante, Pero eso debería funcionar como nuestra fuente básica para hacer un seguimiento de cuántas gemas tenemos. Ahora obviamente solo necesitamos escribir el código que diga, bien, mostrar el número correcto aquí. Y eso se va a hacer dentro de nuestro guión diamante jugador por aquí. Vamos a crear una referencia a Eyes in Unity. Vamos a ir al público anular el texto de actualización. Y dentro de ella, por encima de eso, en realidad vamos a crear una referencia a nuestro contador. Vamos a decir contador de texto es igual a diamantes, Dos cadenas. En otras palabras, establece la variable de texto, que es lo que estamos escribiendo en esta cajita de aquí. Cuando hicimos clic en eso, lo esta cajita tiene dentro de ella que establece eso a cualquiera que sea mi valor actual de diamantes es como una cadena, se almacena como un entero Tenemos que convertirlo a formato de texto. Antes de que podamos hacer eso, obviamente vamos a llamar nulo a este texto de actualización cada vez que incrementemos el texto. Vamos colisión obtener diamantes componentes, actualizar texto. Esto en realidad debería funcionar bastante bien. Todo lo que tenemos que hacer es volver a Unity y asegurarnos de que también hemos asignado estas dos variables. Vayamos al mostrador de aquí y lo arrastremos. Empecemos con un valor de cero, así que no empezamos con alguna cantidad aleatoria de diamantes y veamos si eso realmente funciona. Si hacemos clic en play ahora tenemos nuestro contador de diamantes a la derecha. Tenemos el corazón a la izquierda. Veamos si podemos recolectar y hacer este juego más fácil. A ver si podemos recolectar diamantes. De hecho, podría incluso aumentar un poco más la altura del salto. Voy a hacerlo a partir de las 12, voy a hacer 14. A ver si eso funciona un poco mejor. Podría ser un poco alto. Vamos a mantenerlo a las 12, pero tal vez aumente un poco la velocidad. Hagamos la velocidad seis. Sé que originalmente eran seis, pero creo que en realidad funcionó un poco mejor. Sí, eso es un poco más fácil de atravesar. Eso debería ser bueno. Obviamente solo tenemos que esperar un engendro tenue para ver si podemos probar nuestra colección de diamantes No creo que hubiera conseguido ese de todos modos. No, no hay diamante por ahí. Ahí hay uno. Ahí vamos. Y se puede ver que funciona muy, muy bien. Ahora tenemos un diamante y lo recogimos, y ojalá esté ahí vamos. Hay dos diamantes. Esa es prácticamente la base de nuestro sistema de recolección de diamantes. Obviamente, vamos a empezar con los toques finales de nuestro juego. Pero tenemos todo lo básico abajo antes de que podamos construirlo. Tenemos que agregar en postprocesamiento, hacer que se vea mucho mejor, audio y música, y todo lo demás. Y también tenemos que sumar ahorros para que podamos asegurarnos de ahorrar cuántos diamantes tenemos. Pero creo que hemos llegado bastante lejos hasta ahora y de hecho hemos hecho una buena cantidad del juego si has seguido y tu juego es en realidad como el mío es ahora mismo, un buen trabajo porque ya tienes prácticamente un juego de plataformas. Como todo lo demás que vamos a agregar ahora va a hacerlo mucho mejor. Pero estos son todos los básicos. Tenemos enemigos, tenemos un sistema de salud, y me tenemos mecánicos, y también tenemos un recuento de cuántos diamantes recolectas. Todo está funcionando prácticamente exactamente como necesitábamos. En el siguiente video, vamos a agregar en un bucle de juego para que podamos jugar continuamente el juego sin tener que hacer clic y hacer clic para reiniciar. Pero una vez que hayamos hecho eso, prácticamente habrás terminado el juego, todos sus componentes básicos, de ninguna manera terminar el juego. Porque aún tendrás que agregar en la música y todas las demás cosas de postprocesamiento para que se vea mejor Pero vas a terminar la base del juego es lo que debería decir. En fin, eso es todo en el siguiente video. Y si sigues hasta ahora, gran trabajo. Gracias. 13. 12. Crea un bucle de juego: Hola, y bienvenidos de nuevo a Unity. Hay una cosa más que necesitamos agregar para que este juego sea prácticamente todo lo básico de un juego que deberíamos poder jugar. Y eso es un bucle de juego. Es decir, podemos seguir jugando el juego todo el tiempo que queramos, porque ahora mismo, si saltamos del mapa o morimos, si pasa algo, eso es todo. Realmente no tenemos nada más que suceda. Y ni siquiera podemos morir esa manera. Eso es lo primero que tenemos que arreglar. Pero obviamente no podemos seguir jugando el juego, que es el problema primero. Agreguemos en el mecánico que dice si tocamos la parte posterior de la pantalla o si caemos en el fondo, entonces morimos. Empecemos por mover esto un poco hacia arriba por aquí para que sea prácticamente justo en la parte inferior de la pantalla. Obviamente, si tocas eso, no vas a poder volver a levantarte en la forma en que puedes volar de regreso. Eso está bien. De hecho, esta vez agreguemos otro colisionador de borde Vamos a agregarlo a los lados de las pantallas. Voy a hacer clic en Editar Collider. Y voy a arrastrar el de allá. Creo que eso es en realidad un poco demasiado cerca. Voy a arrastrarlo justo detrás de esa pantalla. Y el segundo voy a arrastrar aquí abajo. Y entonces sólo voy a ajustar estos para que exactamente misma distancia voy a hacer que sea -10.8 para ambos Voy a hacer el elemento y cinco y negativo cinco. Eso en realidad debería ser prácticamente todo lo que necesitamos. Todo lo que tenemos que hacer ahora es agregar un guión a mi cámara principal, a mi reproductor, que dice que si toco la cámara principal tengo que morir también. Volvamos a los guiones. Abre la salud del jugador por aquí bajo mi gatillo quédate tres D cosa que voy a decir si choco con un enemigo y tiempo de invisibilidad es esto, entonces haz De lo contrario, si no es enemigo, si choco con la cámara principal, decir, los límites del mapa, entonces no importa cuánto tiempo de invisibilidad quede Cualquier otra cosa así, necesito morir instantáneamente. Estoy en lugar de llamar a la toma de daños nulo, solo voy a hacer cierta cantidad de daños y verificar si estoy muerto y si estoy muerto, entonces llamaré al vacío de muerte. De lo contrario, llame hay vacío muerto. Solo voy a llamar directamente al vacío de la muerte yo mismo y decir, bien, entonces obviamente necesito morir y el juego tiene que parar. Esto es en realidad prácticamente todo el código que necesitamos para asegurarnos de que sea una característica agregada. Ahora hay una cosa más que realmente debemos recordar hacer. Olvidé hacer estos dos disparadores, que o mejor dicho este un disparador, ese disparador de los de abajo, pero este también debería serlo. Vamos a golpear play una prueba si esto funciona. Si estamos corriendo y saltamos a la pared, moriremos instantáneamente. Podemos ver que en realidad volamos ahí arriba. Lo que resalta algo más que pensé que podría ser un problema porque recuerdo haberlo visto una o dos veces, pero en realidad no estaba seguro de por qué la lápida se movió más alto de lo que debería Esto en realidad lo hace mucho más claro. Lo que está pasando es que debido a que se trata de un evento de estancia desencadenante, estamos llamando al vacío de la muerte varias veces. Voy a tener que asegurarme de que solo llamemos al vacío de la muerte siempre y cuando no estemos muertos. Si mi salud actual es genial y cero, no estoy muerto. En otras palabras, no puedo morir dos veces. Sólo puedo morir una vez. Porque lo que está pasando aquí es que cada vez que morimos, está haciendo todas estas cosas otra vez. Y es como moverme muy ligeramente hacia arriba, lo que en realidad explica por qué a veces morí, parecía que también me moví hacia arriba. Me alegro de que lo sacáramos la manera en que me preguntaba qué era. Tenemos que agregar esto y no es cláusula muerta por aquí que dice, bueno, solo mátame si no estoy ya muerto. Necesito agregar exactamente lo mismo por aquí está muerto. Solo asegurémonos de que eso sea tanto aquí como aquí. Es decir, no podemos llamar a la cláusula de muerte si ya la hemos llamado una vez antes. Esos son los dos únicos lugares en todo el guión donde llamé cláusula de muerte. Todo debería estar bien. Volvamos a ver si funciona ahora. Debería hacer un salto ahí. Se ve que muero al instante, que es perfectamente lo que quiero. Y también debería funcionar. Si me caigo del fondo del mapa, debería morir también, lo cual es genial. Eso es todo arreglado como necesitaba. Ahora obviamente, necesito agregar en mi bucle de juego, porque ahora mismo simplemente me muero y no hay forma de volver a jugar el juego. Voy a agregar un poco de código aquí eso va a decir cuando muera, detente por un minuto, luego se va a desvanecer a negro. Y luego se va a desvanecer de negro, habiendo engendrado en un nuevo tipo de escena Y la forma en que en realidad voy a hacer eso, en realidad voy a restablecer la escena en sí. Así que en lugar de intentar restablecer todo de nuevo a cómo era, en lugar de intentar bien volver a habilitar todos estos scripts y ponerlos de nuevo camino, solo voy a recargar la escena, que efectivamente es lo mismo hacer clic en este botón de nuevo, yendo así y luego yendo bien, hazlo de nuevo tipo de cosas Lo cual en realidad va a funcionar muy, muy bien para mí porque voy a tener una pantalla negra descolorada Debería poder volver a cargarlo y luego hacerlo. Y en realidad va a ser bueno también porque no voy a tener que codificar ninguna de las cosas extra para ponerla de nuevo al estado que quiero estar, que es esta. Así que voy a crear un nuevo objeto a D. Voy a crear un cuadrado, y voy a llamarlo cortina porque en realidad no es una cortina. Va a actuar como una cortina. Voy a hacerlo más grande que todo mi juego sobre ese grande. Déjame bajar este alfa para que pueda ver dónde está. Digamos que eso es sobre el bien. Y obviamente con un desplazamiento cero, entonces voy a subir la Alpa Voy a hacerlo completamente negro. Voy a hacer que ordene y capa 100 así que esté frente a absolutamente todo. Esta cortina. No voy a tener existente para la gran mayoría del juego. Pero luego en el momento en que quise, voy a engendrarlo y se va a desvanecer en negro, y luego va a existir Entonces en el momento en que empiece voy a querer desvanecerse de negro a claro y luego deshabilitarme. Voy a hacer todo esto usando animaciones. Primero voy a crear un nuevo guión. Voy a llamarlo Curtain Script. Antes de que en realidad codifique. En este momento, voy a agregarlo a mis objetos de cortina. Voy a ir aquí y voy a agregar guión de cortina a mi objeto cortina. Así. Entonces una vez que lo haya hecho, voy a abrir guión de telón y voy a crear un nuevo vacío público. Llámalo desactivar. Eso solo va a decir juego objeto set active, false. En otras palabras, dejar de existir. Vamos a tener que habilitar este objeto nuevamente desde otro script. Lo cual en realidad va a estar bien para nuestros propósitos porque en este guión de la muerte vamos a volver a habilitar el objeto y vamos a llamar a un vacío específico. Estamos diciendo bien, se desvanecen a negro, no se desvanecen de negro. Pero ahora mismo necesitamos este vacío por aquí que dice, bien, dejar de existir. Voy a usar esto en la animación para decir, bien, sí, todo está bien. Entonces voy a tener un nuevo vacío por aquí y llamarlo fade two. Dentro de este vacío va a estar donde está todo mi código de animación. Voy a ir animador público, jalarlo un voy a decir que un set bool se desvanece y lo voy a poner a la verdad Lo que esto va a hacer es tener un toro en el que me permita controlar, bien, necesito desvanecerme de vez en cuando voy a hacer el resto usando esos eventos en el animador Pero necesito un vacío más y va a ser el vacío para recargar la escena Y la forma en que vamos a codificar esto, vamos a ir a la cima de aquí y vamos a ir usando Unity Engine, Scene Manager o Scene Management más bien, este código va a decir administrador de escena , escena de carga, paréntesis abiertos, administrador de escena, obtener nombre de escena activo Lo que esto va a hacer es básicamente cargar cualquiera que sea el nombre de la escena activa que tengo, que es mi única escena. Si vuelvo a Unity, tengo escena de Sable. Cambiemos el nombre a esto porque ese no es el nombre más grande. Sólo voy a llamarlo escena principal porque es la única escena que vamos a usar para este juego. Vamos a estar construyendo todo dentro de él. Y vamos a tener este código por aquí que dice, bien, cuando se llame a este vacío, que va a ser llamado por el uso de la animación en un evento, deshabilitarme. Entonces cuando se llame a este código por aquí, se desvanecen dos, que va a ser llamado por el guión de salud del jugador. Voy a establecer mi desvanecimiento verdad y voy a desvanecerse. Y luego al minuto este código, que también va a ser llamado por la animación, voy a recargar la escena por completo y me va a empezar exactamente donde quiero estar Volvamos a Unity y creamos una nueva animación. Claro, vamos a necesitar dos. La primera animación se va a llamar Curtain Fade In. Y obviamente queremos desvanecernos de negro completo a nada. Y aquí vamos a agregar un búfer. Va a meterse con la animación, pero pongamos eso a cero por ahí. Y luego asegúrate de que también tenemos el set 20. Ahora tengo un fade in y luego se queda aquí. Y la razón por la que estoy agregando esto en es porque voy a agregar un evento por aquí A veces se agrega un evento justo al final de un fotograma. Te da algunos problemas porque realidad no existe en este marco por mucho tiempo. Si técnicamente no llama al evento, veces va al principio sin llamar, entonces va a repetirse dos veces solo para guardar todo eso, voy a dar mucho tiempo para llamar a este evento. Y créeme, un tercio de segundo es más que suficiente. Voy a ir guión de telón, y voy a decir desactivar Una vez que me haya desvanecido, se va a desactivar. Solo asegurémonos de que si abrimos telón, eso es lo predeterminado, porque eso es lo que quiero que pase primero. En el momento en que empiece el juego, va a hacer esto. Entonces voy a crear un nuevo guión. Llámalo cortina desvanecerse. Este script, o más bien esta animación, lo siento, sólo va a ser llamado siempre y cuando un parámetro de tipo fade out sea verdadero. Creo que así es como lo llamamos si volvemos aquí. Sí, lo llamamos desvanecerse. Sólo cuando se desvanece es cierto. No vamos a estar usando ningún estado aquí porque esta es la máquina de estado más simple del mundo. Pero vamos a establecer X tiempo libre, vamos a establecer la duración de transición a cero. Vamos a establecer las condiciones para ser. Fade out es igual a true, entonces mientras el fader sea cierto, vamos a llamar a esta animación fade out Eso va a decir, bien, de la nada, vamos a querer desvanecerse a negro. Entonces lo que estamos haciendo aquí después de esto, después de que nos desvanecemos a negro, entonces queremos llamar a un nuevo evento. Aquí vamos a hacer exactamente lo mismo. Vamos a agregar un búfer por aquí a 1 segundo. Vamos a llamar a ese nuevo evento que va a ser escena de recarga Ahora bien, esto es prácticamente todo lo que tenemos que hacer porque ahora mismo tenemos todo el código para desvanecerse en el momento en que comenzamos o desvanecemos más bien en el momento que comenzamos la escena y nos desvanecemos. Pero todavía necesitamos algo para llamar a estos guiones. En otras palabras, al minuto que morimos después de esperar como tal vez uno o 2 segundos, queremos llamar a este guión. Vamos a entrar en mi guión de salud de jugador por aquí. Primero que nada, creemos un nuevo numerador I. Llámalo recarga, Retraso. Va a ser muy sencillo. Sólo vamos a decir rendimiento, retorno, esperar segundos, y vamos a esperar 2 segundos. Entonces vamos a querer hacer dos cosas. En primer lugar, vamos a querer activar ese objeto de juego Curtain. Vamos a crear una referencia a ella. Vayamos objeto de juego público, llámalo cortina. Vamos a ir al juego de telón activo. En otras palabras, vuelve a activar el telón. Entonces vamos a querer llamar a este desvanecimiento a vacío. inmediato vamos a ir cortina, obtener componente, cortina, guión, desvanecer dos. Creo que así se llama el vacío. Sí, se desvanecen dos. En otras palabras, cuando morimos, espere 2 segundos. Pon el telón activo y haz que se desvanezca. O hacer que se desvanezca. Todo lo que tenemos que hacer aquí al fondo de la muerte es llamar nulo a este retraso de recarga Creo que eso debería ser todo lo que necesitamos para trabajar, obviamente. Vamos a comprobarlo porque a menudo hay errores cuando estamos haciendo esto. Pero asegurémonos de que todo esté como lo necesitamos. Obviamente solo cambiamos este guión de cortina por aquí. Y mira, no hemos activado al animador, Pero aparte de eso, creo que todo debería estar bien Oh, casi nos olvidamos de asignar las cortinas. Vayamos aquí para jugar con nuestra salud y asegurarnos de que hemos asignado el telón correctamente. A ver si esto funciona. Si tuviéramos juego podemos ver en tal como queremos, lo cual es genial si morimos. Vamos a intentarlo ahí. Esperamos 2 segundos, lo que podría ser un poco largo. Entonces podemos ver cortina no parece que en realidad se esté activando. Podría tener algún problema por aquí. Solo volvamos y miremos nuestro código. Cuánto tiempo esperamos 2 segundos y pusimos el telón activo un verdadero. Asegurémonos de que se llame a este retraso de recarga configurando una declaración de impresión aquí Así es como llegaste a probar esto. La cosa no es como tienes que hacer, así es como me gusta hacerlo. Vamos a intentarlo de nuevo. Y podemos ver que el enunciado impreso claramente no está funcionando. Entonces no se está llamando a esta corotina. Y es porque no escribimos start corotine. Ves, es una cosa quisca. A veces me olvidaba en ese momento. Pero escribamos Start Corotine, reload delay, y ojalá todo funcione Ahora volvamos a mi juego. Así que haz clic en reproducir y ver si trabajamos. Cuando morimos, caemos. Ahí vamos. Ahora tenemos que esperar 2 segundos. Vamos a desvanecernos, y vamos a desvanecer de nuevo en el juego. Esto en realidad está funcionando bastante bien. Lo último es obviamente que el fade in realmente no está teniendo efecto porque solo lo está haciendo en la ubicación específica de la pantalla, que no es lo que queremos en absoluto que sea exactamente donde está la cámara principal. Sólo voy a escribir un pequeño pedacito más de código. En primer lugar, vamos a hacer el telón un poco más grande porque la cámara empieza moviéndose. Eso en realidad va a cambiar cuando agreguemos en nuestro hub inicial. Pero por ahora, vamos a hacerlo un poco más grande solo para estar en el lado seguro. Vamos a subir un poco esta escala , solo para que no nos desvanezcamos de ella ya. Entonces, por último, vamos a ir aquí donde vamos a decir transformar hacer posición es igual al objeto de juego Encuentra en nuestra escena, encuentra una cámara principal. La posición de esa cámara principal es donde quiero estar. A ver si eso funciona. Debería funcionar perfectamente bien. Ahora pulsamos el botón de reproducción. Podemos ver que tenemos un desvanecimiento perfecto en la animación funcionando sin problemas si morimos vamos a esperar 2 segundos, lo que podría ser un poco largo, pero voy a ver que no parece que esté funcionando. Creo que cuál es el problema, podría estar cambiando la posición Z. Es quisquilla. Cosas como esta la mayor parte del tiempo. Vamos a juego objeto punto encontrar la posición principal de la cámara. Y luego sigamos adelante y asegurémonos de que realmente cambiemos esa posición a cero en el eje z, y eso realmente podría resolver nuestro problema. A ver si lo hace. Ahí vamos. Siempre es raro, cosas así. La cámara principal está un poco detrás de escena, por eso nos dio un aspecto un poco glitchy Pero eso es todo lo que tenemos que hacer. Nos hemos asegurado de que la posición sea la misma. Ahora podemos jugar el juego infinitamente. Tenemos lo que se llama un bucle de juego, que es realmente, muy genial, porque esa es la base que necesitamos para nuestro juego. Hemos hecho todo lo que necesitamos ahora, excepto todas las cosas extra como el audio y la música y todo eso. Solo sigamos adelante y eliminemos ese script de prueba que pusimos aquí que era la impresión del uno. Obviamente hemos cambiado la posición ahora que restablece la posición cero Pero todo lo demás debería estar bien. En realidad tenemos ahora no sólo un juego, este desvanecimiento en la animación para hacer que el juego se vea un poco más, supongo, profesional Entonces esa es la base de este episodio, completado así como la base de nuestro juego. Bastante hecho, lo cual es bastante genial. En el siguiente video, vamos a empezar con el ahorro, para que podamos ahorrar cuántos diamantes realmente guardamos. Y tenemos una preparatoria, que continúa incluso después de que dejamos el juego, así que no perdemos nuestro progreso cada vez. Pero eso es prácticamente todo para este video. Y si seguiste y todo está funcionando igual que el mío, eso es genial. Y ojalá tu loop de juego esté funcionando así como esto. Y has logrado construir prácticamente toda la base de una plataforma, un juego. Enhorabuena por llegar hasta aquí. Y si todo está funcionando igual que el mío, eso es genial. Gracias. 14. 13. Cómo guardar nuestro juego: Hola, y bienvenidos de nuevo a Unity. Ahora bien este probablemente va a ser el episodio más corto de todo el curso porque todo lo que vamos a agregar en este episodio es ahorrar. Eso puede parecer bastante complicado. De hecho, si utilizamos ciertos métodos de ahorro, esto sería mucho más difícil de lo que vamos a hacer. Pero vamos a estar usando la forma más sencilla y básica Unity te permite guardar en su motor de juego, que se llama Player Prefs Ahora solo como un descargo de responsabilidad, si planeas lanzar este juego y tal vez sobre todo si es como un juego multijugador o algo así. Es decir, no sé exactamente cómo vas a saltar de esta plataforma a un juego multijugador. Pero ya sabes, si usas esto como trampolín para iniciar el desarrollo de juegos y planeas lanzar un lanzamiento adecuado y comercialmente viable, entonces probablemente vas a tener que elegir guardar tus juegos de una manera diferente Porque la forma en que voy a guardar mis juegos es guardando archivos específicos en la computadora. Y yo solo los estoy guardando de no la manera más encriptada o algo así, supongo que es difícil de descifrar. Entonces, si guardara todo mi juego así, alguien no le tomaría mucha dificultad ir a editar esos archivos y darse un montón de habilidades o monedas extra. Ahora bien, este no es el tema más masivo porque, quiero decir, si alguien realmente quiere hacer eso para un juego de un solo jugador, como que puede. Y no tanta gente que juega videojuegos termina manipulando los archivos de todos modos Pero si estás planeando hacer algo así como un juego multijugador, esto es obviamente algo increíblemente malo para tener. Porque no puedes tener algunos jugadores capaces de darse un montón de cosas y otros jugadores no De todos modos, Con ese descargo de responsabilidad fuera del camino, ahorrar para la mayoría de las plataformas indie básicas va a estar bastante bien, en mi opinión. Algunas personas pueden estar en desacuerdo, pero es bastante fácil manipularlo Pero eso no es realmente un problema para juegos indie como este, porque el disfrute lo determina el jugador, y si quieren estropearlo, pueden. Pero supongo que eso es cierto de cualquier juego en general. Empecemos con el guión de guardado porque no va a tardar mucho en absoluto. Todo lo que tenemos que hacer es que tenemos que ir aquí a nuestro guión de diamantes por aquí. No es un guión de diamantes. Voy a tocar un guión de diamante por aquí. Voy a hacer doble clic sobre esto. Y vamos a tener un nuevo vacío. Voy a llamarlo nulo público. Guardar diamantes dentro este bloque ala alrededor si declaración para decir si los diamantes son mayores que los diamantes de secundaria. En otras palabras, si hemos conseguido nuestra preparatoria, entonces queremos ir a prefs de jugador engastados en diamantes, queremos engastarla a diamantes Esta corta línea de código por aquí básicamente solo va a decir, bien, toma lo que quiera poner, que es mi variable diamantes, y ponla en este entero en Playerprefs llamado diamantes, que básicamente está diciendo guardarlo en Si quiero conseguir eso más adelante puedo ir Playerprefs, meterme De hecho voy a hacer eso justo en la parte superior de aquí en mi vacío de inicio. Voy a decir inicio vacío. Y voy a decir que los diamantes de secundaria son iguales a que Playerprefs se metan Esto en realidad sólo va a funcionar después de que hayamos jugado el juego al menos una vez, porque hasta entonces no vamos a tener ningún valor aquí dentro. Así que vamos a agregar una declaración rápida if si jugador prefs tiene diamantes clave, decir, si ya hemos guardado algo dentro de esta cosa de diamantes, entonces sácalo Este código obviamente no se va a ejecutar la primera vez que jugemos el juego. Los diamantes de alto schol se van a poner a cero. De hecho, podemos establecer ese valor allí como un valor predeterminado, que también es una buena convención de programación. Porque Unity establece todos estos valores por defecto en cero porque los hemos asignado en el aire. Pero si estás usando un motor diferente o un lenguaje de programación diferente, puede que no. Así que vamos a seguir adelante y hacer eso. Y entonces digamos un vacío de inicio. Si tenemos algo guardado en diamantes, entonces sacarlo y ponerlo en diamantes de secundaria. Entonces los diamantes salvados vacian aquí. Si nuestro puntaje actual es mejor que eso, entonces queremos reemplazarlo. Todo lo que vamos a hacer debajo de esto es que vamos a clic en Prefs del jugador, Guardar Sigamos adelante y pongamos todo esto dentro de la declaración. Ese va a ser prácticamente todo el código que necesitamos para salvar nuestro juego y tener las cosas funcionando entre sesiones. Todo lo que tenemos que hacer ahora es , obviamente, llamar a este vacío. Volvamos a la salud del jugador. En el momento en que morimos, esto va a estar apegado a nuestro jugador también. Vamos Juego objeto punto obtener Componente jugador diamantes, guardar diamantes. Vamos a probar esto. Si volvemos a nuestro juego, hacemos clic en mi jugador. Podemos ver que todos nuestros valores predeterminados van a estar por aquí. Vamos a hacer clic en Reproducir. A ver si tenemos diamantes cero y los diamantes de secundaria son cero. Y eso no va a cambiar. No vamos a tener ningún error porque hemos usado eso tiene cosa clave. A ver si podemos intentar conseguir un diamante. No parece que haya suerte hasta ahora. En el momento en que consigamos uno, voy a probar este código uno. Tengo un diamante, ahora los diamantes actuales están engastados en uno. Voy a morir. A ver si funciona. Actualmente, vamos a restablecerlo. Ahora, solo hagamos una pausa rápida y si volvemos con mi jugador, deberíamos poder ver que de hecho tenemos diamantes de secundaria engastados en uno. La próxima vez que muera, no voy a tener más de un diamante. Así que voy a reiniciar mi juego de nuevo. Veamos si todo funciona igual que anticipamos que lo haría. Todavía tenemos diamantes de secundaria engastados en uno, y eso realmente funciona sin importar cuántas veces juegues al juego, no importa cuántas veces lo cierras o lo que sea. El sistema de ahorro va a funcionar porque ahora estamos guardando el valor de nuestro juego en un archivo separado. Eso es todo lo que tenemos que hacer para conseguir que el ahorro funcione en mi juego. Obviamente voy a sumar en hub titular más adelante donde pueda mostrar la puntuación más alta del jugador así como el título y todo lo demás. Pero por ahora podemos saber que todo está funcionando tal como debería. Esa es realmente la última mecánica que necesitamos agregar a nuestro juego. Después de esto, vamos a mejorar las imágenes y vamos a agregar en el hub de inicio y todas las demás cosas extra, mejoras de audio y visuales Pero por ahora, este es como el último paso para hacer nuestro juego. Y lo hemos hecho todo hasta el momento. Un gran trabajo si seguiste hasta el punto en el que estoy. Ahora obviamente sí necesitamos hacer algunos retoques con estos todavía porque algunos de ellos son imposibles Y tal vez hacer un poco de depuración para asegurarnos de que nuestro juego se vea un poco más fluido Pero hasta ahora todo en realidad está funcionando más o menos como esperarías que funcionara. Y no parece que tengamos ningún problema masivo en este momento. Entonces nuestro juego está en un estado bastante bueno y tenemos todas las mecánicas básicas, como dije, si has podido seguir adelante y tu juego es como el mío en este momento, gran trabajo. Porque ese es en realidad un juego bastante impresionante de haber hecho, especialmente si no has hecho juegos de Unity en el pasado antes. Gran trabajo en seguir este video wrap hasta el final. Asegúrate de estar al día con este video antes de ver el siguiente, porque entonces vamos a estar agregando el último toque al juego. Y quieres llegar a este punto antes de seguir adelante. Pero ojalá todo funcione en tu computadora igual que en la mía. En el siguiente video, comenzaremos a agregar nuestras mejoras visuales. Gracias. 15. 14. Mejora de los visuales: Hola, y bienvenidos de nuevo a Unity. Ahora mencioné en el último video que prácticamente hemos terminado todos los conceptos básicos de nuestro juego. Y sé que lo he dicho bastantes veces, pero en realidad es prácticamente completamente cierto. Ahora hemos hecho todo lo que necesitas para una plataforma básica. Nuevamente, tenemos generación de mapas infinitos aleatorios. Tenemos un juego loops, puedes morir y reiniciar. Tenemos un sistema de puntuación con ahorro, y tenemos un montón de enemigos y obscles variados y todo lo demás Y obviamente, como dije, puedes morir y reaparecer y todo se salva Y todo está funcionando prácticamente igual que necesitábamos. Pero hay algunas cosas que no hemos agregado. En primer lugar, uno de ellos es un hub inicial, al que llegaremos un poco más adelante en el curso, para que no tengas que saltar instantáneamente de nuevo al juego. Puedes relajarte un poco. En segundo lugar, no tenemos forma de mostrar tus puntuaciones altas, aunque esté guardada, en realidad no está ahí. Lo cual también te vamos a meter en el centro de partida. Pero lo más importante, el juego todavía no se ve muy bien. Si sigo adelante y desactivo esta cortina, si pudieras, exactamente igual que yo, puedes simplemente desactivar esto cuando lo necesites porque todo lo que va a hacer es desactivar la animación fade in. De hecho, deshabilitamos esto y luego lo volvemos a habilitar a través del código más adelante. El fade out todavía va a funcionar, pero si quieres ver cosas en tu juego sin tener que desactivar esto y moverlo, entonces simplemente deshabilitarlo por ahora. Yo voy a hacer eso, El juego no se ve muy bien. Tenemos este fondo masivo, grande, azul oscuro. No tenemos ninguna cosa en el fondo pasando. Todavía no tenemos realmente ningún efecto para cuando morimos o recolectamos monedas. Solo conseguimos que todos cambien sprite de inmediato. Vamos a cambiar todo eso en este video y comenzar con una actualización visual del juego. Pero antes de comenzar con eso, solo pensé en mencionar que he cambiado algunas de estas baldosas entre este y el último video. Ahora bien, esto no tiene ninguna importancia porque estoy casi seguro de que no tienes exactamente las mismas baldosas que yo. Pero algunas de mis baldosas eran imposibles de atravesar. Solo pensé que mencionaría, si alguien se da cuenta, se ven un poco diferentes, he movido algunas cosas por ahí. Como por ejemplo, moví esto un poco hacia arriba y esto hacia abajo, creo que este solía ser imposible, así que también moví esto hacia arriba. Y éste me moví hacia abajo. Son más o menos exactamente lo mismo que eran solo con algunas ligeras alteraciones. Pero como dije, esto no es importante en absoluto. Yo solo pensé que lo había mencionado en caso que alguien esté confundido y noten una diferencia. Pero independientemente, vamos a empezar a actualizar las imágenes de este proyecto Vamos a entrar en sprites e ir a nuevos activos importantes como siempre lo hacemos Estos diez activos de sprites de aquí obviamente siempre estarán vinculados debajo del video y también están debajo de este Sigamos adelante y seleccionemos los diez nuevos sprites que acabamos de recolectar allí Y luego vamos a establecer todos estos ajustes solo 12 y apuntar sin filtro. Obviamente si tus píxeles por unidad son diferentes entonces usa tu propio valor. Pero deberías establecer esto a punto de usar pixel art. Y sólo voy a poner el single por acaso porque corrimos a algunos temas con el corazón, pero no es un trato masivo. En fin, comencemos arrastrando este fondo a nuestro juego Nunca antes habíamos creado un objeto como este, pero simplemente crea automáticamente un objeto sprite con este sprite actual habilitado Creo que lo hicimos una vez y solo voy a estar haciéndolo de nuevo porque es la forma más fácil de crear un sprite Entonces todo lo que voy a hacer es arrastrar esto debajo de mi cámara principal así, y voy a asegurarme de que ahora es un objeto hijo de la cámara principal y voy a poner a cero su posición. Esto en realidad me va a permitir hacer es tener esto siempre estar moviéndose con la cámara principal. Si muevo la cámara principal así, puede ver que el fondo se mueve con la cámara principal. Te puedes imaginar mientras jugamos el juego, va a quedar algo así. Esto siempre va a estar en segundo plano, que es más o menos exactamente lo que queremos para un objeto de fondo como este. Así que vamos a seguir adelante y asegurarnos que es un objeto hijo así como este, y hemos establecido su posición en cero. Entonces si seguimos adelante y golpeamos play, en realidad podemos ver la diferencia que esto hace ya a nuestro juego. Ahora tenemos un juego mucho mejor parecido. No tenemos este tipo de cosas azules aleatorias en el fondo. Ahora tenemos una especie de que realmente se ve bien. Juego. Pero hay algunos temas. En primer lugar, nuestros corazones se han ido. Parece que al azar tomo daño en esta cosa. Y no parece que haya ningún enemigo en absoluto. Pero sigo cobrando daños excepto estos por alguna razón. La razón de esto en realidad tiene que ver con el orden y la capa de nuestros sprites. La mayoría de mis sprites están establecidos en orden y capa cero porque ese es el valor predeterminado y eso no causa ningún problema Pero ahora que hemos agregado un fondo que también tiene orden y capa cero, simplemente obtiene prioridad al azar sobre esos sprites para que no podamos ver nada Pongamos esto a algo así como cinco negativos. No importa lo que lo pongas, siempre y cuando sea menor que el resto de tu juego. También sigamos adelante y reiniciemos mi cámara principal porque en realidad no me di cuenta. Pero sí la moví ligeramente hacia la izquierda, así que por eso esa primera nube estaba un poco apagada. Ahora bien, si tuviéramos juego, deberíamos poder ver de estos temas se han resuelto, tenemos nuestro corazón y nuestro pequeño contragolpe, y ahora tenemos cosas normales de desove con diamantes Y podemos ver que esto hace que el juego se vea mucho mejor ya. Hemos tenido una mejora masiva, pero realmente no tenemos nada más en el fondo. que acabamos de conseguir este cielo y tenemos estas nubes desovando, que son el primer plano y Pero no tenemos ninguna cosa interesante en el fondo. Y he creado estas nubes de fondo así como esta águila, que ambas van a ser bastante interesantes de tener volando a través de nuestro juego, pero aún no las hemos agregado. Para ello, necesitamos escribir un guión. Sin embargo, antes de escribir mi guión, voy a hacer un pre fab para todos estos. Porque si lo has adivinado, vamos a estar engendrando estos prácticamente exactamente como engendramos el resto de nuestro mapa, solo que van a estar en segundo plano así que no van a ser realmente importantes, solo van a ser sprites que se mueven a través para traer Voy a hacer exactamente como lo hice con los antecedentes. Sólo tienes que arrastrarlos ahí, como verlos a todos en pantalla ahora, se ven bastante geniales. Podría tener que cambiar realmente este manifiesto, un poco menos Para que veas que no forman parte del juego y son parte del trasfondo. Pero eso me preocuparé en un minuto. Primero, déjame hacer mis prefabricados. Voy a ir a prefabs y llamo, realidad voy a mantenerlos nombrados como nube de fondo 12.3 creo que los resume bastante bien. Ahora voy a borrar estos objetos de mi escena. Ahora tengo mis tres prefabricados con mis nubes de fondo por Antes de comenzar con cualquier otra cosa, en realidad voy a agregar un cuerpo rígido que puede parecer un poco confuso, pero va a ver con cómo quiero que mis nubes se muevan por el aire. Voy a estar usando cuerpos rígidos para mover las nubes a través del cielo. Sigamos adelante y tenemos tres cuerpos rígidos dos D's en estos. Selecciónalos todos y asegúrate de que también estén todos preparados para cinemáticos Ahora que tengo tengo que hacer esto manualmente. Es un poco de lástima. Ahí vamos. Debo haberme perdido esa. Bien, entonces ahora tengo tres cuerpos rígidos cinemáticos añadidos a mis nubes Y eso es en realidad todo lo que necesito para ellos. Pero el ego es un poco más complicado porque obviamente el águila tiene una animación. En lugar de animar esto como lo hemos hecho, voy a mostrarte un truco Si seleccionas cuatro sprites y los arrastras, Unity en realidad ya crea una animación para ti, como automáticamente, porque esta es la única animación que queremos tener En realidad va a funcionar perfectamente. Voy a nombrar a este águila como en realidad nosotros que creamos para nosotros. Tenemos este águila, un sprite por aquí, tenemos un controlador de águila Y si vamos a abrir el animador, podemos ver que ya tenemos esta animación de águila, que si hacemos doble clic sobre ella o más bien la abrimos así, podemos ver que tenemos una animación de ego, que va a cambiar de los cuatro sprites míos Si voy a mi águila y hago clic en Reproducir, deberíamos poder ver que eso funciona prácticamente a la perfección, lo cual es genial. Eso es en realidad prácticamente todo lo que iba a tener que hacer, pero hecho por mí, no creo que ese aleteo sea necesariamente las mejores velocidades Voy a seguir adelante y cambiar esto a una velocidad de reproducción de 0.5 y luego si presiono play, podré ver esto en la acción. Y déjame ver si decido, creo que eso es mucho mejor para un águila. Pero más o menos lo que hicimos aquí, no se puede hacerlo manualmente. Fuimos a una animación y creamos un nuevo clip de animación, agregamos un componente animador Y obviamente, cuando creamos nuestro clip, eso creó un controlador para nosotros, y luego hicimos de nuestro clip la animación predeterminada. Pero obviamente Unity lo hizo todo por nosotros. Si quieres hacerlo manualmente, también puedes hacerlo. Simplemente siga exactamente el mismo proceso que habíamos hecho antes. Pero si quieres crear un objeto rápidamente y una animación y solo necesitas una animación, o quieres tener algo como esto donde sea una animación, siempre va a estar sonando. Esa es una manera bastante fácil de hacerlo. Y entonces solo puedes cambiar la velocidad de reproducción, algo que te guste. Esa es mi Águila Done. Déjame seguir adelante y arrastrar eso a los prefabricados también Voy a cambiar el nombre de esto a Águila en vez de Águila Uno. Entonces todo lo que voy a hacer es abrir eso y voy a volver a mi escena y añadir un cuerpo rígido igual que hice para los demás excepto hacer éste Kinematic Ahora lo que voy a hacer es que voy a escribir algunos guiones cortos. Básicamente voy a tener un guión que va a engendrar en un águila, y otro guión que va a engendrar en las nubes Y voy a hacer que viajen a través de la velocidad, a velocidades aleatorias a través de la pantalla. A velocidades aleatorias, um, de un rango especificado. Y luego en cuanto lleguen a cierta cosa del otro lado, van a desactivarse Ahora, no voy a usar ningún tipo de límite en el lado derecho de la pantalla. No voy a decir poner un límite por aquí y decir, bien, si el águila golpea esto. Porque no quiero que el jugador pueda encontrarse con límites y morir en ese lado de la pantalla. Creo que sólo tiene que estar a la izquierda. Deberías poder adelantarte al juego. Voy a necesitar codificar manualmente. Necesito decir que una vez que se pasa esta posición una determinada posición, entonces hay que llamarlo un día. De hecho voy a hacer eso en una especie de manera ligera, pero va a funcionar mucho mejor. Voy a tener un objeto límite por aquí, y voy a moverlo así. Y entonces todo lo que voy a hacer es, en lugar de intentar calcular constantemente, bien, ¿dónde estoy haciendo referencia a la cámara principal? ¿Qué tan lejos está mi posición real y mi posición relativa? Voy a decir en el momento que pase este objeto límite, en realidad lo voy a poner del otro lado porque las cosas van a estar desovando desde ambos lados Así que déjame moverlo uno por allá y otro por allá. Digamos que en el momento en que pase uno de estos objetos fronterizos, entonces puedo llamarlo un día y eso es todo hecho. La E va a estar volando de derecha a izquierda y las nubes van a ir de izquierda a derecha. Así que solo necesito asegurarme un seguimiento de cuál es cuál. Pero eso va a funcionar bastante bien. Voy a llamar a esto un límite a la izquierda. Voy a llamar a este de aquí, Límite a la derecha. Estos me van a permitir hacer un seguimiento de lo que es donde está. Voy a cambiar esto a -11.5 y hacer esto 111.5 Entonces en el minuto que tenga mi objeto más allá de este punto, voy a tener un De hecho voy a mover esto un poco así porque las nubes son bastante grandes y no quiero que se generen fuera pantalla más bien en la pantalla. Hagamos eso 14. Las águilas son bastante pequeñas, así que creo que 12 deberían ser buenas aquí Eso es prácticamente todo lo que tenemos que hacer para configurar nuestra escena. Ahora solo necesitamos escribir el guión para este desove. Voy a detener a las Águilas, vamos a crear un guión C sharp y llamarlo engendro de águila Hagamos doble clic en él para abrirlo. Ahora todo lo que tenemos que hacer es escribir algún código que diga, bien, cada intervalo aleatorio genera en un nuevo águila Vamos a crear un, llamémoslo flotar. Llamaremos a este mínimo Y y máximo Y, y aquí va a ser donde queremos generar en el eje Y. Entonces vamos a crear otra carroza pública, llamarla min time y maximum time. Ese es el tiempo que queremos esperar entre águilas. Entonces todo lo que vamos a necesitar hacer es crear una referencia a mi objeto de juego público prefab Eagle Eagle Entonces antes de comenzar, voy a eliminar esta actualización nula y crear una nueva rutina. Yo numerador, lo llamo spawn delay. Entonces dentro de esto, todo lo que voy a hacer es voy a decir rendimiento, devolver nuevo peso por segundos desde el tiempo mínimo hasta el tiempo máximo. Voy a esperar un número aleatorio ahí dentro. De hecho, olvidé mi rango de puntos aleatorios. Déjame escribir rango aleatorio desde el tiempo mínimo hasta el tiempo máximo. Va a escoger un umber aleatorio dentro ese intervalo y luego esperar ese largo minuto que está hecho Quiero crear un nuevo vacío. Llámalo águila desove. Volvamos aquí arriba y llamemos vacío a mi águila de desove. Entonces en el momento en que lo hayamos hecho, ahora solo necesitamos codificar esta cosa real por aquí que va a determinar qué hacer cuando queremos engendrar un águila Lo primero, igual que lo he hecho antes, es que voy a decir objeto de juego para águila equivale instanciar a Águila como objeto de juego Es decir, crear una instancia de este prefabricado en mi juego Ahora quiero que mi posición S esté detrás de la cámara principal. Y este guión en realidad va a estar unido a la cámara principal. Permítanme decir que la oposición transformada equivale a nuevo vector tres. Permítanme crear una variable de desplazamiento aquí arriba, tal como lo hemos hecho todo el tiempo. Vamos mi oposición transformada. Haz la cámara más este desplazamiento, y va a ser un valor negativo. Porque quiero estar detrás. Entonces voy a querer escoger un número aleatorio dentro de mi mínima Y y máxima Y. Pasemos al rango aleatorio entre min Y y mayo. Entonces solo voy a poner mi Z a cero porque es un juego de dos D, realmente no hace la diferencia. Entonces todo lo que realmente necesito hacer ahora es crear otro script que se va a adjuntar al Águila. Y voy a decir, bien, viajar por tanto tiempo. Y luego en el momento en que esté detrás este límite, entonces borre. Voy a escribir el mismo guión para el Águila y la Nube. Voy a llamarlo objeto cielo. Eso va a hacer que sea un poco más complicado de hacer, pero va a ser una manera un poco mejor de codificarlo también. Duplicemos el up dentro del guión. Vamos a querer una transformación pública. Vamos a llamarlo límite. Esta cosa de la que vamos a estar atentos. Vamos a tener un booleano público y lo vamos a llamar viajar bien porque obviamente el águila va a estar viajando Las nubes van a estar viajando a la izquierda. Entonces vamos a usar para determinar en qué dirección vamos. Entonces debajo de esto, lo último que necesitamos es una referencia a un cuerpo rígido. Obviamente solo voy a arrastrar eso cuando tenga mis objetos creados dentro de mi juego. Voy a ponérselo en los prefabricados. Lo último que quiero es un flotador público llamado velocidad. Todo lo que voy a hacer dentro de la actualización fija es que voy a decir cada fotograma, asegurarme de que mi velocidad de mi cuerpo rígido sea igual a un nuevo vector dos y cualquiera que sea mi velocidad debería ser, así como cero porque no quiero que se muevan hacia arriba y hacia abajo. Ahora voy a cada cuadro, asegúrate de que estoy viajando de esa manera. Luego debajo de cada cuadro también. Voy a decir si viajas en ese momento, sé que tengo que estar detrás del límite. Si estoy por delante del límite, quiero asegurarme de destruir esta instanciación de los objetos Voy a decir si viajas bien. Y luego dentro de esto voy a decir si transformar la posición x es mayor que la posición límite x, entonces quiero asegurarme de destruir esta instancia de mi objeto de juego. En otras palabras, elimine cualquier objeto al que se le adjunte. Si no viajo bien, significa que estoy viajando a la izquierda. Entonces déjame copiar este código exacto. Solo di si mi posición de viaje x es menor que mi límite, entonces quiero destruir esta instancia del objeto de juego. Este es en realidad todo el código que necesitamos para asegurarnos de que nuestros objetos van a viajar por el camino correcto. Pero obviamente necesitamos asignarle valores a esto, porque ahora mismo esto no tiene absolutamente ningún valor para límite o viajar a la derecha o a la velocidad. Sólo tiene un valor de cuerpo rígido. Volvamos al engendro del águila y creemos algunas variables nuevas Flotación pública, velocidad mínima así como velocidad máxima y así es como vamos a elegir la velocidad de nuestras águilas Vamos a ir a buscar componente y vamos a encontrar el guión del objeto cielo encima de nuestro Águila. Vamos a decir que la velocidad es igual al rango aleatorio entre nuestra velocidad mínima y nuestra velocidad máxima. Ahora tenemos esta velocidad comprobada y obviamente ya tenemos el cuerpo de cresta que va a arrastrar eso adentro. Ahora necesitamos es esta variable que viaja a la derecha. Y sabemos por un águila que va a ser verdad. adelante y copiemos toda esta línea de código para conducir hasta aquí y solo decir que viajar a la derecha es igual a cierto porque es van a estar moviéndose de izquierda a derecha. El último de todos, necesitamos este límite y vamos a crear una referencia al límite para que las águilas aquí arriba transformen, llámalo Águila atada Entonces volvamos a copiar el código. Y por debajo de aquí solo digamos que límite del dardo es igual a Eagle bound. De hecho vamos a llamar a este rotine desde el inicio de nuestro juego en el momento en que comencemos nuestro juego comience a desovar En este comportamiento, esperar varios segundos y luego comenzar a desovar en un águila, que es prácticamente todo lo que necesitamos hacer Todo lo que necesitamos ahora es asignar todas estas cosas en el editor y probar si funciona. Creo que debería. Lo único último que tenemos que añadir debajo de todo esto es, obviamente, llamar de nuevo a la corotina, para que podamos decir si queremos engendrar otro águila Esto obviamente va a seguir jugando incluso después de que el jugador esté muerto. Pero eso está bien. Puedes tener nubes pasando y águilas volando después de que el jugador esté muerto. No es demasiado de un problema. Y obviamente, el jugador sólo está muerto como 2 segundos de todos modos. Así que en realidad no hace la diferencia. Pero este es todo el código que necesitamos. Estamos empezando nuestra cotina desde el principio. Estamos diciendo, bien, espere varios segundos. Después desove a este águila, puso su posición detrás de nosotros y luego una posición y aleatoria y luego asegurarse de que su velocidad sea este número aleatorio El hecho de que esté viajando bien es cierto y fijó este límite a esta cosa. Y luego dentro del Águila, hemos asignado todos estos valores por aquí y cada fotograma, nos estamos asegurando de que viajemos a la velocidad correcta y comprobando que no hemos pasado donde deberíamos estar. Vamos a abrir Unity, Regresemos a nuestros prefabs y vamos a agregar este script de objeto cielo objeto objeto a nuestro Lo único que vamos a firmar es el cuerpo rígido. Todo lo demás se va a hacer por nosotros. En realidad, solo por el bien de ser eficientes, vamos a agregarlo también a las nubes. Por ahora, solo para que no tengamos que hacerlo más tarde, vayamos al objeto del cielo por aquí a esta nube objeto del cielo de aquí a esta nube y objeto del cielo de aquí a esta nube. Y asegúrate de arrastrar en nuestros cuerpos rígidos. No tienes que hacer esto ahora mismo, pero yo solo voy a entonces vamos a ir a la cámara principal y agreguemos nuevos componentes. Y vamos a añadir en mi engendrador de águila por aquí. Voy a establecer el mínimo y para que sea negativo 0.6 y luego el máximo y para ser, digamos 2.5 negativo 0.6 y 2.5 Sigamos adelante y asignemos eso por aquí, negativo 0.62 0.5 Yo diría que quiero que el tiempo mínimo entre águilas sea de al menos 10 segundos y el tiempo máximo para estar en algún lugar alrededor Voy a asignar a este águila por aquí. Creo que el offset. Vamos a probarlo. Pero probablemente debería ser un, yo diría que tal vez negativo 12. Si miramos a la cámara principal en la posición cero, el jugador está actualmente negativo 12. Eso es donde quiero que las Águilas engendren. Vamos a establecer eso también. Continúe aquí y ponga en marcha el set a negativo 12, luego velocidad mínima. Sólo voy a empezar a las tres y establecer la velocidad máxima en cuatro. Ten en cuenta que la cámara se mueve actualmente a 1.8 Será más rápida que la cámara, pero puede que no sea tanto más rápida, lo cual es bueno. En realidad, pongámoslo en 2.5 y 3.5 Entonces, por último, atados con águila, vamos a establecer que sea este límite de mano derecha por aquí. Veamos si todo esto realmente funciona. Si presiono el botón de reproducción, asegúrate de que no hayamos olvidado nada ni hayamos corrido a ningún bicho. Veamos, por aquí, actualmente estamos jugando el juego. En el momento en que lo engendremos, deberíamos tener esta águila, que aparece detrás de nosotros. Entonces veamos si velamos por allá. Oh, eso fue un diamante. ¡Gritos! Estaremos al menos 10 segundos antes de que veamos uno. Ah, ahí hay uno. Tenemos un águila. Eso sí se parece un poco a un enemigo. No voy a mentir. Entonces vamos a tener que hacerlo un poco más alto solo porque no sé si eso debería ser exactamente donde está. De hecho voy a poner el límite un poco hacia arriba y también voy a asegurarme de que el tiempo sea un poco diferente porque realmente no queremos tantas águilas Hagamos algunos ajustes. Vamos a establecer el mínimo y para que sea uno, el máximo y para que sea tres. Vamos en el tiempo mínimo para ser 10 segundos y el tiempo máximo para ser algo así como 20 segundos. Entonces hagamos la velocidad mínima, máxima. Creo que ambos son buenos. Solo tal vez hagamos que el águila sea un poco más transparente para que no parezca que forma parte tanto del juego. Hagamos esto 180. Esta podría ser una elección de diseño rara, pero créeme, va a hacer que se vea un poco más distinguible, que en realidad no es parte del juego Obviamente podemos retocar eso según sea necesario, pero vamos a probar por ahora cómo funciona eso Obviamente tenemos que esperar un poco para que la cosa genere, pero debería estar saliendo. Ahí hay un águila. Y ahí lo tenemos. Se puede ver que parece que está empañado por las nubes. Pero eso se ve bastante bien en mi opinión. Obviamente, necesitamos agregar algunas nubes más y va a hacer que se vea mucho mejor. Pero por ahora, creo que las Águilas son un éxito. No pretendía hacer eso. Podemos ver que tenemos bastantes de ellos. Incluso podríamos tener que hacer ese tiempo un poco más largo. Pero cambiemos eso rápidamente. En realidad quiero hacer esto 30 segundos y diez, y luego voy a ir a ellos tal vez un poco más rápido también para que puedan pasar volando. Pero eso es prácticamente todo el guión de desove de águilas que necesitamos hasta ahora Ahora tenemos que empezar en las nubes. El script en la nube en realidad va a ser muy similar al script Eagle. Voy a copiar todo esto y voy a crear un nuevo script, llamarlo cloud spawn De hecho voy a pegar todo el asunto. Ahora hay algunas cosas que tengo que tener en cuenta. En primer lugar, me va a dar un montón de errores porque aquí tengo la misma clase sin explicar demasiado lo que es una clase. Básicamente, así es como la unidad dice o más bien aguda dice la unidad. Qué tipo de identidad de código. Este es el hecho de que ahora tengan el mismo nombre es un problema. Sigamos adelante y cambiemos eso a engendro de nubes. Tiene que ser exactamente el mismo nombre que tienes por aquí. Y eso realmente debería deshacernos de cada uno de nuestros errores. Ahora puedes usar todos los mismos nombres de variables, ninguno de ese tema de sección, pero obviamente tenemos que cambiar algunos de ellos. Sigamos primero y cambiemos esto a spawn cloud, luego vamos a tener que actualizar eso también Entonces cambiemos esto a nube a nube ligada. Podría parecer que podríamos haber hecho esto en un solo guión y honestamente podríamos haberlo hecho. Pensé que sería mejor hacer dos solo porque vamos a hacer algunas diferencias y alteraciones. Y va a hacer que sea un poco más fácil entender si tenemos dos guiones diferentes, lugar de intentar agruparlo en uno y engendrar águilas y nubes simultáneamente Sí, podríamos haber hecho esto en un guión, pero sólo voy a usar dos. En aras de la eficiencia o más bien de la simplicidad, puedo mantener esta Y mínima y máxima Y porque todavía necesito eso. Obviamente todavía quiero mi tiempo. Tengo mi nube de objetos de juego. Quiero mi offset tal como lo fue. Obviamente va a ser un valor positivo ahora. Y tengo mi velocidad mínima y máxima que van a ser diferentes y mi transformación, prácticamente todo lo demás en realidad podemos mantenernos igual. Tenemos el retraso de engendro. Vamos a instanciar una nube. Estamos desove en una posición, lo estamos diciendo a una velocidad aleatoria Vamos a establecer el viaje directo a fallas por aquí, y nos aseguramos de que tengamos el límite correcto. Eso debería ser prácticamente todo lo que necesitamos para nuestras nubes. Volvamos a mi juego. Ir a mi cámara principal. Ahora voy a agregar en este script de generación en la nube debajo de él. Y obviamente puedes ver que se ve muy similar al guión de Eagle porque es más o menos el mismo guión. Podemos seguir adelante y usar exactamente lo mismo, pero tenemos un pequeño problema. Aquí sólo tenemos un objeto para una nube porque solo teníamos un águila. Pero para las nubes tenemos que escoger entre un azar de tres. Eso en realidad es bastante fácil de hacer. Todo lo que tenemos que hacer es convertir esto en una matriz. Entonces en lugar de decir instanciar nube como objeto, diremos instanciar corchetes abiertos, rango aleatorio de cero a la longitud de la Entonces iremos a la longitud del punto de la nube, y luego cerraremos el corchete. Cierre el corchete cuadrado. Y eso debería ser todo lo que tenemos que hacer ahora, básicamente estamos escogiendo algo aleatorio de esta matriz. En cambio, volvamos a la Unidad. Si nos desplazamos hacia abajo, podemos ver ahora que tenemos una matriz en la nube, que es lo que necesitamos. Vamos a arrastrar los tres objetos por aquí. Vamos a establecer la Y mínima para que sea cero y la Y máxima para que sea tres. Para que puedas tener desove de nubes. De hecho voy a hacer este mínimo Y negativo dos y el máximo Y tres, voy a establecer el tiempo mínimo a 2 segundos y el tiempo máximo a 4 segundos. Voy a establecer la velocidad mínima a uno negativo y la velocidad máxima para que sea cero. El 0.5 negativo el offset, voy a hacer 12 porque es decir a la otra manera. Eso debería ser prácticamente todo lo que necesitamos hasta ahora obviamente. Solo asegúrate de que tenemos nuestro límite a la izquierda. Casi haga clic en el equivocado, límite a la izquierda como nuestra nube atada. Bajemos y verifiquemos eso. A ver si esto funciona. Si golpeamos play ahora deberíamos poder ver el desove de la nube desde la derecha muy pronto después de comenzar a jugar el juego Sigamos adelante y veamos si está funcionando. Y ahí tenemos una nube que está desovando. Pero esto es bastante obvio que parece parte del juego. Eso es un problema para nosotros porque obviamente lo queremos. También podemos verlos desovar en, lo que también es un poco problema Claramente tenemos que hacer ese desplazamiento un poco más, y tenemos que hacerlos un poco más transparentes. Hagamos del offset algo más como 20. Entonces sigamos adelante a cada nube y tal vez hagamos del alfa algo así como 180 en lugar de 255. Esto puede ser un poco drástico, pero lo podremos ajustar a medida que avanzamos Creo que debería estar bien por ahora. Volvamos a mi juego, y creo que las nubes también pueden moverse un poco más rápido más allá del jugador. Volvamos a la cámara principal y hagamos que la velocidad mínima sea negativa. Y la velocidad máxima es negativa 0.5 En realidad se mueven siempre. Ahora veamos si eso se ve un poco mejor. Como estamos desove en el juego, deberíamos poder ver el desove de nubes en ese momento está entrando desde el lado ahí tenemos una nube que en realidad hace que el juego se vea mucho mejor, obviamente. Ahora hay un poco de retraso al principio donde no tenemos ninguna nube para facilitar un poco la simplicidad. Sólo voy a arrastrar unos cuantos desde el inicio del juego, así como esto, y hacer que el juego se vea un poco más vivo desde el principio. Obviamente, voy a tener que establecer estos valores de velocidad por su cuenta porque se trata de casos especiales, no son medios asignados. Formando voy a hacer que la velocidad sea negativa 0.5 también voy a cambiarlas y voy a asegurarme poner el límite al de la izquierda. Entonces déjame seguir adelante, en realidad voy a poner la velocidad a cero solo por ahora. Sólo se destruyen una vez que los superamos. Sigamos adelante y veamos si eso se ve un poco mejor. mejor este muy específico puede tener una velocidad de 0.2 negativo y este puede ser negativo 0.1 Solo para darle un poco de singularidad, si seguimos adelante y golpeamos play ahora podemos ver tanto nuestras Nubes como nuestras Águilas están ahora en nuestro Y hace que se vea, en mi opinión, mucho mejor. Todavía hay esta pequeña brecha rara por aquí. Entonces voy a agregar tal vez una nube más allá solo para que se vea un poco mejor. Pero creo que en realidad es un comienzo bastante genial para nuestras actualizaciones visuales de proyectos. Y en realidad hemos hecho bastante hasta ahora. Obviamente hemos agregado el fondo y las águilas y las nubes, y en mi opinión, se ve mucho más bonito que Pero hay dos cosas más que tenemos que agregar. Y son bastante fáciles de agregar, no son súper complicados. Esto en realidad también agrega un bonito efecto donde se ocultan las bolas de espía, lo que hace que un juego tal vez sea un poco más difícil Pero creo que en general, esto hace que el juego se vea mucho más agradable y mucho más vivo medida que saltas a través de las nubes en lugar de simplemente vagar por este tipo de masa azul Y podemos ver que las nubes están siendo destruidas, tal como deberían ser. Las águilas se están tomando su dulce tiempo. Pero yo estoy ahí estamos, ahí está nuestro primero. Creo que hace que el juego se vea mucho mejor, lo cual es bastante genial Pero de todas formas, como decía, no hay efecto de partículas, no sólo cuando recolectas un diamante, sino también cuando mueres. Y creo que encontrarás al agregar estas pequeñas cositas a tu juego, hace que se vea mucho más impresionante a la larga. Especialmente a alguien que no necesariamente sabe lo simples que son. En realidad, agregar hace que el juego se vea mucho más impresionante de lo que en realidad la cantidad de trabajo que se necesita para agregar. Entonces voy a mostrarte exactamente cómo hacer eso ahora. Vamos a ir a mi sprite de diamante. Voy a agregar un componente llamado sistema de partículas. Ahora bien, este es sin duda uno de los componentes más complicados de toda la Unidad Ni siquiera entiendo completamente cómo funciona, para ser honesto, pero he encontrado una manera de trabajar con él que suele funcionar para la mayoría de mis juegos. Y creo que es una manera bastante fácil de hacerlo también. Entonces te voy a mostrar ahora sin entrar en demasiados detalles. Obviamente este sistema de partículas se basa en un montón de cosas diferentes por aquí que puedes ver listadas. Tenemos la velocidad de toda la vida, forma, emisión, renderizamos todas estas cosas bastante sobrecomplicadas, pero en realidad no necesitamos preocuparnos por la mayoría de ellas por ahora De hecho, les voy a mostrar cuáles van a habilitar, necesitamos emisión y necesitamos forma. No necesitamos ninguno de estos. Vamos a necesitar color durante toda la vida y vamos a necesitar el tamaño a lo largo de la vida. Entonces ninguno de los otros debería ser tan necesario. Es posible que tengamos que habilitar la animación de hojas de texto dependiendo de lo que queramos hacer. Pero vamos a probarlo así por ahora. Una vez que haya seguido adelante y habilitado estos cinco menús diferentes, abra el renderer y asegúrese de configurar este material para que sea un material predeterminado de sprites Ahora estamos desove en sprites aleatorios. En realidad hay una cosa más enferma. Tenemos que agregar este texto, una animación de hoja. Vamos a seleccionar eso. Vamos a seleccionar modo para ser sprites. Y vamos a seguir adelante y esto es para nuestro diamante, queremos desovar en nuestro diamante, sprites estrella, vamos a elegir Ahora tenemos un montón de estrellas volando de este diamante, que se ve bastante genial por sí solo. No voy a mentir, pero solo queremos que esto suceda una vez que recolectemos el diamante, hayamos configurado nuestra animación de textura y lo único que necesitamos cambiar en el renderer fue este material Una vez que hayamos hecho eso, tenemos todo lo que necesitamos de estos dos menús. Los últimos vienen de estos de aquí. Empecemos por ir a mi menú original, en realidad en la parte superior aquí. Este también es un menú. Voy a hacer que la duración sea 0.3 segundos. Voy a poner en marcha el looping off, voy a hacer la vida de inicio de estos 1 segundo, o mejor dicho 0.6 En realidad, obviamente vas a necesitar ajustar esto a medida que Y veamos cómo se ve eso por aquí. Tenemos algunas cosas desove, que hasta ahora me queda bastante bien Quiero que el tamaño inicial sea uno tal vez sea un poco más pequeño. Voy a hacer la talla inicial dos, a ver cómo se ve eso. De hecho voy a mantener eso a la una por hora porque lo que está funcionando es del tamaño de toda la vida, no este valor. Voy a poner los 0.3 segundos, no looping. El cero para el retraso de inicio es 0.6 para la vida útil del inicio. Cinco para una velocidad de inicio está bien, y uno para un tamaño inicial. Voy a quedarme con el resto de estos como están por ahora. Entonces yo para cambiar esta tasa lo largo del tiempo de emisión a algo así como 30 y ver cómo se ve eso . Es un montón más. Creo que eso debería estar bien por ahora también. 16. 15. Crea un centro de partida: Aquí. Y bienvenidos de nuevo a Unity. Ahora en este episodio, vamos a estar creando un centro de partida para nuestra plataforma, un juego. También le vamos a estar dando nombre. Un nombre al que llegué es Sky Miner, que es Dios horrible. Pero por suerte, este juego no va a ser lanzado a nadie Es solo para que ustedes aprendan a crear plataformas. Me he asentado por Sky Miner y voy a crear un centro de partida para este juego. Además de hacerlo para que no juegues automáticamente al juego. En el momento en que hacemos clic en play. Ahora mismo estamos en saltado justo en el juego. Y no quiero ser así. Quiero que sea para que puedas elegir cuándo empezar. Voy a explicar cómo voy a estar haciendo todo esto, pero básicamente voy a estar construyendo como un centro de partida en el original, haciéndolo sonar bastante dramático, es solo una gran nube. Voy a tener el título en la cima también. Entonces voy a hacerlo para que en el minuto que pases por cierto punto, entonces comience el juego. No en el momento en que comiences el juego, en el momento en que pases cierto punto antes de que me ponga por delante de mí mismo. Permítanme seguir adelante e importar todos mis diferentes activos. Voy a ir a hacer click derecho. Importar Nuevos Activos, como siempre. Entonces voy a importar estos dos activos que he creado llamados inicio y título. Vamos a ponerlos en 12, punto único, sin filtro. Y entonces en realidad voy a ir a esta nube de aquí. Y voy a borrarlo porque voy a reemplazar eso. También voy a ir a estas nubes prefabricadas y voy a guardarlas porque no me gusta el hecho de que solo estén sentadas debajo de ella Eso se ve muy limpio, en mi opinión. Entonces voy a arrastrar esta nube inicial adentro. Se puede ver cómo se ve. Esto es lo que tengo previsto para el inicio del juego. Empiezas con esta masiva, obviamente no así, tiene que estar por ahí. Empiezas con esta gran nube en el medio y de hecho voy a moverla hacia abajo Nosotros no queremos ocupar tanto de la pantalla pero tampoco queremos ese poco. Creo que probablemente sea bueno. Podría ajustar esto a medida que avance, pero en realidad creo que voy a moverlo un poco más hacia arriba. En realidad, vamos a ver. Obviamente podemos cambiar esto a medida que avanzamos, pero creo que en realidad es bastante bueno empezar ahora. Voy a tener el título en mitad de la pantalla solo para poder ver todo lo que está pasando. Voy a hacer click en estos íconos. Puedo ocultar todas estas cosas extra, pero también podría optar por mover algunas de estas nubes ahora que estoy creando esta nueva área central, pero llegaré a eso más tarde. Primero, permítanme simplemente desactivar estas nubes. También voy a arrastrar mi título, y puedes ver mi título allá en medio de la pantalla. Creo que es un título algo decente. Al menos por ahora. De hecho voy a deshabilitarlos solo porque ocultarlos solo funciona en el editor, y quiero verlo en medio de la pantalla. Entonces voy a ir a mi título, que en realidad voy a querer conservar como sprite No quiero ser un objeto UI, centrarlo en cero y luego ponerlo justo en la parte superior por aquí. También estoy solo por el momento, voy a deshabilitar esta interfaz de usuario porque tampoco quiero que eso aparezca al comienzo de mi juego. Obviamente arreglaré todo esto cuando voy a crear mi juego. Pero solo tengan paciencia conmigo desde un minuto. En primer lugar, voy a tener esto justo por aquí. Minero del cielo. En realidad, lo primero que voy a querer hacer es crear una animación de título. Vamos a crear una nueva animación. Voy a llamar entonces a su título. Sólo voy a hacer que esto suba y baje lentamente. Vamos a tener los primeros 30 segundos moviéndose, digamos de 2.6 a 2.4 Vas así, y luego quiero quedarme en 2.4 y moverme ligeramente hacia abajo durante los siguientes 30 segundos a tal vez 2.3. Entonces vamos entonces queremos volver a subir a 2.4 Un poco más rápido. Luego volvamos a lo que originalmente teníamos aquí arriba, que era, creo 2.6 Sí. Veamos cómo se ve eso. A ver si vamos al juego eso es un poco rápido, pero creo que hace el trabajo. Se ve bonita. Bien, como una sutil animación en lazo, hagamos esta velocidad de 0.3 A ver si le pegamos a play cómo se ve eso. Entonces vamos a tener que ver a la cámara avanzar y vamos a morir en Son, porque no hay cosas. Pero creo que eso hace un trabajo bastante bueno. Se mueve muy lentamente a través de la cosa. Eso realmente me lleva a lo siguiente que quiero hacer, que es comenzar construir realmente esta área de inicio, no solo tener una plaza. Agreguemos un colisionador de caja dos D. Vamos a tener que etiquetar obviamente esto como tierra Sigamos adelante y asegurémonos de que estas son las dimensiones correctas. Podría ser bastante difícil de ver esto si tienes todas las cosas que hago. Así que ahora solo voy a desactivar el fondo también. Voy a poder verlo. Ahora vamos pasar esto a por ahí. No hace falta que haya mucho más arriba aquí porque realmente no deberías poder caerte. Eso debería ser todo lo que se haga por allá. Ahora vamos a probar si podemos jugar el juego. Siempre he desactivado mis antecedentes en el editor. Aquí va a mostrar que se ve bastante bien. De hecho voy a hacer esto un poco más pequeño. Voy a moverlo hacia abajo a por ahí. Eso es más o menos el. darme cuenta de que esto va a ser un problema. Vamos a mover esto como tal vez un poco y hacia abajo un poco más. Creo que eso probablemente sea bueno ahora puedes pararte al final de la nube, pero no es demasiado problema. Ese va a ser lo básico para mi bloque inicial por aquí. Y tengo mi título que va a subir y bajar. El título. En realidad nunca quiero moverme. Quiero tenerlo aquí todo el tiempo. No necesito hacer nada con esto. Lo mismo con el inicio. Estas son posiciones fijas. Pero lo que sí quiero hacer es que quiero, para que las cosas sigan la cámara como la interfaz de usuario o solo se habiliten una vez que hayamos caminado por esto. Y también solo quiero comenzar el juego. Una vez que hayamos caminado por este punto imaginario de aquí a mitad del inicio, voy a crear un nuevo objeto vacío. Y voy a llamarlo límite, tal como lo hemos hecho antes. Por aquí en este límite, voy a hacer un colisionador Voy a convertirlo en un colisionador de borde porque va a ser un límite Voy a hacer el 0.0 0.5 y negativo cinco, es un límite largo. Va a ser un detonante y va a ser de tipo zona de inicio. En cuanto a etiquetas, voy a hacer la zona de inicio de la etiqueta y tengo este gran colisionador de gatillo Y voy a decir que una vez que el jugador pase esto, quiero comenzar el juego. Entonces, obviamente, se puede ver que podemos seguir adelante. De hecho voy a hacer esto solo un poco más largo porque de lo contrario va a poder fallar. Dependiendo de lo raro que se vea esto, podría hacer de esto un colisionador de caja y luego otro colisionar undernath, Pero eso parece un poco de trabajo extra para un pequeño cambio, Pero ahora lo único en lo que estamos enfocados es en tener este límite. Y queremos decir, bien, en el momento que el jugador pase este límite, entonces queremos comenzar el juego. Hemos etiquetado esta zona de inicio de etiqueta. Pero en realidad vamos a estar haciendo la codificación de esta cosa en sí. Vamos a decir cuando choque con el jugador, no vamos a preocuparnos de no vamos a preocuparnos el jugador choque con él Esto es sólo una formalidad. Voy a volver a habilitar el almacenamiento para poder ver todas las cosas que tengo y voy a empezar a personalizar esto La verdad es que ya no quiero esa nube ahí. Realmente no quiero esta nube aquí. Vaya, no quise eliminar toda la interfaz de usuario. No quiero esta nube o esta nube aquí en realidad, porque nuestro juego se ve bien con solo lo del cielo. Como ahora hemos agregado en las otras cosas, ni siquiera quiero esa nube. Pero voy a poner esta nube por aquí solo para que tenga algo a lo que saltar cuando empiece el juego. Mueve esta nube por aquí un poco. Tenemos una nube para iniciarnos. Así va a ser como se ve el juego cuando empieces. Obviamente, una vez que pases este punto, queremos que comience el juego. Sigamos adelante y escribamos un nuevo guión y lo llamaremos start Game. La forma en que va a funcionar el guión es que vamos a reemplazar muchos de estos inicios vacíos que tenemos que comienzan cuando comienza el juego. Dos vacíos que vamos a llamar. Los únicos que realmente nos van a preocupar son el script de movimiento de cámara y el script de generación de mapas. Si vamos por aquí, podemos ver movimientos de cámara por aquí. Vamos a querer preocuparnos por éste y también queremos preocuparnos por este script de generación de mapas por aquí. Estos son los dos que puedes ver por aquí. Tenemos que engendrar pieza, pero queremos cambiar esto para comenzar juego y vamos a convertirlo en un vacío público En realidad ni siquiera necesitamos hacer este vacío. Podríamos simplemente desviarnos, generar una obra de mapa. Pero para convención, solo voy a tener que sea esta cosa aquí donde solo empezamos cuando llamamos vacío a este juego. Este vacío de actualización realmente no va a ser un problema porque no vamos a estar moviendo la cámara, así que no tenemos que preocuparnos por generar más piezas de mapa también Volvamos a mi juego y vamos a crear un evento de colisión en gatillo. En el gatillo ingrese dos D colisión juego objeto punto comparar etiqueta. Al igual que lo hemos hecho todo el tiempo es jugador. Es decir, si el jugador acaba de entrar en nosotros entonces queremos comenzar el juego. Vamos a crear una referencia a estos dos guiones. Movimiento de cámara, vamos a llamarlo movimiento de cámara. También vamos a crear una referencia a nuestro script de generación de mapas. Llámenlo mapa. Lo vamos a hacer es vamos a decir mapa comenzar juego. En otras palabras, inicia el juego. Vamos a decir cámara, movimiento de cámara. La velocidad de la cámara es igual. Y entonces vamos a tener este valor por defecto aquí en nuestro movimiento de cámara, que va a ser lo que queremos que sea la velocidad. De hecho voy a cambiar esto. Voy a hacer esta cámara flotante pública de velocidad. Entonces vamos a tener una carroza pública debajo de ella, que voy a llamar velocidad. La velocidad por aquí, voy a establecer para que sea la variable que la está moviendo. Y entonces esta velocidad de cámara es como esta configuración que quiero, voy a poner esto en el juego, pero solo va a estar influenciada por la velocidad. Y voy a decir que la velocidad de la cámara es igual a la velocidad de la cámara. En otras palabras, tengo este ajuste por aquí, movimiento de cámara, velocidad de la cámara, tengo el ajuste por aquí, lo que me dice qué tan rápido debería estar moviéndome. Entonces tengo la variable de velocidad, que obviamente va a comenzar en cero. Entonces en el momento en que empiece mi juego y diga, bien, ajuste la velocidad a la velocidad de la cámara, entonces va a cambiar a lo que sea que haya puesto aquí y voy a empezar a movernos. Este es prácticamente todo el código que realmente deberíamos necesitar para comenzar nuestro juego manualmente. La forma en que podemos probar es que podemos entrar en nuestro límite por aquí. Así que sigamos adelante y arrastremos en el juego de inicio. Y luego arrastra nuestro script de movimiento de cámara desde nuestra cámara y nuestro script de generación de mapas desde nuestra cámara. Entonces que podamos ver en el momento en que toque a un jugador, debería comenzar este código. Debería empezar a moverme. Volvamos a mi cámara principal. Pongamos la velocidad de mi cámara a un punto. Mi velocidad es cero. Ahora tenga una jugada de éxito. No debería comenzar el juego hasta que no me mueva por ahí. A ver si eso funciona. Actualmente en movimiento, nada ha engendrado todavía. Obviamente, las nubes siguen desovando, lo que sí quiero, pero nada más tiene Pero en el momento en que cruce este límite por aquí, el juego sí empieza. Ver por aquí. Ahora puedo empezar realmente a jugar el juego, que es exactamente lo que quiero. Obviamente, esta primera nube es un poco extraña, porque engendran encima de otra Podría solo tener que ajustar ese desplazamiento inicial y hacer que empiece un poco más adelante, pero creo que estaría bien. Podemos cambiar eso un poco. Concentrémonos en mover esto. A lo mejor ni siquiera tienes que saltar por la primera nube, es solo una nube a otra nube. Entonces la primera nube debería aparecer por encima de eso, así que va a verse mucho mejor Ahora, eso realmente funcionó perfectamente bien. Voy a mover este límite un poco al lado de aquí. En el momento en que pasas cierta cosa, en realidad va. Pero hay dos cosas más que quiero hacer. En primer lugar, quiero asegurarme de que este letrero muestre tu preparatoria de diamantes. Eso en realidad también es bastante fácil de hacer. Todo lo que necesitas hacer es que tengo que entrar en mi interfaz de usuario y voy a crear un nuevo texto por aquí. Vamos Legacy Text, porque no queremos usar el texto me. Llamemos a esto diamantes. Voy a moverlo por aquí. En realidad estoy, por simplicidad, solo voy a copiar este contador de diamantes que tengo por aquí. Y muévelo por aquí. Entonces voy a establecer un valor de prueba de 300 más o menos. No parece que nada se muestre. Tratemos de redimensionarlo. Está detrás de él. De hecho voy a tener que cambiar el orden de este lienzo. Voy a hacer el orden del lienzo en la capa dos en lugar de uno o en realidad incluso cinco, porque prácticamente queremos el lienzo de frente todo. Así que permítanme que sean diez, a ver si eso ha solucionado nuestro problema. Si volvemos aquí. Sí, ahora podemos ver que tenemos esto apareciendo al frente, que es exactamente lo que queremos. Voy a rotar el ligeramente porque el letrero está un poco torcido en sí mismo Voy a redimensionarlo de nuevo a lo que debería ser, que era algo más así Voy a ponerle eso a eso. Voy a rotarlo un poco más. Creo que probablemente sea bueno. Podría haber girado un poco mucho. Vamos a darle la vuelta un poco. Ahí podemos ver ahora tenemos un pequeño marcador que nos muestra cuáles fueron nuestros máximos diamantes recolectados en una de las carreras. Ahora necesitamos obviamente programar esto para mostrar realmente la puntuación más alta. Eso en realidad es increíblemente fácil. Todo lo que tenemos que hacer, realmente no importa qué guión escojamos. Podemos elegir a cualquiera, pero voy a elegir este guión diamante jugador por aquí. Porque eso ya tiene UI aquí y ya tiene una referencia al objeto de texto. Vamos a crear uno nuevo, texto público, llamarlo preparatoria. Entonces todo lo que necesito hacer bajo el vacío de inicio es decir que texto de punto de secundaria es igual a los diamantes de secundaria punto dos cadenas. Eso básicamente va a decir bien, cuando empiece el juego, asegúrate de poner ese texto o lo que sea mi mejor puntuación si volvemos a mi juego ahora vamos mi jugador y veamos si eso sí funciona. Encontremos por aquí que tenemos la secundaria. Colóquelo en este mostrador. Voy a renombrar esto a conteo de puntaje alto. Entonces si tuviéramos jugada, deberíamos anular eso. Al inicio del juego con nuestra preparatoria, que parece que ha hecho, nuestra preparatoria no debería ser cero, debería ser una. Parece que tenemos un poco de error, pero creo, en realidad el único problema es el hecho que lo estamos asignando antes hemos asignado la variable Aquí hemos asignado la variable, que es exactamente lo que es. Solo volvamos aquí y ponlo debajo. Y entonces debería funcionar perfectamente bien. Si volvemos a nuestro juego, golpeamos play, Deberíamos ver, ahora esto debería cambiar a uno en el momento en que iniciemos el juego. Y parece que lo es. Eso es perfecto. Ahora tenemos un mostrador de secundaria. Tenemos esta cosa que nos permite iniciar el juego caminando por él. Y tenemos todo lo demás funcionando como debería, lo cual es bastante genial. Todo lo que tenemos que hacer ahora, lo último que realmente necesitamos para asegurarnos es asegurarnos que cuando empecemos de nuevo, no nos dé ningún fallo técnico. Lo que realmente voy a hacer en lugar de mover esta nube es simplemente hacerla para que la primera nube genere un poco más adelante Y entonces voy a hacer eso, voy a entrar en mi script de generación de mapas. Voy a tener lingotes por aquí para comenzar el bloque. En otras palabras, si es el primero, voy a poner en falso por aquí, pero por aquí siempre tiene que ser verdad es el primer bloque. Y eso solo básicamente nos permite, cuando llamamos a este objeto, llamar en este método, podemos ingresar un valor por aquí cuando lo llamamos desde aquí, podemos diferenciar de donde lo llamamos desde aquí. Entonces todo lo que tenemos que hacer tiene que ir y agregar un poco de declaración if al final. Tenemos que decir comenzar. En otras palabras, si está el primero, entonces solo quiero moverlo un poco hacia un lado. Voy a decir vio engendrado azulejo, traspasado oposición. Agreguemos un desplazamiento inicial. Así que vamos a ir a flotar pública start offset y vamos a hacerlo un poco más grande que el que tenemos por aquí. Sólo pon eso ahí. Y básicamente vamos a decir, bien, pongamos ahí el azulejo. Pero si es un primer azulejo, en realidad quiero ponerlo en otro lugar. Entonces déjame ponerlo ahí. Lo va a engendrar en un lugar diferente, pero realmente no hace la diferencia Volvamos por aquí, y volvamos a nuestra cámara principal. Y hagamos el desplazamiento inicial 18 en lugar de 15, y veamos si eso funciona. Ahora lo movemos un poco, veamos si eso funciona un poco mejor en cuanto a espaciado. Entonces probemos ese molde duradero, que era ver si el resto del juego funciona sin problemas. Parece que 18 en realidad está funcionando bastante bien. Tenemos un problema por aquí con el que necesitas arreglar, no va a desaparecer. De hecho, también tenemos un problema con la interfaz de usuario, que también quiero arreglar para que no se quede cuando no estás jugando al juego. Pero vamos a probar primero la otra cosa, morir, luego la cámara todavía se mueve. Ese es otro problema que tenemos que solucionar. Volvamos y todo parece estar funcionando bien. Sigamos adelante y rápido solo mira lo que tenemos que arreglar. En primer lugar, la razón por la que la cámara sigue movimiento es porque este guión original de aquí, que editaba la velocidad de la cámara cuando mueres, cambió la variable de velocidad de la cámara. Queremos cambiar la variable de velocidad porque hemos cambiado la forma en que funciona ese script. Y así queremos que cambie la velocidad, no la velocidad de la cámara. Eso es lo primero. Lo segundo que queremos hacer es asegurarnos de que este texto de aquí que tenemos no siga moviéndose a medida que se mueve la cámara. La forma en que voy a hacer eso es que voy a crear una nueva interfaz de usuario y tener esa almacenada ahí y hacer que esa no se mueva. Y luego tener esta interfaz de usuario que puedo editar y generar en cuando quiera comenzar el juego Ya hemos hecho bastante episodio, sé que ha pasado un tiempo, pero ya casi terminamos. Así que solo tengan cuidado conmigo mientras terminamos estas dos últimas cosas. Lo primero que voy a hacer es que voy a ir a lo de partida y voy a crear un nuevo lienzo. Voy a llamar a esto dos. Entonces voy a copiar mi cuenta de secundaria y ponerla dentro de dos en lugar de donde estaba originalmente. Y solo voy a cambiar la interfaz de usuario dos a la pantalla Cámara espacial y arrastrar en mi cámara, luego hacer doble clic sobre ella y veamos dónde está, no donde debería estar, pero vamos a moverla de nuevo hacia arriba. Vamos a cambiar este orden y capa para que sean diez también, igual que la otra. Entonces vamos a moverlo para allá. Creo que eso es donde estaba. Obviamente podemos ajustarlo a medida que jugamos el juego, pero creo que eso es bastante bueno por ahora. Entonces en realidad, una vez que haya orientado esto, voy a regresar y voy a cambiar esto al espacio mundial. En otras palabras, no se va a mover con la cámara. Una vez que lo haya posicionado perfectamente, eso debería funcionar perfectamente. Y ahora tenemos esta UI que no va a moverse con el resto del mundo. Entonces, si ahora presionamos play, y vemos si eso funciona, esta interfaz de usuario se va a quedar exactamente donde está. Y a medida que avanzamos, no nos sigue, lo cual es perfecto. Obviamente, esta interfaz de usuario todavía está aquí, lo cual es un problema un poco. Hagamos que esta interfaz de usuario solo se active. el momento en que aterricemos en esta posición inicial por aquí, vamos a tener un poco de animación solo para que se vea un poco mejor. Vamos a la animación de ventana. Ve a mi U por aquí y vamos a crear dos animaciones. En realidad, vayamos a la animación de assets. Y el primero va a ser un desvanecimiento en la animación. Entonces la segunda animación que vamos a tener va a ser lo que solo vamos a llamar una animación estática. Y eso solo va a decir, bien, mantén las posiciones exactamente donde están. Pongamos corazones a esta posición por aquí, 498.5 Y pongamos diamante a esta posición de aquí , 52.94 59.8 Um, y estos deberían ahora estados, ahora si jugamos como animación, funciona. Veamos cómo funciona mi animación desteñida. Quiero que esto vaya de aquí por allá unos 2 segundos. Quiero que se desvanezca ahí a donde estaba, que es la posición 400. ¿Y cuál era la posición? Creo que fue 459. Vayamos a nuestra otra animación solo para verla. 502.9 para los diamantes, y luego 459.8 para estos Vamos a copiar la posición de estos corazones. Regresa por aquí, y luego por aquí. En este punto quiero que los corazones estén en esa posición. Vamos a cambiarlo a 459.8 Y entonces quiero hacer lo más o menos exactamente lo mismo, con el diamante va a ir de aquí Entonces 2 segundos después, quiero que esté en la otra posición, que vamos a conseguir 52.9 por aquí En este punto, quiero que los diamantes también estén ahí. Verás, ahora van a desvanecerse así, y luego va a comenzar el juego. Todo lo que tenemos que hacer, necesitamos, ¿verdad? Oh, vamos a tener también una animación más donde estén fuera de la vista. Vamos a crear uno nuevo y lo llamaremos fuera de vista. Eso en realidad solo va a ser cuando estos dos estén algo fuera de la pantalla. En realidad no importa dónde estén mientras les peguen asy 're. Y también podríamos hacer que en realidad se desactiven Pero solo lo voy a hacer así por ahora porque lo hace un poco más fácil ya que sólo estamos cambiando sus posiciones. Esta en realidad va a ser la animación por defecto. Vamos a empezar con esto o cosas fuera de vista. Vamos a abrir la interfaz de usuario. Vamos a establecer esto en el estado predeterminado. Entonces queremos asegurarnos de que en el momento en que nos desvanecemos, vayamos directo a la estática Vamos a hacer la transición por aquí. Esto nos va a introducir un nuevo concepto que es como transiciones automáticas. Vamos a poner estos dos a cero, pero luego vamos a mantener, esto, ha cambiado el tiempo de salida. Esto significa que el minuto en que se hace esto, cambiar a estático y el tiempo de salida de cero significa que va a completar la animación y luego moverse aquí. Lo cual va a quedar bastante genial. Ahora todo lo que necesitamos hacer es tener un disparador que también sea un nuevo tipo de parámetro. Es muy similar a un booleano. Piense en ello como un botón en lugar de una palanca. Sólo vamos a llamarlo inicio. Vamos a ir por aquí y vamos a hacer esta condición de transición. Comienza esto a cero, asegúrate de que no tenga tiempo extra y la duración de la transición a cero también. Esto básicamente va a funcionar que en el momento en que hagamos clic en esto por aquí, se va a desvanecer y luego quedarse ahí. Esto es todo lo que necesitamos codificar para asegurarnos de que nuestra interfaz de usuario no comience cuando iniciamos el juego. Ahora necesitamos agregar un parámetro más aquí a nuestro código de inicio de juego. Va a crear un animador público, que va a ser nuestro anum Entonces vamos a ir por debajo de aquí y decir que soy un disparador establecido, creo que lo llamamos inicio. Ahora estas tres cosas juntas básicamente nos van a permitir iniciar el juego manualmente a partir de ese evento. Y este de aquí va a lograrlo para que nos aseguremos de que nuestra interfaz de usuario solo comience cuando iniciemos el juego. Volvamos a mi guión inicial. Por aquí, límite, estaba aquí. Vamos a arrastrar en ese animador de interfaz y ver si todo funciona igual que necesitábamos Juguemos, y veamos. Comenzamos con la interfaz de usuario fuera de pantalla, exactamente como una o dos. Empezamos con la puntuación de uno, nada más. En el minuto en que empiezo este juego, podemos ver cómo mi UI se desvanece. Y eso realmente se ve muy, muy genial. Ahora puedo empezar a jugar mi juego igual que de normal. Ese es el último gran cambio cuando haces a nuestros juegos que aún necesitas agregar audio y sonido. Sé que digo eso casi todos los episodios, pero creo que este es un cambio bastante genial que hemos hecho en nuestro juego hasta ahora. Y lo hemos hecho para que se vea mucho mejor, especialmente con las imágenes extra Y ahora con todas estas otras cosas. Y ahora también tenemos que empezar en hubs. Entonces, si morimos y perdemos el juego, vemos que todo se va a ir, entonces vamos a empezar de nuevo y empezamos de nuevo, igual que donde estuvimos con una nueva puntuación alta porque esa vez nos dieron muchas más dimes, lo cual es realmente, realmente genial Entonces eso es todo para este episodio. Obviamente vamos a agregar en nuestro audio y música el próximo episodio, y luego deberíamos hacer algunos toques finales y terminamos con nuestro juego. Así que casi en realidad estás terminado con todo este curso, lo cual es realmente genial y un gran trabajo si has podido seguir todo hasta ahora y tu juego se ve como el mío. Si tienes algunas cosas que son diferentes, tal vez solo regresa y mira algunos videos y descarga los recursos para ver dónde los tuyos son diferentes a los míos. Porque deberías poder construir mi juego exacto prácticamente usando los archivos y el receso que proporciono debajo de todos los videos. Así que solo asegúrate de tener todo igual. E incluso he adjuntado mi código en caso de que también quieras comprobarlo. Entonces ojalá tengas tu juego exactamente en el mismo estado que el mío ahora. Y has podido seguir a lo largo de todo en este video. Gran trabajo para llegar hasta aquí. Y vamos a empezar a agregar audio y música en el próximo episodio. Gracias. 17. 16. Añade efectos de sonido y música: Hola, y bienvenidos de nuevo a Unity. Ahora ha llegado el momento de que nuestro juego finalmente agregue un audio, porque a pesar de que hemos hecho prácticamente todo lo demás, nuestro juego sigue siendo completamente silencioso. Agregar un audio es solo una de las otras cosas que hace que tu juego se sienta mucho más receptivo y vivo para el jugador. Para agregar un audio, vamos a seguir un proceso bastante sencillo. Primero vamos a crear un nuevo objeto llamado Administrador de Audio, y aquí donde vamos a hacer un seguimiento de todo el audio central, cosas como si el audio está habilitado o deshabilitado, y qué reproducir cuando. Entonces vamos a editar todos nuestros guiones y vamos a decir tocar un sonido en este punto. Para comenzar, vamos a crear un nuevo objeto, llamarlo Administrador de audio. Sólo voy a ponerla a cero sin otra razón que la preferencia. Entonces voy a crear un nuevo guión y le voy a dar el mismo nombre de gestor de audio. Entonces dentro del guión de mi gestor de audio, voy a tener una referencia a cada fuente de audio, que es de donde vamos a reproducir audio en el juego. Y luego va a tener diferentes vacíos para cada uno que va a decir jugar esto, jugar esto, jugar esto, etcétera De hecho voy a simplificarlo. Voy a tener un vacío y voy a decir que toca el sonido. Pero me estoy adelantando. Permítanme primero escribir una fuente de audio pública. Voy a tener que crear uno de estos para cada archivo de audio que tenga. Ahora, antes de crear esto, permítanme primero importar mis archivos de audio. Voy a ir a crear una nueva carpeta, la llamaré audio, y luego dentro de esta, voy a querer poner cada uno de ellos, creo que hay siete archivos de audio que tengo hasta ahora. Entonces sigamos adelante e importemos todos esos. tengo a todos aquí y voy a dejar todos estos ajustes por ahora. Estos son básicamente solo un montón de archivos de audio. Esto es para recolectar diamantes, esto es para las baterías. Hacer un Zap. Sonido Esto puede ser un juego de sonido. Esto es tomar daños, Sonido, un salto, la música del juego, y luego también efectos de sonido para el robot. Voy a meterme en todo eso ahora, pero por el momento, permítanme agregar una fuente de audio, o en realidad voy a agregar siete fuentes de audio a este script de administrador de audio, y luego voy a crear una referencia para todos. Entonces déjame seguir adelante y escribir fuente de audio. Voy a añadir siete de estos, siete aquí mismo. Y el minero lo he hecho, ahora voy a empezar a mezclar básicamente mi audio. Entonces déjame seguir adelante y desactivar todos estos. Y todos estos son sonidos diferentes y algunos de ellos son mucho más ruidosos de lo que quiero que sean Ahora bien, debido al software de grabación que estoy usando, es posible que no puedas escuchar el audio de mi juego viniendo directamente a través del video. Si ese es el caso, entonces solo quieres seguir obviamente el proceso. vista será exactamente la misma y solo quieres ajustar el volumen de cada clip de audio medida que agregaste a tu juego. Entonces déjame empezar primero con la música. Voy a arrastrar el clip a esta propiedad de clip de audio. Voy a establecer play un wake true y loop true para la música. Y ahora solo quiero cambiar este volumen. Ya puedo decir que uno va a ser demasiado ruidoso, así que déjame probar 0.2 al principio y ver cómo necesito ajustarlo. Creo que 0.1 es un poco más agradable, solo así es más como música de fondo Vamos a establecer 0.15 es probablemente una buena en el medio entonces voy a hacer exactamente lo mismo con cada uno de los dos de estos. Yo soy, en lugar de cambiarlo, solo voy a silenciar el que está arriba y luego hacer que el sonido del salto se reproduzca en un wake and loop. Así que puedo conseguir un buen volumen para eso también. Obviamente, eso es un poco demasiado ruidoso. Hagámoslo 0.20 0.2 sigue siendo demasiado ruidoso. 0.10 0.05 Creo que 0.1 es probablemente una buena en el medio Hagámoslo 0.1 Solo voy a repetir este proceso una y otra hasta que hayamos hecho esto cada cosa. Entonces básicamente voy a desactivar todas estas, que no quiero que me pongan despiertas si has estado siguiendo un largo tiempo, ojalá tengan audios similares a mí, encontré estas obras Obviamente puedes ajustarlos para tu juego. Podría cambiarlos a medida que avanzo, pero así es como voy a mezclar todo mi audio y luego solo voy a seguir adelante y desmarcar Reproducir despierto para casi todos y cada uno así como mudo y loop porque no quiero ninguno de estos bucles o tocando en una Realmente lo mismo con el hit, así no quiero que el juego termine ni sea ninguna de estas cosas, ni el robot. Y luego voy a poner lo mismo para saltar por aquí, que también vamos a poner en marcha. La música, voy a seguir sonando despierto y bucle solo porque tú quieres , obviamente, tocar la música cuando está encendida. Ahora, antes de ir más lejos, voy a empezar a agregar un mudo y un bollo de sonido apagado. Lo que básicamente va a programar estos para decir, bien, desactivar todos esos y guardar todos esos. La forma en que voy a hacer eso es que voy a crear una matriz de fuentes de audio públicas. Este va a ser el efecto de sonido para crear otra fuente de audio pública. Y éste va a ser para la música. Entonces voy a crear algunos vacíos. El primer vacío va a ser un vacío de música muda, que va a poner Musica en silencio. Igual a verdad. De hecho, podría crear otro vacío por aquí que diga unmute Música Pero en realidad estoy combinarlos en un solo vacío. Voy a llamarlo un, mudo. Silenciar. Música Va a tener un lingote por aquí, que va a llamarse silenciado Originalmente se va a establecer en false. Entonces sólo voy a establecer silenciado igual a silenciado. En otras palabras, cambiar lo que fuera silenciado. Y voy a poner esto de aquí a silenciado también. No silenciado. La primera vez que haga clic en esto, va a decir, bien, silenciado es falso Establezca el silencio en no silenciado, lo cual es cierto. Y luego establecer silenciado igual a no silenciado, silenciado es falso. Por lo tanto, establecer silenciado en verdadero. Entonces la segunda vez, va a decir set silenciado a no silenciado, silenciado, no es cierto Entonces se va a establecer en false. Básicamente, esto va a alternar ahí cada vez que lo llamamos. Voy a escribir exactamente el mismo vacío para los efectos de sonido, silenciar, silenciar efectos de sonido. Vamos a escribir para cada fuente de audio AS tengo que escribirla así, porque como es una palabra reservada en SFX En otras palabras, cada fuente de audio que vamos a asignar a este objeto S, S es la primera, puede ser la primera, luego la segunda por cada uno de aquí. Esto es lo que se conoce como un bucle de cuatro. En realidad es una para cada bucle, pero puedes pensar en ellos como repetir el código O. Esto es decir por cada S que está escrito para nosotros un poco, pero solo piénsalo como para cada fuente de audio dentro de esta cosa. Establecer el valor de silencio de la misma igual a no lo que sea mi silenciado es Para SX, esto está silenciado. Música Esto va a ser silenciado SFX. Déjame cambiar eso rápidamente entonces. Simplemente copia esto por aquí, por aquí. Voy a decir FX silenciado. Es decir, actualizar cada cosa, así que es lo mismo. Entonces configuró SFX silenciado a lo que no era antes. En otras palabras, alternado Este código de aquí nos va a permitir habilitar o deshabilitar cada fuente de audio que tengamos en nuestro juego Ahora necesitamos escribir códigos para reproducir las fuentes de audio específicas, Pero voy a combinar eso en un solo vacío. Voy a llamarlo vacío público, llamarlo play. Sonido Como entrada, básicamente vamos a introducir una fuente de audio. Vamos a ingresar fuente de audio AS todo el vacío va a ser como play. En otras palabras, vamos a reproducir una fuente de audio que vamos eligiendo de aquí. Entonces voy a llamar a este vacío. Voy a crear una referencia a este script de gestor de audio en un montón de otros guiones donde necesito llamar a vacíos Llama a este vacío específicamente y voy a pasar en el sonido que quiero. Empecemos rellenando todos los sonidos. En primer lugar, tenemos nuestro juego sobre Sonido así como nuestros sonidos de daño. Pasemos a la Salud del Jugador. Vamos a crear una referencia a mi gestor de audio. Vamos a llamarlo AM. Entonces por aquí dentro de mi toma daño vacío por aquí voy a escribir AM Fx. Ahora necesito elegir cualquier índice que voy a tener. Permítanme comenzar a asignar realmente los índices sobre esto. Antes de hacer el resto de esto por aquí, sigamos adelante y arrastremos guión de mi gestor de audio hasta el fondo aquí. Simplemente hago todos estos minimizados porque ya no necesito editar los ajustes. Ahora voy a tener Música Esta fuente aquí arriba y todas las demás fuentes. Debería haber otras seis fuentes que sólo voy a arrastrar así. Y se puede ver que en realidad nos está dando un pequeño problema. Ahora tenemos estos que no están aquí. Así que solo voy a eliminar esos haciendo clic derecho y diciendo eliminar Array Element. Y luego tengo mis seis fuentes de audio y luego salto, luego robot, luego juego terminado. Después golpea, luego eléctrico, y luego diamante recoge el que quiero referirme aquí. Hit es el cuarto. Aquí es el elemento tres. Y se puede ver que por aquí, este es el elemento tres. Golpeado. Volvamos a mi código y digamos Am elemento tres. Y voy a pasar eso a AM, Play Sound. Sigamos adelante, vamos así. Esto básicamente va a decir, bien, reproduce un sonido y reproduce cualquier fuente de audio en la que hayas almacenado. La tercera cosa, que es la que acabamos de hacer, voy a repetir este proceso prácticamente donde tengamos un sonido que queramos tocar, vamos a la Muerte. En el de la muerte queremos volver a jugar el juego. Sonido Que es, así que créeme que es el segundo último. En realidad es, creo que es la tercera. Sí, es el tercero, que es el elemento dos. Vayamos por aquí y vamos a jugar al elemento dos aquí. Ahora tenemos dos de ellos ordenados. Todavía tenemos que añadir en los sonidos de salto. Pasemos al guión del movimiento. Creo que está por aquí. Movimiento del jugador. Vamos a crear otra referencia a mi gestor de audio, llámalo AM. Vayamos aquí a mi salto vacío y digamos AM Play. Sonido Y ahora tenemos que encontrar el sonido del salto. Honestamente no puedo recordar porque no he estado memorizando estos. Pero quiero decir que es la primera. Sí, es la primera. Vayamos por aquí y toquemos el primer sonido. Ahora, hemos hecho tres de ellos. Sólo quedan tres más por recorrer. Obviamente necesitamos el sonido para la electricidad, así como el sonido para el robot. Y necesitamos el sonido para la Colección Diamante. Pasemos a la colección Diamond, One first. Vamos a tener que en este evento de aquí tocar los sonidos. Consigamos el gestor de audio público AM debajo del sistema de partículas. Vamos AM a reproducir Sonido. Creo que Diamond Collect es el último sonido. Sólo vamos a confirmar. Sí, lo es. Ese es el elemento cinco de aquí. Vamos allí y toquemos el último. Ahora tenemos dos sonidos más. Tenemos el robot Sound, que necesitamos jugar siempre que haya un robot en pantallas que sea un poco diferente. Esto en realidad va a ser un poco más complicado. Entonces voy a cambiar lo que estoy haciendo aquí. En lugar de que este sonido sea parte de la matriz en la que necesariamente me voy a centrar, voy a tener el sonido en despierto y ser bucle Pero en cambio, voy a tenerlo silenciado. Y luego cada vez que tenga un robot desove adentro, solo voy a asegurarme de que configuré esta cosa para que quede silenciada Y cada vez que tengo un robot que muere, voy a poner para que ya no esté silenciado. Esto va a funcionar en su mayor parte que nos podrían dar si hay un robot que engendra y luego muere mientras otro aún está en pantalla, podría ser un robot sin Sonido, pero por nuestro momento, va a ser una solución prácticamente perfectamente fina Vayamos aquí a mi vacío por aquí. Veamos en mi guión, cuando empiezo como robot, voy a querer configurar mi fuente de audio, que voy a crear una referencia al gestor de audio. Nuevamente, M por aquí, sólo voy a decir AM de X. me voy a referir a que es el primer elemento. Creo que es en segundo lugar el segundo, pero es el elemento uno en la matriz. Silenciar es igual a falso. En otras palabras, juega al robot. Sonido Entonces en el momento en que muera este robot, cuanto ya no exista en pantalla, vamos a querer volver a poner ese silencio en true. La forma en que van a hacer esto es en realidad editando el guión que está por encima del, que dice qué eliminar. Vamos a entrar en ese guión de aquí que se llama Tile clear. Este es el guión que va a destruir los mosaicos. El minuto ahí. Voy a agregar una nueva variable, llamarla robot, a bordo. Y va a ser de tipo lingotes. Entonces por aquí cuando destruya mi objeto de juego, solo voy a agregar otra línea justo debajo. Y voy a decir si un robot estaba a bordo, entonces quiero asegurarme de que mi gestor de audio ya no esté reproduciendo un sonido. No voy a crear una referencia como no conozco aquí. Voy a usar Game Object Find Audio Manager porque eso va a ser mucho más fácil para un componente Get pre fab. Entonces voy a encontrar un guión de gestor de audio adjunto a él. Voy a decir X, adjuntar el elemento dos o fue el elemento uno? Creo que pudo haber sido el elemento uno. En realidad, sí, estaba mudo igual a verdad. Todo lo que necesito hacer en este script robot de aquí es el minuto en que lo silencie, necesito adjuntar, ir a mis objetos padre y transformar padre. Entonces voy a decir obtener el componente tile clear y voy a decir robot a bordo es igual a true. Esta podría ser una forma un poco extraña de hacerlo, honestamente, si realmente no quieres agregar en este robot Sound, no es el fin del mundo. Básicamente lo que estoy haciendo es, solo digo, bien, este elemento específico de la matriz en realidad no necesita en la matriz. Solo lo estoy guardando ahí como para recuerdos. Y estoy diciendo, bien, mudo. Puso el silencio en falso en el momento en que engendro y me aseguro de decirle mi ficha que aquí hay un robot, y en el momento en que mi ficha se destruye, si había un robot ahí, tiene que asegurarse de que este silencio esté configurado en true También podríamos en realidad simplemente establecerlo en verdad cada vez destruimos una baldosa que no funcionaría en ningún lugar cerca también, porque entonces cualquier ficha se silenciaría. Los robots aquí no existen por un tiempo momentáneo. Por lo que es de esperar que esto sobreviva durante la mayor parte de la vida útil de los robots. Y va a funcionar bien por ahora. Si volvemos a mi gestor de audio, ya he programado en mi guión musical y ya tengo el salto hecho, he hecho el robot, ya he terminado el juego, y he hecho el hit así como, Pero la electricidad. Sonido Yo también he hecho el diamante. Vamos a la electricidad Sonido Que va a estar en el guión de la batería por aquí. Encontremos mi script de batería, en realidad está en la tienda Unity, no se ha abierto. Entonces van a hacer esta batería anulada por aquí. Vamos a tener una referencia a mi gestor de audio. De nuevo, voy a tener que asignarle este vía código también porque va a ser un prefabs Voy a decir M es igual a juego objeto punto buscar gestor de audio obtener componente. Ahora voy a encontrar un guión de gestor de audio sobre eso. Voy a asegurarme de que lo he asignado correctamente. Y entonces todo lo que voy a hacer es decir este código tal como lo he dicho en todos los demás, como Player Health por aquí, está aquí AM. Reproducir sonido Y luego voy a elegir un elemento array. Voy a reproducir el sonido cuando se encienda la batería. Creo que es el quinto sonido. Déjame comprobar para estar seguro vamos a jugar al elemento cinco. Ahora la forma en que esto va a funcionar es ahora que hemos creado nuestro gestor de audio, que tiene todos los sonidos almacenados en él, así como el guión, que ojalá nos va a permitir silenciar la música y no Y aún no lo hemos programado en eso. Pero vamos a añadir que en cuanto tengamos todos los sonidos funcionando. Entonces ojalá hayamos podido llamar a cada sonido de manera apropiada desde cada guión, para que podamos reproducir los sonidos cuando los necesitemos. Recordemos todos los sonidos que primero hicimos Música que no tenía ninguna programación. El salto fue referenciado en los reproductores Sonido Asegurémonos de asignar el gestor de audio por aquí. Así como así. Volvamos, veamos qué más hemos hecho ya. El robot va a ser asignado por el robot. Y en realidad solo date cuenta de que no hemos creado una referencia a este script de gestor de audio en Start. Lo cual probablemente deberíamos hacer porque este es otro prefab Entonces escribamos exactamente el mismo código que escribimos para la batería dentro de esta otra prefabricada La razón por la que estamos haciendo esto para los prefabricados es porque generalmente cuando tenemos objetos, podemos decir, bien, poner esto en este objeto, pero debido a que estos objetos aún no han sido creados, estos son como robots y enemigos Tenemos que escribir en código para hacerlo por nosotros, porque no estamos ahí para arrastrarlo en ellos y al inicio del juego. Entonces por eso cuatro, algunos de estos, hemos tenido que escribir este código por aquí. En fin, ese debería ser el código que necesitamos para asignar al robot. Entonces veamos qué más tenemos. El robot está hecho, el salto está hecho, juego terminado y el golpe van a estar ambos en la salud del jugador que se asignan ahora. Así como las colectas de diamantes va a estar en los diamantes. Y pienso en diamantes, no recuerdo si recordamos asignarlo vía código, pero no creo que lo hiciéramos. Entonces hagamos exactamente lo mismo que hemos hecho ahí. Solo asegúrate de asignarlo vía código. También hicimos eso por la batería. Eso significa que el último que tenemos es solo para el jugador que recibe daño y muere. Así que vamos a Audio Manager, vamos a Player y asegurémonos de que asignemos el guión de salud del jugador para que sea este script de gestor de audio por aquí. Ahora sigamos adelante y golpeemos a Jugador. Puede haber algunos problemas, pero los vamos a arreglar en el camino. Pero ojalá hayamos hecho todo para que no tengamos ningún bicho. Y podemos escuchar la música y vamos a golpear play y ver si todo funciona. Parece que saltar funciona. Tenemos nuestro audio, tenemos el sonido de salto. Vamos a probar cada uno, obviamente, en realidad voy a seguir adelante y silenciar la música solo para poder escuchar todo lo demás. No parece que mi corazón El sonido parece estar funcionando mi batería. El sonido no parece serlo. Pero vamos a probar. Corazón obviamente está trabajando mi salto, Mi juego terminado parece ser, lo cual es genial. Eso es en realidad la mayoría de ellos. Veamos cuáles son los que quedan. Yendo a seguir adelante y volver a silenciar la música, el salto suena funcionando. Tengo que probar el robot y el gameover está funcionando. Golpea funcionando. Tengo que probar la electricidad. No parece estar funcionando. Colector de diamantes, aún no lo he probado. Y el robot no creo que esté funcionando tampoco. Vamos a seguir adelante. Aquí tenemos un error que dice que referencia de objeto no se establece en instancia de un objeto. Sí, parece que nuestro código no funciona exactamente. Y creo que la razón es por aquí que hemos ordenado el gestor de audio mal. Solo sigamos adelante y arreglemos eso. Ponemos ahí un espacio donde no debería haber estado. Tenemos que irnos creo que escribimos esto en estas tres líneas de código por aquí y también lo escribimos en azulejo claro. Vamos a asegurarnos de que estamos llegamos a la derecha en ese momento. Derecha. Sigamos adelante e intentemos eso otra vez. Veo que todos esos errores estaban tratando de reproducir sonidos pero no pudieron porque no pudieron encontrar un objeto gestor de audio con un espacio que tiene todo sentido. Vamos a intentarlo de nuevo. Voy a darle la vuelta al salto un poco porque es bastante ruidoso. Vamos a intentarlo de nuevo. Voy a silenciar de nuevo la música para poder escuchar todo. A ver, Jumping parece estar funcionando. Tenemos un diamante. Parece que el Diamond Sound está sonando aquí. Al menos suena algo, pero tenemos el sonido equivocado. Sólo vamos a probar. Cometemos cualquier otro error. El sonido del diamante también está sonando cuando recolectamos un diamante. Interesante que probablemente en realidad lo asignamos en la matriz mal, pero sigamos adelante e intentemos eso. El robot Sound también está funcionando, lo cual es genial. Volvamos a mi matriz. Vayamos por aquí. Electricidad Sonido Debe ser el quinto. adelante y arrastremos eso y solo veamos porque no creo que se le asignara correctamente, ese fue probablemente el tema. Solo vayamos a mi batería y comprobemos si estamos llamando a lo correcto y estamos llamando al elemento cinco, en realidad estamos llamando a los equivocados. Cambiemos eso a cuatro. Tenemos un error más por aquí que dicho objeto de referencia no se establece a instancia de un objeto y dice que el robot script se mueve. Sigamos adelante y veamos cuál es exactamente el problema aquí, encontrar un gestor de audio y deberíamos poder hacer que este código funcione también. Parece que el problema podría estar por aquí con este get component tile clear. Obviamente, todos nuestros mosaicos deberían tener ese guión por ahí que se aseguren de que se eliminen una vez que alcancen cierta altura. He hecho algunos nuevos azulejos nuevos. En algún momento podría haber ido a agregarlos. Solo asegurémonos de que no esté en todas mis fichas. Vamos a comprobar cuáles no lo tienen. Esos todos lo hacen, esos todos hacen eso uno hace, ese no. Entonces estos dos no tienen azulejo claro. Adelante y agrégueles eso. No tenemos que poner nada, obviamente. Y luego al resto de ellos. Sí, lo hacen, son solo esos dos. Ahora bien, si volvemos al juego, todo debería estar funcionando bastante bien y todos nuestros sonidos y todo debería estar genial. Sólo tienes que seguir adelante y presionar play y ver si todo funciona perfecto. Así que tenemos mi música sonando. En el momento en que empiezo a tocar todo en aros, Looks, tengo sonidos funcionando también Parece tener una falla donde dos han desovar uno encima del otro por completo. Seguro lo que es eso. Pero se ve genial. ¡Vaya! Puedes escuchar todo lo que sucede, puedes escuchar el zapping, y puedes escuchar al robot siempre tan astutamente Obviamente, si mueres, tenemos eso todo comenzando de nuevo, lo cual es realmente genial. Esa es prácticamente toda la configuración de audio que necesitamos hacer para nuestro juego. Lo último es que tenemos que añadir ahora algo que nos permita silenciar el audio y el sonido, porque lo codificamos desde el principio. Vamos a entrar en mi interfaz de usuario. Voy a ir a esta interfaz de usuario por aquí. Este Camas que hice, voy a crear un botón. Voy a tener dos botones. Vayamos legado. No necesito botón con Text me. Sólo voy a mover esto por aquí. Y voy a eliminar el componente de texto y simplemente renombrar esto a Fx y cambiar el nombre del que está debajo a Música. Voy a ponerlos por ahí. Creo que quiero en mi nube poder silenciar la música así. Obviamente va a usar sprites reales aquí. Yo estableceré estas posiciones. Negativo 4.445 negativo 445, fresco. Entonces vamos a entrar en mis sprites y vamos a conseguir estos dos sprites que hice específicamente para los Música Y creo que el otro se llamaba Sonido. Ahí está. Vamos a importar esos dos. Asegúrate de que ambos hemos seleccionado y hacemos lo normal que hacemos cuando añadimos un nuevo sprites Vamos a ir por aquí a la imagen de origen y asegurarnos de que a la X uno que arrastramos en nuestro sprite de sonido así que haz clic en establecer tamaño nativo Entonces vamos a tener que escalar esto según el resto del juego. Pero antes de hacer eso, agreguemos píxeles. Agreguemos Música Para que podamos hacer lo mismo al mismo tiempo. Entonces veamos cómo necesitamos cambiar esto. Eso es obviamente un píxel. Tiene que ser un, es un poco a gran escala hacia abajo. Nuevamente, eso debería estar bien. Perfecto. Creo que ya es bastante bueno. A lo mejor una vez es más pequeña. Sí. Ahora tenemos que hacer es que tenemos que volver al esquema de aquí. Vamos a asegurarnos de que tenemos un sistema de eventos porque eso es lo necesitamos para que estos botones funcionen. adelante y arrastremos ese aquí arriba, y este de aquí abajo, hasta que se vean así, tal vez un poco hacia un lado. De hecho voy a querer a los dos en la parte inferior. Yo pienso así. Sigamos adelante con la música y moverla. Ahí tenemos nuestros botones. De hecho voy a moverlos un poco a los dos también. Creo que eso se ve bien por ahora. Ahora todo lo que necesito hacer es asegurarme de que ese código que hice se ejecute cuando hago estos botones. Así que sigamos seleccionándolos. Y luego al click voy a arrastrar en este objeto gestor de audio y voy a elegir Audio Manager mute S de X. Y luego para la música, voy a cambiar eso para silenciar Musica. A ver si estos funcionan. Lo que debería pasar es en realidad lo último que voy a hacer antes de terminar con eso es que voy a volver al Administrador de audio. Sólo voy a hacer una referencia a estos dos botones. Vamos a usar Unity Engine. Vamos a crear una referencia a mis dos botones, el botón Público X y el otro es música con mayúscula. Esta vez entonces todo lo que voy a hacer es voy a decir, bien, si en realidad voy a crear un par de colores, voy a crear un color llamado Grade out. Todo lo que voy a hacer es voy a decir, bien, si ahora has silenciado la música, entonces gris hacia fuera Música Puedes ver el cambio Sigamos adelante por aquí y digamos si silenciado Música En otras palabras, si ahora hemos silenciado el micrófono silenciado se establecerá en verdadero el minuto Música En otras palabras, si la hemos silenciado, pongamos el color de mi imagen musical igual Entonces debajo de eso voy a escribir L. Música El color de la imagen es igual al color blanco. Voy a escribir más o menos exactamente el mismo código debajo de los efectos de sonido de aquí. Digamos si X silenciado, entonces el color del punto de la imagen del punto X es gris De lo contrario, ponlo en blanco. Volvamos a mi juego entonces. Debajo de mi guión de administrador de audio por aquí, solo necesito crear una referencia a estos dos. Arrastremos X ahí y arrastremos la música como hagamos que el color de creación sea algo así. Y a ver si podemos verlo en acción mientras jugamos el juego. Sigamos adelante y golpeemos Play. Y solo prueba estos dos botones, a ver si funcionan. Parece que sí. Voy a ver si hacemos clic en la cosa del sonido. No deberíamos tener ningún sonido en absoluto. Entonces sigamos adelante y silenciemos ambos mientras estoy hablando, solo para probar si algo no está funcionando. Parece que el robot sigue siendo un problema. Y la razón de eso es porque en realidad estamos dessilenciando esto manualmente Lo que voy a hacer en cambio es que voy a decir establecer el volumen en lugar de silenciado. Y luego ajustar el volumen hacia atrás. Lo cual en realidad es bastante genial. En realidad no pensé en eso. Pero hagamos ese cambio rápidamente. En vez de decir que el silencio es falso, voy a decir hacer volumen es igual a. Y entonces cual es el volumen que quiero que mi robot sea normalmente, suele estar en 0.01 Así que voy a establecer el volumen 0.01 Solo pon un después de eso. Eso es lo que hay que hacer. Entonces lo que se va a dictar cuando eso vuelva a apagarse, es cuando tengo, mi ficha se despeja. Así que vamos a establecer. En lugar de decir silencio, diré que el volumen es igual a cero. Entonces en realidad el último cambio que necesitas hacer después de hacer esto es tener que volver a mi juego. Tengo que ir a este guión de aquí. Y necesito poner eso a cero al comienzo del juego. Y no silenciado así como así. Ahora cuando juego mi juego, no debería tener ningún ruido de robot Cuando empiezo, si silencio tanto el sonido como el audio, eso no debería ser un problema ya tengo donde podamos probar. En realidad, esto debería seguir subiendo a 0.01 cuando lo toco, porque está silenciado cuando lo escucho Deberíamos tener un robot en pantalla ahora, lo cual es perfecto. Se puede ver que en realidad está funcionando. Entonces en el momento en que este robot en realidad es destruido por la nube, No se ven efectos de sonido jugando. Nada está jugando, que es exactamente lo que queremos. el momento en que este robot realmente sea destruido, deberíamos tener esta caída de nuevo a cero, lo que parece que acaba de hacer. Lo cual es genial. Ese es en realidad todo el sonido que necesitamos hacer para nuestro juego. Y ahora obviamente puedes cambiar eso cada vez que engendras en el juego Puedes seleccionarlo ya sea que lo desees encendido o apagado. Estará encendido por defecto obviamente. Pero entonces solo puedes apagarlo si lo quieres, lo cual es bastante genial. Eso es en realidad lo último. Ahora, para completar nuestro juego, lo último que ahora necesitamos son los toques finales. Pero después de eso, prácticamente hemos terminado nuestro juego, lo cual es realmente genial. Obviamente, como dije en el siguiente video, vamos a estar sumando algunos toques finales para que todo se vea un poco mejor. Pero prácticamente lo hemos hecho, así que si sigues y tienes un juego que se ve así, eso es realmente genial. Porque obviamente este es un juego bastante impresionante de hacer si nunca antes habías usado Unity tanto antes. Tan buen trabajo en seguir a lo largo. Y ojalá tu juego estés bastante impresionado y bastante orgulloso de él en este momento. Y como mencioné en el siguiente video, vamos a estar cubriendo solo algunos toques finales para que nuestro juego se vea un poco mejor. Pero ojalá, como dije, estés contento con cómo es hasta ahora y todo está funcionando bien en tu juego también, igual que en el mío. Estaremos concluyendo este curso en los próximos dos videos y el siguiente, solo vamos a estar agregando algunos toques finales. Y luego te voy a mostrar cómo construir y exportar este juego y concluir este curso. Gracias. 18. 17. Toques finales: Hola, y bienvenidos de nuevo a Unity para la última lección real donde vamos a desarrollar este juego. Ahora en esta lección, vamos a estar agregando solo algunos toques finales. Vamos a estar agregando dos cosas. En primer lugar, vamos a estar haciendo que la cámara se acelere con el tiempo. Entonces también vamos a estar agregando en el post procesamiento, que es como efectos visuales a pantalla completa, que solo hacen que el juego se vea un poco mejor. Es bastante difícil de explicar, pero ya verás una vez que lo hayamos agregado, comenzando por lo original, antes de que haga eso, solo voy a habilitar realmente este telón porque lo deshabilité hace bastantes episodios y antes de olvidarlo, cuando intento construir mi juego, creo que se ve mucho más genial con ese desvanecimiento. Sigamos adelante y solo veamos si todo eso funciona. Así que tenemos nuestro fade in y nuestro audio y sonido están funcionando igual que antes obviamente. Empecemos con eso. Velocidad de la cámara. Voy a ir a guiones y voy a crear uno nuevo. Voy a llamarlo cámara acelerar, la forma en que el guión realmente va a funcionar. Hay bastantes formas en las que puedes hacer esto, pero la forma que voy a elegir va a darle al jugador bastante control sobre la velocidad de la cámara en ciertos puntos. Voy a tener una variable por aquí llamada tiempo transcurrido. Cada fotograma voy a incrementar el tiempo transcurrido por tiempo delta tiempo Es decir, el tiempo transcurrido va a aumentar, básicamente va a ser un contador Y si seguimos adelante y ponemos esto en un objeto, lo voy a poner en la cámara principal, por ejemplo. Sigamos adelante y agreguemos mi guión por aquí que se llamaba cámara speed up, justo al fondo. Ahí vas. En fin, si solo vemos esa variable de lapso de tiempo, voy a silenciar la música poder hablar mientras está sonando Vamos a desplazarnos hacia abajo y veamos por aquí tenemos este valor contando hacia arriba y hacia arriba y hacia arriba. Tenemos un error justo al principio que dice que el valor no puede ser nulo, lo que supongo se refiere a ese tiempo transcurrido porque aún no lo hemos inicializado, lo que voy a llegar en Pero básicamente es solo un temporizador. Sólo quiero mostrarte lo que es. Empecemos originalmente estableciendo esto a cero, y ahora es un temporizador. Lo que vamos a hacer cada fotograma es que vamos a decir si el tiempo transcurrido es mayor que un valor, lo que vamos a tener básicamente significa subir un nivel, entonces vamos a subir el nivel de eso Velocidades de la cámara, vamos a tener una matriz arriba aquí. Matriz flotante pública, Va a ser velocidades de cámara. Entonces vamos a tener una matriz al lado, que van a ser tiempos. Lo que vamos a decir básicamente es el minuto en que soy mayor que un tiempo, entonces hay que subir la velocidad de esta cámara en esa cantidad. Esta variable de tiempo la vamos a almacenar en otro flotador llamado tiempo actual. En el momento en que comencemos el juego, en el momento en que este comience, vamos a establecer el tiempo actual igual a la primera vez en nuestro tiempo. Va a ser veces cero. Obviamente, la velocidad de la cámara también se va a poner a cero. Vamos a necesitar crear una referencia a la velocidad de mi cámara por aquí. Vamos cámara pública, muévete, llámalo velocidad de cámara. Guión de cámara más bien. Entonces vamos a decir guión de cámara. La velocidad de la cámara es igual a la velocidad de la cámara cero. Esto nos va a permitir hacer es que básicamente vamos a permitirnos cambiar la velocidad de la cámara. Esto en realidad hace ese cambio que hicimos antes donde separamos la velocidad de la cámara y su velocidad actual, una muy útil porque ahora podemos cambiar la velocidad sin preocuparnos por lo rápido que se está moviendo realmente la cámara. Esto es lo rápido que debería estar moviéndose, ¿verdad? Pero no quiere decir que va a empezar a moverse si transcurre cierto tiempo mientras estamos muertos o algo Lo cual es realmente, realmente genial en este momento. Tenemos un guión aquí arriba que dice establecer la hora actual en cero y establecer el guión de la cámara a esta velocidad de cámara porque estamos usando la misma variable por aquí. De hecho voy a establecer esto a otra variable, llamarlo índice. Al inicio, vamos a establecer el índice igual a cero, y solo vamos a establecer este igual a índice. Y entonces cada vez que tenemos tiempo transcurrido, vamos a incrementar el tiempo Y vamos a decir si el tiempo transcurrido es mayor que los tiempos de índice más uno Es decir, si hemos subido, si ya hemos pasado el tiempo suficiente para pasar al siguiente nivel, entonces lo primero que vamos a hacer es que vamos a incrementar el índice Vamos a indexar más, más, en otras palabras, aumentarlo en uno. Entonces vamos a decir debajo esto, en realidad antes de esto. Más bien vamos a decir guión de cámara, velocidad de la cámara es igual al índice de velocidad de la cámara. Y en realidad vamos a mover eso a continuación. Básicamente lo que vamos a hacer es que vamos a incrementar las velocidades de la cámara en esa cantidad Bueno, esto va a permitir hacer la forma va a funcionar este código, como ya he explicado. Vamos a tener un área de lapso de tiempo que va a contar desde cero. Vamos a tener una lista de velocidades de cámara y una lista de tiempos respectivos. Y vamos a tener una hora actual y una velocidad de cámara y un índice actual. Esta variable de tiempo actual en realidad no necesitamos. No sé por qué lo creé, en realidad puedo quitar ambos de aquí. Básicamente, todo lo que necesitamos hacer es tener este flotador por aquí que dice tiempo transcurrido, velocidades de cámara, tiempos, así como una referencia al guión y un índice en el índice de inicio se establece en cero Establecemos la velocidad de nuestra cámara a la original. Entonces, siempre y cuando el tiempo transcurrido sea mayor que lo que sea, el índice es mayor que uno Obviamente, en el momento en que nos quedemos sin un aumento va a dar error. Voy a anunciar un poco de código dentro de él que dice Mientras no estemos en el índice máximo y en el minuto que estemos en el índice máximo, realidad solo voy a destruir el guión por completo Pero hasta entonces voy a incrementar lo mío cada vez que tengamos tiempo transcurrido es en realidad mayor que el que viene Van a aumentar el índice y luego voy a ajustar la velocidad de la cámara a lo que sea que esté por aquí debajo de esto. Voy a decir si índice es igual a velocidades de cámara, longitud, es decir, si hemos alcanzado el máximo, el índice funcionará siempre y cuando sea uno menos. Pero en cuanto sea uno más, es decir, estamos en lo máximo, voy a eliminar este guión fuera. No va a ser un problema porque cuando recarguemos la escena, estará ahí atrás Pero básicamente solo por el momento porque ya no necesito, voy a decir destruir el punto del objeto del juego obtener la velocidad de la cámara de componentes. O mejor dicho en lugar de destructor, diré que el punto del objeto del juego consigue activar la velocidad de la cámara de componentes Porque creo que destruir en realidad podría deshacerse del objeto del juego en sí mismo es igual a falso. Básicamente en el momento en que me quedo sin cosas, solo deshabilitarme. Y obviamente se volverán a habilitar cuando iniciemos la escena Pero esto debería funcionar bastante bien en términos de decirnos qué tan rápida debería ser la velocidad de la cámara. Vayamos a la cámara principal, la anotemos en la parte inferior y fijemos las velocidades de mi cámara. Voy a establecer inicialmente cuatro voy a establecer. Esto obviamente tiene que ser de la misma duración, digamos después de que pasaron 2 segundos, después de 4 segundos, después de 6 segundos, después de 8 segundos, voy a hacerlo 123.4 Así que vamos a poder básicamente ver todo Van a escoger mi guión de movimiento de cámara. Voy a seguir adelante y darle a play. Y veamos exactamente cómo funciona esto. Ahora ya no necesitamos realmente esta variable de cámara. Tenemos por aquí la velocidad de la cámara para ser asignada de ahí. Esto no va a marcar la diferencia. Sigamos adelante y solo re cero. Eso realmente no importa. Entonces sigamos adelante y peguemos play. Y antes de que realmente golpeemos play, me acabo de dar cuenta de que nos van a asignar la velocidad de la cámara antes de que algo comience realmente. Sólo queremos que se llame a este vacío cuando realmente iniciemos el juego. Vamos a comenzar el vacío público. Y en realidad va a ser llamado por ese guión de start manager que hicimos hace un tiempo. Volvamos aquí y vamos a crear una cámara pública para acelerar la velocidad. Vayamos por aquí y digamos que comience la velocidad de la cámara. De lo contrario la cámara va a empezar a moverse antes de que comencemos el juego. Volvamos aquí. Vayamos a mi guión inicial por aquí al límite. Vamos a asegurarnos de que agregamos mi cámara para acelerar el guión allí. A ver si funciona. Ahora lo que debería pasar es que deberíamos tener 4 segundos, el primer segundo, o mejor dicho 8 segundos, y cuatro velocidades diferentes dependiendo de cuánto tiempo estemos jugando la T, iniciamos el juego, aún deberíamos tener el movimiento de cámara en absoluto, que es ojalá lo que va a pasar. Genial, voy a silenciar esto para que pueda explicarlo. Entonces en el momento en que empiezo a pasar, me mudo a uno, 2 segundos pasados. Entonces debería estar moviéndome a las dos. Parece que dice que el índice está fuera de los límites, el rayo Solo veamos cuál es el tema. Al parecer, el índice está fuera del rayo límite, lo que significa que estamos tratando de hacer referencia a algo que aquí no existe. Vamos a ver cómo hemos codificado esto por aquí. Esto en realidad está destinado a ser, es igual a la longitud de la cámara menos uno. El índice es en realidad uno menos que la longitud de la cámara si la longitud de la cámara es tres. Cuando el índice es dos, no va a haber ningún tercer elemento por aquí. Esto tiene que ser menos uno. En realidad, me acabo de dar cuenta de que nosotros también, no creo que haya codificado en ningún lado el hecho de que el guión de la cámara debería ser realmente la velocidad que hemos programado por aquí. Vamos a suponer que en el momento en que comencemos lo va a firmar bien. Pero cada vez que hacemos esto, queremos asegurarnos de que estamos transcurriendo, nos estamos asegurando de que velocidad de la cámara sea en realidad lo que debería ser la velocidad máxima de la cámara Hacer eso en realidad tenemos que tomar en cuenta la muerte. Vamos a crear una referencia a la salud de mi jugador público, llámalo Jugador. Entonces vamos a ir por aquí y vamos a decir que todo este código de aquí sólo se va a ejecutar si el jugador no está muerto es igual a falso. Volvamos por aquí. Y luego vayamos a la velocidad de mi cámara y digamos que la velocidad guión de la cámara es igual a la velocidad de la cámara del script de la cámara. Esto en realidad debería tener todo funcionando perfectamente bien. Ahora vamos a volver a probar, obviamente porque te encuentras con errores como este cada vez que estás desarrollando un juego. Obviamente, ahora ojalá lo hayamos arreglado todo. Volvamos. Vamos a ver, la forma en que hemos codificado esto en realidad tiene en cuenta que no necesitamos un tiempo aquí porque nunca nos estamos refiriendo realmente a esta vez. Sólo nos estamos refiriendo mientras se pasen tantos segundos. Así que sigamos adelante y en realidad hagamos un cambio más. Antes de hacer eso, sólo queremos factorizar en el tiempo, transcurrir el minuto en que el juego realmente ha comenzado a jugar Sigamos adelante y digamos, si necesitamos otro lingote, llámalo iniciado Digamos que si se inicia, en otras palabras, si en realidad estamos jugando el juego que comenzó sólo se va a establecer cierto por aquí. Sigamos adelante y echemos un vistazo al nuevo código. hubo bastantes errores En realidad hubo bastantes errores aquí que necesitamos corregir, pero todos deberían hacerse. Ahora volvamos a nuestro juego. Veamos todas las diferentes cosas que tenemos aquí en nuestro nuevo guión. Deberíamos tener este lapso de tiempo cero hasta que comience el juego. Y entonces deberíamos poder ver que la cámara se acelera. Casi me olvido de asignarle salud al jugador. Volvamos aquí y asignemos esto a mi jugador, el doble clic o más bien un solo clic. A ver si todo funciona ahora mismo. Empezar se establece en falso, tal como debería ser. Desactivemos el. Sonido. ver si no tenemos tiempo que transcurra el minuto que recorremos. El tiempo empieza a contar. Perfecto, actualmente tenemos 1 minuto, han pasado 4 segundos. Deberíamos acelerar ahora a dos. No parece que volvamos a acelerar. Solo volvamos al guión. La velocidad de la cámara está actualmente establecida en uno. Ahora la velocidad de la cámara no se está actualizando , a lo mejor la variable muerta es el problema. Sigamos adelante y veamos porque no creo que nuestro índice se esté actualizando en realidad. Sí, no lo es. Nuestro índice se pega en cero. Volvamos a ver si podemos arreglarlo. La tercera vez es el encanto. Creo que muerto en realidad no es todo. Sí, está muerto es el lingote. Sigamos adelante y cambiemos eso está muerto. Eso es en realidad creo que un sprite. Sí, claro es por eso que no estaba funcionando. Ahora bien, si volvemos a mi juego por aquí, deberíamos poder ver cómo la cámara se acelera a medida que avanzamos. Sigamos adelante y golpeemos play para probar Si realmente funciona. Deberíamos estar comenzando con el tiempo transcurrido de cero. El tiempo en realidad no debería contar atrás hasta que empecemos a jugar, que se parece a lo que tenemos. Sigamos adelante y choquemos con el juego. Y ahora empezamos con una velocidad de uno. Y parece que eso se va a quedar en uno, tal vez sea propio aumentar dos, no aumentar tres, y hacia fuera aumentar a cuatro. Obviamente podemos ver que el juego se acelera bastante drásticamente, lo cual es bastante genial A medida que aceleramos la cámara, estas cosas se separan cada vez más. En realidad, no se separan más, pero sí se hacen más frecuentes. Pero ojalá esto haga que el juego se vea un poco más escalable. Obviamente, es bastante más difícil mantenerse al día con la cámara, y si no lo haces, entonces obviamente mueres. Lo que realmente vas a necesitar hacer es editar lo que quieres que sean estos. Voy a fijarlo 1.8 al principio, igual que lo teníamos. Entonces creo que quiero establecer en 2.2 0.4 Entonces básicamente voy a incrementar esto bastante Voy a hacer que diez de ellos digan desde 2.4 podemos ir a 2.6 y luego 2.62 0.82 0.83 y luego vamos a ir 3.23 punto, 4.3 0.6 Y creo que debería ser como máximo 3.6 después de haber estado jugando por Entonces, fijemos el tiempo transcurrido. Solo debería cambiar a partir de esto después de aproximadamente 20 segundos, 30 segundos, 40 segundos, 50 segundos. Y voy a decir que alcanzas velocidad máxima después de jugar durante unos 100 segundos. Y quiero decir, no hay que usar estos valores exactos. Estos simplemente pueden ser los que voy a usar, Pero creo que deberían funcionar bastante bien para cómo hemos jugado el juego hasta ahora. Entonces veamos si esto realmente funciona y se siente natural para el principio. Por lo menos, deshabilitemos el sonido. Basta con ver que tenemos ese mismo tipo de velocidad a la que siempre nos acostumbramos. Y luego 20 segundos tiempo deberíamos tener la velocidad aumentando y aumentando, lo cual es genial. Entonces ese es el primer tipo de paso que tenemos que hacer para el cush final que necesitamos darle a nuestro juego Lo segundo es el postpcing. Ojalá, por suerte, sea mucho menos tipo de codificación y mucho más fácil. Primero comencemos creando un objeto de postprocesamiento. Y vamos a ir a Window Package Manager ahora mismo. Vamos a encontrar este paquete postpcing. Lo que necesitas hacer es entrar en paquetes que podrías tener en el conjunto de proyectos. Entonces vayamos al registro de Unity y busquemos este objeto de postprocesamiento. Entonces vas a hacer clic en Instalar. Esto va a instalar esta pila o paquete en tu proyecto. Se va a decir instalando. Podría tomar un tiempo, dependiendo de qué tan rápido sea tu computadora y/o Wi Fi. Pero después de eso ya ha terminado de instalar. Ya ves que vas a tener este pop up por aquí, entonces todo debería cargarse. Ahora lo que permite esta pila de postpsing, en realidad me voy a deshacer del telón en el editor Estamos usando este botón. No va a afectar el juego, lo cual es genial. Debería haberlo hecho antes. Pero de todos modos, lo que esto en realidad nos va a permitir hacer es básicamente agregar efectos visuales a nuestros juegos. Primero vayamos a este objeto postpsing que tenemos por aquí Lo primero que tenemos que hacer es ir a mi cámara y necesito agregar una capa de post procesamiento. Vamos a escribir posts, podemos ver si tienes todas estas cosas nuevas. Podría tomar un tiempo cargarlos todos, pero tenemos una depuración que no nos vamos a preocupar. Tenemos una capa, tenemos un volumen. Solo espera a que se vuelva a cargar. Y luego volvamos aquí abajo y agreguemos una capa a la cámara. Ahora puedes dejar prácticamente todos estos ajustes tal como están, excepto que obviamente necesitas elegir una capa para que se vea afectada por el postpsing, que es como nuestros efectos especiales Voy a ir por encima y hacer una nueva capa, eso es una etiqueta. Voy a hacer una nueva capa, voy a llamarla post proceso. Ve a mi postpsing y asegúrate de que esté en esa capa. Voy a ir a mi cámara principal y voy a configurar mi cámara principal para que sea esa capa de post procesamiento que debería tener todo funcionando. Voy a dejar el resto como están por ahora. Ahora voy a ir a mi objeto de post procesamiento por aquí y voy a agregar un volumen de post procesamiento. Esto me va a permitir básicamente editar mi juego. De hecho voy a desactivar esto ahora para que pueda verlo, porque solo se puede ver el postprocesamiento en el juego Voy a poder agregar un montón de efectos especiales realmente geniales, puedes jugar con estos. No soy el mejor en usar esto, para ser honesto. Esto es básicamente editar su núcleo. Vas a tener un montón de configuraciones diferentes y obviamente, mejor estés en la edición de fotos y en la edición postpsing, supongo que la edición de video, todo eso va a atar a esto He conseguido algunos trucos que utilizo para mis juegos, pero no soy el más experimentado en esto. De todos modos, es bastante fácil de aprender, al igual que los sistemas de partículas, hay que empezar por crear un nuevo perfil. Entonces puedes comenzar a agregar efecto. Vamos Unity y agreguemos en flor. Este es el efecto favorito de la mayoría de las personas. Ahora, antes vamos a poder ver el efecto de esto, vamos a tener que marcar, esta es la casilla global. Entonces puedes ver como vas a escalar la intensidad de la floración. Se ve que el juego se vuelve brillante, obviamente, no queremos que sea así. Pero puedes ver si tienes algo como cero o tienes algo así como 0.30 0.5 incluso Hace que el juego se vea un poco más agradable. Puede que no sea súper fácil de ver en la calidad de video, pero obviamente a medida que vas a 0.7 o 0.8 incluso, puedes ver que el juego cobra vida un poco. Quiero poner el mío 20.8 que es bastante alto, pero lo voy a dejar ahí por ahora Voy a bajar el umbral un poco o más bien subir el umbral. Se puede ver ahí a medida que aumento la intensidad, algunas cosas se ven afectadas, pero creo que eso, eso se ve bastante genial por ahora. Un umbral bastante alto. Pero entonces también voy a tener un Bloom decentemente alto. De hecho, pongámoslo en dos, solo para probar si realmente está haciendo algo. Puedes hacer clic en eso de forma encendida y desactivada. Mi umbral podría ser un poco alto, establecido en 1.2 Puedes ver ahora puedes ver una ligera diferencia. Voy a dejarlo así por ahora. Voy a añadir un nuevo efecto. Lo siguiente que voy a añadir va a ser una viñeta o una vineta No estoy seguro, Esto es solo un blacking alrededor de los bordes. Entonces voy a añadir un poquito en los lados, como, así que solo para hacer mi juego un poco más enmarcado. Entonces después de eso, voy a agregar en alguna gradación de color. Esta es una increíblemente complicada. No suelo usar esto demasiado en mis juegos, pero voy a establecer el rango de baja definición porque parece estar prefiriendo eso Entonces sólo voy a seguir adelante y obviamente puedo cambiar mi temperatura, cosa que en realidad no voy a hacer. Deja eso como eso por ahora. Podría hacerlo -0.1 solo para ver si hace alguna diferencia en absoluto Se puede ver un poco de diferencia, pero lo voy a hacer 0.2 Y entonces obviamente puedo agregar en un filtro de color si me inclinara. Realmente no quiero hacer eso, para ser honesto. Pero si quisiera, podría agregar algún filtro, puede hacer un juego un poco más oscuro si quisiera, pero voy a dejar eso fuera por ahora. Entonces también puedes cambiar cosas como el brillo, obviamente como te mencioné, puedes. Voy a hacer que el juego sea uno más brillante y de hecho voy a editar el contraste solo un poco de mi juego. Que sea negativo dos o negativo tres. Sólo para hacer las cosas un cinco negativo más claro debería ser bueno. Estos son los tres efectos que he usado hasta ahora. En realidad hay un montón aquí que puedes usar dependiendo de lo que quieras para tu juego. Se podría agregar en grano, por ejemplo. A lo mejor se puede ver lo que hace eso. Obviamente este no es el efecto que voy por, pero si quisieras, podrías. Supongo que los granos muy grandes podrían quedar geniales dependiendo del estilo al que vayas si estás haciendo un juego retro. Pero no voy a hacer otra cosa que no sea lo que tengo hasta ahora. Deberías poder ver que eso surta efecto, puedes ver la diferencia. Y solo haz que el juego se vea, en mi opinión, solo un poquito mejor. De hecho voy a subir la floración un poco. Voy a hacer que mi gradación de color sea un poco menor. Realmente no quiero que mi brillo sea tan efectivo como lo fue. Um, en realidad no estoy seguro de que la gradación de color sea un buen cambio en absoluto. De hecho, podría borrar eso por completo. Pero como dije, puedes jugar con estos tanto como quieras. Y ya puedes ver si sigo adelante y vuelvo a activar mi telón y jugar mi juego, ahora puedo ver cuál es mi juego terminado de Sky Miner Y esta es la plataforma intermedia que hemos estado haciendo en las últimas semanas o por mucho tiempo que lleves tomando el curso rodando. Podemos ver, obviamente todo se ve un poco más bonito ahora Y luego cuando saltamos, las cosas se deslizan hacia adentro. Y podemos ver este juego en pleno desarrollo completado, lo cual es bastante genial, sobre todo si este es uno de los primeros juegos que has hecho en Unity. Parece que he muerto. Este es uno de los primeros juegos que has hecho en Unity. Es bastante impresionante haber podido hacer todo esto. Si lo has hecho todo y todo está funcionando igual que menos, entonces eso es realmente genial y un buen trabajo para poder seguirlo así. En el siguiente video, vamos a estar construyendo y exportando este juego. Y eso no es realmente ni siquiera un video. Es solo yo mostrándote cómo construirlo a un proyecto para que puedas jugarlo correctamente. Pero por ahora, prácticamente hemos terminado todo para este juego. Si sigues y todo está funcionando igual que menos, espero que así sea. Y espero que hayas podido aprender bastante como has hecho este juego. Y tal vez incluso puedas transformarlo en un juego que quieras lanzar al móvil o PC o algo así Pero por ahora, gran trabajo en hacerlo todo el camino a través del curso. Y enhorabuena por hacer tu juego. Gracias. 19. 18. Construcción y exportación: Hola, y bienvenidos de nuevo a Unity. Ahora ya prácticamente hemos terminado. Bueno, en realidad hemos terminado completamente nuestro juego de plataformas Sky Miner Intermedia. el último tiempo, hemos pasado incontables horas o minutos, dependiendo de lo rápido que hayas podido pasar por todos los videos, construyendo lo que tenemos frente a nosotros, lo que en realidad es realmente, muy genial, que hemos podido hacer un juego como este, presumiblemente no en realidad tanto tiempo Como dije en el último video, enhorabuena por llegar hasta aquí. Y si has logrado llegar al final del curso así y tu juego está funcionando igual que mío está funcionando, entonces gran trabajo. Y eso en realidad es bastante impresionante, sobre todo si este es uno de tus primeros juegos que encabeza Unity. Pero aunque no sea para hacer un juego Unity, cualquier juego en general es un galardón en sí mismo, pero sobre todo uno con sprites y música y escalado, dificultad y generación de mapas aleatorios Todo eso es un logro bastante genial. Tan bien hecho. Ahora todavía necesitamos poder construir el juego porque no podemos ser exactamente como, oh sí, mira mi juego y luego carga Unity cada vez que queremos mostrárselo a alguien. Entonces tenemos que poder exportar este juego a un archivo para que no tengamos que jugarlo en el editor. Ese va a ser el propósito de este video. Solo voy a mostrarte rápidamente cómo exportar tu juego y jugarlo en una ventana masiva a pantalla completa. Y luego voy a concluir el curso Mientras estoy jugando el juego de fondo, sigamos adelante a la cima aquí y hagamos clic en Configuración de compilación de archivos. Y aquí es donde vas a editar todo el aspecto de construcción tipo del juego. Ahora no voy a entrar demasiado en detalle en cada uno de estos porque si haces clic en Play A Sets, puedes ver exactamente cuántos hay realmente. Ahí están todos estos. Hay administración preestablecida. Bueno, en realidad no te olvides de eso. Hay un icono que puedes cambiar aquí, hay resolución, hay una imagen de splash, que se juega al inicio del juego. Luego hay un montón de otras configuraciones con las que realmente no deberías jugar demasiado, especialmente si realmente no sabes lo que estás haciendo Porque, bueno, pueden romper el juego. Pero por ahora todo lo que en realidad vamos a hacer es dejar estos por defecto. Esta es la plataforma de aquí para la que vamos a construir. Si quieres cambiar esto a un juego de Andro, en realidad solo tienes que instalar el módulo y hacer clic en cambiar de plataforma. Y hace muchas cosas por ti. Pero vamos a estar construyendo nuestro juego para una computadora. no vamos a preocuparnos con ninguna ahora no vamos a preocuparnos con ninguna de estas escenas de jugadores. Pero obviamente puedes cambiar todos estos. Estos van a ser incorporados en la aplicación. Para que puedas cambiar el nombre de tu empresa, el nombre del producto. Puedo cambiarme a Sky Miner si quisiera. Y puedo cambiar el icono, el cursor, y prácticamente todo lo demás aquí. Como dije, no filtres demasiado con estas otras configuraciones a menos que sepas lo que estás haciendo o lo hayas buscado en Google Pero estos de aquí, puedes hacer lo que quieras. Se puede cambiar el icono. Se puede cambiar la resolución. Y también se puede cambiar la imagen de splash, que como dije, si hacemos clic en Preview, podemos verla en realidad. Es una imagen que Unity muestra cuando comienzas un juego como este, con lo que estoy realmente contento. Creo que eso es todo bueno por ahora. Así que voy a dejar esos ajustes predeterminados y en realidad simplemente comenzar con la construcción de mi juego. Lo construimos para 64 bits y voy a hacer clic en Construir. Bill va a abrir el Explorador de archivos. Llego a elegir dónde poner mi juego. Ahora bien esta es la carpeta donde está todo mi proyecto, así que voy a crear una nueva carpeta dentro de esta llamada que construye. Y voy a hacer doble clic sobre eso y usar esto como carpeta para construir mi juego. Y eso va a iniciar este proceso completo construyendo todo mi juego. Ahora bien, esto lleva algún tiempo, sobre todo dependiendo de lo rápido que sea tu computadora. Pero solo en general, este es un proceso bastante intensivo. Solo espera esto, debería tomar en cualquier lugar 1-2 minutos, dependiendo de qué tan grande sea tu proyecto. Para mí, puede que no lleve demasiado tiempo porque no es un juego muy grande. Pero dependiendo como dije de tu proyecto y todo lo demás y también de todo nuestro post presionando que hemos agregado, podría tomar un tiempo compilar. Simplemente siéntate aquí y no toques demasiado en tu computadora porque está ejecutando bastantes procesos en este momento. Ahora, después de un tiempo, la mente tardó 65 segundos. Deberías tener este archivo por aquí, que se crea con el nombre de tu proyecto. Y este es en realidad el archivo ejecutable que puedes usar para ejecutar tu juego si vas por aquí a construir. Si hacemos doble clic en este archivo, en realidad vamos a cargar nuestro juego. Ahora antes de hacer eso, solo quiero decir un descargo de responsabilidad de que la primera vez que cargues el juego, podrías tener algunos problemas de relación de aspecto. Por ejemplo, en realidad, si tuviera que cargar esto ahora, estoy casi bastante seguro de que me dejaría probarlo y verlo. Porque esto es lo último que tenemos que arreglar para nuestro juego. Y efectivamente, ahí tienes. Tenemos algunas cosas que en realidad no están exactamente donde deberían estar. Vamos a entrar en el juego. Y la forma en que vamos a arreglarlos es eligiendo un aspecto de aquí, 1920 por 1080. Y voy a seguir adelante y deshacerme de mi cortina solo para poder ver las cosas. Esto me va a permitir cambiar el tamaño de todo y moverlo, así que debería ser la orientación exacta que quiero Voy a mover estos a un lado así. Eso debería ser bueno. Voy a mover esta nube por allá. De hecho, creo que también podría necesitar aumentar el engendro a tiempo para el comienzo Voy a hacer esto 20 en su lugar. Ahora necesito obviamente aumentar el tamaño de estos también. Los corazones y los diamantes son ambos ahora del tamaño incorrecto en cuanto a píxeles. Sigamos adelante y escalemos esos un poco. Vamos a ver de dónde los tenemos. Dependiendo de tu computadora y cuánto hayas seguido, exactamente lo que he hecho. Puede o no tener este problema, simplemente le pasa a su computadora puede que no. Realmente depende. Pero como dije, si vas al juego y cambias esta configuración por aquí, puedes construir el juego con cuatro resoluciones diferentes. Lo estoy construyendo para 1920 por 1080 en este momento. Déjame solo asegurarme de recitarlo correctamente solo para obtener como una vista general Ni siquiera está cerca. Vamos a recurarlo un poco más. A ver. Yo diría que eso es bastante bueno. Sigamos adelante y pongamos esto de nuevo donde estaba arriba en la parte superior de aquí. Pon esto por aquí también. Y luego vayamos a mi mostrador. Muévelo allí y escale esto un poco también. Sobre eso debería ser bueno. Ahora. Obviamente solo vamos a tener que probar obviamente nuestras animaciones de interfaz de usuario también ya que las hemos movido. Entonces veamos cómo se ven esos. Se desvanecen, Sí, obviamente ahora son las posiciones equivocadas, así que solo vamos a tener que establecer las posiciones de salida por ahí y por ahí. Y entonces el desvanecido en las posiciones ahora va a tener que estar por aquí. Y por aquí debería ser bueno por ahora. Vamos a asegurarnos de que tenemos los mismos ajustes, 880 y menos 772 para la estática, que deberíamos poder ver si la jugamos ahora. Y entonces fuera de vista realmente no importa, pero tienen que estar fuera de vista obviamente. Sigamos adelante y movamos esos también. Ahora bien, este proceso de escalado del juego lleva algún tiempo. Hay una posibilidad de que terminemos aquí, hay una posibilidad de que no. Pero la única manera que podemos hacer es si lo construimos y ejecutamos nuevo y probamos para ver si tenemos algún otro problema o cualquier otra cosa que necesitemos arreglar. A ver, ahora lo cargamos. De hecho se ve bastante bien hasta ahora. Podemos hacer click en estos botones y todo parece estar funcionando. Mi conductor gráfico piensa que es un juego, que supongo que lo es. Se puede ver por allá. En realidad, todo parece estar funcionando bien. En mi caso, lo único que necesito cambiar fue esa configuración, y el resto de mi juego en realidad está funcionando muy bien, lo cual es bastante genial. Como dije, podrías ser diferente dependiendo de cuánto hayas cambiado tu relación de aspecto y cuánto hayas seguido. Pero es genial que este tipo de juego sea algo así de fácil de batir juntos Quiero decir, obviamente no es fácil y cuanto más tipo de código, más difícil más fácil se vuelve. Pero poder hacer algo como esto sin ser desarrollador demasiado experimentado es bastante genial en mi opinión. Yo sólo quiero decir una masiva. Gracias a ustedes por apoyar mi curso y por comprarlo y por hacer este juego. Y espero que estés muy contento con lo que pudiste hacer y que hayas aprendido bastante a lo largo de todo el proceso. En cualquier momento, si necesitas ayuda con cualquier cosa con errores o cualquier problema con tu juego que tengas, puedes usar cualquier forma de discusión en esta página del curso o dejarla en una reseña, Lo que quieras hacer de todos modos. Un enorme agradecimiento nuevamente por comprar este curso y espero que estés muy contento con lo que pudiste hacer. Y no hay siguiente video, así que no voy a poder decirte qué vamos a hacer a continuación, pero espero que si decides desarrollar juegos como hobby o incluso como carrera, seas capaz de hacer algo realmente, realmente genial. Gracias de nuevo por comprar este curso, y realmente espero que no lo hayan gustado. Salud.