Transcripciones
1. Introducción: Hola a todos, aquí Chris. Y este curso les voy a presentar el motor de juego del gueto a todos ustedes
ayudándoles a crear un prototipo de juego de plataformas 2D en funcionamiento desde cero. Uno de los grandes focos del curso es crear una plataforma,
un controlador que pueda manejar muchas acciones clásicas de juego de plataformas como el doble salto mientras saltas y ataques de rebote. Para los enemigos, podemos configurar patrones reutilizables
simples como movimiento waypoint y ataques de proyectiles. Manejar capas de física, colisiones y desencadenadores de área ingresada o izquierda es otra área de codificación importante para que los objetos correctos desencadena ciertos eventos a ocurrir. Por ejemplo, el enemigo de RB solo dispara al jugador gracias a usar físicamente para construir niveles fuera que las herramientas de mapa de azulejos y Godot nos son bastante útiles. Puede usar el mosaico automático para construir rápidamente niveles para las pruebas. todo, he intentado que el curso cubra la mayor parte de lo que podría DO tiene que ofrecer fuera de la caja, incluyendo señales, creación de
UI, manejo de árboles de animación, herencia como patente de codificación, y datos globales a través de guiones singletons. Entonces si quieres empezar con Game Development, quieres aprender un motor de juego gratis Pero actualmente en evolución, necesitas ayuda para construir un clásico juego de plataformas 2D o solo quieres divertirte un poco, entonces espero verte en el primer video es mi curso donde vamos a empezar configurando la configuración de nuestros proyectos y luego saltando a hacer mapas de azulejos.
2. Configura Godot e importa el arte de la aventura de Pixel: Entonces en este video, básicamente
vamos a pasar por los pasos de configurar Godot, agarrar nuestros activos e importarlos a nuestro nuevo proyecto. Entonces en primer lugar, si no tienes ya Godot, puedes recoger Godot en Godot Engine.org slash download. Y puedes ver que hay versiones para Windows, Mac y Linux. Así que sólo tienes que seguir adelante y descargar e instalar la Virgen que necesitas, como lo harías con cualquier otro programa. Además, si tienes vapor, ese es otro lugar que puedes conseguirlo, como si descargaras un juego en Steam. También puedes instalar Godot desde ahí. Entonces solo para señalar en este curso, vamos a estar trabajando con Godot 3.3.3. Y personalmente estoy usando la versión universal de 64 bits de Godot en silicio de Apple. Por lo que aparte de eso, vamos a necesitar algo de arte para el proyecto. Entonces una gran opción que podemos usar para crear un juego de plataformas simple como vamos a estar haciendo es pixel adventure. Por lo que puedes conseguir esto en cada punto io si buscas pixel adventure, o si vas a un pixel rana dash Activos dot, dot slash, pixel dash, adventure dash one. Además de eso, también hay 20 personajes enemigos a los que puedes descargar con pixel adventure, que es un segundo, y puedes recoger ambos de esos en cada punto io. Entonces voy a estar importando ambos al proyecto. Es solo para que lo sepas, de dónde estamos sacando nuestros activos. Pero al final, esto es justo lo que estoy usando para hacer demo para el curso. Puedes usar lo que sea que nuestros activos quieras al final, tal vez hagas prototipos con nosotros y luego lo pongas en tu propio arte más tarde. Entonces cuando inicies ventana por primera vez, es posible que veas algunos proyectos, pero vamos a estar creando un nuevo proyecto. Entonces por aquí a la derecha tienes un nuevo botón de proyecto. Voy a hacer clic en eso y luego voy a navegar por donde mi computadora me gustaría crear ese proyecto. Así que presiona este pequeño botón Browse por aquí
y estaré usando, y estaré usando este camino para mi proyecto, pero básicamente puedes guardarlo donde quieras. Ahora tenga en cuenta que aquí tengo mi proyecto de referencia, pixel adventure projects. Entonces sólo voy a estar llamándolo igual y lanzando un guión tutorial al final, ya que esta va a ser la versión de seguimiento de ese mismo proyecto. Entonces sigamos adelante y seleccionemos la carpeta actual. Y ahora necesitamos darle un nombre de proyecto y crear una carpeta dentro de este directorio para el proyecto. Entonces llamémoslo pixel adventure, project dash tutorial. Y voy a hacer crear carpeta. Puedes llamarlo como quieras. Y estoy usando OpenGL ES 3 es el renderizador, no
he tenido ningún problema con él hasta ahora. Entonces sigamos adelante y golpeemos crear y editar. Y así es como se va a ver Qdot la primera vez que arranques tu proyecto. Y notarás que esto es obviamente una vista 3D. En la parte superior, en realidad podemos cambiar a 2D, que es lo que vamos a estar usando para básicamente el resto del proyecto. Por lo que antes de importar todo el arte al juego, debemos establecer los ajustes por defecto para cualquier arte que sí importemos al juego para que se muestre correctamente. Entonces si fuera a dar clic en este icono punto PNG y cada proyecto de Godel que se debe un logo. Podemos pasar a la pestaña de importación y podemos ver que esto es importando como textura. Por lo que queremos establecer los predeterminados para que la textura sea un píxel, nuestra configuración predeterminada. Entonces si hacemos clic en preset aquí, notarás píxeles 2D, una de las opciones. Por lo que si haces clic ahí, verás que ciertas opciones como el filtro se va a apagar. Por lo que el filtro normalmente haría que tus imágenes se difuminaran alrededor de los bordes para que no vieras los píxeles como nítidos y todo se difuminara juntos. Entonces no queremos que para el juego en pixel que quieras que cada uno de
los pixeles sea claramente reconocible como el color en el que fue coloreado. Y así queremos píxel 2D como predeterminado para todas las imágenes que traemos al juego. Por lo que no necesitamos golpear V importante para este ícono en particular. Probablemente no va a estar usándolo como un real nuestro activo aquí. Pero sí queremos cambiar la preconfiguración en la parte superior y luego establecerla como predeterminada para la textura. Entonces esto va a significar que estos ajustes que tenemos aquí justo acaban de copiarse a los predeterminados que se van a cargar por cada imagen que traemos al juego por defecto. Y ten en cuenta que incluso en un juego de pixel art, podría
haber algunas imágenes que en realidad no quieres tener estos presets. Por lo que me limitaría a establecer el preset como lo que va a ser la mayoría de tu arte. En este caso, eso va a ser píxel 2D para pixel art, personajes y conjuntos de teselas y todo eso. Entonces sigamos adelante y llevemos nuestros expedientes. Y ahora quizá queramos agregar una carpeta en este proyecto para almacenar todos los activos artísticos. Por lo que podemos crear uno en el sistema de archivos inferior izquierdo haciendo clic derecho en esta carpeta de recursos, que es básicamente donde creamos nuestro proyecto y otra ruta hacia eso. Así que vamos a hacer clic ahí y hacer nueva carpeta. Y yo sólo voy a llamar a este arte y golpear OK. Por lo que ahora podemos navegar a donde tengamos nuestros activos que queremos utilizar para el juego. Ya he ido adelante y extraí el pixel adventure 1 y pixel adventure nota de Tupac que cuando extraigas pixel adventure uno, la carpeta podría llamarse libre. Cambié el nombre de eso a pixel adventure 1. Y pixel adventure to se llama así por defecto. Entonces ahora queremos básicamente copiar estos en el proyecto para que podamos usarlos. Una forma sería simplemente arrastrar y soltar desde tu Explorador de archivos a Godel. Y puedes simplemente arrastrarlo a esa carpeta de ahí, pero es posible ponerlo en el lugar equivocado en caso de accidente. Y siempre que muevas carpetas y Godot, va a tener que reimportar. Todos esos son activos los cuales pueden tardar un poco, por lo que es mejor ponerlo en el lugar correcto y el primer intento, así que voy a seleccionar estos y voy a copiarlos. Simplemente puedes arrastrar un cuadro y luego hacer clic derecho y copiar, o puedes seleccionarlos y presionar Control C Si necesitas. Y pasemos a la carpeta del proyecto Godot. Entonces tengo esa almacenada y esta carpeta Tutoriales, y luego tenemos el proyecto aquí. Para que podamos ver la carpeta de arte que acabamos de crear. Van a entrar ahí y luego voy a pegar los nuevos activos aquí. Entonces ahora, en cuanto haga clic de nuevo en Godel, podemos ver que se va a reimportar. Se trata de activos aplicando los predeterminados por cómo debe mostrar y Godel por ejemplo. Entonces si abrimos arco y pixel adventure ahora, podemos entrar en personajes principales. Voy a estar usando la rana Ninja como protagonista de este curso. Entonces si arrastramos una de estas hojas de cálculo a la pantalla ahora, deberíamos poder verlo con la configuración adecuada para Pixar it. Entonces, arrastremos a este inactivo. Voy a Controlar la rueda media del ratón y acercar mucho y se asegura de que estos píxeles estén mostrando nítidos. Entonces cuando estás muy acercado así, no
deberías ver ninguna borrosa. Deberías poder decir claramente a cada color que se encuentran
estos píxeles y dónde está la ubicación de cada píxel. Ese es el look que generalmente quieres cuando estás haciendo juegos de estilo pixel art. Entonces me alejaré y también podemos confirmar que los ajustes son correctos porque si hacemos click en inactivo y si vas a la pestaña de importación en la parte superior izquierda, puedes ver que este ídolo, 32 por 32 PNG se está importando con filtro apagado? Ahora, cuando creas el proyecto y Godel, eso está encendido por defecto. Entonces esa es una forma en que sabemos que hemos establecido el valor predeterminado para píxel 2D para importar imágenes. Entonces en este punto hemos creado un proyecto y hemos traído el pixel art con la configuración de importación correcta. Por lo que en el siguiente video, sólo estaremos haciendo un par de requisitos de configuración más para este proyecto antes de empezar a crear nuestros niveles de juego.
3. Proyecto de configuración para el arte con Pixel (tamaño de la ventana, el estirado): Por lo que antes de empezar a trabajar en los niveles de nuestro juego, vamos a necesitar cambiar un par de ajustes sobre la ventana del juego para que cuando estemos probando el juego, se muestre un poco más apropiadamente. Entonces en primer lugar, vamos a necesitar crear una escena para que podamos cargar esa escena como punto de partida para el juego. Entonces ahora mismo tengo la imagen de sprite que acabamos de traer a esta ventana principal aquí. Y notarás que en la escena de arriba a la izquierda, eso contiene el sprite. Por lo que una escena va a ser cualquier nodo y Godel más cualquier nodo anidado debajo de eso. Por lo que un personaje puede ser una escena, un nivel puede ser una escena, y las escenas pueden tener instancias de otras escenas. Para que pudieras poner un montón de escenas enemigas en un montón de personajes, escenas en una escena nivelada para que todo se junte. Y una vez que comienzas a usar, se vuelve bastante intuitivo. Por lo que sólo vamos a tomar este brillante y guardarlo
como escena para que podamos cargar eso como punto de partida para nuestro juego. Entonces voy a golpear Control S o Command S. Y vamos a poner esto como nivel uno, y lo voy a crear en una carpeta nueva. Así que digamos Crear carpeta en la parte superior derecha. Y esta nueva carpeta va a ser mapas o niveles, sea cual sea tu cabeza. De acuerdo, y vamos a salvar esta escena dentro de ahí. Entonces por ahora, esto realmente no tiene sentido como un dicho de nivel, no te preocupes por ello. Eso lo cambiaremos más tarde. Y subamos al botón de reproducción en la parte superior derecha. Para que puedas, así que aquí arriba y podemos seguir adelante y golpear Play the project. Pero si no hemos definido una escena, podemos seleccionar una escena como punto de partida para nuestro juego. Entonces vamos a seleccionar al jugador una escena. Entonces esto está en el directorio de Mapas y solo estoy cargando este n. también
puedes subir un nivel si necesitas seleccionar la carpeta correcta. Entonces, solo hagamos doble clic en eso. De acuerdo, y ahora el juego debe comenzar con esa escena. Y nuestra hoja sprite se está mostrando aquí bastante bien. El sentido de que no hay borrosas de los píxeles. Entonces eso sigue siendo lo que queremos ver. Pero son bastante pequeños los tamaños de este personaje. Por lo que en realidad queremos que parezca más grande en la pantalla. Ahora que lo hemos probado, conocemos el problema. Vamos al menú del proyecto en la parte superior izquierda y a la configuración del proyecto. Y podemos seguir adelante y encontrar los ajustes para esto. Entonces como pueden ver, ya estoy aquí y escaparate. Pero si no lo ves de inmediato, puedes dar click en el cuadro Buscar por aquí en la parte superior izquierda y escribir en ventana que filtrará las categorías hacia abajo para que tengas menos para elegir. Alternativamente, si estás aquí arriba en la aplicación, simplemente desplázate hacia abajo para mostrar la ventana. Y aquí vamos a tener la configuración que necesitamos cambiar. Entonces por ahora, va a estar tomando el ancho y la altura y configurando eso a 320 de ancho por un ancho de 180 píxeles. Entonces eso podría parecer realmente bajo porque piensan que la mayoría de la gente va a tener pantallas que son al
menos 1920 por 1080 píxeles en estos días, tal vez más grandes que eso. Entonces esa es una resolución realmente baja. Entonces lo que haces es realmente tener el ancho y la altura de la prueba, una resolución más alta. Y luego tomas este ancho y alto y lo escalas hasta el ancho y la altura de prueba. Y debido a que tenemos la configuración de píxeles 2D para nuestros sprites importados, aunque la estamos escalando, no
debería ser borrosa ni distorsionada ni nada por el estilo. Entonces tomemos el ancho y la altura de prueba y lo hagamos 12, 80, y luego 720 píxeles. Por lo que este debería ser un tamaño de prueba decente, ventana de cuatro horas. Entonces un último ajuste que necesitamos cambiar aquí abajo en la parte inferior es estiramiento. Aspecto está configurado para ignorar. Está aquí abajo bajo estiramiento. Por lo tanto, el modo se establece en deshabilitado. Queremos cambiar eso a 2D. Por lo que va a estar haciendo estiramientos 2D por defecto de nuestro tamaño pequeño hasta el tamaño grande. Entonces si cerramos esto ahora, pulsa Control S para guardarlo todo y volvamos al botón Play otra vez. Haga clic en eso. Y cuando carguemos el juego, esta vez, verás que los personajes son mucho más grandes. Creo que básicamente tomamos la imagen y la escalamos cuatro veces en la pantalla. Entonces esta es una ventana de 1280 por 720 píxeles, pero básicamente está mostrando el juego real a cuatro veces el tamaño. Entonces en un monitor grande, esto tiene mucho más sentido. Por lo que en realidad se pueden ver los personajes. Entonces esa debería ser la última de la configuración básica para nuestro proyecto que vamos a necesitar. En el siguiente video, podemos empezar a trabajar en construir un fondo para el nivel.
4. Hacer un fondo telado repetitivo: Entonces en este video, Empecemos a crear nuestro nivel comenzando con una textura de fondo repetida. Entonces cuando vas a usar una imagen como textura de fondo repetida, hay una bandera que necesitas encender para esa obra de arte. Entonces si entramos en el directorio de arte y pixel adventure one o dondequiera que tengas eso guardado. Y luego entramos en segundo plano, verás algunas texturas diferentes que podemos usar para el fondo. Yo puedo traer uno aquí y se puede ver un poco que este azulejo se va a repetir una y otra vez. Entonces lo que queremos hacer por esta imagen y todas
las diferentes versiones en color de la imagen
bajando a amarillo es pasar a la pestaña de importación. Y por aquí podemos ver leer sobre filtro. Hay una casilla de verificación para repetir. Queremos convertir eso en habilitado. Y cuando hacemos eso, esta bandera se comprueba automáticamente para que podamos reimportar estos activos. Por lo que ahora estas funcionarán como texturas repetibles. Entonces para conseguir una textura que se repita a través de la pantalla, hay
que hacer clic en la textura. Después vas a región, y luego vamos a querer habilitar región aquí. Entonces esto ahora básicamente va a tomar el azulejo de textura y estirarlo por una región. Y debido a que la bandera de repetición está encendida para estas texturas, la
va a atar en lugar de simplemente estirarse. Por lo que ahora solo necesitamos establecer un tamaño para el fondo. Entonces ancho y alto aquí a la derecha, W y H. Y vamos a darle sólo a eso un tamaño que debería ser lo suficientemente bueno para nuestro nivel. Realmente tan grande como quieras, está bien. Podríamos simplemente hacerlo 1000 por 1000 pixeles. Y son básicamente, tienes una base de fondo repetida que puedes usar para tu nivel. Entonces ahora solo arrastramos esto a cualquier posición que necesitemos y estaremos más o menos bien para ir. Algo a tener en cuenta sobre crear el fondo de esta manera es que no quieres usar las herramientas de escala si necesitas ampliar aún más el fondo. Si agarras la báscula, en el borde de este sprite y lo estiras, todavía va a estirar la imagen. Entonces si necesitas una larga carrera, deberías venir aquí a la región y agregar algunos píxeles extra aquí. Por lo que 1200 con, se puede ver el expandido sin tener ningún estiramiento. Simplemente agrega más azulejos y que es lo que queremos. Entonces limpiemos un poco más el nivel. Entonces a continuación voy a hacer clic derecho en el sprite inicial, que estaremos quitando en un minuto y agregando un nodo hijo. Y este nodo hijo sólo va a ser como nodo simple 2D. Entonces este es básicamente un nodo genérico y podemos usar eso como la raíz de nuestra escena. Por lo que todo lo que realmente entra en escena simplemente estaría anidado debajo de ella. Vamos a crear eso. Y ahora podemos tomar este nodo y en realidad convertirlo en la raíz de esta escena de nivel. Entonces voy a hacer clic aquí y voy a hacer root de escena. Entonces ahora esta imagen de sprite ídolo está anidada debajo del nodo 2D y el fondo azul está anidado debajo de eso. Entonces me voy a llevar el fondo azul. Voy a presionar el botón izquierdo y arrastrarlo y ponerlo encima del nodo 2D. Por lo que ahora no hay hijos de esta lámina de sprite ídolo. Y podemos eliminar eso haciendo clic derecho sobre él y haciendo cortar o eliminar nodos. Entonces, vamos a seguir adelante y deshacernos de eso. Y ahora finalmente, podemos tomar el nodo 2D y solo voy a
renombrar esto al nivel 1 para que coincida con el nombre del archivo guardado. Y quizá el fondo. Simplemente renombraré este fondo para que más
o menos nos consigamos configurados hasta el punto en que podamos empezar a
agregar en algún terreno real paraque
un personaje se agregar en algún terreno real para pare y plataformas y todas esas cosas. Entonces sigamos adelante y golpeemos control o comando S, guardemos el nivel, y eso será todo para este video. Y en la siguiente se estará construyendo el suelo donde los personajes pueden estar parados.
5. Tilemaps y tamices para la construcción de niveles: En este video, vamos a estar trabajando con mapas de teselas y conjuntos de colas fin de crear el terreno donde nuestro personaje se va a poner de pie. Entonces dentro de nuestra escena de nivel uno, arriba en la parte superior izquierda, voy a hacer clic derecho aquí y añadir un nuevo nodo hijo. A éste se le va a llamar mapa de teselas. Por lo que solo puedes escribir mapa de teselas para encontrarlo y presionar Crear. Por lo que este mapa de azulejo es, podemos ver en el lado derecho, va a necesitar un conjunto de teselas. Por lo que el conjunto de cola se va a crear a partir de imágenes en nuestro proyecto, y eso va a ser específicamente las imágenes de tamaño de mosaico. Entonces está el archivo de título que existe aquí y Godel. Y luego es la imagen real de donde ese conjunto de cola está sacando de sus azulejos. Entonces vamos a dar click en la sección vacía para azulejo cierto hit nuevo Tulsa. Entonces esto podemos hacer click en, y cuando lo hagamos, hay una nueva ventana aquí abajo en la parte inferior llamada conjunto de teselas. Por lo que necesitamos agregar una imagen aquí para empezar a escoger los azulejos de esa cola. Entonces imagen, para que podamos encontrar las imágenes adecuadas para crear los mosaicos desde la categoría terreno dentro de nuestro pixel adventure one pack. Entonces podemos ver desde la miniatura hay en realidad un montón de terrenos diferentes que podemos usar aquí. Y existen en una sola imagen. Vamos a seguir adelante y haga clic con el botón izquierdo y arrastre esto a la lista de nuestro conjunto de teselas. Cuando hagamos eso, y veremos que la imagen se expande un poco más aquí abajo. Y puedes mantener pulsado Control y desplazarte en la rueda central del ratón para acercar y alejar el zoom. Por supuesto, también puede acercar y alejar por ahí a la derecha. Por lo que queremos que esto sea lo suficientemente grande en la pantalla como para que podamos identificar claramente
los mosaicos con los que estamos trabajando. Por lo que hay tres tipos de fichas que podemos crear para nuestro conjunto de teselas. Ahí está el nuevo mosaico único, que básicamente va a definir una región aquí dentro,
que es un azulejo en el que puedes hacer click izquierdo la derecha aquí cuando estés pintando tus azulejos y luego solo haz clic izquierdo y ponerlo en el mapa. Entonces esa es la opción más simple. También hay nuevo arte o azulejo estará trabajando con eso en este video. Por lo que el mosaico automático, básicamente
puedes definir un conjunto de teselas. Y luego puedes crear una máscara de bits para esos mosaicos en la BitMask determina qué mosaicos deben bordear las otras fichas. Entonces en cierto sentido, se
puede hacer para que éste de aquí a la izquierda, se
puede ver que este obviamente es un azulejo de extremo izquierdo. puedas hacerlo para que esta sea la que
siempre está al final configurando máscaras de bits, lo cual básicamente está creando las reglas de cómo deberían estar esos mosaicos al lado del otro. Y luego también hay un nuevo Atlas, que puedes definir todo un montón de fichas. Y luego conseguirás una lista por aquí a la derecha. Simplemente puedes seleccionar el que quieras. Antes de empezar a hacer eso sin embargo, vamos a dar click en el mapa de teselas. Entonces a la izquierda aquí escena. Y queremos ir a vender y asegurarnos de que el tamaño de celda esté establecido en 16 por 16, ya que ese es el tamaño de nuestras fichas y el juego. Por lo que configuramos el 16 por 16 aquí para que coincida con el tamaño de azulejo diseñado de la obra de arte para que todo coincida correctamente. Entonces podemos volver a hacer clic en conjunto de teselas y en realidad podemos ver que
perdió un poco su referencia al terreno aquí ya que no lo guardamos exactamente. Por lo que una idea decente podría ser en realidad hacer clic en mapa de azulejos aquí. Y luego con esta ficha puesta a la derecha, podemos hacer click en este pequeño desplegable y guardar el conjunto de teselas en un archivo. Por lo que esto lo hará para que puedas referenciarlo en cualquier mapa de teselas. Y los datos serán básicamente duramente guardados dentro del proyecto. Entonces voy a seguir adelante y guardar eso aquí. Y supongo que lo pondré en la categoría de mapas. Y seguiré adelante y llamaré a este pixel adventure terrain. Entonces veremos que el nombre de esto cambió al nombre
del archivo guardado como punto aquí, extensión IaaS. Por lo que aún podemos abrir esto y editarlo. Y creo que si entras a la carpeta de mapas, también
puedes hacer doble clic en ella aquí para abrir lo mismo. Por lo que básicamente el lado de la cola se guarda en su propia ubicación ahora y ya no está incrustado en el mapa de teselas directamente. Por lo que podemos sumar el terreno aquí. Sólo voy a arrastrar eso y otra vez, y esta vez sigamos adelante y golpeemos nuevo auto tile. Entonces vamos a tener que definir una región para esto son una de
las características realmente útiles es esto habilitar Snap aquí. Por lo que podemos ver que esto nos permitirá encajar en la cuadrícula. Entonces si hacemos clic izquierdo aquí una vez, eso va a definir una región, y luego podemos cambiar la configuración para que realmente podamos obtener los tamaños deseados. Por lo que a la derecha, aquí
tenemos opciones de snap. Por lo que Este es el número de píxeles a los que quieres encaje en cuanto a pasos que puedes hacer este 16 por 16. Creo que te voy a mostrar que vas con, digamos cuatro por cuatro esta vez. Por lo que se puede ver que la cola está básicamente rota en esta pequeña cuadrícula de píxeles. Y siempre que necesitemos hacer ajustes, como, por ejemplo, crear las formas de colisión más adelante, se puede ajustar a cualquiera de esas intersecciones en esta cuadrícula de cuatro por cuatro píxeles. Entonces creo que eso va a funcionar bastante bien. Y después hemos seleccionado azulejo. Queremos cambiar el tamaño del subtítulo a 16 por 16 aquí. También noté el modo OTA o máscara de bits, para que no tenga un modo de máscara de bits va a ser importante cuando estés determinando. Básicamente, cuando descompongas tu azulejo, cuántas esquinas hay que puedes asignar una máscara de bit dentro o fuera del valor dos. Entonces si tienes dos por dos, entonces eso significa que cada azulejo se rompe en cuatro BitMask potenciales. Y también hay tres por 33 por tres mínimo, lo que te imaginas te da nueve subtítulos de máscara de bits por mosaico real. Entonces para estos, vamos a estar trabajando con un dos por dos. Estos son azulejos más simples por aquí. Y creo que estos también lo son. Pero cuando lleguemos aquí a la derecha, estos van a necesitar, creo que tres por tres mínimo, pero voy a volver a comprobar eso más adelante. Por lo que ahora necesitamos redefinir la región cuatro, Nuestra primera. Por lo que ahora necesitamos redefinir la región para nuestros primeros automosaicos. Entonces podemos ver aquí que aquí tenemos cuatro cuadrados, y son del tamaño correcto, 16 por 16, gracias al tamaño del subtítulo. Pero en realidad vamos a necesitar hacer click izquierdo aquí arriba en la parte superior y luego arrastrar esto sobre toda nuestra región de bloques de piedra. Entonces voy a acercarme un poco, asegurarme de que todas las esquinas coincidan para que veas
lo que se define como la región porque esa es esta línea verde que delinea todo. Tus azulejos son básicamente dondequiera que estas líneas verdes se cruzan. Y así debería ser como se ve ahora mismo. Entonces estamos haciendo una BitMask dos por dos. Entonces va a ser realmente sencillo. Entonces voy a entrar en modo máscara de bits y esto configurará el mosaico automático. Entonces para este azulejo, vamos a necesitar que se vea así. Por lo que solo puedes hacer clic con el botón izquierdo y mantener presionado y arrastrar el cuadro rojo donde necesites que esté. Entonces mi comprensión de la máscara de bits en Godel es que donde
tienes una máscara de bits habilitada con el cuadrado rojo va a estar determinando dónde esta loseta bloquea a otras fichas para ver si coincide con la máscara de bits con el fin de determinar si hay debe ser el azulejo que se elija. Por lo que en este caso al ser una esquina superior izquierda, tiene una a la parte inferior derecha. Entonces va a estar buscando tanto a la derecha como a la baja para ver si hay azulejos ahí. Entonces en ese caso, si coincide tanto hacia abajo como hacia la derecha, entonces puede ser un azulejo de esquina en esta pieza. Entonces en este caso, si encuentra un azulejo hacia abajo y hacia la derecha, entonces se puede registrar como el azulejo correcto para ser seleccionado automáticamente. Pero también están las áreas donde está la
BitMask que hay que tomar en consideración. Por lo que en este caso, sólo se seleccionaría si abajo y a la derecha medio azulejo. Pero también en este caso que no hay nada a la izquierda. Como ves la máscara de bits en la parte superior izquierda y la inferior izquierda están desactivadas y también nada arriba. Entonces si tenemos dos máscaras de bits habilitadas en una dirección para una máscara de bits de dos por dos, entonces eso va a significar que va a mirar directamente hacia abajo en lugar de hacia la derecha y hacia abajo. Y si tienes habilitadas las máscaras de cuatro bits, entonces esta onda cuadrada básicamente tiene un fondo negro solo se va a seleccionar si está rodeada en todas direcciones por otras fichas de este título auto específico. Por lo que sólo los mosaicos que se seleccionan de este mosaico automático van a dar cuenta para seleccionar qué azulejo se selecciona. Entonces si después pones, digamos una de estas piezas a su lado, que es un autoazulejo totalmente diferente. No va a tener influencia alguna en que se seleccionen estas fichas. Sólo estas fichas influyeron en las otras fichas de este azulejo automático. Por lo que para estas fichas a la derecha, se
puede ver que tres de cada cuatro de los puntos BitMask están marcados encendido y solo uno está apagado. Por lo que en este caso, estarías buscando que haya azulejos
adyacentes de este auto tail a la izquierda y arriba. Y creo que también la parte superior izquierda, si vas a las esquinas diagonalmente así, pero no habría uno al abajo y a la derecha en este caso porque este azulejo está apagado. Por decirlo de forma sencilla, cuando eres adulto Heil dibuja en tu mapa de juego, va a seleccionar el mejor ajuste de esta configuración de automosaicos. Así que idealmente cuando estés trabajando con BitMask, por lo que solo tendrías una configuración de máscara de bits para cada posibilidad dentro de cada máscara de bits. Observe que aunque cuatro de estos mosaicos tienen uno de cada cuatro de la BitMask en que están en todas direcciones diferentes por lo que nunca
obtendrás ninguna superposición con este sencillo mosaico automático. Entonces, por último, si vas al modo de máscara de bit adulto-niño, notarás que hay tres por tres mínimo y tres por tres como otra opción. Por lo que ambos van a tener nueve puntos de máscara de bits por azulejo, ya que son tres por tres, multiplicamos que obtienes nueve BitMask, lo que puedes tener uno en el medio. Y los usaremos más tarde para estas piezas de terreno por aquí. Y en realidad así como estas pequeñas plataformas. Entonces si hacemos click en el mapa de teselas ahora, veremos que nuestro azulejo de terreno está aquí para ser colocado en el guión. Entonces podemos simplemente seguir adelante y colocar algunos azulejos. Pero lo que notarás es que a menos que tengas al menos un dos por dos, la máscara de bits de dos por dos no puede funcionar. Entonces si solo vas directo hacia abajo y
alinearte así, solo vas a conseguir un azulejo seleccionado. Entonces, para que la máscara de bits de dos por dos funcione, realidad
necesitas tener al menos un cuadrado de dos por dos. Entonces podemos ver como empiezo a construir esto
fuera, simplemente salió funciona perfectamente y el centro se llena. Entonces con otros mosaicos, se vuelve realmente fácil crear diferentes formas sin tener que preocuparse por exactamente qué cola va a donde. Entonces, si puedes arreglarlo para ti mismo, Es bastante útil trabajar con y mostrarlos un poco. Otros mosaicos, me limitaré a quitar un par de estos puntos internos aquí y lo puedes ver. Simplemente tipo de obras. Entonces volvamos al azulejo sentado y creamos algunos azulejos extra. Entonces básicamente necesitamos repetir lo mismo para aquí abajo, éste, éste, éste, éste, y éste. Entonces podemos simplemente copiar y pegar un poco seis veces. Por lo que de vuelta en el conjunto de teselas, ve al modo región con el fin de ver los nombres de cada uno de estos autoteselas, voy a dar clic en este pequeño botón info del lado derecho. Por lo que se puede ver esto es terreno 16 por 16 azulejo. Entonces lo que tenemos que hacer es crear un nuevo mosaico automático y vamos a estar definiendo la misma caja que la región. Tan nuevo auto, haz clic en la parte superior izquierda, mantén pulsado y arrastra una caja alrededor de esta zona para nuestro segundo azulejo automático. Ahora, podríamos ir al modo de máscara de bits y definir todo. Una vez más, no sería difícil para este, pero aún más rápido, podemos simplemente hacer clic aquí en este mosaico automático y pulsar el botón Copiar para la BitMask, y luego dar clic aquí para éste y simplemente pulsar el botón de pegar, bien, pero sí no necesita ser 16 por 16 subtítulos tamaño primero. Entonces para encontrar eso aquí a la derecha para cada una de las regiones que creas, Hagamos un nuevo mosaico automático. Tendré que alejar un poco para poder verlo
aquí abajo y arrastrar una caja alrededor de ésta. Asegúrese de que el tamaño del subtítulo esté establecido en 16 por 16. Ahora podemos ir a BitMask y pegarlo en, ya que ya tenemos el de éste copiado en el buffer. Entonces eso son tres autoteselas creadas. Vamos a automatizar el mosaico, sigan repitiendo el proceso. Por lo que 16 por 16 bit Modo Máscara, péguela en. Nuevo azulejo auto, 16-bit, 16 bitmask, pégalo en y prácticamente te llega la idea. Entonces vamos a terminar este último aquí abajo. Entonces lo voy a pegar. Y sí, a veces 16 por 16, y eso debería ser bueno para esos. Ahora, la misma máscara de bits no va a funcionar para estos. Se puede ver que estas son un poco diferentes y estas pequeñas plataformas de barra también, creo que ésta en realidad sí tiene el mismo mosaico de ADL. Entonces vamos a crear uno más por aquí para eso. Entonces podemos probarlo un poco y asegurarnos de que funcione todavía. Entonces peguemos en la BitMask, y ahí vamos. Entonces ahora si hacemos click en el mapa de azulejo, podemos ver que tenemos siete terrenos diferentes. Por lo que seleccionar de. Entonces, solo empecemos a dibujar uno. Y se puede ver que cada uno de estos, porque se definen como su propia cola ADL, trabajan independientemente el uno del otro. Por lo que tener un título de auto junto a otro no va a afectar nada. Tenemos. Podemos simplemente poner este ladrillo ahí fuera. Y así también podemos dibujar algunos otros terranes aquí. Entonces, solo hagamos un dos por dos. Y ahí tenemos algo de tierra de tierra. Está bien. Entonces sigamos adelante y armemos un par de máscaras de bits más. Por lo que de vuelta en el juego de títulos, necesitamos definir las otras regiones de teselas para estas áreas. Entonces, arrastremos una caja alrededor llamada modo máscara de bits. Y esta vez en realidad vamos a estar usando una máscara de bits tres por tres, que tendrá sentido cuando realmente lo mires. Por lo tanto, cambia el modo de máscara de bits de neumático automático a tres por tres. Y creemos que queremos 16 por 16 como los sitios de subtítulos para la BitMask. Entonces si acercamos un poco, podemos empezar a dibujar esto. Entonces va a parecer para la parte superior. Por lo que podemos ver que este primer azulejo tiene un cuadrado en el centro y luego uno a la derecha. Y por supuesto esto nos da 9 cuadrados de máscara de bits totales dentro de un solo azulejo. Entonces si llamamos al centro,
uno, básicamente significa ahí, está buscando a sí mismo para ser un azulejo y el SAT, y entonces también la BitMask la derecha significa que también va a estar buscando a los cuatro azulejos correctos. Entonces si está al final, se va a contar para ese medio. Y luego si hay una cola a la derecha, va a igualar eso. Y entonces eso básicamente puede dejarte crear un papel de este tipo de azulejo simplemente teniendo estas piezas una al lado de la otra. Y entonces este sería el final, y este será el final y este sería el medio porque está buscando a la izquierda un azulejo y a la derecha un título también. Entonces tenemos éste aquí abajo, sólo un punto. Por lo que este será el azulejo cuando no haya otros azulejos alrededor, igual que un solo azulejo. Y entonces podemos arrastrar 16 cuadrados en el medio aquí, por lo que los de fuera no van a tener nada. Por lo que básicamente puedes usar esta forma para crear lo que ves aquí. Básicamente solo creando un cuadro de rotulación de dos por dos. Y luego para unas plataformas de arriba abajo, tenemos esto. Así que tipo de la dirección inversa para éste de aquí. Ir al mapa de azulejos. Podemos ver esto en juego. Si arrastro por aquí, podemos crear una pequeña plataforma. También podemos crear un dos por dos para tener ese tipo de bloque. Las individuales solo serán estas casitas. Y entonces por supuesto podemos hacer de arriba abajo también. Entonces para estos fines básicamente podrías ver que en la imagen de conjunto de teselas, funcionará bien para eso. Pero creando cosas como esta, no
creo que esas fichas estén realmente diseñadas para eso, pero si sabes de otra manera, siéntete libre de poner un comentario y puedo corregirme en eso. Pero básicamente, así es como pude conseguir que se configure para esa porción específica del mapa de teselas. Pero así es básicamente como fue capaz de configurarlo para esa porción específica del conjunto de teselas. Entonces volvamos a entrar aquí para el terreno del conjunto de teselas y podemos copiar esta máscara de bits hacia abajo a las otras fichas. Tan nuevo azulejo auto. Está creado aquí abajo, 16 por 16 en modo de máscara de bits tres por tres. Y vamos a subir aquí, copiar éste y pegarlo en el de abajo, y sólo repetir el proceso para los otros dos. Creemos esa máscara de bits, péguela y asegurémonos de tres por tres y 16 por 16, la información debe superponerse correctamente. Nuevo mosaico automático, arrastre la región, pero Modo Máscara, pega a ellos, cambió el modo de subtítulos tres por tres 16. Y eso básicamente establece de eso. Por lo que ahora están estos últimos tres azulejos de plataforma. Vamos a necesitar dibujar una región a su alrededor. Entonces sigamos adelante y hagamos eso. Asegúrate de que aunque la altura de la plataforma aquí sea de sólo unos 45 píxeles, que realmente hagas los 16 píxeles completos porque todavía se van a mosaico 16 píxeles por 16 píxeles con el resto del juego. O al menos así es como lo voy a hacer de todos modos. Entonces tomamos el modo de máscara de bits de mosaico automático y lo ponemos en 3 por 3 mínimo. Y el subtítulo tamaño 16 por 16. Y luego la máscara de bits se va a ver básicamente así. Yo creo. Entonces. Adelante y probémoslo en el mapa de teselas. Podemos hacer click en la plataforma y su dibujar una fila. Así que ten en cuenta que los extremos dicen en su lugar, si agrego otra pieza, el final se mueve hacia la derecha. Entonces eso es lo que queremos. Y esto funcionará siempre y cuando no pongas otra plataforma que es como justo debajo de ella, así. Mientras no estés haciendo eso, debería funcionar correctamente. Entonces creo que eso será suficiente para nuestros propósitos aquí. Ahora, volvamos a ese mapa de teselas. Voy a hacer doble clic en él y el terreno de la carpeta de mapas. Y vamos a copiar esa máscara de bits a dos nuevos autoteselas más. Por lo que nuevo auto título y seleccionamos una caja por aquí, ir al mínimo de tres por tres 16 por 16. Y luego máscara de bits, lo vamos a copiar de aquí a aquí. Entonces son básicamente iguales. Y luego, por último, la versión metálica. Vamos a crear esa pasta de máscara de bits de tres por 31616. Entonces esa va a ser la configuración de mosaico automático para todas estas baldosas de terreno. Ahora puedes llegar a la parte divertida donde si haces click en el mapa de teselas, tienes todas estas fichas de auto que puedes usar para construir tu propio nivel de juego con. Entonces, por ejemplo, si quiero algunas plataformas y tal vez esto podría ser usado para una plataforma de la que se puede saltar un poco hacia abajo. Si lo quisieras, solo pensando en el futuro. Si quieres crear algunos bloques largos, tienes eso, algunos altos, puedes hacerlo de esa manera. Y luego estos otros mosaicos se pueden utilizar para configurar el suelo base para tu personaje. Estos sólo tienen que ser por lo menos un azulejo de dos por dos para autoazulejar correctamente, así. Y deberías estar bien para ir. Así que puedes simplemente acumular lo que quieras probar ahora mismo. Y luego en los próximos videos comenzaremos a crear una plataforma o personaje simple que podamos usar para probar un poco este nivel hacia fuera. Entonces voy a decir por ahora y hasta el siguiente video, te veré entonces.
6. Configuración de las animaciones de jugadores: Entonces en este video, vamos a empezar a crear un personaje de jugador y una cámara. Entonces lo primero que vamos a necesitar hacer aquí es crear una nueva escena y que empiece con un cuerpo cinemático 2D. Por lo que voy a añadir esto a una nueva pestaña de escena aquí arriba en la parte superior. Y voy a dar clic en otro nodo porque quiero que la raíz sea un cuerpo cinemático 2D. Entonces si no lo sabes ya, un cuerpo cinemático 2D es básicamente un personaje de física que se moverá en base a las reglas que programes al código de guión. En otras palabras, mucho de cómo se mueve tu personaje va a ser manual. La otra opción sería crear un cuerpo rígido 2D. Y esos trabajan teniendo fuerzas actúan sobre el cuerpo lugar de controlar directamente el movimiento del personaje dentro de su guión. Entonces para juegos y juegos de rompecabezas basados en la física como, digamos Angry Birds, el cuerpo rígido tendría mucho sentido ahí ya que quieres fuerzas para actuar sobre el personaje. Pero si estás tratando de crear un juego de plataformas, cuerpo
cinemático 2D suele ser lo que vas a querer. Entonces sigamos adelante y empecemos por crear con este cuerpo cinemático 2D. Lo primero que voy a hacer es cambiarle el nombre a jugador. Y luego vamos a crear una carpeta para que los personajes se sientan. Por lo que eso incluiría al personaje principal del jugador. Los enemigos pueden ser PNJ, lo que necesites. Entonces voy a hacer clic derecho aquí abajo en el sistema de archivos y crear una carpeta llamada caracteres. Y ahora voy a golpear Command o Control S con el fin salvar
al jugador visto dentro de la carpeta de ese personaje. Entonces sigamos adelante y guardemos eso ahí dentro. Ahora, notarás que aquí hay un signo de exclamación y configuración del
nodo advierte de que este nodo
no tiene formas por lo que no puede colisionar ni interactuar con otros objetos. Por lo que tenemos que añadir una forma de colisión demasiado profunda a este jugador para que en realidad pueda colisionar con, digamos, el suelo u otros enemigos, así sucesivamente y así sucesivamente dentro del juego. Entonces voy a hacer clic aquí y agregar un nodo hijo. Por lo que queremos una forma de colisión 2D. Por lo que voy a añadir eso en. Y también nota aquí que la forma de colisión en realidad requiere que creemos un tipo de forma. Para que eso funcione. Eso haremos en un minuto. Entonces lo siguiente que vamos a querer es un sprite. Entonces voy a hacer clic aquí. Voy a añadir un nodo hijo. Y para este personaje específico, iremos con un sprite animado. Y la razón de eso es cómo estos packs configuran las láminas sprite. Entonces te mostraré lo que quiero decir con eso en un minuto. Pero por ahora, vamos sólo con sprite animado. Y dependiendo de cómo sean tus sprites específicos, el nodo sprite puede funcionar mejor que un sprite animado. Entonces empecemos a añadir las animaciones a este sprite animado. Y verás un poco de lo que estoy hablando. Por aquí a la derecha está esta sección aquí llamada marcos y vacíos. Por lo que queremos cambiar vacíos a unos nuevos marcos sprite. Entonces eso es algo en lo que podemos hacer click. Y cuando hacemos clic en los marcos sprite, la ventana aparece aquí en la parte inferior y podemos crear animaciones individuales. Entonces si miramos el arte para la rana ninja, que va a estar en el pixel adventure un pack, y luego personaje principal y luego rana ninja. Podemos encontrar, digamos nuestra animación ociosa por aquí. Entonces, cuando creas una animación para un sprite animado, solo
le das un nombre y puedes crear nuevas animaciones aquí arriba. Por lo que vamos a hacer agregar marcos de hoja sprite. Entonces si entramos en el arte, pixel adventure, uno, personaje
principal, rana ninja, y luego ociosos, podemos agarrar eso. Y así verás que por aquí para horizontal estará arriba, sólo tienes que especificar el número de columnas y luego verticales cuatro filas. Por lo que 11 por uno nos da 11 marcos sprite. Podemos seleccionar o borrar todos los marcos aquí y añadir 11 fotogramas. Por lo que eso funcionará realmente bien para este tipo de configuración donde cada una de tus diferentes animaciones de rota en su propia hoja sprite. Entonces mencioné, ¿por qué querrías usar sprite animado sobre el componente sprite? Bueno, vamos a añadir un componente sprite y te voy a enseñar a qué me refiero. Entonces vamos a sumar en los sprites y por ahora
solo esconderé el sprite animado haciendo clic en ese pequeño globo ocular. Iremos a la textura. Y luego puedes ver que podemos poner exactamente una textura aquí. Por lo que podría ser un paquete de láminas sprite. Entonces, por ejemplo, puedo poner inactivo aquí y se puede ver que los marcos se cargan muy bien. Entonces si ampliamos la sección de animación, se pueden
ver marcos horizontales y verticales para que podamos establecer filas y columnas como antes. Entonces creo que necesitamos 11 marcos horizontales, ¿de acuerdo? Y eso divide los marcos individuales. Entonces podemos ir a través de los marcos aquí y simplemente una especie de jugar nuestra animación. Por lo que podríamos animar usando este ajuste de marco. Pero el problema es que solo se puede tener una textura sprite. Si cambiamos esto por, digamos este salto, se
puede ver que sigue usando marcos horizontales, 11 por uno. Esta animación es completamente diferente. Solo tiene un marco, por lo que necesitaría cambiar este valor a uno. Y entonces cada vez que estamos tocando una animación, tendríamos que no sólo cambiar la textura, sino también el número de marcos horizontales y marcos verticales. Y especificando fotogramas individuales en la animación por la base de animación. Cuando sigamos adelante y creamos un reproductor de animación, que normalmente eso estaría bien si todo se condensara en un solo paquete, igual
que un solo archivo de textura. Y entonces solo puedes pasar por todos los marcos aquí y no sería problema. Pero debido a que están separados, sprite
animado sólo tiene más sentido aquí. Ambos harán el trabajo, pero si tienes diferentes animaciones que están separadas, entonces es mucho más fácil simplemente hacer clic en Agregar animación. Y vamos a correr aquí y arrástrelo y soltarlo. En realidad quieres presionar este botón para que puedas
dividir los fotogramas, luego haces clic en Ejecutar. Creo que tenemos 12 por uno aquí. Selecciona Borrar todos los fotogramas y la parte superior derecha agrega fotogramas y ahí está tu animación. Para que podamos comprobar que están jugando box a la derecha para ver cómo es nuestra animación. Esto es mucho más lento de lo que se supone que debe ser. Entonces en el cuadro de cuadros sprite, realidad
queremos cambiar la velocidad a 20 FPS y existe la velocidad correcta para reproducir la animación. Tenemos que poner eso en nuestra animación por base de animación. Así que haga clic en inactivo y asegúrese de que eso también está jugando a los 20 FPS. Y se puede ver que corre mucho más suave ahí. Entonces básicamente solo sigues bajando esta lista para crear el resto de tus animaciones. Entonces supongo que en realidad podemos simplemente sumar todo ahora mismo. ¿Por qué no? Entonces vamos a añadir un, un solo fotograma de animación de salto. Entonces sólo voy a añadir eso como saltó y entonces tendremos culpa. Por lo que la diferencia entre saltar y caer en cuanto a cuando tu personaje va a bajar y luego saltar va a ser cuando tu personaje está subiendo. Entonces usas básicamente la velocidad vertical para descifrar eso, pero eso es para más adelante. Por lo que también podemos tener un doble salto. Por lo que voy a añadir en una nueva animación. Cambiaremos eso a doble salto de subrayado, supongo. Y añadamos n. esa animación. Puedo ver que eso son seis fotogramas, así que seis horizontales, uno vertical, seleccione Borrar todos los fotogramas, agréguelos, y luego tenemos nuestra animación de doble salto. Entonces 20 FPS, y esa es la velocidad de reproducción correcta. Entonces vamos a ver qué más. 3.5 aquí, hit y wall jump. Tan hit, creo que va a ser cuando tu personaje recibe daño, Vamos a añadir ese final. Así que nuevo golpe de animación y luego nueva animación mientras salto de subrayado. Agarremos los marcos para eso de sus archivos de textura separados. Eso parece siete marcos. Entonces siete por uno, selecciona Borrar, Todo, ponlo en 20 FPS. Y podemos probarlo cambiando a esa animación. De acuerdo, bueno, este doble salto y queremos hit. Entonces ahí está la animación Hit bastante slick. Entonces mientras Trump es el último. Entonces, solo llenemos eso irreal rápidamente. Agrega animación mientras salta cinco fotogramas, por lo que 5 veces 1, selecciona Borrar todos los fotogramas, agrégalos y asegúrate de que este FPS sea de 20 FPS. Para que podamos revisar todas las animaciones y solo asegurarnos de que sean todas 20 FPS. De acuerdo, entonces esas son básicamente nuestras animaciones para el personaje configurado agradable y fácil con un sprite animado.
7. Entrada del jugador y movimiento de la derecha: Entonces ahora que sabemos dónde está nuestro personaje en términos de este brillante con referencia al objeto de carácter cinemático. Básicamente podemos ir a la Animación, ponerla en ralentí, y podemos averiguar dónde deberían
estar los asesinos y la forma utilizando el estado inactivo como punto de referencia. Por lo que en 2D en forma de colisión, voy a dar click en forma a la derecha y podemos hacer una forma de cápsula. Entonces, si haces una forma de cápsula, existe la capacidad de que un personaje se
deslice un poco de borde si solo te estás acercando al borde. Si no quieres que tu personaje pueda deslizarse accidentalmente por el borde. Quieres que sea o puramente en el suelo o ligeramente fuera del suelo y por lo tanto cayendo, entonces podrías usar una forma rectangular y en su lugar, voy a ir con forma de cápsula por ahora. Podríamos cambiar eso más tarde, por lo que nueva forma de cápsula. Y queremos que esto quepa más o menos donde el personaje se sienta en el suelo. Entonces voy a encogerme esto. Y en realidad quiero ver la forma de colisión por encima de los sprites. Voy a reorganizar el orden. Por lo que el sprite animado va a estar en la cima. Simplemente arrastras y sueltas. Y ahora podemos ver la forma de colisión. Entonces cambiemos la transformación. Muévete un poco hacia abajo. Creo que agregué unos 9.5 píxeles más o menos. Y ahora solo necesitamos ajustar las cosas un poco más. Simplemente consigue la forma que quieras para colisiones con otros objetos como el techo o el suelo. A lo mejor realmente sí queremos que el personaje tenga un hit box relativamente alto. Entonces si te estás golpeando la cabeza en el techo, eso debería pasar aquí arriba, no aquí abajo. Entonces tomemos la transformación y subirla un poco. Entonces veamos cinco, vale, y eso probablemente está bastante bien ahí mismo. Por lo que actualmente los ajustes son cinco para la posición de píxel. Y si hacemos click en forma de cápsula, tenemos un radio de 7.1. Apenas redondearé eso a siete y la altura haré 10. Y eso debería hacer por nuestras formas iniciales de cápsula. Por lo que nuestro personaje debería poder colisionar una vez que configuremos el movimiento, lo cual va a requerir algún scripting. Entonces en primer lugar, tomemos el nivel. Entonces de vuelta en la pestaña de nivel, voy a cerrar el arte y el sistema de archivos ir a los personajes, y sólo arrastremos este personaje jugador a la escena. Los pondré un poco aquí arriba para que cuando realmente empecemos a correr el juego, gravedad los haga caer al suelo. Y luego podemos comprobar si está en el suelo por cosas como poder moverse a la izquierda y a la derecha normalmente. Por lo que es bastante fácil comprobar eso en realidad y obtener 0 también. Una de las cosas cool del cuerpo cinemático 2D y el movimiento y Godel. Entonces vamos a sumergirnos en la escena del jugador. Podemos abrir un editor que va a cambiar a la escena original en el nivel uno,
esto en realidad es una copia instanciada de la escena, por lo que solo puedes ponerla en un montón de jugadores si quieres. Y estos son todos separados el uno del otro, pero todos están basando lo que tienes, los diferentes nodos aquí y el código basado en esta escena original del jugador. Y así de todos modos, necesitamos agregar un guión al jugador. Por lo que sólo voy a golpear el botón New Script mientras hago clic en el cuerpo cinemático 2D clavado, que es la raíz. Verás que esto le dará automáticamente el nombre jugador dot Gd para script GD. Y lo va a poner en la carpeta Personajes. Entonces creo que eso funciona bien para nosotros en cuanto a organización. Por lo que voy a dar clic en Crear. Entonces lo que vamos a necesitar hacer para que nuestro personaje pueda moverse. Cuando presionamos teclas, es comprobar la entrada cuando el juego se está ejecutando. Entonces vamos a hacer eso en una función llamada Proceso de Física. Notarás que el proceso de la función se comenta aquí. Pero como el movimiento es básicamente parte de la física del juego, quisiéramos correr eso en proceso de física. Entonces cualquier cosa que tenga que ver con movimiento, colisión, o física, en general, se recomienda que se ejecute esa función en el proceso de física en lugar de la función de proceso. Entonces una de las diferencias con el proceso de física es que quemará un número determinado de veces cada segundo de la vida real. ¿ Dónde está el proceso de subrayado de función delta puede correr más o menos veces que eso. Entonces básicamente el proceso de física es consistente y en su función de proceso normal se ejecuta a un número inconsistente de veces por segundo. Entonces, solo eliminemos todo eso aquí por ahora. Entonces voy a escribir aquí litera para función y luego subrayar proceso de física. Notarás que esto nos da la autocompletar. Entonces solo voy a golpear Enter ahi, lo completa. Aquí hay un parámetro llamado delta, ese es el tiempo entre fotogramas. Por lo que podemos usar esto como información para nuestro proceso de física. Entonces lo que vamos a querer hacer en esto es conseguir la entrada. Entonces, en realidad voy a crear una variable aquí llamada input. Y luego vamos a crear una función que se ejecutará aquí. Y voy a llamar a eso se pone puerto de jugador. Y entonces sólo necesitamos crear esa función. Entonces función consigue entrada de jugador, ¿de acuerdo? No hay parámetros. Y luego agregamos los dos puntos al final, presionamos Enter y ahora podemos empezar a escribir con una función. Entonces podemos simplemente crear una variable aquí. Voy a llamarlo entrada var. Voy a poner este colon y luego voy a teclear en el tipo. Vector para solo para informar un poco a cualquiera que lea el código que se pretende que sea un vector dos, que es básicamente para flotar números. Tienes un valor x, que en este caso se va a utilizar para la importación horizontal o el movimiento horizontal. Y luego puedes tener un componente y para el vector, que sería vertical arriba-abajo. Entonces, si estás haciendo un juego 3D, podrías tener un vector 3, que agrega la tercera dirección, que sería como tu profundidad en el fondo, tu eje z. De acuerdo, entonces tenemos la importación y necesitamos empezar a obtener los valores para los insumos. Por lo que tenemos set extra para entrada horizontal e y para establecer para vertical. Y así input.txt. Y tenemos que poner eso para importar. Ahora la primera letra aquí es mayúscula. Esto es algo a lo que puedes acceder y Godot por defecto, no
tienes que escribir nada antes de que esto aparezca. Y luego hay funciones que puedes ejecutar en esta entrada. Por lo que la función que queremos ejecutar es conseguir fuerza de acción. Por lo que esto toma un parámetro y el parámetro es el nombre de la acción. Por lo que ves por defecto hay todas estas acciones de UI que podemos agarrar. Por lo que podríamos simplemente convertirnos en perezosos y usar el guión bajo de la interfaz izquierda. Otra opción sería que pudieras definir una acción del cliente y llamarla izquierda, derecha, arriba, abajo, o jugar un movimiento arriba, abajo, izquierda, derecha, como quieras llamarla, eso está totalmente separado de la UI izquierda. Entonces tal vez tengas diferentes controles para la interfaz de usuario, y tal vez tengas diferentes controles para el jugador, hasta ti cómo quieres hacerlo. En última instancia, solo estamos averiguando la tecla que
queremos que presione el jugador para mover al personaje a la izquierda y a la derecha. Entonces subamos al menú del proyecto. En la parte superior izquierda, vamos a ir al Mapa de entrada Ajustes del proyecto, y aquí podemos establecer las acciones para nuestro juego. Se puede ver la UI izquierda, UI arriba y abajo ya están configuradas. Entonces si quisiéramos, solo podríamos comprobar esos valores y luego usar flechas arriba, abajo, izquierda, derecha en nuestro teclado con el fin de eliminar al personaje para el juego. Generalmente prefiero el movimiento WASD. Por lo que en realidad voy a añadir una nueva acción. Por lo que esto será separado de la UI, izquierda, derecha, arriba, abajo. Entonces sólo voy a llamarlo izquierda aquí arriba en la parte superior. Si estás creando un juego multijugador, podrías llamarlo P1 para jugador un guión bajo a la izquierda. Ya sabes, realmente depende de ti. Entonces vamos a añadir k Así que tenemos la nueva acción, pero no hay claves para ello. Por lo que queremos apretar el botón más aquí a la derecha. Se puede ver que se puede agregar en joystick, botón, controles de botón del ratón o teclado. Entonces vamos a hacer teclado. Y voy a presionar W en el teclado para establecer la tecla y presionar Ok, así que espera, bueno eso sería en realidad hacia adelante. Entonces cambiemos eso. Vamos a presionar el botón de edición a para la izquierda. De acuerdo, y luego sumemos la siguiente acción. Tan arriba. Y entonces podemos hacer abajo y bien. Entonces para cada uno de estos reset o key, así que arriba será w, abajo será S, y luego escribir será d. Ok, entonces controladores WASD, tal vez queremos mover esto allá arriba. Entonces en realidad dice que el WASD tiene un poco más de sentido. Vamos a cerrar esto. Entonces ahora con el fin de obtener la entrada x, en realidad
vamos a necesitar hacer algunas matemáticas entre dos valores. Entonces si estamos configurando el movimiento horizontal, hay dos claves que controlarían eso. Ese sería el movimiento correcto y el movimiento de izquierda. Entonces justo en la pantalla te va a dar un valor positivo para la x. Y luego a la izquierda en la pantalla te va a dar un valor negativo. Entonces cómo lo calculamos aquí es que para el XML, vamos a obtener primero el valor correcto aquí. Entonces es positivo. No pongo un negativo aquí. V es sólo positivo. Si vamos a la derecha. Y entonces podemos restar la fuerza de acción de la izquierda. Entonces consigue acción Fuerza. Y ahora sí nos queda. Asegúrate de que haya las comillas porque es una cadena. Y esto básicamente significaría con un puerto clave. Si presionamos a la derecha, entonces éste va a ser uno. Y si presionamos Izquierda el dolor, entonces esto también va a ser uno. Entonces si presionas a derecha e izquierda al mismo tiempo, uno menos uno se va a cancelar el uno al otro y vas a conseguir un 0. Si no estás presionando a la derecha, pero estás presionando a la izquierda, vas a conseguir uno negativo. Y si estás presionando a la derecha pero no a la izquierda, entonces vas a conseguir uno. Entonces podemos usar eso con el fin de determinar en qué dirección debe moverse ese jugador. Por lo que para la dirección y
, puede ser muy similar. Entonces para este juego específico, ya que tiene ese estilo clásico de juego de plataformas, las teclas de arriba y abajo podrían no ser usadas en realidad al final, pero aún podemos obtener los valores de entrada para ello. Puede haber algún tipo de componente de movimiento más adelante del cual dependería de la entrada Y. Así que bien podríamos simplemente conseguirlo ya que ya empezamos. Entonces hagamos entrada y, y sí vamos a conseguir fuerza de acción. Y esta vez estamos buscando abajo. Entonces eso podría sonar un poco confuso, pero abajo es realmente positivo cuando estás haciendo juegos 2D. Por lo que bajas a la pantalla, significa que tu valor y va en aumento. Por lo que queremos conseguir fuerza de acción abajo menos conseguir fuerza de acción arriba. Entonces ahí vamos. Y ahora tenemos la configuración
El vector correctamente, por lo que queremos devolver eso para que pueda ser utilizado en la función principal del proceso de física. Entonces recurrimos a la entrada, y prácticamente terminamos con eso. Entonces tal vez sólo escribiré un comentario aquí. Entonces ahora para mover al personaje, vamos a necesitar determinar su velocidad. Entonces subiré aquí hasta arriba y declararé una variable aquí arriba. Yo lo llamaré velocidad lejana. Y yo sólo diré que esto es uno o dos, igual que hicimos en la función aquí abajo. Entonces la ventaja de declararlo aquí arriba es que esto básicamente está apegado al guión del jugador directamente. Y podemos usar este valor en cualquiera de las funciones que este script va a estar usando. Por lo que es sólo un poco accesible públicamente si estamos en proceso de
física obtener la entrada del jugador o cualquier otra función. Por lo que eso también significa que podemos establecer el valor y luego el nuevo valor se puede utilizar en otras funciones también. Entonces queremos establecer la velocidad y lo vamos a hacer en
base a la dirección tiempos la velocidad de movimiento de los jugadores. Pero no hemos configurado lo rápidos que son. El jugador debe moverse, por lo que necesitamos otra variable. Entonces voy a este tiempo tipo n export, y voy a darle un tipo, ya sea float o integer. Entonces si quieres poder usar puntos decimales, usas un flotador. Si quieres que sea enteros como 1,
2, 3, 4, 5, 6, 7, sin punto decimal. Entonces puedes escribir INT para Nt. Pero creo que aquí realmente no hay inconveniente en el uso de carrozas. Y solo te permite ser más específico con la velocidad exacta. Entonces voy a hacer de la variable un flotador, y tenemos que poner aquí export float var. Y después de eso le damos un nombre. Entonces lo voy a llamar velocidad de movimiento,
mover velocidad de subrayado más específicamente en religioso, dado un número arbitrario como y 200 por ahora, siempre
podemos cambiarlo más tarde. Ahora, la diferencia entre hacer un flotador de exportación lejos y un var es que esta variable no va a aparecer en el inspector para el personaje. Pero cuando haces flotador de exportación, el flotador determina el tipo, básicamente cómo se debe establecer eso en el Inspector. Y entonces la exportación la va a hacer pública. Entonces si hago clic aquí en el jugador, podemos ver la variable de velocidad de movimiento se establece aquí y podemos cambiar eso a cualquier cosa que queramos. Por defecto es lo que establezcamos en el código, pero podemos cambiar esto sobre una base de instancia. Entonces si tengo tres jugadores por aquí en la escena principal, puedo dar click en esos. Puedo cambiar los valores por aquí, así que 300. Pero aún así podemos ahorrar eso. Vuelve a la escena del jugador. Y se puede ver aquí son 200. Pero luego en la copia de instancia, son 300. Tan diferentes personajes, aunque estén basados en el mismo código, los mismos nodos pueden tener diferentes configuraciones. Por lo que también podrías usar eso para cosas como el color. Si quieres tomar una, no sé, rana
verde y ponerla azul o algo así. Por lo que tenemos nuestro valor de Velocidad de Movimiento. Ahora necesitamos multiplicar eso por la dirección. Entonces vamos al guión y voy a tomar la entrada x. Eso voy a multiplicar por la velocidad de movimiento para conseguir el movimiento de dirección x. Entonces velocidad, solo voy a establecer eso igual al vector 2 aquí. A lo mejor voy a romper esto en múltiples líneas. Entonces esta será nuestra línea x y esta será nuestra línea inalámbrica. Simplemente pondré eso en 0 por ahora mismo. Posteriormente añadiremos gravedad y saltos. Pero aquí arriba en la segunda línea para x, vamos a hacer y poner esa X. Así que esa es la dirección que vamos a veces que por mueve velocidad. Entonces porque la derecha es 1 O en el teclado, izquierda es 1 O en el teclado, vamos a conseguir o 0 o más 200 o menos 200. Y podemos usar esa velocidad para el movimiento. Por lo que mover un cuerpo cinemático en 2D mismo, una vez que tienes la velocidad y la dirección, es bastante fácil. Todo lo que tienes que hacer es moverte y deslizarte. Y entonces aquí vamos a poner en esa variable filosofía, boom, hecho. En realidad hay otra forma de pasar a, que se mueve y colisionar. Y ahí también sumaría n veces delta. Entonces realmente eso se vería como movimiento colide velocidad tiempos delta. Entonces ese es el tiempo entre fotogramas se están moviendo diapositiva son cuentas médicamente para eso, pero en movimiento diapositiva no lo hace. No estoy seguro de por qué, pero eso es solo nuestro trabajo actualmente. Entonces la razón por la que querrías tener en cuenta el tiempo entre fotogramas es si hay alguna inconsistencia entre el tiempo entre tus fotogramas, quieres mover al personaje la cantidad correcta en función del tiempo desde el último fotograma. Por lo que el personaje debe moverse a una velocidad consistente. Pero si tus fotogramas no se están renderizando a la misma velocidad, entonces la cantidad de movimiento en cada actualización debería ser diferente. Ahora, teóricamente y proceso de física, siempre
va a ser lo mismo. Entonces, en general, no te encontrarías con ese problema. Pero por si acaso eso está ahí, por
eso existe delta. Y mover y deslizar solo automáticamente factores que N. Así que solo necesitas la variable de velocidad. No lo multiplicas por delta en pocas palabras. Entonces ahora que tenemos eso, creo que podríamos simplemente ir adelante y golpear Play y mover al personaje de izquierda y derecha. De acuerdo, en primer lugar, debemos asegurarnos de que estamos en el nivel visto. Y vamos a alejarnos un poco aquí. Supongo que vamos a necesitar poner una cámara. Y así vamos a añadir aquí una nota infantil. Y voy a añadir una cámara, específicamente una cámara a D. Y luego si alejas un poco, puedes ver ese borde azul para la cámara. Entonces voy a dar click en cámara, puedo dar click aquí abajo y vamos a mover la cámara 2D y simplemente ponerla más o menos en la parte superior de nuestro reproductor por ahora mismo. Ahora podemos golpear el juego. Y el otro problema es que tenemos que convertirla en la cámara actual. Si no la conviertes en la cámara actual, entonces la cámara la va a poner en algún lugar alrededor de los 000, creo. Entonces si comprobamos la corriente
encendida, entonces esta es ahora la cámara activa y aquí va a ser donde el juego empieza a mirar. Así que juega una vez más. Y vamos a probar eso. De acuerdo, Así que nuestros personajes ahí, así que ahora podemos usar a y D para mover a nuestro personaje. Entonces un, d, Vale, genial, está funcionando algo así. Problemas tan obvios incluyen poder caminar por la pared y no tener ninguna gravedad para caer al suelo.
8. Ajustes de juegos globales con singletons: Resolvamos primero el problema de la gravedad. En Canto. Si subes a un proyecto, proyecta ajustes, existen valores de gravedad técnicamente predeterminados que puedes establecer aquí, ¿de acuerdo? Y se busca en la barra de búsqueda, por lo que la gravedad, y luego se puede ver 2D, tenemos la gravedad por defecto y el factor de gravedad por defecto. La gravedad predeterminada se mide en píxeles, y estos son solo números arbitrarios que podrías aplicar con tus cuerpos cinemáticos 2D. Creo que estos podrían, creo que en realidad podría tener más de un impacto directo cuando estás usando 2D cuerpo rígido y eso automáticamente factorizaría un centavo. Pero en cuerpos cinemáticos, hay
que hacer todo manualmente. Por lo que podrías usar estos valores y personalizarlos aquí arriba. O lo que creo que podría preferir hacer es crear un singleton donde
solo tengamos ajustes de juego los cuales podemos cargar ya sea como base de nivel superior o para todo el juego. Y en cualquier momento necesitamos cambiar la configuración global del juego, lo
hacemos en un singleton que se carga una vez por juego. Entonces voy a cerrar aquí y luego podemos crear una nueva escena y adjuntarle un guión. Entonces vayamos al menú en la parte superior izquierda, golpeamos nueva escena. Y aquí vamos a hacer otro nodo. Este no es realmente un objeto 2D, por así decirlo. Es sólo un nodo que va a contener un script con
un montón de variables que podemos establecer y referenciar y otros scripts. Entonces otro nodo. Y yo sólo voy a hacer nota aquí. Entonces lo más básico que puedas conseguir, voy a golpear Command o Control S. Y vamos a guardar esto y el directorio raíz por ahora. En realidad podríamos crear una carpeta de un solo turno, bien
podría tener más carpetas. Entonces voy a hacer clic derecho y hacer nueva carpeta. Y lo pondré aquí en Singleton. Hit Ok. Por lo que a este nodo se le va a llamar configuración del juego. Por lo que durante la carcasa de camello, mayúscula G, S mayúscula, y golpeó Save. Por lo que también voy a cambiar el nombre de este nodo a la configuración del juego, que sea consistente. Y ahora solo agregamos un guión a esto. Entonces hacemos eso. Se va a por defecto automáticamente a ese directorio singleton, que guardamos el G, que guardamos el archivo de escena. Por lo que ahora también va a almacenar el archivo de script QDOT. Entonces crea eso. Eliminemos todo por aquí. Y ahora solo podemos sumar un par de variables de exportación. Entonces vamos a hacer exportación, flotar, var. Y supongo que lo que vamos a querer aquí es la gravedad. Y podemos establecer eso a un valor predeterminado arbitrario. Pero una vez más, vamos a guardar una instancia de esta configuración del juego. Por lo que podemos simplemente hacer clic aquí y personalizarlo en cualquier momento que necesitemos. En realidad no tenemos que usar el script porque aquí
tenemos el flotador de exportación. Entonces eso es realmente útil. Y podemos hacer flujo de exportación lejos. Y voy a llamar a esta velocidad terminal, como en básicamente la velocidad máxima de caída que se puede alcanzar. Por lo que la gravedad se suma en cada segundo. Carácter sigue acelerando, yendo hacia abajo en la pantalla. ¿ Y a qué quieres que esté esa velocidad de tope? Entonces porque es un juego 2D, de
dibujos animados, es algo arbitrario. No se requiere física del mundo real. Simplemente puedes jugar con los números y
averiguar la sensación que quieres para tu juego específico. Por lo que sólo voy a llenar puerto 300 cuatro ahora mismo. Y nos meteremos con eso un poco más tarde, estoy seguro. Por lo que tenemos estos valores y solo queremos que cargue este nodo de configuración del juego cada vez que lanzamos el juego. Entonces voy a ir al proyecto, Configuración del proyecto. Aquí hay una pestaña llamada auto load, y queremos añadir en esa escena de configuración de juego. Entonces vamos a un solo término y luego hagamos el juego settings.js PUEDE hacer doble clic allí en él. De acuerdo, entonces ahora esta configuración del juego se va a cargar cada vez que arranquemos el juego, Es un singleton. Un solo tono básicamente sólo significa que sólo puede ser uno en existencia en un momento dado. Por lo que si has hecho referencia a la configuración del juego, debes estar relativamente seguro de que esa va a ser la misma configuración del juego que tienes a lo largo de tu juego. Por lo que no debería cambiar. Siempre debe ser la escena específica que hemos guardado en esta carpeta singleton. Entonces sigamos adelante y peguemos a Cerrar ahora. Y ahora podemos pasar al guión del jugador y
podemos referirnos a esa gravedad y a la velocidad terminal. Entonces vamos a establecer la velocidad, la velocidad y específicamente a su velocidad de onda actual. Y luego vamos a restar, y luego vamos a restar la gravedad. Por lo que menos configuración del juego punto gravedad. Entonces esto es todo lo que necesitas hacer para referirlo. Simplemente los ajustes del juego puntan cualquier variable que tengamos configurada y ese singleton, y solo podemos hacer referencia a eso a través. ¿ De acuerdo? Y también vamos a limitar eso. Entonces como las cosas se hacen ahora, el valor de la gravedad va a cambiar la velocidad y va a seguir bajando cada vez más rápido sin límite, básicamente infinito hacia abajo en la velocidad de la pantalla. Entonces puedo demostrar eso realmente rápido. Pero también hagamos una declaración impresa aquí. Así que imprime y solo haremos velocity dot y para que en la consola, podamos ver que el valor simplemente sigue bajando. Entonces intentemos jugar el juego. Entonces nivel uno, está bien, y podemos ver en la salida vamos a obtener el valor para la velocidad. Por lo que ahora nos acercamos como negativos 16 mil como la velocidad a la baja. Y en realidad cometí un error. Debe ser más gravedad porque abajo es positivo cuando estamos haciendo estos juegos 2D. Entonces vamos a querer tapar la velocidad aquí. Y la forma en que mantuvimos la velocidad de movimiento vertical es mediante el uso de la función Min. Es una función matemática. Por lo que va a devolver el más bajo de los dos valores. Entonces tenemos nuestro a por aquí a la izquierda, que es la nueva velocidad que estamos tratando de establecer. Y luego por aquí a la derecha, vamos a tener juegos settings.py, velocidad terminal. Entonces ahora cuando sigamos adelante y
golpeemos Play, vamos a ver, o deberíamos ver un tope en el valor. Y no lo hicimos. Entonces creo que en realidad queremos más ajustes de juego doc gravity. Adelante y peguemos plus aquí y veamos. De acuerdo, sí, correcto, eso es correcto. Entonces hacia abajo, una vez más es un valor positivo en la pantalla. Entonces esto es positivo. Esto es negativo. Si tocamos Refresh por aquí, podemos ver, justo cuando eso empieza, nuestro personaje cae un poco al suelo, pero la velocidad en realidad se mantiene ahí. Entonces eso es, eso es lo que queremos ver. No importa cuánto tiempo pase, nunca
va más rápido que esa filosofía terminal. De acuerdo, entonces ahora realmente necesitamos tener algunas colisiones entre el jugador y el suelo. Para que podamos consultar nuestro mapa de azulejos para eso. Vamos a dar click en el objeto de mapa de teselas, el pixel adventure to main.js file, que guardamos en el proyecto. Y ahora podemos abrir nuestro terreno. Podemos acercar. Y el problema es que no hemos puesto ningún azulejo de colisión. Por lo que no es demasiado difícil hacerlo, pero puede que lleve un poco de tiempo. Así que vamos a dar click en nuestra región por aquí. Una vez más, ya configuramos la BitMask para que podamos dibujarla, pero no tenemos ni colisiones agregadas. Por lo que la forma más rápida y fácil de hacer solo colisiones es agregar un nuevo rectángulo. Se puede ver que esto tiene teclas de acceso rápido, por lo que es Shift R en el teclado. Por lo que encontré una buena manera de hacer esto es hacer clic en tu azulejo, golpear Shift R, volver a hacer clic en el azulejo, y luego tienes tu cuadrado de colisión, que básicamente es la misma forma y tamaño del propio azulejo. Por lo que hacemos click en la segunda plaza para hit Shift R. Hacemos clic de nuevo en ella, y ahora tenemos una forma de colisión. Por lo que si el personaje se topa con esto desde cualquier dirección, debería detenerlo en sus huellas. Entonces sigamos haciendo eso. Haga clic Shift, R, click, click shift, click. Por lo que solo sigues pasando y te encuentras con un tema. Simplemente puedes hacer clic manualmente ahí, solo asegúrate de obtener una colisión en cada uno. Si ves que después de que fue amarillo, se vuelve aún más amarillo. Eso podría significar que hiciste para colisionar formas encima de él para que
simplemente puedas hacer clic en ellas y eliminarlas si eso se convierte en un problema. Por lo que todo debe tener esta misma superposición de amarillo. Entonces sigamos haciendo eso. Yo sólo aceleraré el video. Entonces si por alguna razón te está dando unos pequeños problemas, también
puedes hacer clic manualmente aquí arriba para crear tu siguiente rectángulo. Por lo que puedes hacer como click allá arriba y luego dar click aquí abajo. Y entonces eso te dará los mismos resultados. Pero ojalá sean teclas rápidas que funcionen para ti también. Eso es básicamente todas las formas de colisión con excepción de una. Entonces si acercamos aquí, podemos ver que estos mosaicos de plataforma que creamos solo tienen una plataforma de cuatro píxeles de altura. Por lo que realmente no tiene sentido que un personaje colisione con él desde abajo. Porque eso significaría que golpearía su cabeza justo por aquí donde claramente no hay nada ahí. Entonces cuando agregamos en la forma de colisión para estos, se
puede ver que dije que el chasquido sea de cuatro píxeles por cuatro píxeles antes. Hay una razón para eso y es para que podamos ajustar estas formas de colisión para que coincidan con estas plataformas. Entonces, cuando estás creando tus formas de colisión, puedes comprobar las opciones de snap. Asegúrate de que el paso sea de cuatro por cuatro para estas fichas en particular. Y ahora puedes hacer click en cada una de las esquinas y arrastrarlas hacia arriba. Entonces si hacemos eso para cada uno ahí, ahora tenemos una forma de colisión que en realidad coincide con la obra de arte para este conjunto de teselas. Por lo que básicamente podemos rehacer eso para cada uno de estos. Por lo que solo tienes que hacer click en las cuatro esquinas que necesitas ajustar. Y eso es básicamente todo lo que hay a ello. Mientras hagas esto chasqueando cuatro píxeles por cuatro píxeles, será realmente fácil con este conjunto de llantas en particular, ¿de acuerdo? Y por ahora mismo, y eso deberían ser todas las colisiones que vamos a necesitar
para nuestro conjunto de losetas de terreno. Tan genial. Y ahora podemos golpear el control S. Y si volvemos al juego, la colisión en realidad debería estar funcionando. Entonces vamos a golpear play nuestros personajes ahora van a estar en el suelo. Por lo que podemos golpear a izquierda y derecha para el movimiento. Y un personaje, sólo
va a caer un poco del borde y luego se detiene cuando llegue aquí. Y una vez más, cuando el hombre esté aquí abajo. Ahora, se puede ver un par de temas. Una es que es un par de píxeles fuera del suelo para el personaje. Basta con ajustar la posición de la forma de colisión para que eso se vea correcto. Y entonces por aquí a la izquierda se puede ver que son y velocidad sigue diciendo que son 300. No soy técnicamente correcta. Entonces vamos a golpear parada aquí. Ahora entramos en capa. Abriremos esto y lo que tenemos hacer es que después de tener la velocidad de movimiento y deslizamiento, esto realmente devuelve una velocidad después de hacer colisiones con el suelo. Entonces básicamente, tomaré el valor y aquí y lo pondré en 0 porque hubo colisiones terrestres. Entonces básicamente ya no se puede mover. Entonces si establecemos los valores de velocidad almacenados en este script a ese valor de velocidad devuelto por aquí. Entonces eso hará que se restablezca la velocidad y a 0. Y entonces eso se instalará aquí para que la próxima vez que entre aquí, vamos a estar sumando la gravedad a 0. Entonces eso debería ser correcto. Y también, realmente queremos ver la velocidad después del movimiento, no antes, antes. Cuando esto sea 0, se va a sumar la gravedad que lo hará 50. Pero realmente después de que se calcule el movimiento real, se va a estar moviendo a una velocidad de ceros para que tenga más sentido imprimirlo aquí. Entonces sigamos adelante y hit play y podemos echarle un vistazo a eso. Entonces viste tal vez que en el par inicial de cuadros, era 50 era un 100 y luego era un 150 ya que se estaba acelerando hacia el suelo. Pero luego después de eso es 0 porque estamos en el suelo. Mantén un ojo en la salida y es posible que veas que cambie de nuevo. Por lo que ahí mismo por una fracción de segundo, se aceleraba hacia el suelo. Y eso es lo que queremos ver. Entonces vamos a entrar en la vista 2D para nuestro jugador. Puedo ver que la forma de colisión es un poco demasiado baja aquí, así que sólo tenemos que ajustar eso. Entonces voy a ir a la colisión 2D y luego tratemos de hacer la posición tres. Sí depende de la dirección que estés enfrentando, por lo que puede ser cuatro aquí. Y ahora sigamos adelante y asegurémonos de que sea pixel perfecto con el suelo. Entonces echando un vistazo aquí, podemos ver que tenemos los píxeles del suelo y luego justo encima están los píxeles delineados del personaje. Entonces eso es lo que vamos a querer ver aquí. Y eso es lo que quieres realmente cortar el contorno aquí y sólo tener al Greenberg siendo lo que está conectando con el suelo. Eso es más una elección estilística, creo. Entonces sigamos adelante y golpeamos parado aquí. Y en realidad cuando lo miro, básicamente
hemos cubierto todo para este video. Por lo que tenemos una cámara puesta en la parte superior de nuestro jugador. Nuestro personaje puede moverse a la izquierda y a la derecha en base nuestra entrada que configuramos creando esas acciones personalizadas. Y la gravedad está funcionando así como las velocidades terminales. Entonces una plataforma decentemente funcional, un personaje sin saltar todavía, pero llegaremos a eso. Entonces si lo has llegado hasta aquí, ya
estás bien en camino a tener una plataforma o personaje funcional. Entonces eso es realmente genial.
9. Salto, movimiento y máquinas de estado: Entonces en este video vamos a tomar a nuestro personaje y darle la capacidad de saltar. Por lo que parte de esto va a ser la creación de Estados. Entonces, por ejemplo, si los personajes en el suelo, debería poder saltar. Pero una vez que tu personaje está saltando, el movimiento va a funcionar un poco diferente. Entonces dependiendo de dónde esté el personaje y qué botones se presionen en cada uno de esos modos diferentes que tenga el personaje para poder interactuar con el mundo del juego se va a llamar estado. Entonces sigamos adelante y sumérjase nuevamente en nuestra escena de jugadores. Entonces aquí podemos ver que tenemos el spray animado, la forma de colisión, pero en realidad no tenemos una manera de que cambiemos la animación todavía. Entonces, por lo que actualmente, a pesar de que podemos movernos a izquierda y derecha cuando vamos adelante y golpeamos el juego. Y tratamos de movernos a izquierda y derecha, podemos ver que los personajes todavía sólo se queda en el Idaho y ni siquiera se enfrenta al camino correcto hacia arriba. Entonces podemos corregir eso y luego sumar en saltarnos y otra opción. Pero primero, antes de sumergirnos en el scripting, vamos a añadir un reproductores de animación. Por lo que nuestro reproductor de animación es una de las herramientas que podemos utilizar para cambiar cómo se va a ver la animación actual de los personajes, que cuando cambiemos el estado y el código, también
podemos actualizar el reproductor de animación. Por lo que es reproducir la animación adecuada para el estado correcto. Entonces vamos a hacer clic derecho en el jugador y añadir un nodo hijo. Entonces estamos buscando jugador de animación, que está justo aquí abajo convenientemente, y sigamos adelante y creamos eso. Y ahora cuando hacemos clic en Reproductor de animación, podemos ver que hay esta ventana de animación aquí abajo en la parte inferior. Por lo que queremos crear una animación para cada una de las animaciones sprite animadas aquí. Y así creo que la forma de hacer esto como un poco más limpia cuando usas un sprite, no un sprite animado. Pero una vez más, porque en nuestro video anterior descubrimos que todas estas diferentes animaciones están separadas en diferentes archivos de textura de imagen. Sprite animado funciona mejor para este proyecto en particular. Entonces cómo funciona para jugador de animación y un sprite de animación es que vamos a entrar en este botón de animación y presionar Nuevo. Por lo que necesitamos crear uno para cada animación. Empecemos con inactividad. Hit Enter, y ahora necesitamos añadir una pista. Entonces cuando tenemos estas pistas Animation Player Animation, podemos cambiar diferentes propiedades a medida que avanza la animación. Entonces voy a golpear Add Track aquí, propiedad. Y ahora podemos sacar cualquier propiedad de nuestra escena y básicamente animar eso. Entonces cambiemos sprite animado. Y queremos cambiar la animación aquí. Cuando entramos a la animación inactiva en el reproductor de animación, queremos reproducir la animación inactiva en el sprite animado. Entonces voy a hacer clic aquí, insertar una clave. Una clave sólo siendo un momento en el tiempo en el que se cambia el valor de algo como qué animación se está reproduciendo. Y luego arriba a la derecha con esa clave seleccionada, podemos cambiar el valor dos. Yo no, sólo estamos un poco convenientemente ya
encendida ahora porque cuando está en estado de animación, nunca
queremos que se detenga, aunque quizá técnicamente no necesitemos ahora porque cuando un personaje está en ralentí, queríamos mantener continuando con la animación. Creo que tiene sentido comprobar
aquí el looping de animación técnicamente podría no ser requerido en este caso, ya que esto sólo es decirle al sprite animado qué animación reproducir. Pero los animadores reza probablemente va a estar buceando de cualquier manera. Pero si estuvieras usando un Sprite en lugar de un sprite animado, tendrías que tener ese looping revisado. Entonces creo que es mejor tenerlo ahí por si acaso. Entonces, también llevemos la animación aquí arriba y creemos una nueva. Entonces, también volvamos al menú de animación y añadamos y ejecutemos animación. Y vamos a añadir uno para saltar también. Y luego trabajaremos en los demás. Pero hagámoslos sólo por ahora. Entonces r1 y vamos a agregar una propiedad de pista, pista animación sprite animada. Y luego en ese primer fotograma, queremos insertar la llave, asegurarnos de que esté en la posición correcta, todo el camino por aquí a la izquierda. Y tomamos el valor y cambiamos eso para correr. Y por supuesto esta va a ser la animación de salto. Entonces en la mordida, coaseguro ese fotograma clave para saltar. Entonces podemos hacer que esto vaya un poco más rápido si realmente duplicamos nuestras animaciones en su lugar. Entonces iré al duplicado Animación, y luego podremos renombrar esto a lo que necesitemos. Entonces veamos otra animación. Probablemente lo vamos a configurar. Vamos a renombrar esto a cabeza. Y ahora no necesitamos revisar el looping. No necesitamos crear un fotograma clave. Sólo tenemos que cambiar el valor aquí para golpear la animación y estamos bien ahí. Entonces eso debería ser suficiente por ahora mismo. Sigamos adelante y sumérjase en el código. Entonces vamos a necesitar una variable e num aquí arriba en la parte superior. Entonces voy a escribir enums y podemos darle un nombre opcional, así que lo llamaré enum state. Y luego en, creo que son los corchetes rizados aquí, queremos poner en Idle, correr y saltar. Entonces, lo que básicamente hace el enol es traducir un barrio legible por humanos, como Run inactivo o saltar a un valor entero que se va a asociar con eso. Entonces básicamente se puede pensar en ello como una posición en una matriz. El EIDL es el primero aquí, por lo que eso se va a representar como un 0. Cuando el juego realmente se está ejecutando y R1 va a ser uno y salto va a ser un dos. Pero cuando estamos escribiendo un código, no
necesitamos usar ese 012. Simplemente podemos usar el punto estatal AIDL para hacer referencia a esa posición dentro de los estados. Por lo que hace que sea más fácil entender qué está tratando ir
a donde cuando llegaste a solucionar problemas de tu código. Entonces junto con esto, vamos a necesitar una variable para el estado actual. Por lo que voy a poner var actual subrayados estado, y podemos simplemente por defecto esto para indicar punto AIDL. Entonces realmente esto sólo va a ser un 0, pero ese 0 específicamente está haciendo referencia suficiente a la posición 0 dentro de esto. Entonces sólo ten eso en cuenta. Lo siguiente que vamos a querer hacer es tener una forma de determinar cuál va a ser el próximo estado para nuestro personaje mientras presionamos botones o salgamos del borde o así sucesivamente y así sucesivamente, queremos básicamente averiguar dónde está el personaje está en el juego y qué acciones deben estar disponibles para él. Por lo que vamos a crear una nueva función después de que se ejecute el movimiento y la diapositiva. Y lo vamos a llamar pick next state. Por lo que solo podemos pulsar Entrar unas líneas y crear esta función, función pick siguiente estado. Y así una de las primeras condiciones para determinar la historia va a ser si los personajes en el piso o no. Algunos de los personajes en el aire de lo que debería estar en algún tipo de estado de salto o caída. Incluso puedes compensar recibos por eso si tienes una razón para hacerlo. Para este personaje, creo que sólo vamos a tener un estado aéreo, que va a ser ese estado Jumps. Pero en el suelo, nuestro personaje puede estar ralentí, o también puede estar corriendo dependiendo de si hay algún movimiento horizontal y apagado. Entonces revisemos primero la condición principal, que va a ser, ¿está en el piso? Entonces este es un script 2D de cuerpo cinemático, lo que significa que tenemos acceso a una función que se llama es en piso. Entonces básicamente, este guión ya sabe
comprobar si hay tierra directamente debajo. Básicamente si nuestro cuerpo cinemático está colisionando con otra cosa debajo de él comprobando nuestra forma de colisión versus formas de
colisión si otras cosas como los azulejos del terreno de tierra. Entonces si ese es el caso, si de hecho hay terreno directamente debajo de nuestro personaje, queremos terminar de estar en cualquier tipo de estado de saltos. Y eso va a significar que vamos a querer reiniciar el salto para que nuestro personaje pueda saltar de nuevo más adelante. Entonces voy a establecer saltos iguales a 0. Por lo que para nuestro personaje tendrá la capacidad de saltar una o más veces. Y esto representará el número de veces que el personaje ha saltado desde que golpeó el suelo último. Entonces, en realidad creemos esa variable aquí arriba y avanzemos hasta ahora saltos. Y eso va a por defecto a 0. Ya que presumiblemente al inicio del juego, queremos darle a nuestro personaje la capacidad de saltar. Saltos va a 0. En cualquier momento que estemos en el suelo, necesitamos determinar si vamos a entrar en un estado de salto,
un estado de corrida, o un estado de inactividad. Entonces queremos entrar en estado de salto si presionamos el botón de salto mientras estamos en el piso. Por lo que podemos comprobar si el salto y el puerto esta presionado. Entonces si el punto de entrada es acción acaba de presionar, y entonces vamos a buscar salto, que no creo que realmente hayamos creado como acción todavía. Entonces voy a seguir adelante y hacer eso justo después de esta línea. Y entonces también tenemos que comprobar si saltos es igual a 0. Entonces si se presiona el salto mientras el personaje está en el suelo. Entonces vamos a configurar esas acciones de salto. Entonces proyecto, Configuración del proyecto, Mapa de
entrada, ven aquí abajo al fondo. Añadamos la acción Saltar. Ten en cuenta tu capitalización. Debe ser lo mismo que la cadena que estás usando dentro del script. Entonces vamos a añadir una clave. Simplemente haré que la barra espacial sea licenciable, presiona Cerrar. Y ahora tenemos una acción de salto el cual se puede comprobar con este gestor de entrada. Entonces necesitamos establecer el estado actual,
o más específicamente, el salto de punto estatal. Entonces cuando agregamos este auto bit al estado actual, podemos estar seguros de que estamos haciendo referencia al estado actual de este objeto aquí arriba. Entonces cuando agregamos este yo aquí, podemos estar seguros de que esto se va a referir
al estado actual que está específicamente apegado a este cuerpo cinemático aquí arriba. Entonces eso va a significar auto punto estado actual, que está justo aquí, que es lo que queremos. Entonces estamos configurando eso para declarar salto de punto y tenemos otros estados en los que necesitamos trabajar. Por lo que también podemos poner una otra si como si no se cumple la primera condición, entonces esta es nuestra alternativa. Y queremos ver si el personaje se mueve horizontalmente. Entonces eso puede ser ya sea positivo o negativo x básicamente, siempre y cuando no sea 0, podríamos poner en velocidad absoluta es mayor que 0. Otra forma en que se puede escribir casi lo mismo sería simplemente velocidad no es igual a 0. De todas formas quieres escribirlo un poco igual. Y vamos a añadir auto punto estado actual es igual a punto de estado en. Entonces si el personaje no está saltando, sino que se está moviendo, entonces debería estar en estado de carrera. El último que vamos a tener ahora mismo, sólo
va a ser estado DOT I también, si esas otras condiciones no se cumplen sino los personajes en el suelo, entonces va a estar ralentí. Entonces si no te estás moviendo, estás ralentí. Y no vamos a hacer esto todavía. Pero voy a añadir un pequeño mensaje para escribir esto más tarde. Entonces si no está en el piso, entonces quizá queramos tener un doble salto aquí abajo. Por lo que en el aire básicamente también podemos hacer un movimiento Double Jump Cannon. Entonces voy a decir que haga doble salto. Y yo sólo voy a pasar aquí pases y básicamente sólo seguir con el programa. Y aquí no hay código, así que simplemente lo estamos saltando. Entonces a continuación quiero crear una función de conjunto para nuestro estado actual. Entonces cuando cambiamos el estado de, digamos inactivo para saltar, queremos que se lleven a cabo ciertas acciones. A saber, queremos sumar algún movimiento hacia arriba para nuestro personaje cuando entre al estado Saltos. Para representar el salto en el juego, el personaje debe moverse hacia arriba. Por lo que podemos tener una función establecida significa que cuando cambiamos el estado actual, podemos tener ciertos intereses estatales ocurren acciones. Entonces aquí arriba en estado actual, voy a sumar al set final GET. Y luego lo vamos a llamar estado actual, solo convención de nomenclatura estándar. Otra idea que tenía en mente, no lo
voy a hacer, pero también podrías llamarla interestatal. Creo que eso también podría tener sentido. Pero bajaremos aquí y escribiremos nuestra función setter aquí abajo en la parte inferior. En realidad solo voy a poner un hashtag, los setters pueden un encabezado aquí en caso de que tengamos otras variables con setters más adelante, solo un poco mantenerlas contenidas en la misma área. Entonces hagamos función set estado actual, y esto va a tener un valor, básicamente el nuevo estado donde entrar. Entonces voy a escribir nuevo estado de subrayado, sólo mantenerlo lo más sencillo posible. Entonces si cuando configuramos el estado actual, el nuevo estado es un estado de salto, entonces queremos que el personaje salte moviéndose hacia arriba en la pantalla. Entonces voy a usar la función de coincidencia en el nuevo valor de estado y comprobar si ese estado entrando es el estado de salto. Por lo que podemos usar aquí abajo como el salto de punto del estado de segunda línea. Entonces este es el valor que estamos emparejando. Entonces si el valor pasado es el salto de punto de estado, entonces vamos a querer saltar. Entonces esta es una función que no hemos escrito aquí también. Y por último, queremos establecer el estado actual al nuevo valor que se está pasando. Entonces si no tienes un conjunto personalizado de funciones creado, básicamente si cambias el valor, simplemente
sería exactamente como este estado actual es igual a nuevo estado y nada más que el setter te
permite agregar un código extra que ocurrirá cuando se esté cambiando ese valor. Por lo que ahora necesitamos una función de salto. Por lo que esto será realmente simple y directo. Ir aquí, escribir otra función, salto de
función y punto y coma. Ahora, lo que necesitamos hacer es cambiar la velocidad y de este personaje y agregar un valor de impulso de salto. Básicamente la cantidad de movimiento que
queremos sumar hacia arriba en la pantalla para que el personaje se mueva. Y esto debería ser un impulso inmediato. Tanto en aceleración con el tiempo, o al menos será así para este personaje. Si fuera una aceleración, eso sería más como un jetpack. Entonces hagamos un punto de velocidad
y Y esto está haciendo referencia a la misma velocidad aquí arriba, ya que no hay ninguna variable de velocidad especificada en esta función, va a por defecto a la de este script. Entonces la velocidad y
Y vamos a poner eso de inmediato a un nuevo valor que vamos a crear. Y sólo voy a llamarlo impulso de salto y reiniciarlo a un valor negativo porque queremos
que se mueva hacia arriba en la pantalla. Entonces esta sólo va a ser la cantidad y esta va a ser la dirección. Negativo. Valor significa moverse hacia arriba en la pantalla y saltamos. También vamos a querer aumentar el contador de saltos. Por lo que salto más es igual a 1. Por lo que esto es importante en caso de que queramos sumar saltos dobles, lo cual estaremos haciendo más adelante. Entonces vamos a crear esa variable de impulso de salto. Y lo pondré aquí arriba en la parte superior porque esto es algo que podríamos querer cambiar. Entonces va a ser un impulso de exportación, flotar, var, y salto. Por lo que diferentes personajes van a saltar diferentes cantidades. Por lo que podemos ajustar esto a un valor agradable y alto como 600. Así que ten en cuenta después de la velocidad inicial, esto va a estar disminuyendo en cada fotograma por esta gravedad hasta que alcance la velocidad terminal o el personaje golpee el piso. Sólo se va a mover tan rápido inicialmente, y luego va a ir más despacio y luego eventualmente volver hacia la tierra. De acuerdo, esto debería ser saltos aquí abajo, no saltar. Y ahora si golpeamos Play, nuestros personajes deberían poder saltar a la pantalla. Todavía no cambiarán las animaciones. Entonces cuando entramos al juego y tratamos de golpear el espacio, en realidad no pasa nada. Incluso si caemos del borde, podemos ver claramente que el personaje está en el suelo, pero en realidad no está registrando a los personajes en el suelo. Y la razón de eso es que hay un argumento extra que podemos pasar a esta diapositiva de movimiento, que es la dirección de arriba. Entonces en un juego 2D, simplemente
podemos hacer eso fácilmente haciendo coma y luego un vector dos. Entonces esto va a significar que hacia arriba en esta pantalla va a ser nuestra dirección AP. Y ahora que eso está listo, diapositiva
móvil puede establecer los valores para es en piso, está en techo y está en paredes porque sabe en qué dirección están las paredes, el techo y el piso ahora. Entonces sigamos adelante y reingresemos al juego. Y ahora podemos golpear el espacio. El punto de ruptura golpea por salto estatal. Entonces sigamos con eso. Y si volvemos ahí, podemos ver que el salto está funcionando bien. También podemos ver que los personajes saltan es rápido inicialmente, pero a medida que llega a ese punto más alto, se ralentiza y luego aceleramos hacia atrás hacia abajo. Y eso es lo que quieres de una plataforma estándar o salto.
10. Árbol de animación y conmutación animaciones y animaciones: De acuerdo, lo siguiente que vamos a querer cuidar es
establecer parámetros en un árbol de animación para que realmente
podamos hacer que este jugador de animación cambie a las animaciones correctas dependiendo de los valores que establezcamos para esos árboles de animación. Entonces básicamente necesitamos decirle al árbol si el personaje se mueve a izquierda y derecha o saltando al aire. Y luego que ese árbol descubra qué estado de animación poner al jugador de animación n. Así que tenemos el código real para controlar cómo se puede mover el personaje. Pero también necesitamos tener el lado del reproductor de animación y del árbol de animación de las cosas para controlar y cómo representa esos gráficos para el jugador, pero básicamente cambiando la animación. Entonces vamos a añadir un árbol de animación. Voy a hacer clic derecho en el nodo raíz en un árbol de animación infantil. Y este árbol de animación necesita al jugador Animación. Entonces asignemos nuestro reproductor de animación al árbol de animación. Y ahora también necesitamos una raíz de árbol. Por lo que hay diferentes formas de configurar esto. Pero creo que para nuestro proyecto usando un árbol de mezcla de nodo de animación ya que el nodo de árbol raíz va a funcionar. De acuerdo, entonces eso es lo que voy a ir con por ahora. Por lo que podemos ver en el árbol de mezcla que tenemos una salida. Por lo que necesitamos determinar cómo vamos a llegar a esa salida y cuál de las animaciones va a ser la salida actual para que nuestro reproductor de animación lo use. Entonces en nuestro árbol de mezcla, el primer nodo que voy a agregar n va a ser cualquier clic derecho, por cierto, para agregar nodos, voy a bajar a blend space 1D. Entonces con ese espacio de mezcla 1D, básicamente
estamos trabajando con un parámetro como entrada. Y vamos a contar al árbol de animación sobre el valor del parámetro y el guión del jugador. Pero podemos ver esos parámetros si volvemos a hacer clic en el árbol de animación. Y vienes aquí abajo y el inspector, puedes ver perímetros mezclan espacio 1D. Ese es en realidad el nombre de nuestro parámetro justo aquí. Y el valor. Entonces esta es la posición de mezcla. Y se puede establecer eso con parámetros slash nombre del parámetro y luego slash blend possession. Entonces en nuestro caso vamos a estar fijándolo en negativo 101. Se pixel art juego. No vas a fusionar animaciones como lo harías con un modelo 3D. Por lo que sólo queremos esos tres valores. Y también podemos darle un mejor nombre para esto. Por lo que podría llamar a este valor x movimiento o x seno, seno que representa la dirección ya sea uno o 0 o uno negativo para el movimiento de nuestro personaje. Y al llevar eso al editor aquí, somos capaces de determinar si debe mostrar inactivo o Vaughn. Entonces vamos a abrir aquí el editor y luego vamos a sumar puntos aquí dentro. Entonces voy a golpear Crear puntos por aquí a
la izquierda y luego hacer clic izquierdo en el medio, agregar animación inactiva. Entonces si el valor de x move se establece en 0, Eso lo va a hacer inactivo. Así que vamos a dar clic aquí en la ejecución de animación de anuncios correcta. Por lo que podemos ver mirando la gráfica que esto se establece con un valor de uno por aquí a la derecha. El EIDL es 0 y luego negativo 1. También queremos hacer animación Run. Por lo que todavía va a estar funcionando. Simplemente va a estar haciéndolo en dirección inversa. Por lo que queremos que reproduzca la animación de carrera. Para que podamos salir aquí a la raíz. Y voy a conectar esto a la salida. Ahora, todo lo que necesitamos hacer es establecer este parámetro en el código. Y el árbol de animación podrá decirle al jugador de animación si se ejecuta o si se inactiva para la animación. Entonces vamos a dar click en el árbol de animación. El parámetro que necesitamos establecer una vez más es este x mueve. Por lo que si pasamos el cursor sobre la posición de mezcla, podemos ver el camino completo hacia ella es
barra de perímetro x guión bajo movimiento movimiento barra barra de mezcla de subrayado posición. Entonces si vamos al guión del jugador ahora, entonces después de que se establezca la velocidad, quitando diapositiva, vamos a querer establecer algunos parámetros de animación. Por lo que crearé un conjunto de funciones con nombre apropiado n m parámetros. Y como que podemos bajar aquí. Simplemente entraré en realidad un par de líneas y
lo escribiremos justo debajo de este proceso de física. Por lo tanto, conjunto de funciones y parámetros m. Entonces para esto vamos a necesitar hacer referencia a la velocidad. Pero una vez más, podemos ver que la velocidad siempre se está configurando aquí en la parte superior. Por lo que realmente no necesitamos convertirlo en un parámetro dentro de esta función, solo
podemos hacer referencia a eso directamente. Pero lo que sí necesitamos en este momento todavía es una referencia al árbol de animación. Entonces si quieres tomar uno de los nodos que está dentro de tu jerarquía de escena y referirlo realmente fácilmente dentro de tu script. Entonces lo que puedes hacer es subir aquí. Vamos por encima de la velocidad. Por lo que ahora aquí arriba necesitamos escribir en inlisto. Y lo que esto significa es que cuando empieza el guión, tenemos que hacer algo. Pero estamos poniendo el encendido listo con una variable. Entonces cuando empieza el guión, estamos haciendo algo con esta variable. Y la variable va a ser árbol de subrayado de animación. Entonces ese es el nombre de la variable. Pero lo que realmente queremos aquí es una referencia al nodo del árbol de animación. Y la forma en que hacemos eso es golpear iguales y luego ponemos árbol de animación de signo de dólar. Entonces esto va a mirar en nuestra jerarquía de escena y luego tratar de encontrar el nodo llamado árbol de animación. Y luego cuando empiece el guión, va a tomar ese nodo y asignarlo aquí. Y con lo no listo, esto se asigna una vez que se inicia el guión. Entonces ahora que tenemos el árbol de animación, podemos establecer parámetros en el árbol de animación en nuestra función set y m parámetros. Entonces voy a hacer animación underscore treat dot set porque estamos configurando un parámetro. Y ahora necesitamos el camino al parámetro dentro de ese nodo. Entonces queremos que los parámetros slash el nombre del parámetro, que creo que se llamaba X move, y luego slash blend position. Y lo que queremos poner ahí va a ser la señal de la velocidad. Por lo que o va a ser 10 o uno negativo y ningún otro valor. Ya que no estamos tratando de fundir realmente, Esos son los valores que queremos usar. Por lo que es 100%, ya sea inactivo o 100% correr y no tratar de hacer nada raro. Entonces vamos a conseguir el signo de la velocidad x y ese es básicamente ese valor. Y después tendremos más parámetros de anime, pero eso es todo lo que necesitamos ya que solo estamos haciendo el movimiento x. Entonces sigamos adelante y pegamos juego y podemos movernos a izquierda y derecha. Todavía no está funcionando del todo. Y creo que eso se debe a que el árbol de animación no se activa en realidad. Tan libre cheque activa el árbol de animación. Ahora va a mostrar la animación ociosa. De acuerdo, también podemos ver que cambia a la animación de movimiento, pero sólo después de que ha ocurrido un segundo. Entonces lo que pasa ahí es que si
saltamos al jugador de Animación y miramos estas animaciones, que solo se están actualizando una vez por segundo. Por lo que la animación foie necesita ocurrir actualmente para que cambie entre animaciones. Entonces para nosotros, esa es una solución bastante fácil. Simplemente podemos tomarnos el tiempo de cada una de las animaciones y ponerlas en ¢0.05. Todo lo que esto está haciendo en realidad es asegurarse de que esté en la animación correcta, jugando en el sprite de animación. Entonces la duración realmente no importa aquí, 0.05 para la animación inactiva, la animación de salto. Así que imprime 05 y asegurémonos de que R1 esté ahí dos. Entonces 0.05, sigamos adelante y golpeemos el juego. Por lo que ahora podemos movernos en nuestro juego. Y cuando nos movemos, cambia instantáneamente a ese estado de ánimo. Y cuando empezamos a movernos, instantáneamente se mueve nuevo al estado de inactividad casi instantáneamente de todos modos, toma 0.05 segundos como mucho, por lo que prácticamente funcionará bien. Ahora también vimos que el personaje puede moverse a izquierda y derecha, pero no ajusta la dirección que está mirando en función de si se mueve a izquierda y derecha. Por lo que necesitamos una función más aquí arriba llamada ajustar dirección de giro. Y en eso va a tomar las variables de entrada. Entonces esta es esa importación de aquí abajo. De acuerdo, en realidad podemos detener el juego para que no llegue a puntos de rotura. Por lo que necesitamos escribir el código para solo dirección de giro. Añadiré otra función aquí abajo. Por lo que función ajustar la dirección del volteo. Se va a tomar un parámetro y voy a especificar que ese debería ser un factor dos. Entonces un punto y coma vector 2 y luego terminar esa línea con otro punto y coma. Entonces lo que vamos a estar revisando aquí es básicamente el signo de la entrada. Ahora también podríamos comprobar el signo de la velocidad actual de los personajes. Pero quiero que el personaje se enfrente a la dirección en la que el jugador está tratando de moverse,
no necesariamente esa dirección en la que se dirige la velocidad actual de los personajes. Ahora, para este personaje, si solo nos movemos al instante 200 a la izquierda o a un 100 a la derecha, la velocidad de movimiento, y no hay nada más actuando sobre ella. No habrá ninguna diferencia funcional ahí, pero algunos personajes podrían tener aceleración, ya sea acelerando hacia la derecha porque estás manteniendo la tasa hacia abajo. Pero en realidad no ha cambiado la dirección de velocidad de izquierda a derecha porque tiene un acelerado lo suficientemente largo O para
cambiar realmente direcciones y de qué manera se dirige en la pantalla. Entonces, de todos modos, vamos a usar si seno de la entrada X es igual a 1, básicamente significa que el valor es positivo hacia la dirección correcta, entonces el sprite animado no va a dar la vuelta en su dirección. Por lo que animado sprite dot flip H para horizontal es falso. Nuestra dirección predeterminada va a ser falsa y siempre se puede cambiar esto. También podrías tener una
variable orientada por defecto si quisieras ser un poco más flexible. Pero sólo vamos a asumir aquí que estamos haciendo la cara de nuestro personaje justo por defecto. Entonces esto parece correcto. Y nuestra alternativa es otra cosa, si este signo importa que x es igual a uno negativo ya que el personaje está presionando hacia la izquierda, entonces el sprite animado debería mirar hacia la dirección izquierda. No, no, no tengo otra. Si el seno es 0 aquí porque si hay 0, no hay entrada. Y si no hay entrada, no
quiero cambiar a qué dirección se enfrenta. Simplemente debería enfrentar donde se enfrentaba. Antes de la última vez soltamos el teclado. Y en realidad nos perderemos estas variables sprite animadas. Por lo que necesitamos otro sobre var listo aquí arriba. Entonces al igual que con el árbol de animación que el sprite animado está anidado en nuestra jerarquía para la escena. Var tan poco listo, guión bajo animado, spray iguala signo de dólar, sprite animado. Y eso es todo lo que tenemos que hacer para hacer referencia a esto. Ten en cuenta que cuando haces las cosas de esta manera, debes mantener el nombre igual o de lo contrario creo que puedes tropezar con problemas ahí. Pero si este es el nombre del nodo, va a hacer referencia a eso tan bien siempre ese nodo esté contenido en esta jerarquía. Entonces ahora eso debería resolver ese problema. Adelante y golpeemos Play y nuestro personaje se enfrentará ahora a la dirección correcta. También podemos saltar. Y mientras saltamos, el personaje puede enfrentar la dirección correcta. Pero aún no está tocando la animación para eso. Entonces eso será algo que configuramos en el siguiente video mientras caminamos sobre nuestro árbol de animación y nos ajustamos, nuestro estado es un poco más.
11. Configuración de las animaciones de salto y otoño en la animación: Entonces a continuación necesitamos configurar el árbol de animación para que podamos apoyar el cambio en la animación de salto. Entonces volvamos a sumergirnos en el jugador cantar. Voy a dar click aquí arriba. Y vamos a dar click en el árbol del jugador. Por lo que podemos ver actualmente que sólo tenemos un linspace una-dimensión, que es tomar ese parámetro x move con el fin de ir entre inactivo y correr. Pero queremos tener un caso donde el personaje esté en el aire. Y luego si está en el aire, deberíamos cambiar entre estados
ascendentes y caídos dependiendo de la dirección de la velocidad y. Entonces podemos tomar la salida de esta dimensión unidimensional, y luego podemos hacer clic derecho sobre aquí y crear una mezcla tres. Por lo que la mezcla tres permite tener tres entradas. Por lo que podemos tener un valor de mezcla negativo. Podemos tener el valor predeterminado de entrada estándar, que en este caso va a ser nuestro movimiento x. Entonces simplemente desconectaré ahí y lo conectaré justo aquí. Y entonces tenemos el caso de valor de mezcla positiva. Entonces seguiré adelante y llamaré a esto algo así como signo de subrayado y. También podría llamarlo y underscore velocity. Pero realmente vamos a tener tres valores aquí en negativo 101. Entonces si tenemos el valor de mezcla negativa, eso significa que el personaje está subiendo en la pantalla ya que el negativo está arriba en el eje y. Y eso va a significar que queremos la animación de salto. Entonces puedo hacer clic derecho aquí en una animación. Y podemos simplemente seleccionar saltar de la lista y alimentar eso a la mezcla negativa. Entonces lo mismo. Si tenemos una mezcla positiva personajes moviéndose hacia abajo en la pantalla. Por lo que queremos utilizar la animación de caída. Entonces haga clic con el botón derecho en animación, cambie a caer, que al parecer aún no se ha creado. Así que sigamos adelante y pasemos al jugador de animación aquí y creemos otra animación. Entonces solo tomaré este ídolo y lo duplicaré. Por lo que ahora tenemos copia inactivo. Voy a renombrar esto para ser otoño como la animación. Y solo tomaremos esta cosa de la animación, cambiaremos el valor de la animación de inactivo a la de otoño. Entonces debido a que duplicamos la animación, ya
tenemos el tiempo de la animación establecido en 0.05 segundos y en repetición. Entonces eso puede ser todo lo que necesitamos ahí. Por lo que de vuelta en árbol de animación, podemos seleccionar la animación de flores. A lo mejor realmente necesitamos recrear la caja de animación. Por lo que voy a hacer clic derecho Agregar animación. Y esperemos que esta vez se presente aquí. Por lo que tenemos la animación de otoño y queremos conectar esto con el valor de mezcla positiva. Entonces ahora tengo tres posibilidades son un salto, permitiendo que el espacio de mezcla escoja nuestra animación basada en el movimiento x o teniendo caída como la otra animación. Entonces conectemos esto a la salida aquí. Y vamos a mover este valor de deslizador alrededor. Para que podamos ver al plus uno, es una animación caída, negativa, tenemos la animación de salto. Y a 0, va a por defecto a lo que sea que la salida de linspace 1D esté por aquí. Entonces ahora necesitamos hacer una cosa más que es establecer este valor y código sinusoidal y. Entonces si hacemos clic en árbol de animación, podemos ampliar los perímetros y podemos ver el camino a este y sine. Entonces va a ser más o menos igual que el movimiento x y solo los parámetros cortan el nombre de la variable como la escribió aquí. Por lo que y signo de subrayado y luego finalmente barra cantidad de mezcla. Tenga en cuenta que para el espacio de mezcla 1D, la parte final de este parámetro fue la posición de mezcla. Pero para esta mezcla tres, en realidad
es cantidad de mezcla. Por lo que sí hay que tener cuidado ahí. De acuerdo, entonces volvamos al código y tenemos nuestra función de parámetros de animación aquí. Solo agreguemos otro poco aquí. Por lo tanto árbol de animación punto establecer parámetros y queremos y slash sine slash blend underscore amount. Y el valor que vamos a hacer para eso es sólo punto de velocidad
sinusoidal y Voy a seguir adelante y guardarlo. Por el bien de la consistencia, supongo que solo tomaré el movimiento x y renombraré eso para que sea x seno también. Y luego en el árbol de animación, solo
asegurémonos de que este parámetro se llame x seno. Entonces si lo cambias en un lugar, asegúrate de cambiarlo y el otro también. Y ahora podemos seguir adelante y relanzar el juego y ver si las animaciones juegan correctamente. Entonces sigamos adelante y golpeemos el juego. Está bien, y eso es todo. Saltar. Está bien. Por lo que cambia a la animación de salto y cuando cae, tiene la animación de caída. Por lo que nuestro personaje se mueve a izquierda y derecha y saltando y cayendo justo bien.
12. Señales y la etiqueta de Debugging del estado de jugador: De acuerdo, lo siguiente que quiero configurar es una etiqueta que podamos tener exhibición por encima de nuestro personaje para fines de
depuración con el fin de saber poco qué estado o animación es el personaje en un momento dado. Entonces en nuestro objeto de personaje, voy a hacer clic derecho y agregar un nodo hijo. Y entonces esto va a ser un nodo de etiqueta, que técnicamente es un nodo de control, pero puedes ponerlo nodo de control encima de un nodo 2D como un cuerpo cinemático 2D si quieres. De lo contrario, generalmente los nodos de controlador irían en el Canvas, que es una especie de su interfaz de usuario. Entonces voy a dar click en etiqueta aquí, y voy a posicionar esta etiqueta en algún lugar por encima de nuestro jugador. Entonces, solo moveamos esto aquí arriba. Y debido a que es hijo del jugador, debe moverse junto con el jugador. Entonces tal vez por el defecto de etiqueta, solo
puedo escribir ninguno aquí o algo así. Y luego tomaremos la alineación para el texto y
lo centraremos solo para que se vea un poco más bonito ahí. Entonces lo que podemos hacer con esta etiqueta para que muestre el estado actual que es el jugador y es crear una señal. Por lo que a la vista del guión del jugador creará una señal aquí. Por lo que bajo el estado actual establecido, siempre que se establezca un nuevo estado, vamos a crear una forma de decirle la etiqueta que el nuevo estado se ha establecido. Entonces una forma sería simplemente acceder directamente a la etiqueta aquí arriba, como hizo con esto, y luego simplemente hacer etiqueta texto punto igual a cualquiera que sea el nuevo valor. Pero otra forma es crear una señal. Entonces como señal básicamente envía un mensaje y todo lo que se adjunta a esa señal podrá responderle de alguna manera. Entonces en lugar de la etiqueta o el jugador corporal cinemático que necesita conocerse directamente el uno del otro. El sello solo necesita tener, la etiqueta solo necesita tener una función de respuesta a la señal que se emite por el jugador, pero no necesita saber nada del jugador directamente. Entonces en cierto sentido ese tipo de desacopla tu código entre tus objetos. Y entonces el punto de conexión es la señal en sí, cual se puede conectar para comprar código. Y también puedes conectarte con bastante facilidad haciendo clic en el objeto que va al nodo. Y luego se puede ver un montón de señales aquí a las que se puede responder. Entonces cuando creemos una señal y el guión del jugador, aparecerá por aquí. Y luego podemos hacer doble clic y la sección de notas y simplemente decirle cualquier otro objeto que queremos responder a la emisión de señales para tener una función, para hacer algo con los datos cuando se emita esa señal. Entonces déjame seguir adelante y configurarlo y ojalá tenga sentido después de eso. Entonces déjame sumergirme en el código aquí. Por lo que aquí arriba en la parte superior, crearemos una señal para esta clase de jugadores emita cada vez que queramos emitirla dentro del guión. Por lo que añadiré un par de espacios aquí. Escribiré en señal y supongo que lo llamaré estado cambiado. Y entonces esto va a tener un valor para cualquier otro script como el script de etiqueta al que responder. Entonces lo voy a llamar un nuevo estado. Y eso es más o menos por configurar esta señal. Ahora sólo necesitamos emitir esta señal. Entonces aquí abajo en la parte inferior, y vamos a emitir una nueva señal cada vez que cambie el estado. Entonces emiten señal. Y luego ponemos el nombre de la señal. Así cambió de estado. Eso lo podemos ver aquí arriba. Y luego hay algunas otras señales por defecto, supongo para esta clase. Pero vamos a usar el personalizado que acabamos de crear. Y luego necesitamos los parámetros. Entonces voy a poner en el nuevo estado. Y entonces podemos guardar nuestro guión. Eso es más o menos. Ahora si hacemos click en nuestro jugador y vamos a la sección de notas en la parte superior derecha y extra inspector, podemos ver a este jugador punto G, D tiene una nueva señal. Y luego podemos hacer doble clic en esto para poder conectarnos a la señal. Por lo que haciendo clic en el jugador, ahora
podemos ir al nodo y hacer doble clic en donde dice estado cambiado aquí, la nueva señal que acabamos de crear. Ahora escogemos un guión con el que conectarlo. Y se va a crear unos métodos de receptor. Por lo que el jugador emite la señal con algunos valores de parámetros, y luego la etiqueta estatal tiene un método receptor con el fin de responder a eso. Por lo que vamos a dar click en etiqueta estatal conectada. Y ahora tenemos esta función sobre jugador cambiado de estado. Por lo que siempre que el jugador cambie de estado, queremos establecer el texto de esta etiqueta. Por lo que podría simplemente hacer texto de auto punto. Y así con el texto de la etiqueta, podemos establecer ahí el nuevo estado. Entonces voy a hacer cadena del nuevo estado. Entonces, cualquiera que sea el valor que se pase aquí, solo
queremos convertirlo en una cadena si ya no es una cadena, y establecerlo como texto. Entonces volvamos a nuestro juego y sigamos adelante y golpeamos el juego y veamos si esa señal está funcionando. Vale, tenemos que conseguir esa S. Así que intentemos eso otra vez. Entonces si seguimos adelante y golpeamos Play, podemos ver las enums siendo representadas como el valor entero. Entonces 0 para inactivo 14 corriendo y luego dos para saltar. Entonces técnicamente está funcionando bien. Pero aquí podría ser más útil mostrar el nombre de las enums. Entonces en lugar de decir 0 para inactivo, solo
tenemos inactivo representado en la parte superior ahí. Entonces si volvemos a la clase de jugador, cuando emitemos la señal, en lugar de emitir este nuevo estado como un entero, podemos hacer que el valor de cadena se empuje también. Entonces para hacer eso, vamos a subir aquí arriba en la cima. Y para este estado cambiado, en realidad
voy a tener dos parámetros siendo pasados. Entonces el primero es nuevos estados durante y luego el segundo, que es el actual, podría simplemente ser un nuevo ID de estado o un nuevo entero de estado, algo en esas líneas. Entonces ahora aquí abajo en la parte inferior, todavía
vamos a pasar el nuevo estado, que es el valor entero. Pero también vamos a acceder al nombre de cadena del estado y pasar eso también. Entonces podemos hacerlo accediendo al nombre de este estado. Entonces este es un diccionario y solo podemos hacer claves de punto de estado. Y ahora necesitamos pasar la posición de matriz, que va a ser donde encontremos nuevo estado. Entonces si hacemos eso y ahorramos, esto ahora debería pasar con dos argumentos a la etiqueta estatal. Entonces eso va por ahí. Y podríamos reconectar esta función si quisiéramos. Creo que podríamos simplemente ser capaces de salirnos con la suya reescribiendo los parámetros. Entonces nueva ID de estado y luego nueva cadena de estado. Y sólo vamos a tomar este valor y poner ese para que sea el nuevo texto. Por lo que ahora nuestra señal nos va a dar dos parámetros con los que trabajar. Y sólo nos importa la cuerda porque eso es lo que queremos
mostrar por encima del jugador con fines de depuración. Entonces sigamos adelante y veamos si eso realmente funciona. Voy a pegarle juego. Y ahora nos metemos en el juego. De acuerdo, tenemos ralentí, ralentí correr y saltar. Por lo que eso debería ser mucho más útil que solo tener un 0 o uno o dos aparezcan encima de la obra.
13. Seguir la cámara: Entonces ahora que nuestro personaje se puede mover en su mayor parte, una de las cosas que vamos a querer agregar es va a ser una siguiente cámara. Por lo que actualmente, la cámara que configuramos sólo está dirigida a esta área y es estática. Entonces si le pegamos al juego, no
va a seguir a nuestro personaje en absoluto. Por lo que un personaje puede correr fuera de la pantalla. Y eso podría ser un problema si llegamos a esta parte donde ya no podemos ver a nuestro jugador. Ahora, en algunos casos, quizá
quieras tener una cámara estática
dependiendo del estilo de tu juego o de esta escena específica. Por lo que en realidad puedes cambiar entre diferentes cámaras estáticas si solo querías pasar de pantalla a pantalla, algo así como como etapas individuales. Pero si sí quieres tener una cámara de seguimiento, déjame mostrarte cómo hacerlo. Entonces tenemos nuestro nivel y luego el jugador aquí abajo. Y necesitamos agregar una transformación remota al reproductor para que la cámara 2D pueda rastrear. Entonces si hago clic derecho en jugador y agrego un nodo hijo, podemos buscar ese nodo transformado remoto, solo teclea REM. Y aquí tenemos transformación remota 2D. Entonces voy a añadir eso en. Y ahora esta nota 2D de transformación remota tiene una propiedad llamada ruta remota. Entonces, básicamente, el camino remoto le dice a
un objeto diferente que mire esta transformación para rastrearla. En este caso, esas van a ser las cámaras. Entonces asignemos la cámara 2D. Y eso será básicamente todo lo que tenemos que hacer para asegurarnos de que la cámara siga esta transformación remota alrededor. Y por defecto el suavizado es un encendido. Voy a apagar eso ahora mismo y golpear play. Entonces si no tienes Suavizado, entonces la cámara va básicamente a seguir perfectamente la cantidad de tu personaje. Y no habrá ningún rezago entre el movimiento de los personajes y la cámara. Por lo que en algunas circunstancias podría querer que haya un poquito de un siguiente rezago. Por lo que puedes comprobar habilitado aquí. Y cuanto menos rezago quieras, más velocidad vas a aumentar. Entonces si quieres que sea muy lento en seguir al jugador alrededor, entonces querrías una velocidad menor. Esto es por defecto de cinco. Entonces sigamos adelante y probarlo con 10. Entonces vamos a golpear Play y movernos. Y se puede ver un montón de Jenkins, Sí, ¿verdad? Entonces un ajuste que podemos usar que ayudará a corregir que mucho es el pixel snapping de la GPU. Entonces si entramos en el menú del proyecto arriba a la izquierda y luego en la configuración del proyecto, podemos buscar el ajuste de píxeles y creo que está bajo Renderización 2D. Por lo que sólo podemos comprobar esto. Y eso arreglará muchos de nuestros problemas de visualización. Entonces cerraré eso y sigamos adelante y volvamos a tocar de nuevo. Y esta vez, cuando nos movemos por la pantalla, se ve mucho, mucho mejor. Por lo que una vez más, si ese siguiente es demasiado rápido, puedes intentar bajar la velocidad. Entonces cinco es el defecto. Vamos a mostrar cómo se ve eso. Y aquí básicamente fuera de eso. Entonces si dejo de moverme, definitivamente puedes ver el rezago ahí. Entonces depende de ti cuáles van a ser
tus preferencias personales para tu estilo de juego. Adelante y cerremos eso ahí fuera. Y supongo que por ahora solo voy a volver a ponerlo a 10. Entonces eso es básicamente todo lo que necesitas, solo una transformación remota y dile a la cámara que la mire. Y básicamente eres bueno para ir por nuestra cámara de seguimiento y conseguir o.
14. Código estado de salto. doble: Oye, por lo que actualmente nuestro personaje puede moverse por la pantalla, puede saltar. Pero lo que podríamos querer hacer es agregar un poco de funcionalidad extra a nuestro personaje. Entonces con el fin de dejarlos moverse por el nivel un poco más fácil, Vamos a seguir adelante y sumar en doble salto. Entonces voy a salir del modo play y vamos al guión para nuestro personaje. Entonces dentro de este guión, podemos configurar un nuevo estado y tenerlo cambiado a eso con pick next state igual que antes. Entonces lo que básicamente vamos a hacer es que si se presiona la entrada, vamos a saltar. Pero en este caso va a ser un doble salto porque el personaje ya está en el aire. Entonces eso va a, así que para nuestro pick próximo estado, va a ser similar a aquí mismo, donde si se presiona salto, entramos salto, pero vamos a estar revisando cuándo los personajes y el aire, y si el personaje está en el aire y salta reprimido, entonces vamos a hacer un doble salto sólo mientras el personaje no haya golpeado sus saltos máximos. Por lo que está en piso se pone en falso significa que va a bajar aquí. Por lo que podemos simplemente configurar el si input es acción acaba de presionar. Y luego buscamos salto. Y ahora vamos a cambiar al estado de doble salto, que aún no hemos creado. Entonces estado punto-punto-punto salto, doble salto de subrayado. Y me desplazaré hasta aquí hasta arriba y sólo lo añadiremos a nuestra lista de estados. Entonces doble salto. Entonces, ¿qué queremos pasar cuando se presiona el salto? Bueno, queremos que salte igual que hicimos con el estado regular de Saltos. También queremos que salte cuando hacemos un doble salto. Ahora esto podría ser exactamente como el primer salto donde simplemente hacemos el impulso de salto negativo. O puedes tener una función separada para un doble salto. Y tal vez eso tiene un valor de impulso de salto diferente. Por ahora, sólo lo pondré aquí abajo para hacer un salto normal en cuanto a su movimiento. Entonces, cómo podemos agregar doble salto a esta pequeña declaración de partido aquí es que solo ponemos una coma y luego hacemos state dot double jump. Y creo que ahí también podemos tener un espacio. Hit Guardar. Entonces ahora si el estado es salto o doble salto, vamos a ejecutar la función de salto. Por lo que solo puedes tener como una lista de diferentes estados sí quieren igualar ciertas acciones a. Ahora por supuesto, esto sólo coincide con el movimiento de la misma. Todavía tendremos que configurar el árbol de animación para el cambio a la animación de doble salto. Pero otra condición que quiero agregar a esto es la acción acaba de presionar es ver si los saltos están por encima del número máximo de saltos. Porque nuestro personaje probablemente pueda saltar dos veces, pero normalmente no más que eso. Por lo que podemos tener una variable de saltos max, podría ponerla en dos o tres como muchos quieras. Pero si no tenemos ese set, el personaje sólo podrá seguir saltando para siempre. Por lo que en realidad podemos simplemente demostrar eso en juego. Voy a seguir adelante y apretar el botón de reproducción. Y empecemos a saltar. Por lo que solo puedo seguir spamming el botón de salto y simplemente ir muy por encima del nivel. En términos generales, eso sería rompedor. Entonces sigamos adelante y cerremos eso y tengamos una variable de saltos máximos aquí arriba. Entonces voy a hacer export integer var max saltos, y voy a por defecto eso a dos. Entonces cada vez que nos topamos con esta situación donde podríamos hacerlo saltar, nos aseguramos de que no haya alcanzado ya esta cantidad de saltos máximos. Entonces eso va a ser aquí abajo. Cuando estamos considerando hacer un doble salto. Queremos que la condición final que salta sea menor o igual a los saltos máximos. Y como sabemos, cada vez que corremos la función de salto que se va a aumentar. Por lo que golpeamos Jump una vez para entrar al aire y debería ir a uno. Hacemos el doble salto y debería llegar a dos. Y no deberías poder hacer más saltos hasta que lleguemos al suelo y luego esté en piso es cierto, y los saltos se ponen a 0. Entonces sigamos adelante y pegamos juego y mientras en el suelo así puedo saltar una vez y puedo golpear barra espaciadora dos veces para doble salto. De acuerdo, parece que todavía podemos saltar para siempre. Entonces echemos un vistazo a eso. Entonces creo que lo voy a depurar imprimiendo el número de saltos a la consola. Acércate aquí, la salida. Y veamos qué pasa cuando tocamos play y luego seguimos tocando el botón de salto. Por lo que 23. De acuerdo, parece que podemos ir a tres, pero no más alto que eso. Entonces, sí, esto en realidad debería ser menor que el número de saltos máximos. Y ahora el personaje sólo debería poder saltar dos veces. Entonces vamos a repetir el juego 12, vale, 123, nope, no funciona. De acuerdo, entonces sólo podemos hacer dos saltos. Tenemos doble salto, pero no va más que eso.
15. Configurar un salto doble en la imagen y el código: Entonces lo siguiente que tenemos que hacer es configurar la animación de doble salto para trabajar con el truco de animación. Entonces si echamos un vistazo al sprite animado en la escena del jugador, podemos ver echando un vistazo a estas animaciones que la animación de doble salto aquí es un voltereta. Entonces voy a decir que el personaje sólo debe hacer un salto mortal cada vez que golpeemos la barra espaciadora para hacer un doble salto. Entonces, por tanto, esto va a ser un poco más lo que llamaríamos una animación de un solo disparo. Y podemos configurar eso con bastante facilidad en el árbol de animación también. Por lo que a un tiro se va a jugar una vez y luego se va a reanudar otras animaciones dependiendo de otros parámetros que hayamos establecido. Por lo que este solo disparo va a tener prioridad sobre las animaciones estándar de salto, caída, inactividad y ejecución. Entonces si hacemos clic derecho en el gráfico de nodos aquí, podemos agregar un solo disparo. Por lo que verás que tiene dos puertos. Uno para el disparo único en una entrada estándar de cuatro años. Entonces voy a tomar este conector entre la mezcla tres y nuestra salida. Entonces voy a redirigir eso a la entrada. Y entonces el único disparo se va a conectar a la salida. Entonces esto va a significar que son de un solo disparo toma prioridad sobre cualquier otra cosa por aquí. Si el one-shot está activo y sabemos que está activo por este pequeño parámetro booleano que podemos establecer cuando esto está encendido, queremos que reproduzca la animación de doble salto. Entonces voy a hacer clic derecho en el gráfico de nodos, ir a animación. Y luego aquí, Vamos a seleccionar la animación de doble salto, conectarlo a la toma única, y vamos a renombrar el parámetro que va a usar esta toma de una sola. Por lo que si hace clic en árbol de animación, podemos ver el perímetro de un solo disparo aquí. Y vamos a darle un nombre que sea más específico. Por lo que sólo lo llamaré salto de guión bajo doble. Creo que eso es lo más claro que puede hacerlo. Y si pasamos el cursor sobre el activo, podemos ver que el camino completo a este parámetro es perímetros barra inclinada doble guión bajo salto barra inclinada activa. Entonces vamos a necesitar poner esa codificación en un minuto. Pero antes de hacer eso, cuando tenemos un nodo de un solo disparo, hay dos propiedades que debemos cambiar. Entonces esa es la hora de Baden y el tiempo de desvanecerse. Por lo que para nuestra animación de pixel art, no
queremos que haya un retraso de tiempo entre entrar en una animación y en realidad iniciar el reproducirlo. Entonces queremos tomar estos y ponerlo en 0 para ambos. Entonces, cuando el one-shot está activo, el
cambio debe ser inmediato. De acuerdo, entonces ahora podemos saltar al código. Entonces echemos un vistazo a esto. Nos va a gustar antes necesitamos usar el árbol de animación y establecer un parámetro. Pero esta función set y m parámetros se está ejecutando cada actualización de proceso de física. Por lo que eso sería un número fijo de veces por segundo. Pero la cosa es que en realidad sólo necesitamos establecer ese parámetro de animación en verdadero, específicamente cuando estamos haciendo saltos dobles. Por lo que sería muy redundante ponerlo aquí y hacer algún tipo de cheque y luego ponerlo en activo o falso en cada segundo. Entonces, en realidad bajemos aquí hasta el fondo. Y un lugar mucho mejor sería ponerlo en el centro. Entonces cuando entramos a un nuevo estado con estado actual establecido, podemos tener ese parámetro B sat cuando entramos al estado de salto doble. Entonces si aún no has separado tu estado de salto de punto y estado punto doble salto coincidente. Eso lo puedes hacer ahora. Entonces voy a poner un colon aquí. Y vamos a tomar doble salto estatal. Y voy a mover eso abajo. Entonces esto ahora va a ser su propia cosa separada. Estado punto-punto-punto salto colon. Y claro que todavía vamos a querer que haga ese salto, la función del salto. Pero también vamos a querer tomar el árbol de animación y establecer el parámetro. Por lo que el nombre de los perímetros era parámetros barra barra doble guión bajo salto barra activa. Y debido a que acabamos de entrar en doble salto, queremos que eso sea cierto. Por lo que esto básicamente le dice al árbol de animación K. Juega el único tiro. Vamos a hacer el salto doble voltereta porque ahora estamos en el estado de doble salto. Entonces lo último que tenemos que hacer es averiguar cómo salir de este solo disparo. Por lo que el guión va a poner esto en verdad, pero también tenemos que ponerlo a punto apagado para que pueda ir a reproducir las otras animaciones después de que esté hecho. Por lo que podemos hacer eso en el jugador de animación. Y si encuentras la animación de doble salto, se debe establecer en 0.3 segundos. Por lo que está jugando seis fotogramas a 20 fotogramas por segundo. Por lo que hacemos la animación 0.3 segundos de duración. Y también queremos desactivar el bucle de animación si eso está encendido aquí a la derecha, porque esto sólo se supone que se juegue una vez y luego Finalizar. Ahora podemos acercar un poco aquí y vamos a querer añadir otra pista. Vamos a establecer el parámetro en el árbol de animación para el one-shot a false cuando esta animación esté terminada. Y por supuesto estas múltiples formas podrías hacer eso. Eso se podría hacer en el código aquí también. Pero esto me parece más conveniente. Entonces voy a agregar pista, propiedad,
pista, árbol de animación, elegir el perímetro. Perímetro es doble salto activo. Y ahora necesitamos establecer un fotograma clave para eso. Entonces por aquí a 0.3 segundos cuando se haga esta animación, haga clic con el botón derecho en Insertar tecla, y ya se va a desactivar por defecto. Entonces básicamente, en este punto del tiempo, está tomando el perímetro,
el doble salto activo, y configurando eso en falso, lo que indica que la animación está hecha. Entonces después de eso, hay un disparo será falso y se
reanudará volviendo a la mezcla tres para escoger lo que debería ser la salida. Entonces si todo va bien, eso debería ser todo lo que realmente necesitamos hacer para armar este solo disparo. Pongamos a Play y veamos dónde estamos. De acuerdo, animaciones para trabajar con salto y ahí está nuestro doble salto funcionando muy bien. Algo a tener en cuenta, la forma en que se escribe el código actual, un jugador puede saltar hasta dos veces antes de que toque el suelo. Entonces si realmente te caes aquí, eso no cuenta como un salto. Entonces si me caigo y hago un doble salto, realidad
podemos hacer para dobles saltos en el aire. Por supuesto, sólo va a jugar una vez si el primer salto doble sigue funcionando. A ver. De acuerdo, Pero sí, si la animación está terminada y haces ese segundo salto de flecha, entonces hará esa segunda animación ahí. Entonces sólo algo en lo que pensar. Quizás quieras que tu personaje sea capaz de hacer eso donde independientemente de cómo se metió en el aire, saltaste dos veces o quizá quieras que se limite que un personaje solo pueda hacer un doble salto en el aire, punto independientemente de si se cayó del borde o saltó al aire. En cuyo caso se podría configurar una variable como se ha producido el doble salto. Y si eso es falso, entonces permite el doble salto. Y una vez que entras en doble salto, ponlo en true y solo restablece eso cuando el, cuando el personaje golpea el suelo. De lo contrario, en realidad podría gustarte cuando tu personaje puede saltar dos veces sin importar, podría tener sentido para algunos juegos. Entonces sólo algo en lo que pensar, pero más o menos para este video, conseguir que la animación se reproduzca como un solo disparo parece estar funcionando. Entonces supongo que aquí estamos bien.
16. Trato de la ruta para la enología de perla: A continuación, vamos a crear un enemigo para nuestro juego de plataformas. Entonces vamos a usar el arte para cerdo enojado para esto. Y voy a abrir arte, pixel adventure a los enemigos. Y ahí tenemos nuestros diferentes sprites de carácter. Por lo que podemos hacer click en cualquiera de esos y ver básicamente una vista previa de las diferentes animaciones sobre arriba a la derecha. Entonces para crear nuestro nuevo enemigo, va a ser algo parecido a crear nuestros objetos de jugador. Por lo que necesitamos crear una nueva escena. Y la raíz de esa escena es por supuesto que va a ser un cuerpo cinemático 2D. Significa que cómo se mueve va a ser algo que tenemos que escribir en configuración para nosotros mismos en un guión. Entonces vamos a escena y nueva escena. Y luego por aquí, Vamos otro nodo y luego cuerpo cinemático 2D. Entonces para este cuerpo cinemático, Vamos a hacer doble clic en él. Y podemos ver que básicamente está centrado en la vista de escena en la posición 0, x y 0 y Eso es lo que queremos. Y vamos a agregarle un sprite animado. Así que agrega nodo hijo y luego sprite animado. Y una vez más, la razón por la que estamos usando sprites animados es porque para el pack SART, todas las animaciones se dividen en sus propias texturas rectas individuales. Por lo que los sprites animados nos permiten usar texturas separadas para diferentes animaciones. Mucho más fácil de lo que sería con un nodo sprite. Tomemos el sprite animado y crearé algunas animaciones para ello. Vayamos al lado derecho. Entonces encuadra o pulsa en el botón vacío y haz clic en Nuevos marcos sprite. Abramos eso. Y luego tenemos nuestra ventana de animaciones aquí abajo en la parte inferior, va a por defecto todo a 20 FPS. Y cambiemos el nombre de la primera animación a inactiva. Entonces haremos clic en este botón por aquí que parece una cuadrícula para añadir marcos de hoja sprite y entraremos en arte, pixel adventure a enemigos, cerdo
enojado, y un inactivo. Así que podemos contar rápidamente cuántos marcos hay aquí. Tengo nueve. Por lo que nueve para horizontal, vertical, y luego en el lado derecho, seleccione Borrar todos los marcos, agregar marcos. Y si tenemos jugando, deberíamos poder ver ahí nuestra pequeña animación ociosa. Entonces ahora sólo necesitamos repetir eso para las otras animaciones. Entonces agreguemos una animación de carrera. Y correr tomará, por
supuesto, los marcos de corrida. Entonces veamos 3, 6, 9, 12. Por lo que 12 horizontal, una vertical. Selecciona todo añadir y hacer este talón 20 FPS. Entonces agreguemos eso desde el personaje. Esto parece alrededor de 16 por uno, o selecciona todos agregarlos. Y solo podemos probar que está funcionando teniendo una reproducción automática en esa animación. Tan solo asegurándose de que todo parezca centrado correctamente. Por lo que debería ser bastante obvio. De acuerdo, a continuación, agreguemos golpe uno y golpeemos 2 para cuando el enemigo recibe daño. Y eso parece cinco marcos. Selecciona Borrar todo. Y luego necesitamos hacer 20 FPS. De acuerdo, parece que lo estropeé agregándolo. Así que eliminemos todos los fotogramas y asegurémonos de que sea golpeado uno por una horizontal, uno vertical, y añadamos esos en. De acuerdo, eso es lo que deberíamos estar viendo. Ahora sumemos en dos. Entonces voy a añadir lo mismo por marcos. Por lo que cinco horizontales, una vertical, las
agregan y se asegura de que FPS sea 20. Para que podamos ir entre nuestras diferentes animaciones y todo debería estar jugando sin problemas. Entonces lo siguiente que vamos a necesitar hacer es determinar cómo se va a mover este personaje. Entonces mi idea para este cerdo enojado y lo que en realidad es renombrarlo ahí y guardarlo como una nueva escena. Tan enojado cerdo, o guardarlo en personajes porque aquí podemos crear una carpeta de enemigos por si acaso terminamos con mucho. Y luego cerdo enojado visto más, guárdalo ahí dentro. Entonces mi concepto para este personaje de cerdo va a ser que por defecto va a caminar entre dos waypoints diferentes investigación, lo que sólo se puede mover a izquierda y derecha. No hay movimiento vertical, al menos sin gravedad. Y si se detecta a un jugador, entonces en lugar de caminar, se va a cambiar a unas carreras enojadas. Por lo que ponemos eso a correr más adelante, aumentar la velocidad de movimiento del personaje. Y si el enemigo aquí se encuentra con el jugador, entonces el jugador recibirá algún daño. Y esos serán básicamente los hábitos de los cerdos enojados. Entonces un enemigo realmente simple aquí. Entonces voy a volver a poner el estado predeterminado en inactivo. Y podemos añadir un guión a este personaje. Por lo que sólo voy a hacer clic derecho Guión adjunto, y esto se llamará Angry pig dot h gd. Entonces por ahora, esto sólo extenderá cuerpo cinemático 2D. En el futuro, podríamos querer usar la herencia para tener un script enemigo base, y luego otros enemigos pueden heredar de eso y básicamente ganar parte de la funcionalidad básica. Por lo que no necesitamos escribirlo en cada enemigo. Pero por ahora solo pondremos todo en el cerdo enojado. Y luego si necesitamos llevarlo a una clase enemiga de mayor nivel más adelante, entonces lo haremos por separado en un video diferente. Entonces ahora mismo para el movimiento del que hablé, vamos a tener que armar algún tipo de punto de camino para nuestro personaje. Entonces si aún no lo has hecho, Sigamos adelante y salvemos la escena como carpeta senior y Enemigos. Entonces voy a subir aquí, Save Scene As. Y lo estoy poniendo en personajes, enemigos, como pueden ver aquí. Además, asegúrate de tener tu script guardado en la misma carpeta por motivos de organización. Y ahora vamos al nivel 1. Y sólo voy a dejar caer una copia del enemigo aquí. Entonces para que nuestro personaje se mueva, vamos a tener que darle algunos waypoints para poder avanzar hacia. Entonces hay algunas maneras en que podríamos hacer esto. Creo que lo que podría tener sentido es configurar algunos waypoints dentro de este nivel que nuestros enemigos puedan usar como punto para avanzar y luego asignarlo como lista. Siempre que creamos una instancia de nuestro objeto, solo
podremos asignarlos aquí en una matriz para qué posición debería haberse movido. Entonces en el nivel voy a hacer clic aquí arriba y voy a añadir un nuevo nodo. Por lo que comenzaremos con el nodo 2D como aparente, porque sí queremos que esta lista de waypoints mueva junto con el nivel si alguna vez nos movemos a la posición de niveles por cualquier motivo. Entonces voy a llamar a esto waypoints. Y después puntos en marcha, vamos a sumar algunas posiciones dos d. Entonces para estos, supongo que puedo simplemente renombrarlos waypoint uno y luego duplicarlos un par de veces y solo conseguiremos waypoint 1, 2, 3, así sucesivamente y así sucesivamente. Y él sólo tenía que asegurarse ya que los estás arrastrando por ahí, pero no son hijos el uno del otro, por lo que deberían ser lo suyo. Y luego podemos configurar la ubicación de estos waypoints cuando estamos
mirando esta pila de objetos y queremos
asegurarnos de que estamos moviendo el que hemos seleccionado. Puedes mantener presionada Alt. Y entonces eso asegurará que ese waypoint uno sea elegido y movido porque tenemos waypoint uno aquí arriba. Entonces si sostenemos Alt abajo, agarramos el correcto. Añadamos un waypoint. Digamos justo ahí. Y luego vayamos waypoint 2. Y sólo arrastraremos esto fuera de la pila dos ahí mismo. Por lo que nuestro personaje podrá dar un paso de ida y vuelta entre ahí y allá. Y luego saquemos 0.3. No hay necesidad de esto todavía, pero tal vez para el futuro habrá más relevante y lo voy a reventar por ahí. Por lo que ahora nuestro cerdo enojado va a necesitar una lista de posiciones hoy solían ser sus waypoints. Entonces vamos a abrir el guión y vamos a crear una exportación lejos. Entonces esto va a ser un array de posición 2D y lo llamaremos waypoints var. Tratemos de guardar eso. De acuerdo, así que en realidad no parece que usar una matriz
del tipo de nodo 2D de posición vaya a funcionar para nosotros. Entonces otra alternativa y mi cabeza es usar ruta de nodo aquí. Por lo que ninguna ruta va a ser la ruta relativa es un nodo. Y luego cuando el juego realmente se está ejecutando, podemos obtener el nodo de esa ruta de nodo y luego obtener la posición de esos nodos en el mundo del juego mientras el juego se está ejecutando. Entonces en este momento, deberíamos poder aumentar el tamaño de nuestra matriz por aquí a la derecha y luego asignar los diferentes nodos. Entonces queremos waypoint 1 y luego waypoint 2. Y entonces eso será todo para este personaje. Entonces ahora en el guion enojado Pig, ¿necesitamos asegurarnos de que cuando el juego esté funcionando, que nuestro personaje se mueva de ida y vuelta entre esos dos puntos. Y va a empezar con el primer waypoint. Por lo que deberíamos tener aquí una variable para hacer un seguimiento del waypoint en el que se encuentra. Entonces hagamos índice waypoint var. Y esto va a empezar a 0, lo que va a significar el primer waypoint de la lista. Y así además de eso, podemos tener una posición waypoint. Por lo que estas serán las coordenadas XY para donde se encuentra este waypoint. Por lo que sólo necesitamos conseguirlo una vez. Y luego cada vez que se está ejecutando la función de proceso de física, simplemente puede moverse hacia esta posición hasta llegar a esa posición. Entonces hablando de eso, no vamos a usar proceso dot-dot-dot Más va a querer proceso de física de funciones dot delta. Entonces pasemos eso por ahora mismo. Entonces cuando comience el juego, Vamos en realidad a seguir adelante y conseguir la posición del primer waypoint. Entonces vamos a hacer en listo para especificar que cuando empiece el juego, algo va a pasar aquí, o más específicamente, cuando comience el guión, que es presumiblemente cuando este personaje se carga al nivel. Entonces la posición waypoint, vamos a estar haciendo un nodo get y vamos a tener el array waypoints. Por lo que allá arriba. Y vamos a necesitar poner en el índice que estamos tratando de conseguir. Entonces índice waypoint al inicio de este juego, Suponiendo que este índice waypoint es 0, esto se obtiene el nodo en esa ubicación. Entonces después de que tengamos el nodo, sólo
vamos a necesitar la posición de ese nodo. Entonces pongamos eso aquí y podríamos seguir adelante y probar eso haciendo una huella en la posición waypoint, entonces podemos lanzar este nivel con ese cerdo enojado en él. Por lo que actualmente el cerdo enojado no tiene formas de colisión, pero eso debería estar bien por ahora mismo. Entonces sigamos adelante y golpeemos el juego, de acuerdo, y podemos ver que en realidad estamos consiguiendo la posición de ese waypoint, lo cual es bueno. Y en realidad podemos convertir esto en una función que podemos usar cada vez que necesitemos obtener y establecer la nueva posición waypoint, en realidad
podríamos convertirla en un conjunto de funciones. Entonces hagamos establecer punto de onda, supongo que diré índice. Y entonces haremos que esa función aquí abajo. Así que conjunto de funciones, índice waypoint. Y por supuesto estaríamos pasando el valor del nuevo índice. Entonces el índice waypoint va a ser igual a ese valor. Pero entonces también vamos a decir esa posición waypoint. Bueno, básicamente sólo esta línea de aquí arriba. Entonces pongamos eso ahí dentro y luego sustituyamos el valor el índice waypoint en este punto, diciendo esto o aquello sería lo mismo aquí. Pero ahora solo usaremos el valor que se pasó a esta función por si acaso. Entonces ahora siempre que dijimos el índice waypoint, también
establecemos la posición waypoint. Entonces supongo que en realidad seríamos capaces de borrar eso, hacer de esto una var honoraria. Entonces cuando el juego se cargue, va a establecer el valor en 0. Y podemos deshacernos de este bit, ya que eso va a ser asignado ya. Teóricamente, esto debería ser un vector a, creo, y sigamos adelante y veamos si eso funciona. Entonces veremos si llegamos a este punto cuando se inicie el juego. Ahora que esta función está ahí, en realidad
podemos simplemente tener que este bit se quite y no necesitamos que esto sea un ion listo. Pero lo que realmente podemos hacer y en realidad no eliminemos eso también. Tan solo tendremos cuando el juego comience aquí, y solo estableceremos el índice waypoint en el valor inicial. Entonces digamos punto de inicio. Y en realidad podríamos hacer de esto una exportación lejana. Entonces voy a hacer este waypoint de exportación y var inicial. Y vamos a por defecto eso a 0. Por lo que ahora en el script arranca, va a arrancar el índice waypoint en cualquiera que sea el waypoint inicial. Y como resultado de vender eso, También va a establecer la posición waypoint. De acuerdo, entonces en realidad necesitamos poner el índice de waypoint de auto punto aquí para asegurarnos de que se ejecute correctamente. Está bien, y ahora llega aquí abajo. Entonces es decir inválido get index, por
supuesto, porque puse esto en cinco para las pruebas. Y ahora podemos controlarlo con el waypoint de inicio. Y ese valor se puede fijar por aquí. Entonces si quieres que el cerdo enojado no se mueva al primer waypoint, sino al segundo waypoint, podrías simplemente especificar la posición de la matriz aquí y decidir a partir de eso. Básicamente en cualquier momento que cambiemos el índice de waypoint, también vamos a cambiar la posición del waypoint también. Por lo que ahora solo necesitamos configurar y mover velocidad
y asegurarnos de que el personaje se esté moviendo entre esos dos puntos. Entonces subamos aquí y creamos una variable de velocidad de movimiento. Entonces haré flujo de exportación, barra mueve velocidad, y solo estableceré arbitrariamente esto en 200 por ahora para el futuro. Además, mientras estamos en ello,
sumamos una velocidad de carrera. Entonces esta sería la velocidad rápida cuando el cerdo enojado está realmente enojado para correr velocidad y 300. Y ahora haciendo proceso de física, queremos que el personaje se mueva entre esos dos puntos. Entonces vamos a necesitar mirar la dirección entre
el personaje y el waypoint actual. Entonces por supuesto, como con muchas cosas, Hay algunas maneras diferentes en las que podríamos hacer esto. Entonces empecemos por conseguir la dirección entre el personaje actual, ellos cerdo enojado, y el waypoint. Entonces voy a hacer una dirección barda. Y luego hagamos el self.position. Y luego para ese vector, vamos a hacer la dirección dos. Y entonces tenemos que darle otro vector. Entonces por supuesto, necesitamos la posición waypoint, ¿de acuerdo? Y ahora que tenemos una dirección, también
podemos conseguir la distancia. Entonces hagámosla en realidad distancia x porque
sólo nos importa realmente la distancia horizontal, sin incluir lo lejos que está verticalmente, porque nuestro personaje nunca va a estar saltando arriba. Entonces vamos a usar el valor absoluto de auto posición x y luego menos el valor absoluto de la posición no-auto x, pero nuestro waypoint posición punto x Así que esta debería ser la distancia entre los dos puntos, sin contar dirección, y entonces esta sería la dirección. Entonces lo que vamos a hacer es si la distancia al waypoint está por encima de cierto umbral, entonces vamos a seguir avanzando hacia ese waypoint. Y si está por debajo de ese umbral, vamos a cambiar al siguiente waypoint y algo hacia lo que avanzar. Entonces si la distancia x es mayor, y podríamos decir mayor o igual entonces. Y podríamos llamar a esto algo así como waypoint, umbral son en realidad waypoint llegó distancia. Creo que tiene un poco más de sentido en mi cabeza. Entonces si la distancia es mayor a la distancia que llegó el waypoint, entonces vamos a movernos hacia waypoint. De lo contrario. Vamos a cambiar waypoints. Entonces vamos a poner el waypoint a distancia aquí arriba. Por lo que el flujo de exportación, nuestro waypoint llegó distancia. Y yo solo crearé eso como 10 por ahora mismo. Entonces para avanzar hacia el waypoint al principio, tenemos que conseguir una velocidad. Y en realidad podríamos hacer de esto una variable aquí arriba, es que necesitamos referirlo en otras funciones. Por lo que la velocidad va a ser igual a un vector dos. Y el valor x va a ser la velocidad de movimiento veces el seno de dirección punto x Así que independientemente de cuál sea este valor exacto de dirección, sólo
nos importa si es positivo, negativo, o 0. Entonces básicamente firmar o un poco convertir eso en uno positivo. Negativo uno o 0, lo que significa que la velocidad de movimiento va a ser consistentemente ya sea positiva 200, negativa 200, o 0. Y luego agreguemos una coma ahí. Por lo que el segundo valor será una gravedad. Pero supongo que por ahora, sólo
vamos a realmente, podemos simplemente mirar básicamente en los guiones de los jugadores. Entonces usaremos este mismo tipo de cosas. A ver. Sólo copiaré aquí toda esta línea. Entonces la velocidad actual y agregamos la gravedad, pero la tapamos a la velocidad terminal. Y esto sólo será consistente entre el jugador y los demás enemigos en el juego. Entonces, básicamente, detenemos eso justo ahí dentro. Y ahora nuestro personaje tiene gravedad basada en la configuración del juego. De acuerdo, entonces vamos a movernos y deslizar nuestro cuerpo cinemático. Y lo vamos a mover con la velocidad. Y sí queremos decir vector dos puntos arriba. Probablemente no seré demasiado relevante para un enemigo como este. Pero si alguna vez necesitamos comprobar si el cuerpo cinemático está en el suelo, entonces será importante tener la dirección ascendente fijada. Entonces mejor tener eso que no tenerlo, creo. Entonces de lo contrario, queremos cambiar waypoints. Entonces tenemos que averiguar a qué punto de camino estamos cambiando. Y para saber que tenemos que saber el tamaño de la matriz, básicamente cuántos waypoints hay actualmente en ella. Entonces por si acaso esto es algo que cambiaría durante el juego, supongo que lo conseguiremos una vez cada vez que llegue a este punto. Entonces vamos a Encontrar el tamaño de esa matriz. Así que waypoints entumecidos, waypoints, tamaño de punto. Y, y luego revisaremos el índice actual. Entonces si el índice waypoint es menor que el número de waypoints, entonces lo vamos a aumentar. Por lo que el índice waypoint es igual en lugar más igual a 1. lo contrario, si el índice waypoint es en realidad igual o superior al número de waypoints, entonces necesitamos restablecerlo a 0. Entonces el índice waypoint es igual a 0. Y entonces este bit nos permitirá recorrer los waypoints. Una cosa vamos a necesitar que inicialicemos esta variable de velocidad a un vector a 0. De acuerdo, Entonces eso significa que esto va a empezar con los valores que son 0. Y también nuestro personaje realmente va a necesitar tener una forma de colisión para que cualquiera de estas funciones físicas como movimientos, como trabajar en ello. Entonces sigamos adelante y agreguemos una forma de colisión a la púa enojada. Por lo que colisión en forma 2D. Ok, y vamos a darle un ahorro. Hagamos una forma rectangular. Mantenlo agradable y sencillo. Y luego aumentemos el tamaño de esta forma de colisión para que pueda interactuar con el suelo. Y voy a aguantar, estirar un poco. Y voy a entrar en la transformación y ajustar su posición hacia abajo unos píxeles. Voy a ser bastante importante que esta forma de colisión igual a la posición de los pies de tierra. Entonces, en realidad vamos a tocar juego aquí. Y podemos ver son cerdo enojado fue capaz de moverse a esta posición izquierda. Por lo que se mueve correctamente y se desliza a lo largo del suelo. El sueño de colisión parece ser aproximadamente bueno. Tiene el píxel derecho, justo encima del suelo ahí. Entonces eso está todo bien. Y ahora sólo tenemos que averiguarlo, ¿por qué no cambió a la segunda posición? Este cerdo enojado tiene dos posiciones aquí. Entonces voy a fijar un par de puntos de rotura. Siempre que cambie el índice waypoint. Apetemos a Play y veamos qué pasó. De acuerdo, Así que sí llegamos aquí donde el índice waypoint aumenta en uno. Entonces vamos a sumergirnos en esta próxima función. De acuerdo, no estamos usando el índice de waypoint de autof.age. Entonces necesitamos hacer eso o la función setter para realmente desencadenar allí. Entonces ahora podemos golpear play y ver si esto va a funcionar. De acuerdo, inválido obtener índice 2 en matriz. Entonces no debería haber llegado aquí con dos si el índice waypoint es menor que el número de waypoints. ¿ De acuerdo? Entonces debería ser número de waypoints menos 1, ¿de acuerdo? Porque esto es un conteo y luego esta es una posición de matriz. Y recuerda que espelorizante comienzan desde 0 y el conteo comienza desde uno. Por lo que necesitamos poner ahí un menos para ajustarnos a eso. Entonces ahora si golpeamos fluyendo, nuestro personaje debería estar bien. Por lo que mirando el código son cerdo se queda atascado por aquí. Y luego como podemos ver, está cambiando constantemente entre el primer y el segundo waypoint. De acuerdo, entonces aquí podemos ver en el código que este bit de aquí no está funcionando. Entonces podemos ver aquí abajo que cuando se alcanza el punto de primera vía, cambia al segundo waypoint. Y entonces esta distancia x es un 173 negativo. Entonces no queremos que esto nunca sea negativo, por lo que se va un poco lejos de hacer esto en realidad sería
conseguir dos vectores y compararlos con la distancia para funcionar. Entonces hagamos un vector dos del self.position dot x. Y diremos 0 para el y Vamos a hacer eso para ambos vectores, fuente una distancia dos y luego vector perimetral a waypoint posición x y luego 0. De acuerdo, entonces en realidad necesitamos waypoint underscore posición punto x Así que cuando lo hacemos de esta manera, básicamente estamos creando dos nuevos vectores y el valor y es el mismo. Por lo que lo único a comparar va a ser las posiciones x de esos dos vectores. Y una distancia dos va a ser dirección inespecífica. Entonces cuando lo hacemos de esta manera, deberíamos obtener un valor más 173 en lugar de un negativo. Y podríamos en realidad, bueno, realmente no
necesitamos hacerlo, sólo podemos darle un poco a Play. Y a ver si funciona. Entonces vamos a golpear juego, vale, y ahora podemos ver a nuestro personaje en realidad se mueve entre los dos puntos. Entonces eso es básicamente lo que queremos. Es decir, eso se mueve bastante rápido. Por lo que podría querer bajar eso de manera bastante significativa. Entonces vamos a la velocidad de movimiento, sea 100, esa velocidad de carrera 200. Y también, uh, sí queremos voltear la dirección de ese cerdo enojado. Entonces cuando se mueve hacia la izquierda, volteamos hacia la izquierda y uno se mueve hacia la derecha, volteamos hacia la derecha para que podamos hacerlo en el código con bastante facilidad como lo estábamos haciendo antes. Entonces supongo que podríamos decir aquí abajo, si vamos a hacer un movimiento, entonces podemos voltear la dirección. Así que vamos a tener acceso al sprite aquí arriba, y vamos a hacer nuestro sprite animado igual a signo de dólar sprite animado. Entonces eso es hacer referencia a esto aquí mismo. No necesita lo inlisto frente a ella. Por lo que el sprite animado dot h va a ser cierto en una condición. Y esa condición va a ser si el signo de la dirección x. Entonces deberíamos hacer una variable para eso. Por lo que var dirección x seno es igual signo Dirección punto x. ahora podemos hacer estallar eso justo aquí y justo aquí abajo. Si esto es, si éste es negativo, entonces lo voltearemos. Entonces si es negativo, entonces eso significa que vamos a la izquierda, lo que significa que queremos voltear esta brillante horizontal. Else-si el seno es uno, entonces eso significa que nos estamos moviendo hacia la derecha, lo que significa que queremos que se apague el volteo. Y estamos asumiendo actualmente que el sprite se enfrenta a la derecha por defecto. De lo contrario esto sería a la inversa. Entonces si el personaje se mueve hacia la izquierda, entonces está volteando hacia la izquierda. Y si se está moviendo hacia la derecha, entonces está volviendo al default, sin voltear. Y si no se está moviendo en absoluto donde la dirección x seno sería 0, entonces no estamos controlando el volteo porque si no se está moviendo, entonces realmente no deberíamos estar cambiando la dirección. Por lo que ahora podemos seguir adelante y reiniciar el juego. Pero C, Ok, entonces el volteo funcionando excepto que está en reversa. Entonces déjame echar un vistazo ahí. Supongo que este es un carácter de cara de izquierda por defecto. Entonces lo que podríamos hacer en realidad es poner nuestra exportación booleana por si acaso estuviéramos haciendo un nuevo personaje o cambiaran los sprites, quisiéramos poder establecer la dirección de giro predeterminada. Entonces aquí abajo podemos decir caras, ¿verdad? Y, y el reverso de caras justo aquí abajo. Y vamos a parar de nuevo por dinero. Entonces si el sprite se enfrenta a la derecha por defecto, entonces queremos apagar el volteo mientras está mirando hacia la derecha. Y si no se enfrenta a la derecha por defecto, así que si esto se establece en falso, por
lo que los rostros amados por defecto, entonces eso va a ser falso y no queremos darle la vuelta. Entonces, básicamente, mientras establezcamos este booleano en el valor correcto, el personaje debe enfrentar la dirección correcta cuando se mueve. Entonces estamos apagando caras, ¿verdad? Vamos a golpear Play. Podemos ver que nuestra instancia del cerdo es capaz de ir entre los dos waypoints. Es una especie de trabajo en general. Obviamente hay algunos problemas como correr con el jugador y estar atrapado ahí. Probablemente en realidad no queremos que haya una dura colisión con el jugador, sino más bien solo tal vez infligir daño al jugador y luego pasar por él. Y también necesitamos agregar y el estado de ejecución enojado y también asegurarnos de que se esté animando correctamente. Todo eso lo haremos probablemente en el próximo video o dos.
17. Animación estado enojada, capas de física y la naturaleza de la naturaleza: Entonces a estas alturas hay algunos ajustes que me gustaría hacerle al cerdo enojado. En primer lugar, necesita tener algún tipo de zona de detección para que cuando el cerdo enojado realmente vea al jugador, pueda cambiar a su modo de carrera enojado y moverse más rápido. En segundo lugar, como se puede ver, actualmente, ninguna de esas animaciones se está reproduciendo. Entonces tendremos que armar un árbol de animación para el cerdo enojado. Y también necesitaremos almacenarlo, configurando capas de física para que cuando el cerdo enojado se encuentre con el jugador, realidad no impida que el cuerpo de física se mueva así adelante este juego, vamos a hacerlo para que el jugador y los enemigos pueden moverse unos a otros, por supuesto, aún así poder hacernos daño unos a otros, pero tendremos que configurarlo empezando a usar capas de física. Por lo que podríamos no dejar que el cerdo colisione con la capa de jugador, pero podría haber una caja dañada en el cerdo, que detectará si puede hacer daño al jugador y luego hacerle daño al jugador cuando el jugador entre en esa zona específica. Y así una vez que tengamos la configuración de cerdo enojado con el árbol de animación también tendrá que
guiar los estados y el código para que eso se corresponda. Y eso es más o menos de lo que vamos a cuidar en este video. Entonces saltemos a la escena por nuestro cerdo enojado. Y le voy a añadir una nueva área. Entonces voy a agregar un nodo infantil y estamos buscando un área a d. Así que podemos simplemente escribir eso en la edición de búsqueda. Y esta zona 2D va a necesitar una forma de colisión propia. Por lo que voy a hacer clic derecho en él, añadir una coalición en forma de 2D. Entonces esto puede ser lo que quieras que sea. Y esta zona básicamente va a detectar cuando el jugador está cerca para que el cerdo enojado pueda entrar en su estado enojado, enfurecido. Entonces voy a renombrar el área 2D zona de detección enojada porque creo que eso sólo tiene un poco más de sentido aquí. Lo hará para que el personaje entre a ese estado aunque el jugador esté directamente por encima de la cabeza. Entonces en realidad voy a usar una forma ovalada. Entonces a la derecha donde tenemos Inspector, cambiemos la forma a forma de cápsula. Y luego lo voy a girar 90 grados porque quiero que sea más ancho que alto. Entonces vamos a la transformada 90 para los grados de rotación. De acuerdo, y entonces vamos a expandir esto a una cantidad razonable para que pueda ser básicamente tan grande o tan pequeño como quieras que sea. Y a medida que juegues prueba, claro, querrás ajustar eso. Incluso puedes tener un tamaño de zona personalizado para diferentes variaciones del enemigo, ¿de acuerdo? Y para esta furiosa detecciones en el área de dos D, voy a apagar los problemas de monitor porque en realidad
no necesito que esta zona sea detectada por cualquier otra cosa en el juego. Sólo necesitamos monitoreo encendido porque esta zona va a revisar para el jugador, pero nada necesita revisar su cuidado por esta zona. Por lo que parece inútil tenerlo puesto en realidad. Y de hecho, ¿por qué usar recursos extra cuando no tenemos que hacerlo? Entonces por eso lo dejo apagado. Y ahora podemos configurar un gráfico de nodos para un árbol de animación en este cerdo enojado. Entonces, al igual que el jugador, vamos a tener que hacer clic derecho y añadir algunas notas. Entonces vamos a añadir un árbol de animación. Y luego añadamos también una capa de animación. Por lo que este reproductor de animación va a tener toda
la configuración de animación que corresponden con nuestras animaciones en el sprite animado. Entonces vamos a crear hit one. Entonces vamos a crear hit uno, golpear a Idle, correr y caminar. Entonces en la configuración de animación, Hagamos nuevo. Golpea uno. Y luego podemos agregar una propiedad Trek. Por lo que el inmueble va a ser animado, animación sprite. Y en el cuadro 0, queremos que juegue. hit uno es la animación. Y vamos a por defecto estas animaciones para que tengan 0.05 segundos de largo y en repetición. Entonces ahora podemos duplicar esto. Y por supuesto que a continuación se golpeará dos. Entonces cambiemos esta animación al hit a la animación. Duplicarlo de nuevo, renombrarlo. También lo hacen Idle, correr y caminar animación. De acuerdo, así que esa es la configuración de animación. Ahora necesitamos conectarnos a la lógica y a un árbol. Entonces, para el árbol de animación, vamos a crear un árbol de mezcla de nodos de animación al igual que el jugador. Entonces para que funcione la zona de detección enojada, podemos configurar un espacio de mezcla uno D, lo que nos dará una variable que podemos establecer para controlar si el personaje debe estar caminando o corriendo. Entonces vamos a cambiar la variable aquí para jugar se detectan, y esto va a ser como un booleano, ya sea ponerlo en uno o 0. Y si abrimos el editor, podemos sumar en los puntos. Entonces a 0, queremos que sea una animación caminando, significa que el jugador no es detectado. Y luego a una, queremos que se ejecute. Y por si acaso hagamos también un negativo una carrera que también. Pero creo que sólo vamos a tener dos valores, ya sea 0 o uno. Entonces ahora que tenemos la sencilla configuración de espacio de mezcla, podemos conectar eso a la salida. Si lo hacemos 1, obtenemos la animación de carrera, y si tenemos varios, obtenemos la animación de caminata. Por lo que ahora solo necesitamos comprobar si el jugador es detectado en el código y luego establecer el parámetro en los horarios correctos. Entonces una forma en que podemos tener la zona de detección enojada decirle al enojado Cerdo cuando está el jugador dentro de la zona es usar señales. Para que podamos configurar un método de receptor yendo a anotar aquí a la derecha. Y luego podemos usar la forma del cuerpo ingresada y la forma del cuerpo. Excelente. Entonces haré doble clic en cada uno de ellos y añadiremos una forma corporal de zona de detección enojada ingresada al guion enojado Pig. Y hagámoslo por ambos. Por lo tanto, haga doble clic conectado al script. De acuerdo, y eso es básicamente todo lo que vamos a necesitar de la zona. Para que las cosas funcionen aquí. Por lo que cuando una forma de cuerpo ha entrado, debe ser un jugador. Y vamos a configurar eso con capas y un minuto. Y como juego para un solo jugador, solo debe
haber un personaje en esa capa en un momento dado, uno o un 0. Por lo que sólo podemos establecer parámetros de animación en el árbol de animación con el fin de ocuparnos de esto. Entonces si no tienes ya el árbol de animación listo para animación iguala árbol de animación aquí arriba en la parte superior. Puedes seguir adelante y configurar eso. Y luego aquí abajo podemos hacer punto de árbol de animación establecer el parámetro. Por lo que vamos a hacer parámetros slash, jugador detectó posición de mezcla de barra. ¿ De acuerdo? Y vamos a querer poner eso a uno. Y luego cuando el jugador abandone esa zona, queremos establecer el parámetro en 0. Así que selecciona todo esto y pegarlo aquí. Y ponemos eso a 0. Ahora si estuviéramos haciendo un juego multijugador, quizá
necesitábamos un código un poco más elaborado porque podría haber varios jugadores. Pero en este caso funcionará perfectamente bien porque solo
hay un jugador en el juego en un momento dado. Entonces esto simplemente lo simplifica para nosotros. Ahora si vamos a la zona de detección enojada y al inspector, podemos configurar sus capas de colisión. Pero antes de configurar las capas de colisión, en realidad
deberíamos definir cuáles son esas. Entonces en proyectos, ajustes de proyectos a los que podemos bajar, creo que está bajo la física. Así que la física 2D aquí abajo bajo nombres de capas. Escribamos algunos nombres de capas. Entonces capa uno, ricano hacer mundo. Y entonces por ahora bajemos aquí a, digamos capa 4 y capa y enemigo. Por lo que tenemos algunas capas de configuración. Y para cada una de estas capas podemos tener un objeto colisionar sobre una determinada capa, y también podemos permitir que sea encontrado por otros objetos que buscan esa capa. Entonces, cerremos aquí las capas. Por lo que tenemos la opción de capa bajo colisión. Por lo que la capa es donde otros objetos pueden detectar este objeto en y colisionar con él o hacer lo que necesiten. Entonces para la zona de detección enojada, en realidad no vamos a querer una capa aquí mismo porque realmente no es nada necesita chocar con ella. Solo estamos usando esto para desencadenar eventos, que básicamente está haciendo correr al cerdo. Pero la máscara va a estar donde estamos revisando que sucedan estos eventos. Entonces para nosotros esa no va a ser la capa mundial, que simplemente se configuraría como una, pero en realidad va a ser capa estaba en Fort, que va a ser la capa de capa. Si hacemos clic de distancia y hacemos clic atrás, debería actualizarse aquí abajo. Por lo que tienes mano de obra para es la capa de jugador. Entonces con esta zona de detección enojada, solo
estamos buscando la capa de jugadores y esto solo debería ser un jugador en el juego. Por lo tanto, ese va a ser el único objeto que puede activar los métodos del receptor aquí abajo para establecer el tratamiento de animación 21 o 0
dependiendo de si lo necesitamos para correr o si lo necesitamos para caminar. Entonces si guardamos eso, ahora solo necesitamos definir al jugador como un objeto de capa de jugador. Y también deberíamos simplemente actualizar al enemigo para que sea un objeto de capa enemiga mientras estamos en ello. Por lo que bajo cerdo enojado, el cuerpo cinemático va a colisión, física colisión corporal. Y luego vamos a cambiar la capa aquí a enemiga. Todavía vamos a usar soldadura como máscara. Entonces supongo que lo que vamos a definir la capa mundial como es todo el terreno, las plataformas, los mosaicos, cosas que deberían ocurrir las interacciones físicas normales. Y así los cuerpos cinemáticos van a seguir buscando
al mundo para que esas colisiones aún puedan ocurrir como enemigo, jugador no podrá colisionar directamente con este cuerpo cinemático. Y este cuerpo cinemático no podrá colisionar directamente con el jugador porque no estamos revisando bien la máscara del jugador, y ellos revisan la máscara del mundo. Entonces vamos a sumergirnos nuevamente en el jugador. Por lo que la escena del jugador, hacemos click en el cuerpo cinemático del jugador, física, cuerpo 2D. Y cambiamos esto de un objeto mundial a un objeto de jugador. Y va a estar buscando a la capa mundial para que ocurran colisiones. Entonces ahora cuando ejecutamos el juego, si lo he arreglado todo bien, el cerdo no debe chocar con el jugador y el jugador no debe chocar con el cerdo. Pero la zona de detección 2D debería poder detectar al jugador para que
pueda decirle al guion enojado de Pig si debería estar corriendo o si debería estar caminando. Entonces sigamos adelante y golpeemos el juego y veamos si todo eso funciona. Por lo que actualmente los jugadores en endosomas, por lo que es sólo caminar. Entonces al menos nuestra animación ahí se está reproduciendo correctamente. Vamos a movernos un poco por encima de él. Y podemos ver que la animación está cambiando. Entonces eso es realmente bueno para nosotros. Ahora lo último que tenemos que hacer es controlar básicamente la velocidad de movimiento para que haga un poco más que simplemente cambiar de color aquí. Entonces, detengamos el juego de correr ahí. Y abramos el guion enojado de Pig. Por lo que en estas propiedades prepárate para el árbol de animación. También podemos armar algo para el cerdo enojado. Entonces al igual que el jugador, Vamos a crear una enumeración que represente el estado que el cerdo no es. Entonces aquí arriba en la cima, voy a hacer enums state, y actualmente sólo tendremos caminar y correr. Por lo que aquí arriba en la cima podemos crear otra enum para nuestro cerdo enojado, igual que hicimos para el jugador. Entonces nuestros estados van a estar, voy a caminar y para el estado de carrera, podríamos simplemente llamarlo correr. Y eso sería más consistente con todo en el juego. Supongo que supongo que podemos hacer eso. Es decir, yo también estaba pensando que podríamos llamarlo como loco o enojado, pero tal vez si solo lo llamamos R1, eso tendrá más sentido cuando realmente miremos
al jugador de animación en el árbol de animación también. Entonces pongamos ese estado aquí abajo. Y por supuesto necesitamos una variable para almacenar el estado actual. Entonces estado variable u otro estado actual variable. Y vamos a por defecto eso para estatal a pie de punto. Ya que el personaje va a estar caminando en cuanto empiece el juego. Y eso también hace que estos estados sean capitales, ya que son constantes a lo largo del juego. Y punto estatal caminó ahí abajo. De acuerdo, Entonces ahora podemos tomar el estado actual y ponerlo a correr en estado si está consiguiendo que los parámetros de un valor. Entonces va a estar corriendo ahí abajo y el árbol de animación. Y entonces el estado actual es igual a estado duda caminar si se establece en 0. Entonces ahora esos van a ser consistentes. Y ahora sólo necesitamos un tipo de control de la velocidad de movimiento en base a lo que es ese estado. Podemos cambiar la velocidad de movimiento en realidad aquí arriba a una velocidad de caminata, ¿de acuerdo? Y entonces esto aún se moverá velocidad. Pero la velocidad de movimiento real que vamos a estar actualizando en cada fotograma. Va a ser una nueva variable que creemos aquí. Entonces esto va a ser un factor dos. Y entonces podemos ejecutar un partido sobre el estado actual. Entonces si igualamos el estado actual para la caminata de punto estatal, entonces la velocidad de movimiento va a ser igual a la velocidad de caminata. Y en realidad esto, esto debería ser un flujo porque sólo nos
preocupamos por el movimiento x y esto debería ser un subrayado. Entonces sólo necesitamos la ruina de puntos estatales aquí abajo. Y por supuesto vamos a establecer la velocidad de movimiento igual a la velocidad de carrera. Entonces ahora debería ser mucho más obvio si el personaje está entrando, ya
sabes, un poco casual sobre las cosas o corriendo y tratando de perseguir al jugador hacia abajo. Entonces sigamos adelante y golpeemos el juego y veamos si eso todo funciona hasta este punto. Entonces a medida que nos acercamos al enemigo y podemos ver movimientos a ridículamente rápido. Y a medida que nos alejamos, entonces simplemente vuelve a sus estados verdes. Entonces hay este tipo de zona arbitraria que en cuanto entra el jugador, desencadena al cerdo para
que se mueva realmente rápido. Por lo que podríamos querer bajar los números en el movimiento, pero en lo que respecta a la detección, esto está funcionando correctamente. Entonces subiré aquí y haré que el personaje se mueva un poco más lento. Por lo que es un poco más justo para el jugador.
18. Saltar el ataque ~ Hurtbox y configuración de Hitbox: Entonces en esta parte vamos a estar creando la capacidad para que el jugador ataque al enemigo, en este caso el cerdo enojado. Pero realmente creo que lo vamos a configurar para que tengamos un guión basado en enemigos en el que se puedan basar personajes como el cerdo enojado y otros enemigos para que no tengamos que seguir reescribiendo el mismo código una y otra vez, básicamente herencia. Por lo que el atacante que acaba de dar a este personaje es la habilidad de rebotar encima de los enemigos, infligirles daño y luego rebotar en el más original. Pero va a funcionar por ahora. Entonces volvamos a sumergirnos en el personaje de cerdo enojado, y vamos a estar creando una nueva área para d Esta área 2D básicamente va a ser una caja lastimada. Área donde cuando el personaje aterriza encima de si entra a esa zona, puede comprobar para ver si el jugador está arriba y si ese es el caso, infligir daño y hacer un poco de animación de rebote. Entonces en el proceso de configurar eso, ya que podemos ver que ya hay unas cuantas formas de colisión en nuestro personaje que podrían interponerse. Podría ser una buena idea encerrarlos en su lugar. Por lo que si hacemos click en una capa, podemos hacer click en este pequeño símbolo de candado para que no podamos moverlos accidentalmente. Y yo sólo voy a hacer eso con los tres. El área a D, la forma de colisión a D y los cerdos enojados, colisión corporal
cinemática en forma 2D. Por lo que ahora vamos a sumar en una otra área 2D. Entonces voy a hacer clic derecho en el cerdo enojado en un área de nodo infantil 2D. Y entonces vamos a darle una forma a esto también. Por lo que colisión en forma 2D. Y para que esto sea sencillo, vamos a usar una forma de rectángulo. Por lo que esta forma de rectángulo va a ser muy pequeña y se
va a posicionar justo aquí en la parte superior de los cerdos que tenían. Por lo que podría llevar el área a D y subir eso. Y que también moverá la ubicación de las formas de colisión también. O simplemente puedes mover la forma de colisión directamente sin embargo quieras subirla ahí está bien. Entonces vamos a ver si hacemos ese 12. A lo mejor queremos negativo 12 ahí. Y vamos sólo ese negativo 10 parece bueno. Entonces ahora tomemos la forma de colisión y ajustemos sus extensiones para que las extensiones Y y solo vamos a querer que eso sea uno. Por lo que podemos ver que se trata de una forma de colisión
muy, muy pequeña. Y esta zona a D, voy a llamar a una caja de salto. Y podría cambiar el nombre de esta forma de colisión, saltar forma de colisión. Al igual que cuando pasamos por encima de él, en realidad
podemos ver un nombre que tiene un poco más de sentido. Entonces creo que eso podría ser un poco útil. De acuerdo, Así que ahora para que esta caja de dolor funcione, vamos a necesitar una capa de colisión para el hotbox y no creas que los he configurado. Entonces vamos a entrar en el proyecto Configuración del proyecto. Y bajaremos a donde dice física 2D. Por lo que tenemos capas para el enemigo del jugador mundial, y para ser más específicos sobre el enemigo y el jugador, estas son las capas corporales cinemáticas. Pero también podríamos querer en la capa cuatro áreas donde se pueden activar ciertos eventos, pero no necesariamente para la mecánica del tipo de colisión de movimiento y deslizamiento. Entonces tal vez podamos decir una y alrededor de la capa 11 tendrá caja enemiga, que podemos o no usar, que serían los enemigos tratando de golpear al jugador u otro personaje. Y luego más allá de eso, podría crear una capa de caja de salto herido. Por lo que también podrías simplemente crear un enemigo genérico HIPAA. Por lo que también podrías simplemente crear una capa de caja de daño enemigo genérico, que funcionaría bien actualmente. El caso es que si tu personaje termina teniendo múltiples ataques, posible que solo quieras cirujano y toques como un salto, rebote para realmente poder golpear áreas muy específicas y no todas las áreas potenciales de ataque en la atención. Entonces por ahora solo habré saltado su caja y esta capa será utilizada exclusivamente para esos ataques de salto. Entonces aquí arriba, no estoy seguro si lo usamos o no, pero solo para ser un poco consistente con abajo, también
están creando una caja de golpe de capa en caso de que lo necesitemos más adelante. Entonces vamos a cerrar eso. Y esta caja de salto duele va a estar en, por
supuesto, la capa de la caja de salto. Por supuesto que no mostrará los nombres correctos hasta que cambiemos a una pestaña diferente y atrás. Y ahora si vamos por aquí, está bien, supongo que está en la segunda fila, deberíamos poder encontrar y yo golpeo box y luego saltar caja de dolor. Entonces, vamos a quitárselo todas las demás capas. Y entonces esta área 2D no va a estar revisando nada. Sólo va a estar recibiendo información, así que sólo necesitamos tenerla en el salto su capa de caja. No necesitamos usar una máscara para,
para comprobar si alguna entrada o salida de otras capas, al menos por ahora. De acuerdo, así que ahora entremos al personaje de capa y vamos a crear esa caja de salto hit. Entonces voy a hacer clic derecho en el jugador y añadir un área 2D, está bien, y vamos a renombrar este salto pit box. Y por supuesto que vamos a necesitar una forma de colisión. Entonces la forma de colisión, vamos a hacer de eso un rectángulo. Y voy a asegurarme de que la altura de ésta sea una. Y entonces sólo lo vamos a tirar de aquí abajo hasta el fondo del personaje. Y podemos ajustar la transformación en el área de salto hit box, supongo. Entonces vamos a golpear eso hacia abajo con la posición de transformación. Y supongo que 15 es sobre lo que lo buscamos ahí. Probablemente también queramos encoger el ancho de la misma porque los pies del personaje solo van a por aquí. Entonces cambiemos el H2, tal vez un seis, vale, supongo que puedo buscar por ahora. Y este salto hit box area 2D va a estar buscando la capa de caja de salto herido con el fin de ver si puede golpear al enemigo en ese punto para infligirle daño. Y actualmente, no necesito nada para revisar la caja de cadera, así que solo la estoy quitando de la capa 1. Por lo que no se usará en ninguna colisión solo
para comprobar si hay cosas que le entran en esta capa, la caja de salto duele. De acuerdo, entonces ahora lo que tenemos que hacer es conectar esta caja de salto hit dentro del guión del jugador. Entonces podemos hacer eso usando señales con bastante facilidad. Si haces click en la caja de salto, podemos pasar a anotar. Y luego vamos a querer usar la forma de área
ingresada porque estamos revisando la caja de dolor, que es un área 2D. Si estuviéramos revisando un cuerpo cinemático, usaría la forma del cuerpo ingresado en accidente de forma corporal. Entonces vamos a hacer Forma de área ingresada. Y creo que ese es el único que vamos a necesitar conocer. Por lo que el nombre predeterminado del método del receptor en salto, la forma del área de la caja de cadera ingresada funciona perfectamente bien. Conectemos eso al guión del jugador. Y ahora vamos a tener esto abajo en la parte inferior. Lo subiré aquí para que no esté en la sección centro.
19. Saltar de la clase de Enemy para el tipo de clase: Cuando algo entra en el hit box, teóricamente sólo debe ser el enemigo salta cajas de daño. Pero sí quiero asegurarme de que la zona que está entrando en realidad esté apegada a un enemigo. Entonces lo que podríamos hacer es revisar esta zona y luego
podemos ver si es dueño es de hecho del tipo enemigo. Entonces voy a hacer var enemigo y luego Area dot dueño y foráneo instanciado visto que nos debe dar el nodo raíz. Entonces si yo fuera a revisar lo que el dueño sería cuatro como este salto hit box. Si tuviera un guión adjunto aquí, le iría al dueño, que en este caso es el jugador. Entonces en el cerdo enojado, el dueño de este hotbox de salto es el cerdo enojado, que va a ser de tipo enemigo. En realidad, veamos, ¿ya creé el tipo enemigo? No, no lo he hecho. Entonces lo haremos en un minuto. Por lo que de vuelta en el guión de jugador, tenemos que comprobar, es el enemigo en realidad un enemigo. Entonces voy a decir que es enemigo, enemigo, y aún no hemos creado eso. Entonces eso no va a funcionar y solo necesitamos crear básicamente el guión para eso. Así termina la Carpeta Personajes, enemigos. Simplemente crearé aquí un nuevo guión. Entonces voy a hacer clic aquí, hacer un nuevo guión y sólo lo vamos a llamar enemigo. Y dentro del punto enemigo GD, esto va a extender cuerpo cinemático 2D. Entonces el tipo base de esto es lo mismo que el cerdo enojado, lo que va a significar que cerdo enojado puede simplemente heredar del punto g enemigo, que va a heredar del cuerpo cinemático 2D. Por lo que obtiene toda la funcionalidad tanto del cuerpo cinemático como también del enemigo. Entonces para que el script de GD declare esto como un tipo al que podemos hacer referencia sin una ruta. Creo que necesitamos nombre de clase aquí y luego enemigo. Entonces es simplemente dar un, si estuvieras haciendo C plus más algo así como un espacio de nombres a este script. Y ahora en enojado cerdo dot h gd, podemos simplemente escribir enemigo, por lo que se extiende enemigo. Y ese enemigo es porque lo definimos para nuestro proyecto con este nombre de clase. Ahora todo lo que queramos que tengan todos los enemigos sólo puede entrar aquí. Entonces por ejemplo, cerdo enojado, supongo que no hemos establecido de variable de salud, pero este sería un lugar perfecto para realmente poner eso. Entonces hagámoslo exportar, porque lo haremos un flotador var salud y por defecto esto a tres. Entonces ahora si hacemos click en Cerdo enojado, ve al Inspector, podemos ver la variable de salud está aquí. Pero esta variable de salud, no
viene de cerdo enojado, viene del guión enemigo anidado. Entonces ahora malloc y el método receptor para el salto hit box, si hemos llegado al punto donde hemos descubierto que el enemigo es de hecho un enemigo. Entonces también queremos asegurarnos de que actualmente pueda ser golpeado porque no queremos accidentalmente dar doble golpe al enemigo por cualquier motivo. Por lo que podría haber un tiempo de invulnerabilidad, como cuando se está reproduciendo actualmente la animación Hit, tal vez el enemigo debería estar en vulnerable por un minuto. Por lo que podemos agregar otra variable al enemigo, que podría ser algo así como se puede cerrar. Por lo que el punto enemigo puede ser golpeado y este será un booleano. Y sólo podemos declarar eso en nuestro guión enemigo. Por lo que podríamos decir que la barra bool de exportación se puede golpear. Y presumiblemente esto generalmente por defecto a verdadero, ya que al inicio del juego, se
quiere poder golpear al enemigo, pero se puede personalizar esto, por
supuesto, para cada enemigo, ya que esa propiedad simplemente aparecería aquí dentro de cada uno de los personajes. Por lo que ahora en este punto queremos comprobar si el personaje está en realidad por encima del enemigo. Si estamos saltando desde abajo y luego las áreas se solapan, eso no es realmente lo mismo que caer encima de él enemigo. Por lo que podemos comprobar cuándo entra el área en forma, si está entrando desde arriba, donde sea que esté el enemigo. Entonces básicamente para esto, podemos agarrar la caja de salto hit. Y en realidad podría tener más sentido tener esto como una variable arriba en la parte superior para ser más consistente. Por lo que tendremos en var listo, saltó caja de cadera igual signo de dólar. No caben caja. Por lo que nos aseguramos de que esté ahí al inicio de este script en ejecución. Por lo que revisamos el punto de la caja de cadera de salto. Hagamos posición global punto Y. Entonces en el mundo del juego, esto va a ser, es como posición absoluta, no relativa a nada. Entonces si comparamos esto con otra posición global, entonces podemos estar bastante seguros de que en realidad está por encima de la otra posición o no por encima de la otra posición. Por lo que area dot posición global punto y
Así que esto va a ser ese área de caja dolía y teoría, ya que la caja de pozo de salto sólo puede detectar en la capa de la caja de jumper. Por lo que podemos estar razonablemente seguros de que esta zona es de hecho la caja de salto duele. Entonces si llegamos aquí abajo, entonces vamos a hacer el ataque de salto. Entonces para eso, vamos a tomar este personaje es velocidad, y lo vamos a aumentar con un pequeño rebote enemigo. Entonces voy a tener una variable, rebote enemigo, impulso, y luego vamos a hacer daño al enemigo. Por lo que tendremos que esta función sea golpeada con una cantidad de daño. Por lo que necesitamos crear dos variables ahí arriba en la parte superior. Por lo que primero, exportar, var, salto enemigo. Y voy a hacer esto menos que el salto principal, algo así como 400 suena un poco mejor de lo que
también podemos tener otra variable de bucle. Entonces esto va a ser daño de dama y sólo voy a dejar eso por defecto a uno. Agradable y sencillo. De acuerdo, entonces empezamos al aire por su impulso de rebote enemigo, salto enemigo. Supongo que el rebote enemigo funciona mejor. De acuerdo, Así lo llamé en los guiones originales. Entonces eso debería aclarar el problema ahí. Sólo tenemos que asegurarnos de que el guión enemigo que tenemos ese método de golpe. Entonces hazte atropellado. Hagamos que esa función sea golpeada. Y esto va a tomar una cantidad de daño, presumiblemente un flotador. Y así cuando el enemigo sea golpeado, queremos hacerlo para que no pueda ser golpeado de nuevo hasta que tengamos algo más. Diga que puede. En nuestro caso, va a ser el final del hit one o hit 20 animación que se está haciendo. Entonces mientras está tocando la animación Hit, básicamente en vulnerable en cierto sentido. Entonces vamos a tomar la salud y vamos a menos igualar el daño. Y luego vamos a establecer se puede golpear igual a falso.
20. Toma la implementación y las animaciones de saltar y tocar: Ahora en el guion enojado Pig, queremos crear una función que podamos ejecutar cuando se hagan nuestras animaciones hit. Entonces vamos a crear una función que la animación terminó. De acuerdo, Entonces cuando esté terminado, queremos establecer el hit igual a verdadero. Y también voy a querer devolver el estado del personaje para correr o caminar. Ya que una vez que haya terminado de ser
golpeado, básicamente debería reanudar su funcionalidad normal. Entonces vamos a decir que el estado actual es igual a pizarra de punto corre por ahora. ¿ De acuerdo? Y eso también es mover estas funciones aquí arriba, ¿de acuerdo? Y una cosa de estos, cuando estamos en el estado HIT, no
queremos que el personaje pueda cambiar su estado para correr o caminar. El único modo en que vamos a dejar que el personaje regrese al estado
urbano es si esta función termina. Entonces, en esencia, queremos un poco encerrarlo. Entonces voy a poner aquí, si el estado actual es estatal dot walk, entonces puede ir a un estado de corrida o aquí abajo. Si está corriendo, puede ir a un estado de caminata. Cuando este parámetro se establece y el jugador ya no está ahí, debe comenzar a caminar y cuando el jugador entre, debe comenzar a correr. Pero sólo cuando no está en otro estado como hit. Y esto necesita igualar signo. Entonces ahora vamos a entrar en nuestro jugador de animación, cerdo enojado 2D. Vamos a dar click en el jugador de Animación. Y sumemos en otra pista para HIT 1. Entonces nuestra pista se va a llamar método, y queremos llamar a métodos del cerdo enojado, vale, y también necesitamos que eso ocurra al final de la animación. Entonces vamos a necesitar extender esto. En realidad lo voy a extender a 0.5 segundos por ahora. Y cuando vayamos al sprite animado, voy a ralentizar a la mitad el FPS y el vz para que no se necesiten 0.25 segundos, sino 0.5 segundos para que se reproduzca toda la animación. Ya veremos si eso nos funciona. Y ahora podemos volver al jugador. Por lo que debería tomar hasta aquí para que termine la animación de 10 FPS. Entonces aquí es donde queremos poner en el, se olvidó otro signo igual ahí también. De acuerdo, entonces ahora para nuestra pista de funciones, podemos insertar la clave. Animación de hit terminado. De acuerdo, Ahora eso debería correr la animación ahí. Ahora también necesitamos hacer lo mismo con HIT 2. Entonces hagamos este 0.5, pero la duración, y apaguemos el bucle también porque no debería bucle. Solo debe jugar una vez y luego volver a correr. Entonces un método de llamada en cerdo enojado, y luego hacemos clic con el botón derecho aquí a 0.5 segundos, insertamos la tecla, Hit animation terminado. Y ahora nuestra función va a correr aquí. Por lo que esto debería devolverlo al estado y permitir que vuelva a ser golpeado. Entonces eso debe ser lo que queremos. Entonces ahora solo comprobemos, golpeemos uno y apaguemos el looping. Y una cosa más que necesitamos en el árbol de animación es realmente configurar una variable de un solo disparo para que podamos entrar en esos estados golpeados. Entonces vamos a hacer clic derecho en el gráfico de nodos y hacer un solo disparo. Entonces este disparo va a ser, solo llamémoslo hit. Pero, ¿por qué no simplemente mantenerlo simple? Por lo que este solo disparo es cuando se va a reproducir la animación Hit. Entonces cuando este parámetro de animación hit se establece en activo, debe mostrar ya sea hit uno o hit también. Y podemos hacer de eso una variable aleatoria. Pero para que eso funcione realmente, tenemos que reconectar las salidas. Entonces tomemos esta línea aquí para la salida y jugada detectada. Y ahora este espacio de mezcla 1D debería alimentarse directamente en el n como la función predeterminada. Y entonces esto va a la salida. Y ahora solo necesitamos crear esos. Golpea uno, golpea dos animaciones aquí abajo. Entonces haga clic derecho en Animación, haga clic derecho en animación De acuerdo, Entonces en el primero golpeó uno, en el segundo golpeó dos. Y ahora podemos ir por aquí, hacer clic derecho y creo que queremos fusionar dos, ¿de acuerdo? Entonces, uh, básicamente va a tener dos valores, 01, si es 0, entonces jugamos hit uno. Y si es uno, entonces jugamos hit dos. Por lo que podemos llamar a la propiedad aquí, hit variación. Si viene pélvico hit muy asiático. Y conectemos esto a tiro. De acuerdo, entonces ahora tenemos dos variables para golpear. Esto determinará si jugamos hit uno o hit también, solo por alguna variedad. Y entonces esto determinará si estamos tocando la animación Hit en absoluto. Entonces para los enemigos en nuestro juego, después de pensarlo, realidad
podríamos querer que cada enemigo tenga su propia implementación de ser golpeado. Por lo que aún podemos pasar la misma cantidad de daño en la función para cada personaje. Pero tal vez algunos personajes en realidad no reciben daño cuando son golpeados. A lo mejor sólo se mueven un poco o tal vez algunos personajes no son invulnerables después de ser golpeados. Entonces, en cualquier caso, podría realmente tener sentido permitir que el jugador le diga al enemigo sobre ejecutar esta función, pero tener una implementación diferente para cada personaje. Por lo que voy a poner aquí un guión bajo para que esto sea una función virtual. Y entonces sólo vamos a cortar esto por ahora mismo. Entonces lo que vamos a hacer es llevarnos esto a cerdo enojado. Y vamos a poner esto aquí abajo como una implementación para eso. Entonces volveremos a esto en un segundo. Entonces por ahora si la función se ejecuta y no es una implementación personalizada, solo
voy a empujar un error. Tan sólo decir que se hit no se ha implementado. Entonces si en cerdo enojado u otro enemigo, les ha creado el golpe, debería usar esta versión del get hit. Pero en caso de que no lo haga, sólo
tendremos este mensaje de error para que básicamente ahora que tenemos que seguir adelante y ponerlo en práctica. Entonces para esta versión de get hit o del cerdo enojado, lo
voy a hacer para que cuando se golpee, entremos al estado hits. Y como parte de eso, en realidad podemos establecer estas variables aquí abajo en el árbol de animación. Entonces voy a conseguir el árbol de animación y vamos a establecer los parámetros. Entonces el primero va a ser perimetros slash hit slash slash, activo, y luego el otro, Vamos a ver eso. Entonces jugador detectado, así que van a ser parámetros slash jugador underscore detectado slash 08, no ese. Golpear variación en realidad. Perimetros slash slash hit variación slash cantidad de mezcla. ¿ De acuerdo? Entonces, así conjunto de árbol de animación o sus aficionados slash hit underscore variación slash cantidad de mezcla. Entonces eso va a ser o 0 o uno. Y tendremos que averiguarlo en un segundo. Y entonces esto va a ser cierto. Por lo que aquí podemos generar un número aleatorio. Y para crear un número aleatorio, es necesario crear un objeto generador de números aleatorios, que tenga su propio constructor. Por lo que podríamos crear uno dentro de esta clase o podríamos crear uno cada vez que ejecutamos esta función. O lo que podríamos hacer es ponerlo en nuestro guión global singleton. Y luego en cualquier momento que necesitemos ejecutar una función aleatoria, solo
hacemos referencia a esa configuración del juego global. Entonces me gusta más esa idea. Por lo que en nuestro juego settings.js, podemos crear una variable y esto se cargará al inicio del juego. Por lo que este será nuestro generador de números aleatorios. Y lo que sólo tenemos que hacer es generador de números aleatorios y crear una nueva instancia de eso. Entonces al inicio del juego, siempre que se cargue, vamos a conseguir este nuevo generador de números aleatorios y sólo necesitamos uno y podemos usarlo en todas partes. Por lo que en cerdo enojado ahora podemos agregar una nueva línea. Entonces hagámoslo. Selección anime lejano. Y esto va a ser igual a la configuración del juego. Nuestro singleton referencia Hubble en cualquier lugar punto, Vamos a ver, lo llamamos rant Jen. Y luego necesitamos generar un nuevo número para que podamos hacer al azar int i para rango de guión bajo int entre 01. Por lo que los enteros solo pueden ser números no decimales. Entonces eso nos va a dar específicamente o un 0 o uno. Y podemos poner eso en el valor del árbol de animación. Entonces pongamos esa selección enum aquí. Por lo que eso nos dará nuestro seleccionado aleatoriamente ya sea golpear una animación o golpear a la animación. Entonces una cosa más en los juegos, settings.js, cuando usamos el generador de números aleatorios para generar valores aleatorios, por defecto, en realidad va a usar la misma semilla siempre que se cargue el juego. Por lo que tendrá la misma secuencia de, por así decirlo, números aleatorios. Entonces si el generador de números aleatorios solo se usó una vez para
determinar que el personaje fue golpeado y qué animación jugar, entonces ese personaje, en teoría,
estaría jugando la misma animación cada vez que el juego se cargue y ese mismo evento sucede. Entonces para hacer un verdaderamente aleatorio, lo que podríamos hacer es implementar aquí una función lista. Y luego si debe aleatorizar un booleano, entonces lo aleatorizaremos. Entonces Ran Gen, re-aleatorizar. De acuerdo, entonces si tenemos este R1, entonces esto creará una nueva semilla para el generador de números aleatorios. Y en realidad debería darnos diferentes variaciones cada vez que ejecutamos el juego. Entonces hagamos de eso una variable que podamos establecer en la configuración del juego. Visto que TSC y archivo así deben aleatorizar. Y va a dar por defecto esto a cierto. Entonces si alguna vez necesitamos apagar la aleatorización porque queremos probar la misma semilla para el generador de números aleatorios, entonces podemos simplemente entrar en esta escena y apagarla en el inspector o a un lado. Entonces, solo tengamos eso ahí por ahora mismo. De acuerdo, así que sigamos adelante y golpeemos el juego aquí y veamos dónde estamos en realidad. Entonces sigamos adelante y peguemos juego aquí y veamos en dónde estamos. Voy a saltar al personaje. Por lo que en primer lugar, no debió haber llegado aquí porque estaba por debajo de la zona para empezar. Pero también podemos ver que la función inexistente se golpea. Eso es porque ahí tenemos el subrayado. Por lo que podemos quitarle eso ya que esta es la implementación final de conseguir golpeado a este personaje. Entonces sigamos adelante y golpeemos Play. Y ahora podemos ver que el personaje está siendo golpeado, pero en realidad no hemos creado el estado hit. Entonces aquí arriba en la cima, Vamos a sumar ese golpe
estatal, estatal, Vale, y vamos a darle otra oportunidad. De acuerdo, así que en realidad tuvimos el rebote encima del personaje. Y se puede ver que después de ese primer golpe de rebote, en realidad no es posible golpearlo de nuevo, o al menos temporalmente. No lo era. Otro problema parece ser que el personaje en realidad
no muere cuando la salud está por debajo de 0. Entonces resolvamos eso realmente rápido. Si la salud es menor o igual a 0, solo
podemos usar Q libre para eliminar el personaje. Entonces por supuesto, si tuviste como una animación de muerte, puedes jugar eso sin decir primero y luego Q gratis. Pero esto quita la escena de la jerarquía. En otras palabras, quitar al enemigo del juego. Entonces vamos a golpear play y a ver eso de nuevo. Entonces eso es un hit, dos hits, tres cabezas. ¿ De acuerdo? Por lo que eso sí realmente hace daño al enemigo. De acuerdo, Así que parece que lo que realmente necesitábamos era que la posición global en la caja de cadera debería ser más alta que la posición global en el área. Y puedes un poco depurar eso solo imprimiendo la posición global para cada uno cada vez que tuvieras una colisión y ver si los números realmente se alinean. Entonces ahora si saltamos sobre el personaje, en
realidad debería rebotar, pero sólo si está arriba. Entonces veamos, viniendo de abajo, no pasa nada pero si saltamos de arriba, obtenemos ese rebote. Está bien. Y luego está ese tercer hit. De acuerdo, entonces eso parece estar más o menos trabajando. Vamos a probar eso una vez más. Parece que me perdí el hit box. Está bien. Ahí está eso. Está bien. Saltar desde abajo no hace nada pero podemos saltar y golpearlo de nuevo. De acuerdo, Entonces podemos comprobar rápidamente la casilla para el personaje. A ver. Entonces tenemos esa pequeña fila aquí arriba. A lo mejor sí queremos hacer que la caja de golpe de colisión de salto sea un poco más ancha. Creo que ese no es el único problema ahí, así que vamos a ser un poco generosos con
eso para que si el personaje le pega al borde, podamos ir un poco más allá quizá lo hagamos 13, 14, aunque no. Está bien. Entonces vamos a golpear juego. Pruébalo una vez más. Ah, está bien. Supongo y parece estar funcionando en general. Otra herramienta que puedes utilizar para comprobar colisiones. Si subes al menú Depurar, puedes activar las formas de colisión visibles. Entonces ahora si golpeamos Play, podemos ver directamente dónde está su forma de colisión. Entonces donde deberíamos estar golpeando para que se produzca el salto. Ok. Y volvamos a saltar sobre él. Está bien. Está bien. Y una vez más. De acuerdo, Eso casi parece estar funcionando correctamente para nuestro cerdo enojado. Entonces en el siguiente video, estaremos trabajando en hacer un camino para que el cerdo enojado pueda realmente dañar al jugador si el cerdo enojado se encuentra con él. Por lo que esa parte debería ser esperemos un poco más directa que
tener que configurar estos hit boxes para saltar y rebotar. Y los diferentes estados.
21. Agrega estado de hit para el jugador: Entonces ahora que somos capaces de rebotar sobre un enemigo para hacerle daño. O al menos con zona de cerdo enojado, deberíamos hacer un camino para que los enemigos como el cerdo enojado puedan hacer daño al jugador. Entonces podemos seguir adelante y configurar eso ahora. Por lo que anteriormente hicimos una clase enemiga, que es un guión base que el cerdo enojado y el pelo. Entonces estoy en esta clase, creamos la habilidad para que los enemigos sean golpeados. Y también todo enemigo tiene salud y la variable puede ser golpeada. Entonces para que sea para que nuestro jugador pueda ser golpeado por enemigos, vamos a necesitar configurar algunas variables similares a como lo hicimos con el guión enemigo. El cerdo enojado hereda del enemigo, lo que significa que el cerdo enojado tiene salud y debe implementar la función get hit. Lo que podemos hacer es tirar todo de otro nivel donde cualquier personaje y el juego tendrá salud y debe implementar una función get hit. Entonces podemos crear un guión para eso. Si vamos a los caracteres y luego hacemos clic con el botón derecho en la carpeta, hacemos un nuevo script. Entonces voy a llamar a este personaje punto G, D. Y en este guión sólo vamos a sacar esa información del enemigo, como la variable de salud. Y vamos a renunciar a todo, ponerlo aquí, y luego asegurarnos de que se trata de un cuerpo cinemático 2D, ya que cada personaje va a ser un cuerpo cinemático tipo 2D. Entonces ahora si tenemos enemigo heredar de esto, volverá a obtener el valor de salud. Ahora lo que sí noto a veces es que si tienes demasiados nombres de clase en el juego y tienes un montón de herencia pasando que a veces consigue errores. Entonces, en lugar de poner el carácter ClassName aquí y luego extiende el carácter, lo que podemos hacer es simplemente cortar este texto y luego arrastrar y soltar la ruta al script de caracteres. Entonces si solo son arrastrar esto aquí arriba, básicamente
va a funcionar igual que si hubiéramos usado nombre de clase y carácter. Si bien haciéndolo de esta manera, podemos evitar algunos errores que ocurren con el uso de nombres de clase y Godot. Un problema es que si mueves tus archivos de script en el directorio, obviamente
va a causar muchos errores porque esta es una ruta hacia donde se almacena. Entonces si el script de carácter dot h gd ya no es un en la Carpeta de Caracteres, entonces obviamente cuando intenta
cargarlo, te va a dar algunos errores. Para que puedas jugar un poco con él y averiguar qué método funciona mejor para ti. Por lo que nuestro enemigo va a heredar de Character dot GD. Y eso significa que va a tener esta salud, pero eso también es tomar esta función y ponerla en carácter también. Entonces eso es el carácter va a ser nuestro script personalizado base escrito encima de cuerpo cinemático 2D. Entonces de eso es de lo que esto está heredando. Y entonces enemigo es un tipo de personaje. Y luego cerdo enojado es un tipo de enemigo. Por lo que la clase de cerdo enojado va a heredar de todo lo que hay debajo de ella. Tener todo en enemigo, y vamos a tener todo en carácter también. Entonces podemos mantener al enemigo como un guión separado sin embargo, porque a medida que el juego se vuelve un poco más complejo, puede
haber ciertas cosas que queremos que todos los enemigos tengan, pero no necesariamente personajes como el jugador. Por lo que ahora hagamos de nuestro jugador un personaje. Entonces voy a dar clic en jugador y vamos a cortar el extensor y sólo arrastrar y soltar el guión de punto de carácter GD. Por lo tanto, extiende el camino al guión que nos ha funcionado. Por lo que ahora el jugador va a tener una salud y vamos a necesitar escribir esta función. Entonces bajemos aquí y escribamos que les den función hit. Por lo que la función se golpea y vamos a tomar un valor dañado, que puede ser un flotador. Y las cosas que vamos a necesitar hacer con ser golpeado es obviamente tomar el daño. Por lo que auto punto salud, va a ser menos igual al daño del valor. Y también debemos cambiar el estado del personaje. Por lo que podemos hacer auto punto, estado
actual es igual a estado punto hit, que aún no hemos creado. Entonces, solo tomemos eso y lo pongamos aquí arriba, creando un quinto estado. Y entonces por supuesto, tenemos un método setter para este valor de estado actual. Entonces cuando eso se ejecute, el estado actual establecido va a suceder aquí abajo. Entonces creo que este sería un buen lugar para establecer los parámetros en el árbol de animación. Por supuesto, no hemos establecido el parámetro para el nuevo disparo en el que el personaje recibe daño y tiene un poco de golpe escalonado. Pero sólo podemos seguir adelante y teclear eso con anticipación. Entonces el estado para el que estamos emparejando es por supuesto golpe de punto estatal. Y cuando eso ocurra, vamos a hacer parámetros de árbol de animación, slash, hit, slash activo. Entonces al igual que con el doble salto, esto va a ser un solo disparo. Entonces por eso dice activo aquí. Va a ser un booleano y lo estamos haciendo activo o verdadero. Por lo que ahora vamos a sumergirnos en la escena del jugador. Vamos al árbol de animación, y vamos a configurar esto para HIT. Entonces en nuestro juego, cuando el jugador reciba daño, eso va a tener prioridad sobre cualquier otra animación. Por lo que este solo tiro debería estar frente al doble salto y la jerarquía. Entonces voy a hacer clic aquí, hacer un solo disparo. El nombre de la variable, al igual que votamos en el guión, se golpea algo bueno sobre eso. Y ahora podemos redirigir esta salida a aquí. Y el de un tiro irá a aquí. Y cuando este hit variables activen, vamos a tocar el one-shot, así que queremos conseguir esa animación Hit. Entonces pongamos eso aquí y conectemos eso a tiro. Ahora, también necesitamos asegurarnos de que nuestro reproductor de animación tenga correctamente
la configuración de animación Hit y que la animación Hit en el sprite animado también esté configurada. Entonces si hacemos clic en sprite animado, podemos comprobar hit. Y podemos ver esto como ocho animación de fotogramas. Lo estamos ejecutando a 20 fotogramas por segundo. Entonces eso es importante. Podemos averiguar cuánto tiempo debe reproducirse la animación Hit, 4.05 segundos por fotograma. Entonces eso va a ser un total de 0.4 segundos antes de saltar al Jugador de Animación. Una cosa más en el one-shot, como con el doble salto un tiro, queremos hacer el fundido en el tiempo y el tiempo de desvanecerse 0. Tenemos que hacer eso hace un segundo. Y eso va a ser bastante importante para que la animación se vea realmente correcta. Ahora vamos a Jugador de Animación. Echemos un vistazo a nuestra animación Hit. Podemos ver que está buceando y es de sólo 0.05 segundos. Por lo que necesitamos apagar el looping y hacerlo 0.4 segundos, porque así es el tiempo que tarda en atravesar todos los fotogramas de la animación. Y ahora, cuando el personaje termine con la animación Hit, vamos a querer algún tipo de devolución de llamada dentro de nuestro guión donde básicamente la animación esté completa. Entonces algo debería cambiar en la clase de jugador. A saber, debe reanudar un estado normal como inactivo o caminar probablemente usará el punto de estado AIDL. Entonces sigamos adelante y escribamos esa parte del guión. Y de hecho, lo que probablemente podríamos hacer es simplemente poner eso en carácter, ya que me imagino a cada personaje del juego, siempre y cuando no estés teniendo PNJ de algún tipo que sean totalmente inmunes a todo. Voy a tener un hit de animación de algún tipo. Para que puedas poner esto en jugador, o simplemente podríamos escribirlo aquí como algo que debería
implementarse para cada personaje del juego. Entonces vamos a hacer en, hit terminado. Y podemos simplemente empujar un error si no se implementa, ya que deberíamos tener nuestra propia implementación personalizada del mismo. Entonces en jugador, en realidad escribamos eso. Entonces aquí abajo, podemos hacer función sobre hit terminado. Y lo que vamos a hacer es tomar el estado actual de auto punto y vamos a poner eso para indicar punto inactivo. Y si recuerdas, nuestro guión ya está configurado para ir entre estados inactivos y corriendo, dependiendo de si los jugadores ingresan. Entonces lo estoy poniendo en ralentí debería estar bien por aquí. Y ahora solo necesitamos asegurarnos de que esto se llame para que podamos retomar el estado de inactividad. Por lo que en la pista de animación para el jugador de animación, asegúrate de tener seleccionado reproductor de animación. Do Add Track, call method, select the player script, y vaya hasta el final de la animación, que es de 0.4 segundos. Y vamos a hacer clic con el botón derecho e insertemos una clave, escoja el método que desea que se ejecute. Y este caso va a ser anulado en hit terminado. Entonces, solo hagamos doble clic en eso. Ahora cuando llegue a este punto, esta función sólo se va a ejecutar automáticamente. Por lo que el estado se cambiará a inactivo.
22. Detección de la colisión de la casez: Ahora que nuestros personajes básicamente configurados para entrar en el estado de animación Hit, vamos a necesitar una forma para que el enemigo realmente inflija daño a los jugadores, similar a cómo tenemos el salto hit box para este jugador, podemos crear un hit box para el enemigo que va a buscar al jugador. Y si encuentra al jugador en absoluto desaparecido, esta función get hit. Para que podamos saltar a nuestra escena de cerdos enojados. Por lo que ahora con la púa enojada, podemos armar un hit box. Esto va a ser muy similar a montar aquí abajo la caja de daño. Entonces voy a hacer clic derecho en el cerdo enojado, voy a agregar una nota infantil, y lo haremos un área de 2D. Voy a renombrar esta caja de golpe de colisión enemiga, ya que esta es su capacidad de hacer daño cuando apenas se topa con el jugador o un choca con el jugador. Y ahora necesitamos un 2D en forma para los pavos de cadera. Entonces voy a hacer clic derecho en él, agregar un nodo hijo, y vamos a hacer la forma de colisión 2D. ¿ Todo bien? Al igual que con un montón de otras cosas, podemos simplemente mantenerlo simple con una forma de rectángulo. Actualmente, no quiero ajustar accidentalmente salto caja herida, por lo que sería bueno bloquear eso en su lugar. Asegúrate de no agregarlo de ninguna manera. Y ahora podemos tomar la forma para nuestra caja de cadera y ajustarla. Entonces voy a decir que este personaje sólo puede chocar realmente con el jugador fit choca en él justo cuando lo está mirando sobre Aquí. De acuerdo, entonces tomemos nuestra forma de colisión y reducirla un poco. Entonces la gran forma de colisión que será para este cerdo colisionando con otras cosas, pero vamos a ser un poco generosos con el jugador y solo decimos que el personaje necesita estar por aquí solapando con el jugador para en realidad infligirle daño. Entonces tomaré la forma del rectángulo y hagámoslo algo así como 77, pulsa Enter. Y tal vez podamos decir 78, pero luego tomamos el hit box de colisión y lo movemos un poco hacia abajo. Entonces vamos a mover eso allá abajo y podemos ocultar temporalmente las otras cajas de cadera para que podamos ver todo con claridad si es necesario. Creo que eso podría estar bien. A lo mejor lo moveré hacia abajo solo un píxel más y lo llamaremos bueno para ahí. Siempre podemos ajustarlo más tarde. Por lo que ahora para esta caja de golpe de colisión enemiga, necesitamos establecer las capas donde va a estar buscando,
para infligirle daño al jugador. Entonces si queremos, podríamos crear una capa de caja de daño jugador si queremos
definir una forma personalizada para donde el jugador pueda ser golpeado. Pero creo que la forma principal de colisión del cuerpo funcionará muy bien. Podemos ver esto aquí. Tipo de encaja bastante bien el tamaño del personaje. Entonces solo usaremos esta forma de colisión que vamos a buscar. Por ejemplo, esta es la forma de colisión para el cuerpo cinemático. Entonces en el guión vamos a estar usando el chequeo de cuerpo, no el control de área. Entonces no necesitamos crear a un jugador sus pavos, pero si quieres hacer eso, puedes ir al menú del proyecto,
bajar a la física 2D, y luego en la Capa 8, puede decir jugador herido caja, tal vez necesitemos eso más adelante. Entonces solo escribiré eso como capa ahora mismo. Pero en lugar de eso, voy a cambiar la máscara, que es lo que buscan los to-dos de área. Y sólo cambia eso a la máscara de jugador. Y voy a apagar la capa para colisión, ya que esto sólo va a estar buscando al jugador con el fin de infligirle daño. Y de hecho, sólo podemos tomar monitor una tupla y simplemente apagar eso por completo. También podría querer cambiar el nombre de la colisión en forma de 2D a la izquierda. Sólo para que sepamos cuál es cuál. Entonces voy a llamar a esta forma de colisión enemiga. Y eso lo guardaré ahí. Por lo que ahora necesitamos tomar las señales de los halcones de cadera y agregar eso al guion enojado de Pig. Entonces con la caja de impacto de colisión enemiga, puedo entrar aquí a que la forma del cuerpo entró, y voy a conectar eso al cerdo enojado. Entonces, la colisión enemiga golpeó la forma del cuerpo de la caja entró, vamos a tratar de infligir algún daño al jugador. Pero la cosa es que muchos enemigos van a poder infligir daño de esta manera, si no todos ellos en el juego. Entonces en realidad podría querer sacar esto
del guion enojado de Pig y podemos ponerlo en GD enemigo y stat Así que los enemigos van a tener la capacidad de hacer daño al jugador cada vez que el jugador entre a esa zona si el jugador no está en un estado vulnerable. Entonces para que un enemigo inflija daño, vamos a necesitar otra variable. Entonces voy a hacer exportación, digamos colisión de flotación, forma
de colisión, daño de colisión. Y voy a dejar eso a uno. Entonces vamos a comprobar si este cuerpo es de tipo jugador. Por lo que para nuestra caja de golpe de colisión, el cuerpo debe estar unido a un jugador. Y podemos estar bastante seguros de que eso va a ocurrir porque en nuestra caja de cadera, la capa de colisión sólo está configurada para tener la máscara del jugador y los jugadores van a ser un tipo de personaje. Entonces lo que podemos hacer y nuestro guión enemigo aquí, se acaba de asignar el daño a este cuerpo, asumiendo que es de tipo jugador. Por lo que el punto corporal se golpea, el daño por
colisión debería en teoría poder ocurrir ya que
los únicos cuerpos que van a estar en esa capa en el juego van a ser el jugador. Y si no es un jugador, entonces probablemente estropeamos algo y sí queremos sacar un mensaje de error. Entonces creo que estará bien hacer esa suposición aquí. Por qué obtienen un error o en absoluto han sido exitosos, tal vez no se ha implementado en ese tipo de personaje específico. Pero vamos a darle un tiro. De acuerdo, así que ahora consigue hits que van a correr. Jugadores implementación de eso es que va a recibir daños y que va a establecer el estado actual para golpear. Hagamos un cambio extra aquí, que es que en la clase de caracteres, agreguemos aquí un método GET conjunto. Así Set Salud. Y entonces podemos decir función set salud, y vamos a decir que la salud es igual a valor. Pero si la salud es menor o igual a 0, entonces podemos tacar para mí sobre este objeto. Entonces básicamente esto solo significará que cualquier personaje que caiga a 0 de salud se elimine instantáneamente del juego. A lo mejor cambiamos eso más adelante si teníamos algunas animaciones para quitarlo del juego, si lo escribimos aquí, entonces es básicamente configuración para todos los personajes. Entonces si vamos a cerdo enojado, por ejemplo, en realidad no
necesitamos tener esta Q gratis aquí. Podemos simplemente hacer auto punto Salud menos igual daño. Y entonces eso debería ejecutar el método de ajuste de la salud del conjunto de caracteres. Voy a tirar de esto aquí para que esté cerca de esa variable. Entonces sigamos adelante y golpeemos play y veamos dónde estamos. Si nos topamos con el enemigo, la animación se reproduce durante 0.4 segundos. Y creo que estaríamos recibiendo daños, eso son dos cabezas. Y luego después de tres hits, la salud baja a 0. Por lo que el jugador es Q liberado del juego.
23. Temporizar y añadir el desbloqueo de la lesión: Entonces todo eso funciona técnicamente, pero un par de cosas que probablemente queremos agregar al personaje. En primer lugar, si todos nuestros enemigos están chocando con nuestro personaje de esta manera, usando el daño de estudio de hit box a él. Cada enemigo puede simplemente seguir haciéndolo una y otra vez
cada vez que la forma entra en la forma del cuerpo. Por lo que queremos asegurarnos de que el personaje no sólo pueda estar abrumado. Por lo que debería haber algún tipo de temporizador de invulnerabilidad para que el jugador se proteja. Básicamente, sólo se puede golpear una vez cada segundo. Y eso hará que el juego sea un poco más justo para el jugador ya que agregamos enemigos extra. Entonces si vamos al jugador, podemos hacer clic derecho aquí en la parte superior en un nodo infantil. Y hagamos un temporizador. Por lo que este temporizador, solo podemos tener que sea 1 segundo tiempo de espera por defecto. Entonces esa será la duración de la invulnerabilidad. Y revisemos un disparo para que cuando ese temporizador caiga a 0, no
se reinicie, solo se detenga. Por lo que podríamos llamar a esto el temporizador invencible o el temporizador de invulnerabilidad, lo que prefieras. Vamos a abrir el guión y lo haremos referencia con fiebre. Entonces estoy listo si nuestro invencible iguala signo de dólar y Vince de tiempo completo. Entonces con este temporizador, vamos a querer arrancarlo cada vez que nos golpeen. Entonces si encuentras ese método de golpe, entonces podemos iniciar el temporizador cuando nos llevemos el daño. Tan invencible temporizador, arranque de punto. Pondré eso aquí. Por lo que ahora queremos evitar que el personaje sufra daños mientras el temporizador está funcionando. Entonces podemos ponerlo aquí arriba. Entonces si temporizador invencible, y hay una manera de conseguir si actualmente está funcionando o no, pero lo olvidé por un segundo. Entonces busquemos en realidad la ayuda. Y puedes usar esto en la parte superior derecha. Si necesitas buscar detalles sobre alguno de los nodos y el juego. Entonces si solo
escribimos timer aquí, podemos encontrar timer y podemos ver todas las propiedades y métodos al respecto. Por lo que queremos comprobar si está detenido. Si se detuvo, entonces debería poder recibir daños, pero de lo contrario no así. Y jugador dot GD y queremos hacer está detenido. Este es un método, por lo que necesitamos el paréntesis y sólo si se detiene vamos a hacer todo esto. Entonces de lo contrario, el temporizador de invencibilidad significa que no importa que el personaje técnicamente lo consiguió por el enemigo no vaya a entrar a ese estado. Ese personaje sólo va a seguir operando de forma normal. De acuerdo, entonces ahora si
golpeamos el juego, deberíamos poder limitar la cantidad de veces que recibimos daño. Entonces voy a toparme con él un montón y ver cuánto tiempo se tarda realmente en que el jugador muera. Entonces como pueden ver, pasé por el Enemigo muchas veces, pero el jugador no murió por lo menos tres segundos allí. Puedo golpear play y sólo mostrar eso una vez más. De acuerdo, Así que yendo de ida y vuelta a través del enemigo, y se tarda un tiempo en morir porque los temporizadores de invencibilidad limitando la cantidad de daño al jugador. Ahora una última cosa es que el personaje sólo puede moverse, sin embargo quiere cuando recibe daño. Entonces no creo que eso se sienta tan bien en cuanto enfatizar que el personaje debe recibir daño y un poco ser derribado. Por lo que deberíamos configurar algún movimiento personalizado cuando el personaje reciba daño para que se tambalee un poco. Entonces cómo podemos hacer eso es aquí arriba en nuestro proceso de física, esta es nuestra forma normal de movernos, pero queremos tener una forma diferente de movernos si el personaje está en estado oculto. Por lo que podemos tomar este código, moverlo a su propia función separada. Aquí abajo, llamaré a esta función movimiento normal. Se va a requerir una entrada. Como se puede ver, esta dirección de giro necesita la entrada. Y en eso, vamos a ejecutar este código. Y en realidad no vamos a establecer la velocidad aquí. Sólo vamos a devolverlo. Hagamos un partido aquí arriba. Entonces básicamente en cualquier otro estado entonces el estado que vamos a movernos con normalidad. Entonces vamos a hacer coincidir el estado actual, y vamos a conseguir todos esos otros nombres de estado. Por lo que state dot AIDL, coma, punto de
estado, salto de punto de estado, coma estado punto doble salto. Y en todos esos casos, la velocidad va a ser igual a lo que recuperemos de Move normal, que lleva la entrada del jugador hasta aquí. Y ahora, en el último caso, o al menos el último caso actual, que es golpe de punto estatal. Queremos una función de movimiento especial, por lo que la velocidad es igual a golpe Move. Y esto no va a necesitar ninguna entrada porque el jugador no va a tener control sobre cómo se mueve el personaje en este caso. Entonces vamos a crear esa función aquí abajo, ajuste de
función, muévete a escribir un pequeño comentario aquí. De acuerdo, entonces en hit move, vamos a estar devolviendo un vector. Por supuesto, la velocidad. Entonces vamos a necesitar una cantidad y una dirección. Por lo que para la dirección, quiero comprobar de qué manera se voltea actualmente el sprite. Y luego quiero ir en sentido inverso. Entonces si el personaje está mirando hacia la derecha, quiero que el golpe de vuelta esté en la dirección izquierda. Entonces hagamos una variable para esa variable, retroceder dirección. Y ésta sería una hormiga, ya sea positiva o negativa. Y si sprite animado dot flip h Así que esto va a significar que el personaje está mirando hacia la izquierda. Entonces en ese caso, queremos que el golpe de vuelta sea a la derecha. Entonces la dirección de retroceso, sólo va a ser uno. Y los otros casos el personaje está mirando hacia la derecha, así que eso va a ser no flip h. Y eso significa que queremos derribar de nuevo a la izquierda. Por lo que derriba dirección. Va a ser igual a uno negativo. Y ahora podemos tomar este valor de uno y negativo y multiplicarlo por su velocidad. Por lo que nuestra velocidad para la espalda NAACP va a ser derribada velocidad, no esa colisión esquió. No sé como quieras llamarlo, tiempos llaman hacia atrás dirección. Y luego para la y, podríamos tener la gravedad aún trabajando durante la colisión. Esa sería una opción. O podríamos simplemente ponerlo en 0, que significa que si el personaje es golpeado en el aire, va a dejar de tener gravedad. Por lo que para la parte y de este vector de velocidad, sólo
podríamos hacer que la gravedad estándar se aplique aquí. O lo que podríamos hacer es establecer la velocidad y. O lo que podríamos hacer es establecer la velocidad y en 0, lo que significa que para ese 0.4 segundos para el personaje está haciendo el movimiento
hit, solo va a tipo de flujo en el aire y retroceder un poco. Así es como quiero hacerlo por ahora. Depende totalmente de ti de cómo quieras configurar el movimiento del personaje. Pero sí, si no quieres que el personaje se mueva verticalmente durante este movimiento de cadera, entonces solo puedes ponerlo en 0. Así que ahora vamos a crear la variable arriba en la parte superior para la velocidad de colisión de golpe. Por lo que la exportación cuesta lejos esto y podría ponerlo en algo así como 50. No quiero que sea demasiado rápido. No quiero que el personaje se caiga fácilmente los bordes que pasa a estar cerca, eso sería bastante molesto. Entonces solo lo mantenemos un poco pequeño por ahora mismo. De acuerdo, sigamos adelante y golpeemos play y veamos dónde estamos. De acuerdo, así que bajemos aquí al enemigo, que te golpeen. Entonces antes de probar al jugador, primero, voy a ir al nivel 1, clic al jugador y le voy a dar, digamos como 20 salud para que podamos probar sin tener que reiniciar el juego. Entonces sigamos adelante y golpeemos play y veamos dónde estamos. De acuerdo, así que aquí está el enemigo. Te van a atacar. Realmente no tiene ningún movimiento. Pero si estamos enfrentando al enemigo, entonces sí conseguimos ese golpe y es en la dirección opuesta a la que nos enfrentábamos. Entonces eso es básicamente lo que quiero. De acuerdo, Así que sí veo un bug en este momento, que es que los personajes y desgarrando el estado de inactividad y un poco demasiado rápido. Entonces vamos a revisar el jugador y el árbol de animación. De acuerdo, y asegurémonos de que todo funcione aquí. Entonces el único disparo parece estar funcionando ¿verdad? El hit de animación va aquí. Entonces tal vez en el reproductor de animación, podemos comprobar este punto cero cuatro segundos y animación y looping. De acuerdo, así que esto es lo que es. está ejecutando la función de estado picnics a pesar de que está en estado punto hit. Creo que la función del cerdo siguiente estado sí corre tras todo lo demás. Entonces podríamos ser capaces de cortar esto aquí abajo y luego sólo tomar el siguiente estado y tener que correr aquí también. A ver si eso funciona. Por lo que pick next state solo va a estar funcionando normalmente si básicamente está haciendo estos movimientos un poco normales. Entonces vamos a golpear juego y ver si eso va a funcionar. ¿ Todo bien? De acuerdo, Entonces un personaje todavía puede moverse. Y cuando sí nos golpean, está siendo derribado apropiadamente. Entonces eso es lo que buscamos. No queremos ninguna forma de que el jugador deje accidentalmente el estado hit que no sea que la animación esté completamente hecha. Por lo que se ve bastante bonito ahí. Simplemente puede deshacerse de la depuración de impresión aquí solo para comprobar la velocidad. Una última cosa que podríamos querer hacer es hacer el vector de dirección de golpe 2 en lugar de un entero. Técnicamente, esto funciona bien, pero lo que podemos hacer para que sea un poco más claro es debido igual de vector a derecha. Y entonces en lugar de uno negativo en la dirección x, podemos decir vector dos puntos a la izquierda. Puede haber casos en los que quieras que el jugador quede noqueado y un poco. Y en ese caso, el vector dos funcionaría mejor aquí, ya que sería capaz de definir un componente y para la dirección también. Entonces para esto, lo que podemos hacer en su lugar es
sacar esto aquí y luego simplemente multiplicarlo por la dirección de retroceso. Entonces esta será nuestra magnitud y entonces esta será la dirección. Teóricamente, quisiéramos normalizar eso. Entonces supongo que este técnicamente hace cualquier cosa aquí, pero quisiéramos asegurarnos de que las direcciones no vayan por encima de una porque entonces tendría una especie de magnitud por aquí. Entonces, hagamos que se normalice. Y luego pondremos la dirección de retroceso a eso. Por lo que el vector normalizado sólo teniendo dirección multiplicada por la velocidad. Y debería funcionar de manera efectiva exactamente igual que antes. Pero creo que esto hace que sea un poco más fácil entender exactamente lo que está pasando para que nuestro personaje aún pueda moverse y todo. Vamos a ser golpeado por el enemigo, derribado hacia atrás en la dirección correcta. Y sí, está funcionando exactamente como antes en términos de funcionalidad final. Entonces así es como podemos tener enemigos como el cerdo enojado dañan a nuestro jugador. Y eso va a ser más o menos para esta sección sobre montar la púa enojada.
24. Estado deslizador de pared de la codificación: Entonces en esta siguiente parte vamos a estar agregando el estado de deslizamiento del muro para nuestro personaje. Entonces cuando estamos bordeando el muro, deberíamos poder deslizarnos hacia arriba y hacia abajo. Y también le va a dar un campo diferente al movimiento. Entonces una cosa que voy a añadir es reducir la tasa que se
desliza por la pared en contraposición a cuando acaba de caer debido a la gravedad. Y también vamos a sumar la capacidad de hacer un pequeño salto fuera de la pared, lo cual es diferente de un salto normal porque va a
propulsarnos un poco lejos de la pared automáticamente. Entonces sigamos adelante y sumérjase en nuestra escena de jugadores. Y supongo que un lugar con el que podríamos empezar sería el árbol de animación. Entonces si ampliamos esto, podemos ver que aquí no hay nada por un rato de animación deslizando. Y creo que lo que vamos a poner es entre el golpe de un solo disparo y el doble salto. Nosotros sí queremos que el golpe de pozo sea una animación de alta prioridad para conseguirla y tomar daño básicamente es token y proceder de todo. Entonces lo tendremos justo aquí. Y en lugar de un solo disparo hará de esto una mezcla porque estar en la pared se puede encender y apagar. Entonces vamos a hacer clic aquí y voy a añadir una mezcla T2. Y esta mezcla dos va a ser, está en la pared. Entonces a medida que conectamos la salida de nuestro salto doble de un tiro para ser la entrada en está en pared y desconectar está en qué? El de un tiro para terminar la tendencia. Y antes de añadir en la animación, en realidad
necesitamos corregirla. Entonces en el sprite animado, podemos ver que aquí tenemos una animación de salto de pared. Pero en realidad eso no es exacto. Esto realmente es una animación de deslizamiento de pared. El salto sólo va a parecer una animación de salto estándar. Entonces vamos a renombrar esta animación para ser tobogán de pared. Y ahora vamos a entrar en nuestro árbol de animación para que pueda hacer clic derecho en una animación y elijamos esa diapositiva de pared. Bueno, en realidad tampoco hemos creado esa animación en el reproductor de animación para ello. Entonces en el reproductor de animación, Vamos a ir a la animación inactiva y duplicarla. De acuerdo, entonces podemos renombrar esto para ser, creo que necesito cambiar aquí va a ser el valor o la animación. Y por supuesto vamos a cambiar eso para ser mientras diapositiva. Por lo que ahora podemos entrar en el árbol Animación, eliminar ese nodo de animación, y añadir uno nuevo para que se actualice con la pared ligera animación. Y ahora conectamos eso a la mezcla. Entonces si nuestro valor de mezcla se establece en uno, vamos a estar bien durmiendo. Y si se establece en 0, vamos a estar tocando una de estas otras animaciones. Entonces ahora vamos a sumergirnos en el código. Entonces con el cuerpo cinemático 2D, hay una función que es, está en pared con paréntesis. Por lo que puedes ejecutar eso en cualquier cuerpo cinemático 2D para comprobar si el personaje está en la pared o no. Pero en mi práctica, no
estoy un cien por ciento seguro de por qué, pero encuentro que obtienes resultados más consistentes en comprobar si hay un muro fronterizo, si solo haces un recast. Entonces en lugar de usar está en la pared y usar eso para comprobar si debemos entrar en el estado deslizante, usaremos elenco de matriz para ver si estamos justo al lado contra una pared. Y entonces ese muro objetos supuestamente también
va a tener que igualar por estar en la capa mundial porque sólo queremos que cosas como los ladrillos y las plataformas realmente puedan contar como esposa, nos topamos con un enemigo que no debería contar. Por suerte, sin embargo, si recuerdas, nuestro jugador tiene la máscara de colisión donde solo estamos revisando el mundo. Entonces básicamente cualquier cosa que podamos colisionar con pobre una operación de física 2D es lo que vamos a usar para las máscaras o simplemente usaremos esta máscara. Entonces sigamos adelante y creemos nuestra función para probar si estamos bordeando a continuación contra el muro. Entonces voy a llamar a este funk está en la prueba de refundición de pared. Quiero asegurarme de que esté claro que no solo estamos usando el estándar es una función inadecuada, sino hacer lo nuestro aquí. Y luego vamos a necesitar una variable. Entonces este va a ser el estado espacial. Entonces en un juego de ghetto, podemos obtener este objeto de estado espacial, que tiene la capacidad de hacer pruebas de refundición usando Git world 2D y luego verificando esa propiedad directa del estado espacial. Entonces con eso podemos hacer un casting de rayos, que básicamente es tomar un punto de partida, salir hacia otro punto de nuestro mundo 2D y ver si hay alguna colisión entre el punto de inicio y final. Entonces vamos a tener una variable de resultado, que va a ser un diccionario de las colisiones que se produzcan. Y esto va a ser igual a nuestro objeto de estado espacial haciendo el re-cast y lo vamos a hacer como un rayo intersectado. Estamos partiendo de la posición de nuestros objetos de jugador. Entonces esa es la posición global. Y vamos a poner la posición final en este rayo. Básicamente nuestra posición inicial más un cierto número de píxeles hacia la dirección que nuestro personaje está enfrentando. Donde nuestro personaje se enfrenta va a ser el muro que nos importa. Por lo que podemos empezar con nuestra posición global aquí. Y un número arbitrario de píxeles. Encontré que 10 funciona muy bien. Y puedes poner una propiedad arriba en la parte superior si quieres ponerla ahí y esas cosas. Y vamos a veces esta función phi y u escribirán dirección de cara. Entonces sigamos adelante y escribamos esa función ahora. Por lo que la función consigue orientación. Entonces esto va a ser bastante sencillo. Sólo vamos a echarle un vistazo. Uh, a qué dirección se dirige el sprite del personaje. Y entonces esa va a ser nuestra dirección de enfrentamiento. Por lo que sólo podemos comprobar si el sprite animado blip H es falso. Entonces si eso es falso, entonces nuestro personaje está mirando hacia la derecha. Entonces queremos devolver un vector dos puntos, ¿verdad? Entonces en términos de valores, esto sería sólo una coma 0,
0 para y, una para x, lo que significa que estamos frente a la derecha. De lo contrario, básicamente está mirando hacia la izquierda. Por lo que podemos simplemente devolver vector dos puntos a la izquierda. Tan súper fácil. De acuerdo, Entonces ahora podemos volver a nuestras funciones de prueba de refundición. Por lo que aquí hay un par de parámetros más. Por lo que se puede ver el tercer parámetro justo ahí es excluir y se necesita una matriz, por lo que queremos excluir el objeto actual de eso. Realmente no se requiere aquí, pero por si acaso por alguna razón, no
queremos que el jugador se presente como muro para los resultados. Así que bien podría simplemente hacer uno mismo aquí como la matriz. Así que tenga en cuenta los corchetes. Es así como lo definió como una matriz. Y esto tiene que ser una matriz porque ese es el tipo para el perímetro. Entonces a continuación podemos poner una máscara de colisión aquí para hacerla para que haya tú
intersectorial cuando está saliendo y comprobando si hay colisiones, Solo
lo está haciendo en la capa mundial. Entonces la forma más fácil de hacer eso solo va a ser tomando aquí la máscara de colisión. Y podemos simplemente sacar eso justo del cuerpo cinemático 2D
haciendo máscara de colisión auto punto. Entonces esto nos va a hacer el cheque de refundición para el muro. Y ahora sólo podemos hacer algunos cheques muy simples. Entonces si hay un resultado y el diccionario, eso significa que hubo una colisión. Y presumiblemente esa colisión ocurre en la capa mundial, lo que
significa que se trata de un bloque o algún otro objeto que contaría como muro. Y sólo queremos ver si hay alguno de esos. Entonces podemos hacer eso con bastante facilidad con si el tamaño del punto de resultado es mayor que 0, entonces obviamente hay algo ahí. Por lo que regresamos verdad. De lo contrario no hay colisiones. Por lo que no debería haber un muro justo frente a nosotros, para que podamos devolver falso. Entonces dependiendo de cómo codificemos, probablemente
va a necesitar el resultado de esto varias veces para cada bucle de nuestro proceso de física, esta va a ser una variable útil para determinar qué estado debe estar en y qué acciones y movimientos debemos tomar. Entonces si ejecutamos esto aquí arriba y nuestra función de proceso de física podría simplemente
ponerlo justo aquí al lado para establecer parámetros de animación. Entonces ejecutaremos esta función y luego guardaremos el resultado de la misma en una variable booleana. Por lo que sólo podemos subir aquí y hacer var está bordeando muro. Una vez más, sólo cambiar un poco el nombre para que sea distinto del cuerpo cinemático está en función Wolf. También lo es el muro fronterizo. Ese es solo el resultado de esto, está en las pruebas de refundición de pared. Y ahora solo podemos usar esto cuando necesitemos ver
si salió del muro o saltamos de la guerra, lo que sea. Por lo que esto será muy útil. De acuerdo, entonces tomemos este valor y vayamos ahí abajo a escoger el siguiente estado. Entonces después de esto, de lo contrario se sumará otro. Entonces aquí vamos a hacer algo con esto y un segundo aquí. Pero por ahora, vamos a tener otra más si aquí abajo. Entonces necesitamos cambiar esto más y a otra si, ya que solo hay esta condición aquí de todos modos, bien
podríamos tirar de esto aquí arriba. Y lo pego así. Y ahora en ese caso entraríamos al estado de doble salto debería funcionar exactamente como lo hacía antes. Y ahora necesitamos otra más. Si va más abajo, si no se han cumplido todas esas otras condiciones, entonces aquí es donde vamos a usar. Esto está bordeando el muro. Entonces si estamos en la pared básicamente, entonces queremos entrar en el estado de deslizamiento de la pared. Así que vamos a hacer auto punto estado actual es igual a diapositiva de pared de punto de estado. Y entonces por supuesto, subamos a la cima y sumamos esto a la lista de nuestro estado. También podemos modificar un poco esto también. Entonces si el personaje está en el aire y hace el botón de salto, entonces normalmente sí queremos que ocurra el doble salto, pero si estamos en la pared, queremos que los saltos se restablezcan. Entonces básicamente va a ser saltando de saltos también se debe hacer un saltos normales. Entonces lo que podemos hacer aquí es poner que IF está bordeando muro, y luego si ese es el caso, entonces en lugar de entrar en doble salto acabará de entrar en salto. Por lo que auto oscuro estado actual igual estado punto saltó. Y luego lo más aquí abajo, doble salto. Entonces mientras estamos en el tobogán de pared, vamos a querer que el movimiento sea un poco diferente, pero todavía vamos a ejecutar la siguiente función estatal del PEC. Por lo que vamos a montar otro partido para el estado actual. Entonces si conseguimos el tobogán de pared, todavía
vamos a escoger el siguiente estado. que básicamente ya configuramos las otras condiciones que necesitamos para eso en la función del estado de picnic. Pero para el movimiento en sí, vamos a cambiar cómo funciona eso cuando estamos en la pared. Por lo que voy a crear una nueva función para techo de diapositivas de ley. Y esto no va a tomar ninguna entrada del jugador porque básicamente no vamos a estar usando x input para determinar el movimiento x. Se va a quedar atascado en la pared hasta que el personaje salte de la pared. Entonces sigamos adelante y creemos esa función aquí abajo. Cadera. Por lo tanto, funciona mientras se mueve levemente. ¿ De acuerdo? Y al igual que las otras funciones para
movernos, vamos a estar devolviendo un vector. Y para la x, vamos a tomar la velocidad actual y vamos a simplemente mantener eso tal como está. Entonces si no hay movimiento x, no
estamos cambiando el movimiento x. Y luego además de eso, todavía
vamos a hacer hombres tomando el menor de los dos valores. Entonces velocidad, por qué la velocidad actual y y un poco similar a antes, vamos a sumar la gravedad de ajustes del juego, pero vamos a multiplicar esto por un valor de fricción. Entonces voy a llamar a esta fricción de deslizamiento de pared. Y entonces al igual que la función normal, todavía
queremos que esa velocidad terminal sea una especie de nuestra velocidad más rápida absoluta. Nosotros los vamos a seguir. Por lo que obviamente necesitamos este valor de fricción de deslizamiento de pared. Entonces solo subiré aquí hasta arriba y haré otra variable de flujo. Y voy a querer que esto esté por debajo de uno porque el personaje debería deslizarse más despacio cuando está en la pared, tipo de agarrar la pared, entonces normalmente solo caería libre. Por lo que puedo multiplicar esto por 0.5 y luego se deslizará por la pared bastante lentamente. Y así eso básicamente nos dará nuestro movimiento de deslizamiento de pared mientras estamos en los estados de deslizamiento de pared para que no podamos cambiar nuestra velocidad x. Y el deslizamiento por la pared va a ser más lento de lo que estaría cayendo. Entonces en nuestro código cuando estamos en el estado de deslizamiento de pared, en la mayoría de los estados, podemos presionar salto para poder saltar. Entonces si estamos bordeando el muro, vamos a conseguir ese state.com, de lo contrario, estado dot-dot-dot. Y si recordamos, por la función satyr para este estado actual, si venimos aquí abajo, eso significa que va a ejecutar la función de salto, que va a sumar un impulso de salto hacia arriba y aumentar el valor de salto. Entonces eso generalmente está bien, pero queremos que funcione un poco diferente cuando lo estamos haciendo. Desde el muro.
25. Movimiento de salto de pared: Entonces si entramos a este estado Saltos desde el muro, y podemos comprobarlo comprobando el estado actual antes de cambiarlo realmente. Por lo que el doble de estado actual es igual a la diapositiva de pérdida de puntos Y entonces por si acaso cambiamos al estado Saltos de alguna manera sin presionar salto, que no saltemos de la pared. Entonces, por ejemplo, si el personaje se desliza un poco por la pared, pero no por debajo del suelo, y entramos en el estado de salto para la animación. En realidad no queremos que salte inmediatamente. Entonces punto de entrada es acción, solo cresta. Y estamos revisando si hay salto. De acuerdo, Ese es un juego extra de paréntesis. ¿ De acuerdo? Y luego si ese es el caso, entonces podemos hacer un salto de pared. Por lo que esto sería similar a saltar, pero no exactamente igual. De lo contrario. Podemos hacer, el salto normal y otras circunstancias. Entonces subamos aquí al salto básico y creemos un salto de pared. Entonces cosas que van a ser lo mismo sobre el salto de pared. Entonces para el salto de pared, vamos a estar haciendo lo mismo. El y velocidad va a ser el mismo cuando entremos a ese salto de pared. Y debido a que entramos desde la pared, los saltos siempre deben empezar a uno. Ya que estamos considerando la pared como el suelo en el sentido de que restablece nuestros saltos. La otra cosa que vamos a querer tener aquí, básicamente bloqueando nuestro movimiento base para que podamos saltar de la pared con alguna velocidad x además de la velocidad y. Pero no queremos que esto sea algo que el jugador pueda controlar por solo un segundo. Entonces aquí arriba, para nuestro movimiento normal estándar, en realidad
podemos comprobar aquí si el temporizador de salto de agua, que estamos a punto de crear ha comenzado, y si no ha comenzado, entonces lo haremos es un movimiento normal. Pero si está corriendo, entonces vamos a renunciar a este movimiento normal. A pesar de que estamos en el estado Saltos con el fin de hacer un movimiento especial de salto de pared temporalmente. Entonces vamos a crear un temporizador de salto de pared y nuestro jugador. Entonces voy a crear el temporizador, voy a hacer un temporizador de salto de pared aquí. Y vamos a quitarle el movimiento normal al jugador por bough, digamos 0.15 segundos. Entonces si cambias el tiempo de espera a 0.15, asegúrate de que se revise un disparo porque una vez hecho el temporizador, no
queremos que vuelva a correr hasta que reiniciemos un nuevo salto de pared en algún momento del juego. Entonces ahora necesitamos hacer referencia a ese temporizador en el guión, igual que el temporizador invencible. Por lo que poco listo var log jump timer es igual al signo de dólar temporizador de salto de pared. Por lo que podemos comprobar aquí abajo si se detiene el temporizador de salto de pared. Y esa es una función. Entonces si se detiene, entonces haremos la jugada normal aquí. De lo contrario vamos a hacer una, otra jugada especial. Para que ese movimiento especial, Hagamos otra función para que podamos llamarlo mientras saltamos movimiento. Y una vez más, no necesitamos la entrada porque esto es una especie de control forzado para el eje x. Y bajemos aquí. Entonces función mientras salta movimiento. Y la razón por la que necesitamos esta función es porque a diferencia del salto, que es una especie de impulso rápido estándar, esto en realidad va a ser por encima de algunos fotogramas. Por lo que queremos que siga haciendo esto hasta que se haga el temporizador en el salto de pared. Entonces por eso necesitamos ejecutar esto cada fotograma hasta que ese temporizador esté encendido. Por lo que podemos simplemente devolver un vector a aquí. Y esto va a hacer velocidad de movimiento. Y otra variable tendrá que establecer cuál es mientras saltó dirección, que va a estar en esa función de salto de pared. Por lo que básicamente la dirección en la que el personaje salta de la pared va
a ser la dirección y sigue moviéndose hasta que se haga el temporizador. Y luego aquí abajo, el movimiento va a ser el mismo que un movimiento estándar. Tan solo aleja la pared, ligera fricción. Entonces es sólo velocidad y más gravedad. Y ahora necesitamos crear la dirección de salto de pared. Entonces bajemos a la función de salto de pared. Otra vez. Una cosa que vamos a necesitar hacer es arrancar el temporizador mientras que Jam timer sí arranca. Y también necesitamos conseguir la dirección de salto de pared. Y esto va a ser igual a la dirección opuesta de corriente en el marco donde iniciamos el salto de pared. Portón tan negativo frente a dirección. Y esa es una función. Entonces eso también es declarar esta variable aquí arriba en la parte superior. En esto debe ser un vector dos. Entonces esto fue mucho código. Vayamos a establecer el estado actual. Y tenemos que armar un poco aquí para cuando entremos al estado del muro. Entonces Hagámoslo de muro de punto estatal 11 en el muro. Una cosa que definitivamente queremos establecer son los saltos iguales a 0. Ya que estamos restableciendo los saltos para el jugador. Y también queremos que el árbol de animación se va a establecer el parámetro es este ON wall slash cantidad de mezcla. Y esto se va a poner en uno. Y así tiene que ser uno para que se reproduzca la animación del tobogán de pared. De acuerdo, y parece que escribí el nombre de esa variable mal aquí arriba. Entonces, solo peguemos eso mientras la dirección Jam es lo que queremos. Ahora, por último, también queremos que el no deseado se actualice en cada fotograma. Entonces solo estamos revisando si el personaje sigue en la pared o no y luego actualizando eso. De hecho, tal vez ni siquiera necesitamos esto aquí porque sólo vamos a estar fijando en cada cuadro. Entonces sólo voy a cortar eso. Y subiremos aquí para establecer parámetros de anime. Y eso es lo que vamos a hacer en su lugar. Entonces vamos a tomar ese es muro bordeado y convertirlo en uno o 0 dependiendo de si es verdadero o falso. Entonces vamos a escribir es sobre derecho y supongo que puedo declarar que eso va a ser un ENT obviamente. Y podemos hacer si está bordeando muro y si está bordeando el muro, estamos diciendo que está en el muro. Por lo que la variable debe ser una. Así está encendido, mientras nT es igual a 1, lo contrario está en pared, va a ser igual a 0. Y ahora que es un entero, podemos establecer el parámetro. Por lo tanto, los parámetros de conjunto de puntos del árbol de animación está en la cantidad de mezcla de barra Y eso va a ser lo que sea la hora que esté en ley integer se establezca en. Por lo que ahora nuestro árbol de animación debe actualizarse cada fotograma para saber si deberíamos estar tocando la animación de deslizamiento de pared o no. Solo asegurémonos de que en el árbol de animación tengamos ese parámetro aquí. Por lo que podemos ver parámetros es en pared, difuminarlos. Y podemos ver esa configuración con el tobogán de pared.
26. Prueba el salto de pared y finalizar el movimiento de los personajes: De acuerdo, así que después de todo ese código, sigamos adelante y en realidad veamos dónde estamos. Vamos a tocar juego. Está bien. A ver. tenemos el muro corredizo, está bien, y se puede ver cuando saltamos de la pared, los parámetros de animación se establecen correctamente. Entonces esta es una de las razones por las que no estoy usando su propio cheque de pared porque cuando usas el webcast, solo
obtengo resultados mucho mejores. Entonces en cuanto lleguemos aquí, está revisando aquí para el recast. No encuentra muro. Por lo que de inmediato cambiamos a la animación jumper fall, que simplemente se ve mucho mejor. Entonces una cosa que podemos notar aquí es que nuestro personaje se mueve bastante rápido actualmente, con la capacidad de doble salto y hacer toboganes de pared. Esto está bastante por encima, así que probablemente vamos a necesitar bajar ese tono. Otra cosa que noté es que no siempre se siente bien subiendo
al borde de uno de estos bloques y luego deslizándose con esta cápsula formas 2D. Por lo que en realidad cambió la forma del personaje a un rectángulo también. Creo que dije hacia el inicio de este curso, depende un poco de ti lo que prefieras. Y creo que para este punto, prefiero que sea un rectángulo. Entonces una cosa que actualmente no está funcionando súper bien es cuando hacemos ese salto de pared, nos quedamos atrapados en él. Entonces no estoy seguro si estamos revisando correctamente para ver si el temporizador se ha detenido. Porque una vez detenido el temporizador, deberías poder recuperar el control de tu personaje. De acuerdo, entonces hagamos primero la fruta baja colgando en el jugador, podemos cambiar la forma de colisión. Entonces cambiaremos esto a una forma de rectángulo. Y creo que las tallas que quería poner para este trabajo, 10707 y 10, supongo que lo fue. Tan aproximadamente la forma de nuestro personaje, pero,
pero ahora nuestra forma de colisión la hará para que no debamos tener ningún deslizamiento por el borde y por qué los B claramente encendidos están claramente apagados. Creo que otra forma de moverse potencialmente que podría ser usando la función Moving collide en lugar de mover y deslizar. Ya que los movimientos como la función te van a mover a lo largo del suelo. Pero la función de colisionar en movimiento, si hay algo en el camino, sólo
va a detener tu movimiento por completo, hablando en términos generales. Pero creo que esto va a funcionar bastante bien por ahora mismo. A continuación, quiero tipo de limitar parte del movimiento en el juego para que podamos bajar el impulso de salto. Voy a bajar esto a 500 por defecto. Y luego en la configuración del juego, voy a bajar la gravedad a 40. Vamos a golpear Play y ver cómo eso afecta a las cosas. A lo mejor incluso queremos bajar un poco la velocidad de los personajes. Entonces veamos en el jugador, vale, Todavía está usando 200. Entonces supongo que podríamos ponerlo en 180. De acuerdo, así que sigue siendo bastante rápido. Pero creo que con esta cantidad de gravedad, es un poco menos ridículo. Dill sería un poco una plataforma bastante acelerada, tal vez para una rana ninja, eso tiene algo de sentido. Por lo que podemos dejarlo en los ajustes por ahora mismo. De acuerdo, entonces tenemos el problema con un movimiento de salto de pared está pasando por demasiado tiempo. Entonces en realidad voy a tomar el temporizador de salto de pared e imprimir el tiempo restante. Así que imprimamos el tiempo que queda en el registro de la consola y
veamos cuánto tiempo dura esto en realidad debe ser de 0.15 segundos, lo cual es bastante rápido. ¿ De acuerdo? Entonces tomó un fotograma, son esencialmente y después de eso, sigue yendo. Está bien. Entonces, ¿ves qué está pasando aquí? Cuando salimos de la pared, Todavía está en la pared. Slide estados, así que por eso no podemos controlar el movimiento. Entonces lo que podríamos hacer aquí abajo es simplemente agregar otra forma de entrar al estado Saltos, pero hazlo para que hagamos eso sin realmente saltar. Por lo que ya sabemos en este punto que está bordeando muro es falso. Por lo que realmente no necesitamos chequear. Por lo que podemos simplemente hacer auto punto estado actual aquí es igual al estado punto-punto. Entonces cuando entremos al estado así, ya que esto va a ser básicamente cuando algo hace el personaje salga de la pared que no está presionando el botón de salto. Entonces queremos asegurarnos aquí abajo que lo entreguemos sin saltar. Y es por eso que escribí este bit aquí. ¿ De acuerdo? Entonces esto es básicamente solo para distinguir que hay diferentes formas de ingresar al estado Saltos. Y no siempre estamos tratando de hacer realmente una función de salto, aunque estemos tocando esa animación de salto. Entonces sigamos adelante y golpeemos juego ahora. Y ojalá el personaje pueda, oh Dios. De acuerdo, así que sigamos adelante y echemos un vistazo. Y claramente, eso no es lo que pretendíamos. Entonces sí creo que necesitamos una condición aquí en realidad. Entonces vamos a hacer else-si no bordean muro, supongo. Entonces vamos a poner el else-if y vamos a estar comprobando que el estado actual es igual a estado dot wa slide. Por lo que sólo deberíamos poder arbitrariamente y al salto desde
el estado de deslizamiento de pared como este. Y sólo para que sea un poco más legible, comprensible también importante. Y no es muro fronterizo. Entonces si este bit ya se ha ejecutado, entonces esto ya debería ser cierto. Por lo que realmente no va a ser necesario. Pero supongo que da una pista sobre lo que está pasando aquí mismo. Entonces sigamos adelante y golpeemos el juego. Y no deberíamos poder entrar a ese salto desde el principio porque no estábamos en la pared, pero ahora estamos en el tobogán de pared. Saltemos de la pared. Y se puede ver que da una forma para que entremos al salto, pero sin añadir en realidad otra animación de salto. Por lo que sólo tenemos ese salto de la pared. Y esto es lo que hemos estado buscando. Por lo que podemos ver aunque el salto de pared es forzado, podemos presionar hacia la pared y sí retrocede bastante rápido. Técnicamente, eso está funcionando como se pretendía. A lo mejor se mueve un poco demasiado rápido y el aire, por lo que podríamos ralentizar los personajes por defecto, movimiento del aire o la aceleración horizontal del aire si quisiéramos. Pero si te gusta la sensación del personaje ahora, entonces debería ser bastante bueno ir por todas las grabaciones de animaciones, configurar a este personaje con tal vez un poco para deslizarse por el mapa. Pero mucho de eso sólo va a estar ajustando las variables. Entonces recortemos ese pedacito que está imprimiendo a la consola log un montón. Simplemente voy a golpear Control F y revisar Huellas. Este está bien supongo. Pero vamos a deshacernos de este salto de pared Timer Text. Ahora, una cosa más que mostrar. Antes, dije que cuando estamos haciendo nuestro webcast, queremos asegurarnos de que esto solo ocurra cuando nuestros personajes en la pared así. Y tal vez ni siquiera queremos tener el muro abrazando si estamos en el suelo y en el muro así. Entonces eso es otra cosa que podemos apagar. A lo mejor nos gusta, no lo sé. Pero queríamos asegurarnos de que el cerdo no pueda contar como la pared. Y se puede ver que claramente el cerdo no cuenta como la pared porque está en una capa separada, está en su capa enemiga, lo que hace que las capas de física sean realmente útiles. Por lo que todavía podemos rebotar sobre ellos. Todavía podemos, veamos si podemos conseguir un ataque y luego un doble John. Está bien, Bonito. Y luego después de eso podemos ir por unos lindos toboganes de pared en un salto o mientras se desliza en un doble, volcas, lo que sea que queramos hacer. Por lo que nuestro personaje está trabajando más o menos plenamente aquí. Entonces habrá un par de cosas más que queremos sumar al juego todavía como un segundo enemigo y en realidad construyendo algunos niveles. Ha pasado un tiempo desde que tocamos el conjunto de teselas, pero podría ser divertido hacer la transición entre unos pocos niveles. Cuando superas el nivel uno, puedes pasar al nivel dos, así sucesivamente y así sucesivamente. Entonces eso será una especie de lo que estamos viendo en los videos finales.
27. Corrección de limpieza y errores: Vale todos, Así que a medida que nos acercamos al final de este curso, quiero tener un video rápido aquí para limpiar algunas de las cosas que antes estaban un poco desordenadas. Por lo que empezar con eso es aumentar la animación de doble salto a 0.35 segundos. Entonces si echamos un vistazo corto al doble salto, creo que termina en un poco abruptamente ahí. Y yo estaba encontrando que si aumentamos un poco la duración de la animación, que transita de nuevo a su caída o saltar animaciones un poco más suave. Entonces vamos al jugador, al jugador de animación. Y si encontramos la animación de doble salto, podemos aumentar la duración aquí a 0.35 segundos. Cambia este snap a 0.05 segundos. Y vamos a acercar y sólo mover esta animación terminada a la marca 0.352. Entonces ahora cuando volvamos al juego, creo que la animación sólo va un poco mejor allá. Lo siguiente que quiero hacer es agregar un segundo cerdo al juego. Por lo que realmente no estamos construyendo nuestros niveles bastante todavía. Pero me imagino que este tercer waypoints lleva mucho tiempo sentado aquí. Y como nuestro cerdo enojado está completamente hecho, es una pena que no reutilicemos parte del código, solo
seleccionemos a nuestro Cerdo en la jerarquía y hagamos un Comando o Control D para duplicarlo. Si mantienes presionada Alt donde estás rondando sobre los cerdos, seleccionaremos y moveremos el seleccionado actualmente. Entonces movamos a este cerdo enojado por aquí a la derecha. Y ahora duplicemos el waypoint 3. Entonces me voy al Alt. Entonces voy al Comando D en Mac. Y luego voy a ir por aquí a donde está en el mundo del juego. Sostenga el Alt D para mover ese waypoint específico y como verter por aquí. Entonces como tenemos el código configurado bastante bien, ya
hemos creado el pathing para la pick enojada. Ahora sólo tenemos que definir que el cerdo enojado va a usar waypoints 3 y 4. Así que vamos a hacer clic en Angry picked para ir a la matriz waypoints. Y seleccionemos waypoint tres en lugar de uno en waypoint cuatro en lugar de tres. Otro pequeño tema es que si miramos la forma de colisión para nuestro cerdo enojado y golpeando el mundo del juego, podemos ver que en realidad está rebotando un poco por encima de donde está el suelo. Entonces eso no se ve del todo bien. Entonces si entramos en el cerdo enojado, solo
podemos tomar nuestra forma de colisión, la principal para las colisiones mundiales reales. Y luego tomemos la posición aquí y cambiémosla a un dos de un tres para la posición y. Entonces esto sólo lo mueve un poco hacia arriba. Y ahora chocará mucho mejor con el suelo y se verá más correcta. Entonces, solo sigamos adelante y previsualemos dónde estamos tan lejos. Por lo que nuestros cerdos están un poco más arriba contra el suelo y tenemos este segundo cerdo enojado. Conoce cómo es remar distancias mucho más allá, pero sigo funcionando igual que el primer cerdo enojado. Y eso es realmente genial. Fue mucho más fácil crear al segundo enemigo. Y luego cuando realmente tenemos que codificar todo desde cero, reusabilidad, sí. Entonces otro tema, y este tipo de cosa importante es que con nuestra mecánica de salto, a veces si saltamos en un ángulo como este, realidad
dañamos al cerdo a pesar de que estamos ascendiendo, lo que realmente no hace sentido. Entonces lo que podemos hacer es agregar no sólo un, fue los jugadores salto hit box chocando desde arriba, sino que fue la velocidad como ascendente o descendente. Por lo que sólo debemos dañar a los cerdos. Estamos cayendo sobre él. No cuando estamos enviando un ángulo así. Es un poco raro. Entonces es una solución rápida. Entrémonos en el guión del jugador y luego encontremos dónde estamos revisando para infligir daño a un enemigo. Entonces creo que podría haber sido en Jump Box entró. Y aquí podemos ver la línea para si inflijamos daño al enemigo. De acuerdo, Entonces esta línea es solo para comprobar si estamos golpeando al enemigo de la manera correcta. Por lo que la posición debería estar por encima. Entonces vamos a bajar aquí y añadir una condición extra, que es que el punto de velocidad y Creo que queremos que sea menos de 0. Queremos asegurarnos de que va hacia abajo en la pantalla. Entonces, solo golpeemos el juego y echemos un vistazo. Habrá inmediatamente obvio. Entonces si saltamos sobre el enemigo, vale, qué es, en realidad es al revés. Y así es un poco confuso ya que la dirección y es una especie de invertida. Entonces si vamos a bajar, eso en realidad es positivo y negativo estaría yendo hacia arriba en la pantalla y nuestro personaje está bajando a aterrizar sobre el enemigo. Entonces vamos a golpear play, probemos eso de nuevo a qué hora, solo asegúrate de que podamos rebotar. Eso es lo que queremos. Pero ahora no podemos hacer este extraño movimiento de daño inclinado. De hecho, lo que pasa es que nos dañamos, que es un poco como debe ser. Yo creo. El otro asunto con el cerdo enojado, y si entramos en se ve y echamos un vistazo a eso, Vamos a desactivar la colisión principal en forma de 2D. Podemos ver que cuando hice la forma de colisión enemiga es realmente pequeña. Y eso sí le paga mucho al jugador. Pero creo que hasta el punto en que no tiene sentido. Por lo que el jugador puede estar aquí y aún no recibir ningún daño del enemigo. Entonces voy a reventar eso sólo un poco. Entonces tomemos la forma de colisión enemiga debajo de la caja de impacto de colisión enemiga, y tomemos las extensiones y hagamos que 10. Entonces ahora puedes ver que esto todavía no coincide realmente con el marco sprite. Por lo que se puede ver que esto aún es más pequeño que el propio sprite. Y si encendemos la forma principal de colisión, la para si el cerdo choca con el mundo, se
puede ver que aún más grande. Entonces todavía hay vuelo. Por lo que esto aún favorece al jugador, pero tal vez tenga un poco más de sentido ahora. De acuerdo, Entonces con esos arreglos, salir con los cerdos enojados debería estar un poco más limpio. Entonces vamos a golpear play y sólo a probar todo. Entonces en primer lugar, asegurándonos de que todavía podamos hacer un ataque de rebote al enemigo. Eso está todo bien. Y sólo tratemos de ser un poco astutos y tratemos de evitar daños. Bueno, obviamente podemos ver que las formas de colisión nos van a favorecer, pero
28. Juego sobre la pantalla y la cámara: Una de las siguientes cosas que me gustaría agregar es que la habilidad
para que el personaje se caiga del filo y pierda el juego. Pero ahora mismo, tenemos una cámara de seguimiento sin límites. Entonces puedo mostrar un poco lo que va a pasar ahora mismo, si salimos del filo, se
puede ver, no importa a dónde vaya el jugador, sólo
va a seguir. Entonces sería un poco raro tener un juego por aquí mismo. Entonces lo siguiente que vamos a querer hacer es tomar esta cámara y ponerle algunos límites a ella. Por lo que con cualquier cámara, puedes establecer manualmente límites usando la categoría límite aquí abajo. Para que se pueda ver izquierda, arriba, derecha, e inferior. Pero creo que una mejor manera de hacerlo es usar nodos 2D de posición para establecer dónde está
el límite superior izquierdo y el límite inferior derecho es igual que establecemos objetivos waypoint. Y luego aplicar eso a la cámara 2D y un guión siempre que se cargue el guión. Entonces sigamos adelante y tomemos esta cámara 2D. Voy a renombrarlo algo así como seguir cámara para ser un poco más específico. Cuando hacemos eso, nos da una advertencia sobre nuestra transformación remota. Por lo que tienes que restablecer el camino a la cámara de seguimiento en esta cosa del camino remoto por aquí. Entonces ahora tomemos esta cámara de seguimiento, haga clic derecho sobre ella y convertirla en una escena reutilizable. Podría ser un poco exagerado, pero supongo que voy a crear una categoría aquí, una foto más bien. Entonces si hago clic en Nueva carpeta y solo llamaré a esta cámara. Entonces si tienes alguna otra cámara, así podría ser un poco redundante. Pero creé una carpeta aquí llamada cámara. Basta con hacer clic derecho en nueva carpeta. Y entramos aquí y podemos salvar esta escena como objetos reutilizables, pero son así que ahora vamos a sumergirnos en la escena de las cámaras. Y esta escena. En primer lugar, vamos a querer restablecer la transformación a 000 por defecto. Y en segundo lugar, tenemos que sumar en alguna posición los martes, pero no queremos que la posición a estos mueva con la cámara si la cámara cambia de posición. Pero más bien queríamos que fueran más una posición global en nuestro juego. Entonces podemos asegurarnos, aunque sea un niño que no va a heredar la posición haciendo clic derecho, Agregar un nodo hijo y luego usando nodo como base. Para que pudiera llamar a esto límites. Y luego dentro de este nodo límites creará la posición los martes. De lo que ahora vas a tener una posición totalmente separada de la cámara de seguimiento. Entonces con la posición 2D aquí, voy a llamar a esto arriba a la izquierda. Voy al Comando D, duplicarlo, y vamos a llamar a esto fondo. Correcto. Ahora solo pongamos alguna posición por defecto para que sepamos que no está sentado ahí en el origen. Voy a seleccionar arriba a la izquierda mantener saliente, y mover la parte superior izquierda a derecha por aquí. Y voy a hacer lo mismo con la parte inferior derecha. Selecciónelo, mantenga presionada Alt y muévelo a la derecha por aquí. Ahora en guión, cuando las cargas de guión establezcan la parte superior, deje que el médico izquierdo y superior por aquí, y las posiciones inferior y derecha para la cámara mediante el uso de esta posición. Entonces tomemos la cámara de fotos, haga clic derecho en ella, agreguemos un guión. Por supuesto, vamos a llamar a esta cámara seguir, guárdala en la carpeta de la cámara. Ahora, vamos a necesitar en ya var o arriba a la izquierda, encuadernado, o simplemente arriba a la izquierda u otro. Y pongamos ese signo igual al dólar arriba a la izquierda. Ahora tenga en cuenta, cuando tenga hijos anidados, necesita el camino completo. Entonces vamos a necesitar límites slash top-left, pero Godot como que ya sabe es lo que vamos por ahí. Por lo que es bastante fácil tener autocompletar. Así que vamos a hacer var abajo a la derecha equivale a límites de signo de dólar, abajo a la derecha. Por lo que ahora en funk listo podemos tomar los límites. Hagamos límites de self.view. De acuerdo, supongo que hay que establecer cada una individualmente, no como una categoría entera. Entonces vamos a hacer autolímites. Empecemos con top. Y esto va a ser un valor. Entonces consigue la posición, la posición mundial absoluta de la parte superior izquierda. Entonces esa va a ser una posición global de punto izquierdo
superior, subrayado superior izquierdo. Y como estamos lidiando arriba, estamos mirando el valor y. Entonces posición global punto y. ahora necesitamos límite izquierdo igual arriba izquierda, posición
global punto x k. Y guardarlo no debería tener errores actualmente. Y ahora hacemos lo mismo con la parte inferior derecha. Entonces eso va a ser igual de fondo, ¿verdad? Punto posición global punto x, porque la derecha va a izquierda y derecha, que es x. Así que auto punto inferior derecha es inferior derecha, posición
local punto
y, y eso no es inferior derecha aquí, eso es Límites abajo abajo. Y aquí arriba debe ser limitado, ¿verdad? Entonces ahora que tenemos el conjunto que solo hay que hacer es asegurarnos de que la cámara esté en el nivel uno y luego podamos establecer los límites. Entonces ahora mismo hay cámara de seguimiento no es apropiadamente conseguir la escena, así que sólo voy a añadir una nueva cámara de seguimiento y acabo de ponerla por aquí. Eliminemos el viejo que no tiene el rebote. Y luego esta, podemos renombrar cámara de seguimiento, ya que tiene el mismo camino que el remoto transforma path que tipo de se arregla. Y ahora tenemos una cámara con estos límites. Entonces lo que tenemos que hacer es hacer clic derecho en seguir cámara, elegir niños editables. Y ahora podemos editar los límites superior izquierdo e inferior derecho. Entonces los límites de la parte superior izquierda, eso lo puso. No sé en algún lugar por aquí por ahora. Entonces esos serán los límites superiores y los más izquierdos para nuestra cámara. Y luego aquí abajo, primero, ocultemos el juego sobre pantalla. Pero tomaremos el fondo a la derecha y vamos
a moverlo o simplemente ponerlo a la derecha por ahí. Podría ser útil activar una cuadrícula de píxeles por ahora mismo si quisiéramos. Ahora para mostrar que estos límites están separados de la cámara en cuanto a su posición, Vamos a seleccionar la cámara fotográfica, mantenga presionada Alt y moverla. Entonces se ve a pesar de que nos movemos que seguimos cámara, los límites no mueven su posición, que es, configuramos ese nodo de límites. Por lo que ahora para que nuestros límites sean perfectos, podríamos querer configurar una cuadrícula de p