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.