Unreal Engine 5 Blueprints: Plataformas de RPG 2D multijugador | Pixel Helmet | Skillshare

Velocidad de reproducción


1.0x


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

Unreal Engine 5 Blueprints: Plataformas de RPG 2D multijugador

teacher avatar Pixel Helmet, Game Developer & Publisher

Ve esta clase y miles más

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

Ve esta clase y miles más

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

Lecciones en esta clase

    • 1.

      Introducción

      2:09

    • 2.

      Descargar Unreal Engine 5

      1:51

    • 3.

      Crear un nuevo proyecto

      2:13

    • 4.

      Unreal Engine 5 Visión general

      17:37

    • 5.

      Crear un nuevo nivel

      2:07

    • 6.

      Importar los activos ambientales

      3:11

    • 7.

      Creación de un juego de azulejos

      3:07

    • 8.

      Crear un mapa de azulejos

      4:31

    • 9.

      Diseñar el entorno

      14:07

    • 10.

      Eliminación de los parpadeos

      2:12

    • 11.

      Colocar el mapa de azulejos en el nivel

      4:07

    • 12.

      Volumen de Post

      5:34

    • 13.

      Eliminación de anti-aliasing

      2:06

    • 14.

      Agregando colisión

      8:26

    • 15.

      Crear sprites

      5:12

    • 16.

      Crear libros de fotos

      2:46

    • 17.

      Introducción al plan

      1:08

    • 18.

      Clases de planos

      5:23

    • 19.

      Modo de juego y controlador de jugadores

      3:47

    • 20.

      Planes para padres y niños

      5:12

    • 21.

      Resumen de gráficos de planos

      4:16

    • 22.

      Eventos y funciones

      7:51

    • 23.

      Variables

      17:22

    • 24.

      Cómo configurar el personaje

      8:15

    • 25.

      Movimiento de jugadores básicos

      6:18

    • 26.

      Salto de jugadores

      8:29

    • 27.

      Animaciones de movimiento de jugadores

      22:49

    • 28.

      Animaciones de salto de jugadores

      8:25

    • 29.

      Entrada variable personalizada

      4:27

    • 30.

      Estructuras

      4:33

    • 31.

      Finalizar el movimiento de personajes

      8:30

    • 32.

      Crear el segundo personaje

      6:52

    • 33.

      Agregar efecto de sonido de salto

      21:21

    • 34.

      Interfaz de Blueprint

      8:42

    • 35.

      Introducción de los planos Widget

      6:32

    • 36.

      La interfaz de usuario de selección de personajes

      18:34

    • 37.

      Agregar una interfaz de usuario al Viewport

      7:33

    • 38.

      Funcionalidad de selección de personajes

      27:33

    • 39.

      Eliminación de la interfaz de usuario del Viewport

      3:12

    • 40.

      Crear la ubicación de Spawn

      12:06

    • 41.

      Crear el actor de cámara

      2:02

    • 42.

      Cómo deshacer la cámara

      11:00

    • 43.

      Actualización de la posición de la cámara

      12:24

    • 44.

      Detener el movimiento de la cámara

      15:52

    • 45.

      Mejora del movimiento de cámaras

      8:25

    • 46.

      Agregar límites de mapa

      2:14

    • 47.

      Crear los Flipbooks enemigos

      4:06

    • 48.

      Cómo configurar los peones enemigos

      3:26

    • 49.

      Volumen de conexiones de malla de navegación

      3:37

    • 50.

      Controlador de IA

      1:52

    • 51.

      Blackboard y árbol de comportamientos

      3:20

    • 52.

      Encontrar un punto aleatorio en el área móvil

      19:04

    • 53.

      Estado del Movimiento Enemigo

      13:39

    • 54.

      Fijar el problema de los errores del movimiento y recortes

      3:03

    • 55.

      Añadir el Sprite de cuerda

      5:14

    • 56.

      Evento de superposición de cuerda

      12:36

    • 57.

      Entrada de movimiento arriba y abajo

      4:08

    • 58.

      Acondicionamiento para ascender

      19:06

    • 59.

      Actualización del modo de movimiento de jugadores

      14:40

    • 60.

      Enumeración de objetos que sube

      7:51

    • 61.

      Canal de colisión personalizada

      6:39

    • 62.

      Ajustar la ubicación de la subida

      10:10

    • 63.

      Eliminación de la sutura de spamming

      7:53

    • 64.

      Pausar la animación de ascenso

      14:04

    • 65.

      EXTRA: Limpiar tu código

      11:27

    • 66.

      Preparación de los Flipbooks

      7:25

    • 67.

      Añadir la entrada de ataque

      9:44

    • 68.

      Para cada bucle

      3:01

    • 69.

      Jugador que aplica daños

      14:35

    • 70.

      Detener la animación de ataques

      3:38

    • 71.

      Enemigo que recibe daños

      8:36

    • 72.

      Animación de golpes enemigos

      9:56

    • 73.

      Detener el árbol de comportamiento

      7:14

    • 74.

      Enemigo Persiguiendo al jugador

      6:22

    • 75.

      Mejorando el enemigo persiguiendo al jugador

      14:00

    • 76.

      Enemigo Aplicar daños

      9:27

    • 77.

      Jugador que recibe daños

      8:51

    • 78.

      Modo de jugador Dios

      4:07

    • 79.

      Jugador golpea a VFX

      15:22

    • 80.

      Jugador golpea el impulso

      10:18

    • 81.

      Muerte de los jugadores

      17:52

    • 82.

      Crear la interfaz de usuario principal

      17:18

    • 83.

      Añadir la interfaz de usuario principal al Viewport

      5:16

    • 84.

      Actualización de la barra de salud

      15:42

    • 85.

      Actualización del texto de muerte

      11:14

    • 86.

      Reproducción de jugadores

      10:53

    • 87.

      Arreglar los insectos existentes

      26:27

    • 88.

      Eliminación de la persecución de jugadores en la muerte

      3:43

    • 89.

      Muerte enemigo y repetición

      19:10

    • 90.

      Enemy enemigo se desvanecen

      14:13

    • 91.

      Colocación de nivel enemigo

      6:54

    • 92.

      Golpear, morir y revivir SFX

      16:58

    • 93.

      Fijar el fallo de muerte de escalera

      14:30

    • 94.

      Agregar experiencia a las estructuras

      3:49

    • 95.

      Introducción a las tablas de datos

      3:04

    • 96.

      Tablas de datos a través de hojas de Google

      6:01

    • 97.

      Creación de una biblioteca de funciones

      7:19

    • 98.

      Agregando experiencia sobre la muerte del enemigo

      3:31

    • 99.

      Actualización de la experiencia

      2:19

    • 100.

      Actualización del nivel

      8:10

    • 101.

      Crear la interfaz de usuario de nivel

      4:41

    • 102.

      Funcionalidad de nivel UI

      6:54

    • 103.

      Finalizar el sistema de nivelación

      6:28

    • 104.

      Subir el nivel SFX y VFX

      10:37

    • 105.

      Fijar los insectos finales

      10:31

    • 106.

      Creación de la interfaz de usuario flotante

      6:29

    • 107.

      Adición de animación de la interfaz de usuario

      5:49

    • 108.

      Funcionalidad flotante de la interfaz de usuario

      4:19

    • 109.

      Creación del actor de texto flotante

      7:01

    • 110.

      Lógica flotante de texto

      7:30

    • 111.

      Enumeración de texto flotante

      7:19

    • 112.

      Función flotante de la biblioteca de texto

      8:39

    • 113.

      Replicación de actores

      2:43

    • 114.

      Limpiar el proyecto

      5:36

    • 115.

      Recursos útiles

      5:57

    • 116.

      Actualizaciones futuras del curso

      2:14

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

Generado por la comunidad

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

1204

Estudiantes

5

Proyectos

Acerca de esta clase

******SIEMPRE ACTUALIZADO CON NUEVAS CLASES****

Comienza tu viaje de desarrollo de juegos con Unreal Engine 5.

Si eres un desarrollador de juegos principiante, programador, artista o diseñador, Unreal Engine 5 te ofrece todo lo que necesitas ser uno de los motores de juegos más populares y más utilizados por profesionales. Este curso es para todos los involucrados en el desarrollo de juegos para todos los niveles, ya que no solo diseñaremos y desarrollaremos un juego Unreal Engine 2D de principio a fin.

Salta a la derecha en la creación de juegos con su característica clave: planos de Unreal Engine 5. Programar un juego completo sin escribir una sola línea de código. ¡No se necesita experiencia!

Diviértete mientras aprendemos rápidamente, mientras creamos un plataformas RPG 2D multijugador de Unreal Engine 5. Verás lo fácil que es comenzar y lo rápido que puedes crear tus propios juegos. Usa las mismas herramientas que los estudios AAA usen en sus proyectos de plano. Todo es gratis.

Al final de este curso, crearás y will un plataformas de juego 2D multijugador Unreal Engine 5 con una fácil y profunda seguidora de videos. Aprenderás nuevos flujos de trabajo, herramientas y habilidades para hacer tus propios juegos 2D en Unreal Engine 5.

Este curso cubre todo lo que necesitas saber para empezar a desarrollar juegos en 2D, incluyendo:

  • Unreal Engine 5 Visión general y navegación

  • Unreal Engine 5 planos

  • Unreal Engine 5 multijugador

  • Importación de activos 2D

  • Diseño ambiental con azulejos y tilemaps

  • Creación y movimiento de personajes (saltar, correr, golpear..)

  • Creación de enemigos con Unreal Engine AI

  • Animación de personajes con Sprites y Flipbooks (para jugadores y enemigos)

  • Sistema de salud y daño de Unreal Engine (para jugadores y enemigos)

  • Sistema de experiencia y nivelación

  • Interfaces de usuarios (barras de salud y experiencia, pantalla de muerte, menú de selección de personajes..)

  • Efectos de vídeo y sonido (VFX y SFX)

  • Sistema de cámara Unreal Engine

  • Mecánica de escalada para cuerdas y escaleras

  • Texto de combate flotante

  • Recursos útiles (que facilitarán tu proceso de desarrollo de juegos)

También te proporcionaré el proyecto terminado para que puedas inspeccionarlo como desees mientras sigues el curso.

Aprende la mejor práctica de desarrollo de juegos de un desarrollador publicado.

Mi nombre es Moustafa, y soy el director y desarrollador de Farmtale on Steam creado solo con Unreal Engine Blueprints. Con años de experiencia en hacer juegos y enseñar, estaré aquí para ti en cada paso del camino. Hay muchas maneras de desarrollar y codificar juegos, algunas mejores que otras. Te mostraré diferentes herramientas de optimización y consejos para lograr un rendimiento listo para los juegos.

Inscríbete ahora, obtén acceso a nuestra comunidad de desarrolladores de juegos y veas resultados reales.

¡Nos vemos en la lección 1!

Moustafa Nafei

Conoce a tu profesor(a)

Teacher Profile Image

Pixel Helmet

Game Developer & Publisher

Profesor(a)

Pixel Helmet is a video game developer and publisher based in Denmark. We have recently released our first game Farmtale on the Steam platform.

We decided to get on Skillshare to create high-quality courses and share our knowledge with the game development community. Learning can be tedious at times and we aim to create a fun learning experience.

We offer to create courses within Modeling, Texturing, Unreal Engine, Blueprints, C++, Game Design, and much more. If you need any help during a course, please let us know through Skillshare or connect with us on Discord, Twitter, or LinkedIn.

Ver perfil completo

Level: All Levels

Valoración de la clase

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

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

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

Transcripciones

1. INTRODUCCIÓN: En este curso, vamos a aprender a desarrollar un multijugador a la plataforma pixel off sobre el uso de blueprints y Unreal Engine phi phi recreando una mini versión del conocido juego 2D Maple Story. Este curso contiene todo lo que necesitas saber para comenzar con desarrollo multijugador al juego en Unreal Engine cinco, incluyendo y Unreal Engine cinco, visión general y navegación. Importar al diseño del entorno de activos utilizando mapas de mosaico, ¿verdad? Algunos flip books para animar los activos de píxel. Los fundamentos de planos, creación de personajes y movimientos como saltar, correr, y golpear un sistema de cámara para el personaje, crear enemigos al trabajar con IA. Mecánica cegadora para cuerdas y letras. daño a la salud y la muerte son tanto el jugador como el enemigo. Y experiencia y sistema de nivelación, creación de interfaces de usuario, carga de combate, texto, efectos visuales y efectos de sonido, y recursos útiles que te ayudarán en tu proceso de desarrollo de juegos. También te proporcionaré el proyecto terminado para que puedas inspeccionarlo como desees mientras sigues el curso. Mi nombre es más asunto y soy el CEO, director de juegos, y diseñador de cascos pixel. Llevo trabajando en Unreal Engine durante los últimos ocho años y recientemente he lanzado fan tail on steam, que ha recibido muy positivamente. También he pasado dos años desarrollando mi artesanía personal de la junta de proyecto. Y actualmente estoy dirigiendo y programando el nuevo título de mi empresa, que es un juego de plataformas 3D sin previo aviso. Al final de este curso, podrás crear con confianza tu propio proyecto de juego multijugador 2D desde cero. Diseñé este curso para cualquiera que esté interesado en crear juegos y Unreal Engine cinco luchas por crear un juego que esté a la altura de los estándares actuales de la industria. Espero que se inscriban y se unan a mí en este curso. Y recuerda que estoy aquí todo el camino a lo largo del curso para ayudarte. Espero verte pronto. 2. Descargar Unreal Engine 5: Go Instale Unreal Engine cinco, tienes que ir a Epic games.com. Entonces, derecha, Epic games.com, dentro de tu navegador de Internet. Y dentro de aquí tienes un botón azul a la derecha llamado download. Por lo que al hacer clic en este botón de descarga, instalará el lanzador Epic Games. Ahora voy a cancelar la instalación porque ya la he instalado. Y aquí está el lanzador en mi escritorio. Entonces voy a lanzar el lanzador de Epic Games. Ahora te pedirá que inicies sesión y podrás registrarte con una cuenta gratuita de Epic Games si no tienes una, también puedes iniciar sesión con todas las otras opciones. Pero voy a iniciar sesión con mi cuenta de Epic Games porque ya he hecho una. Por lo que haciendo click aquí, estoy escribiendo mi e-mail, ejecutando mi contraseña. Y una vez que inicies sesión en el lanzador de Epic Games, así es como se ve. Dentro de aquí, lo que quieres hacer es click en esta pestaña Motor Unreal. Y dentro de aquí quieres hacer click en biblioteca. En lugar de biblioteca, puedes ver todas las Epic Game son todas las versiones de Unreal Engine. Y puedes hacer click en este botón plus si quieres instalar y versión Unreal Engine. Por lo que al hacer clic en él, se puede ver éste aparece y haciendo clic en el número, puede seleccionar qué versión de Unreal Engine desea instalar. Ahora ya puedes ver que ya he instalado el Unreal Engine 55.2. Este podría ser un número diferente en el momento en que estás viendo este video, tal vez sea 0.4 o 5.1, y eso realmente no importa. Este curso va a funcionar en cualquier versión que haya instalado aquí. Así que solo asegúrate de instalar Unreal Engine cinco aquí abajo podrás ver tus proyectos anteriores. Entonces estos son mis proyectos anteriores y esto estará vacío si no has usado el motor antes. Entonces una vez que haya instalado Unreal Engine cinco, sigamos adelante. 3. Crea un nuevo proyecto: Vamos a seguir adelante y lanzar Unreal Engine cinco. Una vez que haya puesto en marcha el motor, aparecerá esta ventana. Aquí. Puedes abrir tus proyectos recientes, pero ahora mismo estamos creando un proyecto completamente nuevo y un juego completamente nuevo. Así que pinchando aquí en la pestaña de juegos, también puedes ver un implacable, puedes hacer cosas como cine y video, automotriz, diseño, arquitectura y así sucesivamente. Tan genial. Pero ahora mismo nos interesan los juegos. Por lo que pinchando aquí y a la derecha se pueden ver diferentes plantillas con las que puedes empezar. Entonces, por ejemplo, puedes comenzar con una plantilla en primera persona. Si estás creando un shooter en primera persona, puedes comenzar con una plantilla de tercera persona, una plantilla de vehículo y así sucesivamente. Pero se puede ver que no hay uno para picks slot o un juego 2D. Y eso está bien. Todas estas plantillas, en realidad puedes crearlas tú mismo desde cero si sabes lo que estás haciendo. Entonces esto no es muy difícil de crear. Y lo que suelo hacer por mis proyectos, para mis cursos, suelo empezar con un proyecto en blanco porque quiero enseñarte todo desde cero. Y una vez que aprendes todo desde cero, eres capaz de crear todas estas plantillas tú mismo. Así que vamos a crear un proyecto en blanco. Y para la codificación estamos seleccionando blueprint. La plataforma de destino es de escritorio, la calidad preestablecida es máxima. Y para estos datos consiente si esto está marcado para ti Sólo en boletos, por lo que no tenemos nada aquí. Solo queremos un proyecto en blanco, en blanco y ahora seleccionar un nombre para el proyecto. Y para éste estamos creando una pequeña versión de una historia de arce. Así que llamémoslo historia de Maple así. Y puedes, por supuesto seleccionar donde quieras guardarlo. Pero solo lo guardo en la ubicación predeterminada. Así que adelante y da clic en Crear. Una vez que el proyecto se lanza, así es como se ve y dice, ¿Te gustaría actualizar este proyecto? Sólo voy a hacer click en la actualización. Y para los plugins, solo voy a hacer click en despedir. Y esto probablemente no esté abierto para su uso encendido. Voy a esconderlo rápidamente. Tu motor probablemente se vea así. Y ahora que hemos creado nuestro primer proyecto, pasemos a la siguiente lección. 4. Descripción general de Unreal Engine 5: Antes de empezar a crear nuestro proyecto 2D, tomemos una visión general rápida de este motor. Lo más importante aquí en medio es la ventana gráfica. Y dentro de la ventana gráfica, puedes ver tu juego de visualmente. Recuerda, este es un motor 3D, por lo que estamos dentro de un mundo 3D. Este es el mapa de inicio predeterminado dentro de Unreal Engine cinco. Y aquí dentro del puerto de vista se puede navegar alrededor. Así que manteniendo pulsado el botón derecho del ratón, así que manteniendo pulsado el botón derecho del ratón y haciendo clic en W en el teclado, te moveremos hacia adelante. Y manteniendo pulsado el botón derecho del ratón hacia abajo y haciendo clic en S te moverá hacia atrás. Al hacer clic en D te moverá hacia la derecha y haciendo clic en una te moverá hacia la izquierda. Así que recuerda mantener presionado el botón derecho del ratón y puedes ver, puedes mirar a tu alrededor, puedes moverte con W. D es una a, y esto es lo que uso todo el tiempo. Así es como navego por dentro del motor. Pero también puedes mantener presionado el botón derecho del ratón y puedes mantener presionado el botón izquierdo del ratón. Por lo que sosteniendo ambos botones puedes ver también puedes moverte así. mantener pulsado solo el botón izquierdo del ratón, puedes avanzar y retroceder así. Y manteniendo pulsado el botón derecho del ratón, pulsando E en el teclado, te moveremos hacia arriba y manteniendo pulsado el botón derecho del ratón y pulsando hasta que te moveré hacia abajo en tu teclado. Y como última cosa, puedes acercar y alejar con la rueda del ratón. Si tienes eso en tu mouse, puedes acercar y outs. Y de nuevo, el control más básico que uso es mantener presionado el botón derecho del ratón y hacer clic en W, D, S, y a. así es como lo encuentro, la forma más fácil de navegar por ahí, pero eres bienvenido para encontrar tu propio estilo. Eso está bien. A continuación tenemos unos botones aquí arriba en la ventana gráfica. Así que al hacer clic en el primero de aquí , puedes, por ejemplo, mostrar los fotogramas por segundo y puedes ver cómo, cuántos fotogramas por segundo se está ejecutando tu juego en este momento. Por lo que basta de eso en este momento, vamos a quitar el FPS. También hay algo llamado vista de juego. Y la vista del juego altera todos los iconos dentro del juego. Por lo que al hacer clic en éste de aquí, se puede ver que el icono desapareció. El atajo es una G en el teclado, así que da click en G. Puedes ver y ocultar todos estos iconos. Y esto es bastante genial cuando realmente quieres visualizar tu juego sin ningún íconos. Te imaginas si tienes un juego grande, puedes tener muchos iconos dentro de tu nivel. Por lo que al hacer click en G, podrás ver tu juego sin todos estos iconos. También puedes ir al modo inmersivo aquí abajo, el atajo es si 11, y esto maximizará la ventana gráfica. Por lo que haga clic en G va a ocultar los iconos. Al hacer clic en si 11 minimizará o maximizará la ventana gráfica. Y en realidad se puede ver el juego aquí en pantalla completa sin ningún íconos y se puede ver cómo se ve. Por lo que volveré a hacer clic en F7, y volveré a hacer clic en G para ver los iconos. A continuación, estamos dentro del modo perspectiva, pero también hay algo llamado vistas ortográficas. Para que podamos ver el juego desde la izquierda. Entonces así es como se ve desde la izquierda. Si alejas el zoom, así es como se ve desde arriba y así sucesivamente. Volvamos al modo de perspectiva. Sólo quiero mostrarles que esto existe. Así que volvamos al modo de perspectiva. Tienes los modos de vista aquí en este momento lo estamos viendo en modo Dalit. Entonces con la iluminación, también podemos verlo sin ninguna iluminación. Por lo que al hacer clic en Unlit, así es como se ve el juego. Sin ninguna iluminación aplicada, se puede utilizar en el modo wireframe. Puedes volver al modo lead y así sucesivamente. A continuación, muy importante, tenemos diferentes herramientas que usamos todo el tiempo. El primero es la herramienta de selección. Y antes de hacer esto, en realidad quería engendrar algo dentro de mi nivel. Así que sigamos adelante y haga clic en esto rápidamente botón Agregar al proyecto. Haciendo click aquí yendo formas. Y sólo quiero agregar un cubo simple. Por lo que pinchando sobre este cubo y lo agregará a tu ventana gráfica aquí en el nivel. Seleccionar herramienta es sólo una herramienta donde se pueden seleccionar elementos. Tan autoexplicativo. Al hacer clic en la herramienta Mover, se pueden mover elementos. Así que pinchando en este cuadro aquí o este cubo, y se puede ver un punto de pivote aquí arriba. Y puedes arrastrar desde el tamaño diferente y puedes moverlo. O podemos dar click en esto, este círculo blanco en el medio y puedes moverlo a todas las direcciones todo a la vez. Pero si quieres moverlo a una sola dirección, puedes arrastrar estas flechas. A continuación tienes la herramienta de rotar. Y de nuevo, puedes rotar esta caja arrastrando por estos ángulos aquí. Y luego tienes la herramienta de báscula donde podemos escalar la caja en diferentes ángulos. Y si quieres escalarlo uniformemente de nuevo, puedes hacer click aquí en el medio. Y se puede escalar a todos los lados a la vez. Ahora, es muy, muy importante recordar los atajos para estas herramientas. Por lo que al hacer clic en q en el teclado, seleccionaremos la herramienta Seleccionar. Al hacer clic en w seleccionará la Herramienta Mover, pulsando en E en el teclado, seleccionaremos la herramienta Rotar y pulsando en R seleccionará la herramienta de escala. Y se puede ver que esto lo hace mucho más rápido. En lugar de hacer clic aquí arriba y moverlo, haciendo clic aquí de nuevo y girándolo y así sucesivamente. Esto lleva una eternidad. Por lo que haciendo click en w, Por ejemplo, podemos moverlo como una E. Podemos rotarlo. Haciendo click en nuestra tal vez quieras escalarlo, haz click en W para moverlo por encima del suelo de nuevo. Y puedes ver que esto es mucho más rápido para trabajar, por lo que no tienes que hacer click aquí todo el tiempo. Pero recuerda que puedes usar los atajos Q, W, E, y R. Así que si quieres un documento completo de todos estos atajos, puedes encontrarlos en mi página web. A continuación tenemos las herramientas de snapping. Entonces éste es el movimiento chasqueando. que puedas ver cuando hago click en w para mi herramienta de mudanza y muevo mi caja, puedes ver que no se está moviendo sin problemas, es chasquear a algo. Y esta es la herramienta de snapping si lo deshabilitas. Por lo que al dar click aquí, se puede ver ahora puedo moverlo sin problemas. Si lo habilito de nuevo, ahora estoy chasqueando. También puedes aumentar este snapping haciendo clic en este número y luego aumentando el número. Ahora se puede ver que encaja mucho más. Y esto es muy útil de usar si quieres colocar artículos como uno al lado del otro en un lugar específico. Por lo que otro atajo es que puedes sostener Alt en tu teclado y puedes hacer clic y arrastrar. Y esto básicamente copiará pegar el elemento así así. Y tal vez quieras colocar artículos como este, como sostener Alt, arrastrarlos y colocarlos así. Esto es muy cool donde puedes usar el snapping aquí. Pero si quieres mover algo sin problemas, solo puedes desactivarlo. Y tal vez quieras colocarlo específicamente así o lo que sea que estés haciendo aquí. A continuación tenemos la rotación chasqueando. Por lo que de nuevo da click en E. Se puede ver que gira cada diez grados. Puedes desactivarlo, y ahora podemos rotarlo sin problemas. Nuevamente. También puedes aumentar las cantidades de snapping, por ejemplo, cada 30 grados. Ahora se encaja cada 30 grados. Ahora puedes ponerlos de nuevo a la normalidad, por ejemplo, diez aquí, y no fue hasta aquí. Y lo mismo se aplica con el escalado. También puedes hacer el snapping para el escalado. Lo último que tenemos es la velocidad de la cámara. que puedas ver cuando muevo mi cámara en la ventana gráfica, digamos que tienes este gran mundo abierto y me llevará una eternidad moverme todo el camino por ahí. Así es como se puede aumentar las velocidades de la cámara. Entonces, por ejemplo, puedes ponerlo a ocho. Puedo ver ahora puedo moverme mucho más rápido en mi mundo. Y esto es muy útil de usar una vez que tengas un mundo grande. Pero dudo que usemos tanto para nuestro juego 2D porque realmente no tenemos tan grande de un mundo. Pero en un juego 2D, tal vez quieras enfocarte en algo muy pequeño. Y aquí es muy útil reducir la velocidad de la cámara a algo muy lento. Porque quizá a veces en juegos 2D, estás mirando detalles muy pequeños. Y esto es bueno para configurarlo a muy lento para que en realidad pueda moverse cerca de los artículos. Bien, basta de la ventana gráfica. Esto fue lo más importante dentro del motor. Aquí es donde se puede ver el juego. A continuación tenemos el panel Detalles, y dentro de aquí puedes ver diferentes detalles sobre los ítems que has seleccionado en la ventana gráfica. Para que puedan ver cuando selecciono el suelo aquí abajo, obtengo diferentes detalles. Cuando selecciono este cubo. Nuevamente, diferentes detalles. Detalles como ubicación, ¿dónde se encuentra este cubo dentro de mi mundo? ¿ Cuál es la rotación de este cubo? ¿ Cuál es la escala? Y recuerda que escalamos estos cubos. Sólo voy a aumentar un poco la velocidad de mi cámara de nuevo. Entonces este cubo de aquí, recuerda que lo escalamos arriba y abajo. Y si quieres restablecerla, solo puedes bajar aquí a la escala en el panel Detalles. Y se puede escribir 111, así como eso. Y ahora estamos de vuelta en lo que era este cubo. Por lo que fue a la escala de 111. Si has girado, puedes ver que hemos girado el cubo por diez grados y el eje z. Y se puede ver qué es x, es sujetando el ratón sobre él. Entonces el rojo es el eje x y el verde es el eje y, y el z es el azul. El azul aquí arriba es la Z, la X es esta flecha roja, y la verde aquí es el eje y. Nuevamente, se puede restablecer la rotación escribiendo 000, y ahora hemos restablecido su rotación. Y si quieres colocar el cubo en una ubicación específica, puedes editar la ubicación aquí. Puedes ver las ediciones de ubicación cuando mueves este cubo así en la ventana gráfica, solo mira aquí es el valor y ahora. Pero si quieres colocarlo específicamente en mil, también puedes solo Mil así. Y se puede ver que el cubo se ha colocado específicamente en 1 mil. Por lo que muy útil utilizar el panel Detalles de aquí. Si tienes números específicos quieres que los artículos estén en. Y si desplázate hacia abajo, puedes ver todos estos diferentes detalles que puedes ver y editar sobre este elemento que has seleccionado. Así que no te preocupes por todos estos detalles por ahora. Vamos a trabajar con todo esto más adelante en el proyecto. Aquí arriba en el World Outliner, puedes ver lo que tienes actualmente dentro de tu nivel. Por lo que en este momento, si haces click en este cubo, por ejemplo, puedes verlo también lo selecciona dentro del outliner. Si seleccionas este cubo aquí en seleccionado, automáticamente dentro del outliner. También puedes seleccionar los artículos haciendo clic aquí en el outliner. Y uso esto mayormente cuando quiero encontrar un ítem específico y hago click en ese ítem. Por ejemplo, la luz de dirección es la luz solar. Y cuando hago clic en él, puedo ver que está aquí abajo con todos los otros iconos. Tan muy, muy básico. The World Outliner muestra todos los artículos que actualmente tienes dentro de tu nivel. Si hago clic en este cubo y hago clic en Eliminar en mi teclado, hago clic en este cubo también, y hago clic en Eliminar en mi teclado. Se pueden ver que desaparecen del World Outliner porque ya no los tienes dentro del mundo. Aquí arriba tenemos la barra de herramientas con los botones básicos. Por lo que al hacer clic en el archivo, se puede crear un nuevo nivel. También puedes guardar el proyecto y puedes crear un nuevo proyecto. Dentro de la edición, tienes las preferencias del editor. Y dentro de las preferencias de la pestaña de edición puedes editar ajustes sobre tu editor. Por ejemplo, cuando selecciono este cuadro, se puede ver que la línea de selección es naranja. Básicamente puedo hacer click aquí sobre esto, este color naranja por aquí. Puedo hacer clic en él y en realidad puedo cambiar el color. Y se puede ver que puedo cambiar el color de selección dentro de mi ventana gráfica. Ahora nunca he tenido la necesidad editar nada dentro de aquí, así que en realidad voy a cerrarlo de nuevo, pero es agradable saber que tienes esa opción dentro de la configuración del proyecto. Puedes editar ajustes dentro de este proyecto. Entonces, por ejemplo, puedes editar el icono de inicio para este proyecto. Puede escribir un nombre de empresa, puede escribir un correo electrónico de contacto de soporte. Entonces, por ejemplo, cuando liberas el juego en Steam, gente sabe con quién contactar si tienen bichos dentro del juego o si realmente quieren contactarte. También puedes agregar una película. Entonces, ya sabes, cuando abres un juego, tienes esa película de startup, tal vez cinco segundos. Por lo que en realidad puedes agregar uno dentro de aquí. Entonces muchas cosas que puedes editar aquí para este proyecto específicamente. Por lo que las preferencias del editor son configuraciones para tu editor y la configuración del proyecto son configuraciones específicamente para este proyecto, los proyectos Maple Story que estamos creando en este momento. Y luego tenemos plugins y queremos trabajar con eso ahora mismo. Así que no te preocupes por esto. A continuación dentro de ventana, se pueden abrir múltiples ventanas. Esto es muy útil si tienes múltiples monitores. Por ejemplo, podemos ir a Viewport y dar click en Ver puerto dos. Y esto abre aquí un segundo mirador. Y puedo ver aquí esta ventana gráfica, esto es muy útil. Puedo ver mi juego en pantalla completa y puedo poner esto dentro de mi otro monitor. Y ahora puedo ver este juego aquí. Y en mi segundo monitor, tengo esta ventana gráfica que he abierto todo el tiempo. No te preocupes por todo esto. No tocaremos esto hasta más tarde en el proyecto. Y al final dentro de la ayuda, se puede ver la documentación de Unreal Engine cinco. Creo que es un poco carente en este momento y es difícil de entender, pero puedes echar un vistazo si quieres. Aquí abajo en la barra de herramientas, tienes diferentes herramientas que puedes cambiar entre. Por ejemplo, puedes crear paisajes, puedes crear follaje, como pasto y árboles y así sucesivamente. Pero realmente no queremos tocar ninguna de estas herramientas, porque recuerda, estamos creando un juego 2D y no un juego 3D. Así que mantengamos estas herramientas por ahora. Para este botón, puedes agregar diferentes artículos. Agregamos la esfera o el cubo, en realidad el cubo dentro de aquí. Pero también puedes agregar otros artículos como la iluminación. Y puedes sumar cinemática. Por lo que las cámaras, se pueden añadir volúmenes, efectos visuales. Y añadiremos algunas cosas dentro de aquí. Pero de nuevo, recuerda, estamos creando unos juegos 2D, por lo que no vamos a estar usando toda esta iluminación. Pero yo diría lo genial de crear un juego 2D dentro de un motor 3D. Te puedes imaginar, puedes crear un juego 2D con efectos de iluminación 3D. Hay algunas cosas geniales que puedes hacer dentro de un motor 3D cuando creas juegos 2D. Por aquí están los planos. Esta es la codificación y vamos a trabajar con esto más adelante. Así que no te preocupes por eso. Y por aquí puedes hacer clic en el botón Play para jugar el juego. Y en este momento realmente no tenemos mucho pasando. Por lo que no hay mucho que ver. Al hacer clic en el escape se detendrá el Modo Play Game. Y como última cosa, lo que quiero mostrarte es el navegador de contenidos. Y es aquí donde estarán todos los expedientes que vamos a importar. Entonces si vas aquí abajo a la izquierda, tienes algo llamado sorteo de contenido, haciendo clic en ese botón, esta ventana aparecerá dentro de este sorteo de contenido. Todos los artículos que importemos estarán dentro de aquí. Entonces todos los personajes que tenemos, toda la música, todos los efectos visuales, todos los archivos estarán aquí abajo en el Navegador de Contenidos. Y en este momento se puede ver hay que hacer click aquí abajo para tener esto abierto. Y creo que para mí es un poco molesto porque cuando hago clic en algo en la ventana gráfica, esto desaparecerá. Algunas personas piensan que esto es genial, y que todo depende del estilo. Pero creo que para mí es un poco molesto que desaparezca todo el tiempo cuando hago clic en algo por aquí. Y también para el curso, creo que será genial tener esto todo el tiempo. Por lo que voy a hacer click en excavado en el diseño. Así también fue como fue en Unreal Engine cuatro. Y esto se mantendrá despierto todo el tiempo pesar de que hago clic en las cosas por aquí. Y prefiero tenerlo todo el tiempo para poder ver mis archivos dentro del navegador de contenidos. Puedes hacer click en este botón Agregar y podrás añadir cosas diferentes. Por ejemplo, podemos agregar una clase de blueprint, y esta es la programación que vamos a hacer más adelante. También puedes agregar cosas sobre la animación, cosas sobre blueprints, efectos de follaje, interfaces de usuario para la interfaz de usuario. Y esto podría parecer abrumador porque tienes tantas cosas que puedes agregar, pero solo vas a usar, diría que alrededor del veinticinco por ciento de todo esto. Así que no te preocupes por todos estos botones. No lo vas a usar todo. Y yo diría que solo debes empezar a aprender lo básico y simplemente pasar de ahí y hacértelo más fácil aquí y el papel 2D, esto es con lo que estaremos trabajando. Entonces este es el pixel art, el juego 2D con el que estaremos trabajando. También puede agregar elementos dentro del navegador de contenido haciendo clic con el botón derecho aquí. Para que puedas ver, puedes ver lo mismo. Normalmente nunca hago clic en este botón. Acabo de hacer clic derecho aquí a la derecha. También puedes agregar diferentes carpetas haciendo clic con el botón derecho aquí. Y en la parte superior puedes hacer clic en Nueva carpeta y puedes hacer nuevas carpetas. Y solo voy a eliminar este haciendo clic en Eliminar en mi teclado por ahora. Y si lo desea, puede seguir adelante y dar clic en este cubo eliminado, elimine éste también. Ahora conocemos los fundamentos de este motor y cómo se construye. Por lo que es mucho más fácil para nosotros trabajar con nuestro proyecto. 5. Crea un nuevo nivel: Para crear un nuevo nivel, primero vamos a crear una carpeta. Por aquí en la carpeta de contenido. Vamos a hacer clic con el botón derecho y haga clic en Nueva carpeta. Y simplemente llamémoslo mapas. En lugar de esta carpeta de mapas de aquí a la derecha, puede hacer clic derecho y luego puede hacer clic en el nivel. Ahora llamemos a éste. Me gustaría dar todos mis archivos que creo un prefijo. Así que sólo voy a llamarlo mapa para empezar. Y esto hace que sea más fácil una vez que tengas muchos archivos, en realidad puedes buscarlos mucho más fácil escribiendo el prefijo. Entonces llamándolo mapa, y llamémoslo principal. Yo sólo lo llamo el mapa principal. No sé qué nombre quiero darle en este momento, así que llamémoslo Mapa Principal. Y aquí arriba, por cierto, se puede salvar todo, así que guarde todo. Y si has hecho ediciones dentro de este nivel, así que antes editamos cubos, así que si agrego un cubano eliminado y estás tratando de guardar, te pide que guardes este mapa aquí porque has hecho ediciones. Y en realidad no queremos guardar este mapa porque no vamos a usar estos mapas predeterminados. Voy a hacer doble clic en mi nuevo mapa que creé. Me va a pedir que ahorre este nivel aquí. Voy a hacer click en Don't Save. Ahora estoy dentro de mi nuevo nivel y puedes ver aquí en mi outliner, World, Outliner, realmente no tienes nada porque no tienes nada dentro de este nivel en este momento. Ahora antes de terminar este video, vamos a establecer este nivel como nuestro mapa predeterminado. Por lo que voy a editar y dentro de Configuración del Proyecto, puedes hacer click en mapas y modos. Y aquí se puede ver el editor Startup Map es actualmente ese mapa del mundo abierto predeterminado. Pulsando aquí y cambiándolo a nuestro mapa que creamos, tanto el Mapa de Startup como también el mapa de juego predeterminado. Así como eso. Ahora cuando lo cierres, y vamos a hacer clic en archivo y guardar todo. Ahora cuando cierres el motor y lo vuelvas a abrir, se abrirá por defecto en este nivel. 6. Importar los recursos del entorno: Importamos ahora los activos ambientales que vamos a utilizar en las futuras lecciones. Entonces por aquí, voy a volver a hacer clic derecho en la carpeta de contenido y hacer una nueva carpeta. Y llamemos a este uno activos. En lugar de esta carpeta de activos, voy a hacer clic derecho y hacer una nueva carpeta. Y llamemos a éste ambientes en restos de cables. De acuerdo, así que es muy bueno mantenerse organizado dentro de tu proyecto porque una vez que el proyecto se vuelva grande, será un dolor navegar por ahí Si no sabes dónde se encuentran los archivos en el interior de esta carpeta de entorno, voy a hacer click sobre ella. Queremos importar nuestros archivos. Te he dado este curso materiales. lo que dentro de los materiales del curso, si puedes ir dentro de la carpeta Medio Ambiente, dentro de aquí, te he proporcionado algunos de los archivos. Puede haber más archivos que veas aquí. Sólo estoy poniendo estos archivos dentro de esta carpeta a medida que voy. Entonces lo que quiero que importes como solo éste, el camino t dragon y el que se llama Sea Dragon road, BG para fondo. Por lo que estos dos aquí, solo puedes hacer clic y arrastrarlos y colocarlos dentro de la carpeta Entorno. Recuerda, si tus archivos siguen en un formato raro o zip, no puedes arrastrar directamente desde una carpeta zip dentro de aquí tienes que extraer esos archivos a tu escritorio tal vez, o cualquier ubicación que quieras. Y luego puedes simplemente, al igual que una carpeta normal aquí, arrastrarlas dentro del proyecto. ¿ De acuerdo? Cuando estás dentro del proyecto aquí puedes ver tenemos nuestras dos texturas y cuando haces click sobre ellas, así que por ejemplo, hago click en este PGY1 y dopants en mi segundo monitor. Esta es la que vamos a utilizar. Ahora éste podría tener, se puede ver cuando acerco, está borrosa. En realidad no es selecciones mucho. Y como saben, el pixel art no es borrosa así. Es pixeles muy claros que queremos. Y esto es lo que estamos logrando en este momento, porque vuelves a estar dentro de un motor 3D y el motor 3D lo sopla para que todo se vea bien. Pero en el caso de un juego 2D, realmente no queremos que se desdibuje. Esto es muy fácil. Basta con hacer click en ambos. Por lo que da click en éste sosteniendo Control, dando click en el segundo, puedo hacer clic derecho, ir a acciones de Sprite y decir Aplicar papel a la configuración. Y esto básicamente eliminará ese efecto de desenfoque. Entonces cuando vuelvo aquí y me acerco, se puede ver que el efecto de desenfoque se ha ido ahora y se puede ver cada píxel. Y ahora vamos a hacer click en File and Save All, y eso fue todo para este video. Tan importante tomar de este video cuando importas un pixel art archivos, recuerda hacer clic derecho, ve a acciones de Sprite y aplica la configuración de pepper 2D para eliminar ese efecto de desenfoque que el motor avisa por defecto. 7. Crea un conjunto de mosaicos: Ahora que tenemos listos nuestros activos, estamos listos para crear un conjunto de teselas. Y en el siguiente video vamos a crear algo llamado mapa de teselas. Entonces la diferencia entre un juego de toallas y un mapa de azulejos es que Tell dijo que puedes imaginarlo. Si estás pintando el juego de toallas son tus colores y el mapa del azulejo es tu lienzo. Por lo que necesitamos contar conjuntos para crear un mapa de teselas. Vamos a crear los juegos de toallas, los colores con los que realmente estás deseando pintar en el mapa de azulejos que creamos más adelante. Así que vamos a hacer clic derecho en este primero aquí. Estos, estos son los azulejos. Vamos a hacer clic derecho en él. Vamos a la acción Sprite y hagamos clic en Crear juego de toallas. Voy a cambiarle el nombre. Usualmente elimino ese conjunto de teselas y el final aquí. Y yo sólo lo llamo ts o juego de toallas. Y hagamos lo mismo aquí con el fondo. Acude a acciones de Sprite y aplica otro lugar. Muy grandes conjuntos de herramientas. Y de nuevo, cambiemos el nombre esos dos gradas desde el principio. Por lo que ahora tenemos que contar sets. Vayamos en el primero aquí, nuestros azulejos. Por lo que ahora podemos ver estos son los azulejos y no podemos hacer mucho aquí en lugar de un juego de toallas. Recuerda ese conjunto de azulejos, solo lo creamos para que podamos realmente usar esos azulejos para pintar en nuestro mapa de azulejos. Y ahora puedes hacer click en estos diferentes azulejos y en realidad puedes ver las toallas al hacer clic en ellas. Se mostrarán aquí a la derecha para que puedas ver la toalla y cómo luce. Pero el tamaño no es correcto. Aquí se puede ver el tamaño del azulejo a la derecha. Tienes que configurar eso a 30 pixeles por 30 pixeles porque sé que son 30 pixeles. Los compongo dentro de Photoshop, así que los junté aquí en una sola textura. Entonces sé que el tamaño total es de 30 pixeles. Píxeles. Cuando descargas cosas de Internet, generalmente especifican cuán grandes son. Entonces aquí es donde los colocaste. Por lo que 30 por 30. Ahora bien esto es correcto y al hacer clic en los mosaicos, se puede ver que así es como se ven. Y lo usaremos más adelante para pintar en nuestro mapa de baldosas. Vamos a cerrar esto hacia abajo y pasemos al título establecido para el fondo. El tamaño del azulejo también es de 30 por 30, lo que tenemos que cambiar esto a 30 por 30 pixeles. Entonces esto fue lo importante. Establecemos nuestro tamaño de azulejo dentro de este conjunto de azulejos. Y ahora que tenemos esos conjuntos de teselas, permítanme realmente hacer clic derecho dentro de esta carpeta, hacer uno nuevo llamado texturas. Y quiero colocar esta textura dentro de mis texturas porque en realidad ya no vamos a necesitar esto. No lo elimines porque estos realmente se derivan de esta textura. Recuerda que hicimos clic derecho y creamos un juego de toallas. Pero acabo de ponerlos dentro de texturas porque entonces realmente no tenemos que volver a verla. Además, lo mismo con este fondo uno, moverlo dentro de esta carpeta, y sólo necesitamos ver estos conjuntos de teselas. Así que hagamos clic en Archivo, Guardar todo, y sigamos adelante. 8. Crea un mapa de mosaico: Ahora podemos hacer clic derecho en nuestro conjunto de herramientas. Y cuando haces clic con el botón derecho, puedes ver aquí tienes la opción crear un mapa de teselas. Así que vamos a crear un mapa de teselas. Y de nuevo, voy a eliminar ese mapa aquí al final que pone. Y sólo voy a llamarlo TM para mapa de teselas como prefijo. Y puedes hacer doble clic en el mapa del azulejo para entrar de aquí. Aquí antes de hacer algo a la derecha, recuerda que hay que fijar el ancho y la altura de la cola a 30 por 30. Así que solo asegúrate de que esto sea correcto. Y esto es sólo para ponerlo igual que éste. Así que sea cual sea lo que establezcas aquí dentro del conjunto, tienes que establecer lo mismo dentro del mapa de teselas que para el ancho y la altura del mapa, puedes elegir qué tan grande debe ser tu mapa. Entonces, ¿qué tan ancho debe su mapa B? Y para éste, creo que voy a ir con 60 y el ancho y 40 y la altura. Entonces este es el mapa en el que estaremos trabajando a la izquierda. Se pueden ver los juegos de toallas. Por lo que en este momento, el conjunto de azulejos activos es éste, el camino del dragón donde tenemos nuestros azulejos. Y puedes hacer click en cualquier parte aquí, seleccionar algo. Y cuando lo seleccionas aquí a la izquierda, ahora lo tienes aquí como pincel dentro de tus mapas de teselas. Para que pueda hacer click aquí y se puede ver cuando haga clic en su pintarlo en su mapa de azulejos. No hay una forma rápida de eliminarlo. Tienes que eliminarlo pero uno por uno. Por lo que haciendo clic en e para elegir el borrador. Y también puedes hacer click aquí arriba la pintura, maquinilla de afeitar y llenar decir haciendo click en e para elegir el borrador. Puedes borrarlos y hacer clic en B en el teclado para elegir el pincel. Entonces B por el pincel y haciendo click en IE para volver a borrar estos pinceles. Así que lo que yo también me ha gustado aquí a la izquierda, ahora puedes pintarlo aquí en el mapa del azulejo. Y dentro del mapa del azulejo, se compone de capas. Entonces si has trabajado dentro de Photoshop, ya sabes lo que es esto. Si quieres cambiar un nombre de una capa, puedes hacer clic en F2 en el teclado. Puedes hacer clic con el botón derecho y cambiar el nombre, pero por lo general hago clic en F2 para cambiar el nombre de las cosas. Entonces haciendo click en F2, y por ejemplo, puedo llamarla la capa base. Puedo hacer una nueva capa haciendo clic en este botón. Y puedo, por ejemplo, cambiar el nombre de esto a background en la capa base. Si tienes esto seleccionado, solo pintemos algunos azulejos aleatorios aquí. Vamos a fingir que estas son las baldosas molidas que tenemos. Ahora puedo ir al fondo y digamos que quiero pintar el fondo. Y digamos sólo al azar, mi trasfondo es este. Puedo pintar esto. Se puede ver que ahora está en primer plano porque así funcionan las capas. Por lo que el frente estará en el frente. Entonces, si quieres que este sea el fondo, tienes que ponerlo debajo de la capa base. Por lo que haga clic en el fondo. Puedes hacer click sobre esta flecha. Dice Enviar hacia atrás, y lo pondrá al revés aquí. Y ahora lo que pintes, puedes ver que no puedes pintar encima de estos porque este es tu fondo. Ahora, cuando haces clic en la capa base ahora pintas más. Puedes ver, puedes pintar frente a tu fondo. Porque recuerda que este es el fondo y estas son dos capas separadas. Entonces si haces clic en el ojo aquí en la capa base, puedes ver que este es el fondo. También puedes ocultar el fondo y así sucesivamente. Tan muy, muy útil. Estaremos usando ésos para pintar nuestro mapa. Y esto es básicamente para el mapa de teselas. Así que nada complejo. Tenemos algunos azulejos. Podemos dibujar nuestro mapa aquí y hacer que se vea impresionante. Y podemos usar esas capas para pintarlo. Entonces el fondo, la base, tal vez tengamos un primer plano y así sucesivamente. Recuerda establecer el ancho y altura de tu mapa como desees. Quiero que la mía sea de 60 por 40, y la torre tendría que ser de 30 por 30 porque esos azulejos son de 30 por 30 pixeles, solo puedes borrar el fondo. Entonces haciendo clic aquí arriba, haciendo clic en Eliminar en mi teclado, aplastó mi, mi motor. Déjame simplemente reiniciarlo. A veces sucede con Unreal Engine. Por lo que a veces solo aplasta al azar. Así que déjame volver a mi, a mi set de azulejos y se puede ver todo ya lo borró. Entonces esto sucede a veces, así que Unreal Engine, tengo que recrear. Entonces creando el mapa de teselas, solo voy a crear todo de nuevo, vale, ahora estoy de vuelta donde estoy. He establecido mis ajustes aquí y estamos de vuelta. Así que pasemos a la siguiente lección y diseñemos el medio ambiente. 9. Diseño del entorno: Empecemos ahora a diseñar nuestro entorno. Entonces para empezar, volvamos a nuestro mapa de azulejos. Y dentro de aquí, si no tienes juego de toallas seleccionado aquí a un costado, como puedes ver en mi pantalla, puedes hacer click en este pequeño botón. Aquí también es donde cambias entre tus fichas de fondo y tus celdas normales aquí. Así que empecemos con estas fichas normales por ahora. lo que voy a empezar es simplemente llamar a esta capa cuatro bahías. Entonces voy a hacer clic en F2, llamándolo esa capa base. Dentro de aquí vamos a pintar. Pero antes de pintar, lo que me gusta hacer aquí en las alturas del mapa, me gusta agregar un poco más de fichas como fichas tampón. Porque cuando nuestro personaje es, se puede imaginar que este es nuestro mapa y estos son los límites. Cuando el personaje está parado aquí en el juego. Y la cámara es así, viendo al personaje. La cosa aquí debajo del mapa aquí estará oscura. Y no queremos que el jugador vea esta parte inferior aquí. Quiero que el personaje esté parado de una manera en que la cámara nunca vaya por debajo de esta línea aquí. Me gusta añadir un poco más de fichas lo que he escrito aquí, solo para tener algunas fichas tampón para que la cámara y nunca vaya por debajo del suelo. Así que me gusta agregar diez fichas a la parte inferior aquí, y también diez fichas a la parte superior aquí. Entonces la cámara y nunca va por encima de esta línea aquí. Entonces lo que puedo hacer es, así que diez más diez es 20 obviamente, y son 60. Algo muy cool y Unreal Engine. En realidad se puede escribir más 20 y golpear enter, y lo agrega automáticamente y dice 60. Ahora, no creo que necesitemos un buffer aquí y aquí porque lo que voy a hacer es que voy a detener la cámara. Cuando el jugador lo camine de esta manera, voy a detener la cámara aquí. Por lo que nunca va detrás de esta línea, pero siempre podemos hacerla más grande si quieres. De acuerdo, así que vamos a contar aquí. Hemos añadido diez tampones, diez fichas tampón aquí. Entonces 123412345678910. Entonces aquí en, a los 50. Entonces si pintamos una toalla aquí, estoy a los 50. Entonces las fichas del buffer van hasta aquí arriba y las fichas reales están arriba aquí mismo. Entonces lo que puedes hacer es solo tomar estas fichas aquí y empezar desde la izquierda. Por lo que solo puedes seleccionar múltiples mosaicos. No tienes que seleccionar uno a la vez. Puede seleccionar, hacer clic y pasar el cursor y seleccionar múltiples mosaicos a la vez. Y puedes colocarlos aquí dentro de nuestra capa base que hemos creado. Por lo que ahora he colocado esto, puedes seguir colocando así. Pero como variedad, voy a hacer clic en Control Z para deshacer. Como variedad, puedes ver que tienes un par de ellos. Para que puedas elegir al azar otro como éste y colocarlo. Se puede elegir uno al azar, colocarlo, esto le da a los azulejos un poco de variedad. Por lo que puedes ver aquí que tienes un poco de variación y puedes decir que estos son el mismo título. Por lo que voy a simplemente seleccionar al azar aquí. Realmente no importa cuáles elijas solo para tratar de seleccionar al azar. Entonces eliminamos esos patrones repetitivos que vemos a veces en lote de píxeles. Así que muy bueno tener diferentes azulejos en los que puedas colocarla. De acuerdo, voy a acelerar este proceso. Voy a hacer esto todo el camino aquí. Y en realidad también hay que hacerlo todo el camino aquí. Así que sólo sigue haciendo esto. Esto tomará tal vez cinco minutos. Muy bien, así que ahora estoy terminando aquí. Estoy haciendo los últimos azulejos. Por lo que ahora he terminado esta parte inferior aquí. ¿ De acuerdo? Entonces cuando termines con esta parte, ya para crear la hierba aquí arriba. Entonces aquí abajo por la hierba, lo mismo. Tienes alguna variación que puedes agregar. Y puedes seleccionar, hacer click y seleccionar las tres. Y recuerda también seleccionar esta parte superior porque si haces clic aquí, puedes ver que te estás perdiendo la hierba aquí arriba si no estás seleccionando también esta parte superior. Por lo que al hacer clic en ambos, seleccione tanto esto como esto por encima de él. Entonces estas seis fichas. Y luego puedes simplemente, al igual que antes, hacer clic aquí y seleccionar otra variación y hacer clic al lado de ella. Y sólo sigue adelante hasta que en realidad no quiero que lo hagas todo el camino aquí. Quiero que te detengas en algún lugar por aquí, así que sólo voy a avanzar un poco rápido. Ok. Entonces voy a parar aquí y me detuve alrededor de 3947. Estas son las coordenadas que no tienes que hacer exactamente como yo, pero si quieres, estas las coordenadas con las que estoy parando. Puedes hacer tu propio diseño. Eso está bien. No estás obligado a hacer lo mismo. Pero lo que quiero hacer aquí, tenemos unas rampas aquí abajo en la textura. Y queremos sumar esos azulejos. Quiero añadir aquí una rampa para que podamos tener alguna variación. Por lo que de nuevo, puedes hacer click aquí y seleccionar así aquí. Y puedes sumar aquí la rampa. Y luego de nuevo, continuemos con los azulejos, seleccionarlos, y simplemente seguir igual que antes. Sigue seleccionando una variación como esta. Se puede ver que lleva algún tiempo, pero también lo es, creo que es la parte divertida. Puedes ser creativo con el mapa que estás creando. Y puedes crear algo de aspecto genial. Por lo que nos faltan algunos azulejos aquí arriba. Ahora. Vamos a seguir adelante y al igual que antes, justo, vamos a llenar esos vacíos vacíos. Muy bien, por lo que esta parte está hecha. Ahora, lo que quiero hacer como la última parte es en aparecer una plataforma. Entonces, volvamos a añadir una plataforma, seleccionemos esta parte inferior. Por lo que seleccionando uno de esos, puedes ver que tienes variaciones aquí también. Entonces seleccionando la parte inferior, no lo sé. Sí, en realidad necesitamos seleccionar la parte inferior aquí también porque se puede ver que hay algunos pequeños azulejos que están debajo de esto. Así que de nuevo, al igual que la hierba donde seleccionamos seis piezas aquí, tenemos que seleccionar seis piezas aquí también. Y para la plataforma, solo tenemos que ocultarla, ver dónde está el personaje. Y creo algo como aquí arriba. Y de nuevo, escojamos algunas variaciones y solo sumamos las juntas. Recuerda seleccionar todo sexo y no, no sólo aquí arriba porque de lo contrario te faltan las fichas aquí abajo. Así que selecciona aquí, haz algunas variaciones y haz la plataforma va a saltar un poco adelante. Muy bien, así que ahora que tengo esta larga plataforma aquí arriba, se puede agregar el pasto y justo como antes, solo selecciona lo que hicimos aquí abajo. Seleccione variación. Y ahora nos faltan esas fichas aquí a la derecha. Realmente no pude encontrarlos. Lo intenté y lo intenté y no pude encontrarlos. Pero lo que podemos hacer es sólo añadir algunas de esas fichas para terminar esta parte aquí, porque esto está cortado como se puede ver y no se ve bien. Y realmente no tengo la, la parte de corte. Estos, estos realmente no funcionan con esto. Entonces tenemos que hacer lo nuestro propio y solo usemos éste. Entonces lo que voy a hacer, puedes ver aquí, si selecciono esto y lo agrego encima de esto, como aquí, puedes ver que estoy eliminando mis fichas actuales y esto no es algo que queremos hacer. Recuerda, teníamos capas con las que podíamos trabajar. Para que puedas crear una nueva capa. Y llamemos a esta marca. Y con esta capa frontal, ahora podemos seleccionar estas fichas aquí, por ejemplo. Y por ejemplo, por encima de este lado puedes ver ahora puedes hacer clic y agregarlo y no eliminas las fichas que hacías antes. Y esto es porque ahora estás pintando en esta capa frontal. Ya no estás pintando sobre esta capa base. Recuerda seleccionar esta capa frontal y pintar encima de ella aquí arriba. Y también selecciona esas fichas aquí, solo las tres aquí abajo. Y vamos a añadirlo encima de aquí. Y se puede ver tipo de obras. Es mejor que nada. Por lo que ahora tenemos las toallas cerrando que cortan aquí. Y voy a seleccionar la siguiente, agregarla encima de ella, y seleccionar esa parte inferior para ir con ésta. Ahora puedo ver que tenemos una plataforma. Podría ser mejor si tuviéramos los títulos de cierre, pero está bien. Es sólo para la práctica. De acuerdo, así que lo siguiente que puedes agregar aquí es el fondo. Y lo que podemos hacer es agregar otra capa. Y en realidad lo voy a llamar cielo. Solo voy a usar esta capa solo para el cielo y ponerla, puedes hacer click en esta flecha, recordar, y ponerla en la espalda porque queremos que esto sea un fondo para este tipo. Recuerda ahora estamos dentro de los azulejos normales. Quieres cambiar al fondo. Nuevamente, puedes hacer click en este pequeño botón y puedes cambiar entre el fondo y las fichas normales. Entonces yendo al fondo, tienes este pequeño azul. Esto es en realidad el cielo. Por lo que solo pinchando sobre éste, haciendo clic en G para la herramienta de relleno, o bien puedes seleccionarla aquí arriba. Recuerda que puedes seleccionar las herramientas aquí arriba. Y luego recuerda hacer clic en este tipo primero. Y aquí, puedes hacer click sobre la parte superior de la audiencia, puedes verte llenar el vacío y ahora tenemos el cielo. Ahora lo que podemos agregar aquí, es un poco soso, por lo que necesitamos agregar algunos elementos de fondo. Ahora, quieres hacer una nueva capa porque si pintas, digamos que querías pinchar esta hierba y pulsando en B para seleccionar la herramienta pincel y la anexas aquí puedes ver que el cielo se está quitando porque no se puede pintar encima de ella. Así que vamos a crear una nueva capa y déjame llamarla fondo y estrecho fondo. Estos son solo apoyos de vuelta. Vamos a llamarlo fondo y veamos si necesitamos cambiar el nombre de la misma. Así que vamos, intentemos diseñar algo. Entonces voy a empezar con este edificio. Así que solo seleccionando todo este edificio aquí y simplemente colocándolo en algún lugar aquí. Entonces se ve un poco interesante así. De acuerdo, entonces ahora tenemos éste e incluso se puede añadir un poste de luz aquí. Entonces esto se trata sólo de ser creativo, intentó hacer lo que quieras. Realmente no tienes que seguirme aquí. Sólo estoy tratando de crear cosas a medida que voy y voy a saltarme un poco adelante. Al igual que antes. Simplemente selecciona lo que quieras agregado en algún lugar. A lo mejor quieras agregar este poste de luz aquí arriba. Así que intenta hacer lo tuyo y te veré en un poquito. Muy bien, así que he añadido un par de artículos. Puedes ver mi mapa se ve así. Ahora, he añadido. Hay un pasto por aquí. Acabo de añadirlo aquí a un costado. Entonces se ve un poco cortada e interesante. Y he añadido esos artículos aquí arriba, las flores y justo el lado que agregué antes. Entonces no me gusta agregar demasiado dentro del entorno. Me gusta mantenerlo sencillo porque se agrupará si sumas demasiado al medio ambiente y no se verá bien en mi opinión. Por lo que ahora tenemos estos ítems mínimos que insertamos dentro de un entorno. Ahora lo que quiero que hagas, quiero llenar el fondo aquí para que no sea demasiado azul. Quiero llenarlo con estos grandes fondos. Así que adelante y selecciona aquí esta cosa grande, así así y puedes ver que puedes colocarlo por ahí. Ahora no queremos colocarlo encima de nuestros artículos aquí. Entonces voy a añadir otra, otra capa aquí, y sólo voy a llamarla BG para el fondo 01. Creo que necesitamos hacer dos de ellos y verás por qué. Entonces BG 0102, sólo voy a moverme 0 a debajo del 01. Y éste, en lugar de llamarlo fondo, llamémoslo apoyos BG, así que apoyos de fondo o algo así. Por lo que al hacer clic en el primero, el fondo es 01. No quiero sumar todo aquí arriba así. Lo que quiero hacer es simplemente, solo quiero agregarlo así. Por lo que sólo veo el árbol sin todo el, sin todo este edificio abajo debajo de él. Por lo que sólo ver los árboles y llenar el fondo con él. Entonces para el fondo 01, intentemos ver si podemos hacer que parezca interesante, algo como esto. Y 0 a, no creo que todavía podamos llenarlo con 01. En realidad, podemos llenarlo aquí. En realidad llenemos 0 a primero, haga clic en 0 a, solo quiero visualizarlo mejor. Entonces algo como esto, tal vez. Vamos a intentar 01 otra vez. El motivo por el que no vuelvo a hacer 02, porque recuerda que no puedes pintar encima de tus capas así. Así que volver al 0101 estaba por aquí. Por lo que ahora podemos pintar por aquí sin afectar nada. Entonces algo como esto. Creo que eso funciona, eso, eso se ve bien. Así que volvamos aquí. Sólo estoy seleccionando el borrador para que no tenga que ver todo esto. Pero ya puedes ver aquí, si el personaje está caminando por ahí, esto se ve bien, nuestro fondo está lleno. Puedes, por supuesto, no tengo nubes, pero podrías por supuesto, si hay para que sea más interesante en las nubes de aquí arriba. Pero creo que está bien. Eso es como cuando caminamos por aquí, realmente no se ve mal y se ve interesante. Incluso puedes ajustar tus accesorios aquí, el fondo solicita que coloques antes. Puedes ajustarlos si quieres. Y esto fue en realidad para diseñar el medio ambiente. Entonces la razón por la que no agregué nada aquí, o tal vez por aquí o por aquí. Podríamos usar algunos de estos puntos vacíos para agregar portales más adelante que podamos teletransportarnos a diferentes áreas y puedo mostrarles cómo hacer un sistema de portal. Y con eso dicho, pasemos a la siguiente lección. 10. Eliminar el parpadeo: Ahora volvamos a nuestro mapa de azulejos. Quiero mostrarte algo que puedes ver aquí cuando me muevo por ahí, cuando hago clic con el botón derecho y pan alrededor, puedes ver que el cielo está parpadeando y así lo son mis azulejos. Es muy sutil. Pero por ejemplo, se puede ver aquí la línea aquí, está cortando mis azulejos. Por lo que a veces los azulejos también parpadean. Y queremos eliminar ese parpadeo porque esto también te sucederá en juego. Así que vamos a cerrar este mapa de azulejos aquí. Y lo que quieres hacer es estos conjuntos de azulejos simplemente haga clic derecho en el juego de toallas y haga clic en la condición Textura Título XI. Ahora va a crear algo nuevo para ti. Simplemente presione Enter y se creará esto para usted. Por lo que estos están acolchados, por lo que almohadillas automáticamente las toallas para ti. Para que puedas ver aquí realmente no se ve diferente de antes. Pero las diferencias es si vuelvo a mi conjunto de azulejos, ahora si hago clic en mi azulejo antes de que seleccionara el azulejo aquí a los lados, pero se puede ver el motor automáticamente acolchado sus azulejos para que nunca parpadeará porque tenemos esos emparejamientos en cada baldosa. Lo mismo que hizo para todas las demás fichas que tienes. Hagamos lo mismo por el fondo. Vamos a hacer clic derecho en el juego de toallas y dar click en condiciones toallas, sábanas textura, y hagamos click en Entrar. De acuerdo, Así que ahora había terminado de pintar mi segunda textura. Tomó algún tiempo porque era una textura tan ligera y casi parece que tu motor ha estrellado, pero no lo ha hecho. Entonces volviendo al entorno y haciendo clic en mi mapa de teselas ahora, puede ver cuando acerco y me muevo, se puede ver que el parpadeo se ha ido. Y esto también aplica para el juego. Entonces hemos eliminado ese parpadeo. Así que siempre que importe unas toallas para agregar para tus mapas, recuerda hacer clic derecho en el conjunto de azulejos y haz clic en la textura de la toalla de condición. Y será automáticamente un pad esta textura para ti. Y eliminarás todos estos problemas parpadeantes. 11. Colocar el mapa de mosaicos en el nivel: Coloquemos ahora nuestro nivel que creamos aquí dentro de nuestro mapa. Entonces cerrando esto hacia abajo, recuerda que hicimos aquí un mapa, un nivel llamado main. Así que doble clic en eso para asegurarte de que estás dentro de aquí. También lo puedes ver. Aquí a la derecha, estás dentro del mapa principal. Dentro de aquí, simplemente vaya al entorno y haga clic y arrastre su mapa de teselas. Entonces no los conjuntos de toallas sino el mapa del azulejo. Así que haz click y arrastra y puedes soltarlo aquí en el entorno. Recuerda nuestra navegación desde antes de poder hacer clic derecho y mantener presionado WD es una a moverse. Y se puede ver este es el mapa de teselas que hemos agregado. Ahora me gusta quitar esta rejilla porque realmente no puedo ver lo que está pasando. Así que al hacer click en este mapa de teselas en el panel Detalles, puedes bajar y encontrar aquí bajo renderizado, mostrar por cuadrícula infantil cuando esté seleccionado, voy a desmarcar esto para poder ver mi mapa. Y este es el mapa que hemos creado. Lo que me gusta hacer es colocarlo en la ubicación de ceros, ceros 0. Entonces este es mi mapa inicial. Me gusta empezar a las 000. Esto es simplemente. Creamos el mapa. Y como se trata de un motor 3D, recuerda que esto no es un motor 2D. Puedes ver aquí si miras el lado de tu mapa de teselas, estos son en realidad azulejo de capa. Así que recuerda dentro del mapa de teselas, creamos nuestras capas por aquí. Y así puedes ver todas estas capas apilándose juntas aquí en un entorno 3D. Lo que quiero hacer, quiero separar esas capas porque más adelante, queremos asegurarnos de que no tengamos un problema cuando el jugador se está moviendo. Y voy a bajar aquí y aquí, y esta separación por capa, sólo voy a aumentarla a algo extremo para que puedan ver lo que está pasando. Entonces algo así como 50 y voy a ahorrar. En realidad se pueden ver estas capas ahora, están separadas unas de otras. Ahora lo que me gusta hacer aquí en la separación, me gusta escribir diez y quiero mostrarte por qué escribo diez, o también puedes escribir 15. Eso está bien. Realmente no importa. Pero quiero mostrarles por qué no voy con por, por qué voy con diez en cambio, por ejemplo. Por lo que pinchando aquí, se puede ver ahora hemos separado la capa. Por lo que se puede imaginar como el personaje está parado aquí en el suelo, sobre estos azulejos. Técnicamente estás parado en esto, esta capa base que creamos. Hay diez píxeles desde esta capa aquí hasta la capa frontal aquí. Entonces ahora la separación, ya que escribimos diez, la separación es de diez píxeles por cada capa. Por lo que tienes la libertad de agregar cosas entre estas capas. Entonces, por ejemplo, si quieres agregar un elemento frente a estos antecedentes quizás, pero quieres editar detrás del jugador caminando por ahí. Obviamente, hay que seleccionar el número que está entre estas dos capas. Por lo que cuanto más grandes hagas estas capas, más libertad tendrás colocar elementos al lado o entre estas capas. Entonces no creo que necesitemos más de diez. Nunca necesitaba más de diez, así que voy a escribir diez en su lugar para asegurarme de que mi, mis fichas tierra estén en 0 porque esto nos hará más fácil más tarde cuando estemos programando. Simplemente quiero empujar esta capa aquí. Estas son mis fichas, dos delante de aquí, así que está en el medio. que puedas ver aquí en el punto de pivote, cuando tienes seleccionada la Herramienta Mover, al hacer clic en ella, tienes seleccionada la Herramienta Mover. Puedes ver si quieres moverte en esta dirección, tienes que moverlo por diez. Y ahora en realidad es correcto. Recuerda, nuestra herramienta de snapping se está ajustando a cada diez grados, diez píxeles más bien no grados. Por lo que ahora en realidad no es correcto porque con el chasquido lo hicimos a diez. Por lo que se puede ver ahora es, ahora el fondo está en 000. Cuando escribes diez aquí en el y, tienes la dosis, dosifica fichas novedosas como 000. Y esto nos facilitará mucho más tarde cuando estemos programando. 12. Volumen de posproceso: Muy bien, entonces el problema que tenemos en este momento en nuestro nivel es que la iluminación y los colores no son correctos. Para que como puedes ver aquí, si abro mi mapa de teselas y si acerco aquí, puedes ver la diferencia entre este mapa de teselas, los colores correctos y cómo se ve. Y este es nuestro nivel, por lo que definitivamente se ve mal y la iluminación es demasiado fuerte. Y aquí es donde entra el volumen post-proceso. Por lo que aquí arriba y rápidamente añadir botón. Demos clic aquí arriba y luego vayamos a los efectos visuales. Y agreguemos este llamado volumen post-proceso. Entonces el volumen post-proceso, lo que es, Es como en Photoshop. Cuando pones una imagen dentro de Photoshop, puedes editar los estudiosos de la imagen, puedes editar la saturación, el brillo de la imagen allí. Lo mismo va aquí en Unreal Engine, usamos un volumen post-proceso para cambiar la iluminación y los colores y así sucesivamente. Por lo que casi justo como la gradación de color. Por lo que tenemos el volumen post-proceso y lo que queremos hacer es desplazarse hacia abajo aquí. Y queremos tomar esta llamada extensión infinita. Lo que esto hace es que afecta al mundo entero. Si no presionas esto, esto solo funcionará siempre que estés dentro de esta caja. Entonces, por ejemplo, sólo para demostrarlo por ustedes, voy a aumentar esta floración. Entonces yendo por la intensidad de diez, tan muy extrema. Y si voy aquí dentro de mi caja, se puede ver que la floración está tomando efecto, esos efectos de ensueño. Y si salgo fuera de esta caja de volumen post-proceso, vuelve a la normalidad para que puedas ver la diferencia. De acuerdo, entonces en lugar de ir dentro de esto, no esta caja de aquí y tal vez como tratar de hacer que esta caja se ajuste al nivel. Realmente no necesitamos hacer eso. Solo queremos hacer click en éste llamado extensión infinita. Y afectará al mundo entero. Entonces no necesitamos estar dentro de esta caja para que surta efecto. De acuerdo, Entonces lo que queremos hacer, sólo voy a colocar este volumen de post-proceso en 000. En realidad, realmente no importa, pero sólo me gusta hacer eso. Y luego empecemos a pasar por todos estos ajustes. Y me tomó alrededor de seis a siete horas en realmente clavar esto con todos los ajustes correctos. Entonces aquí en la floración, vamos a ponerlo en 0. Realmente no queremos ninguna floración dentro de nuestro nivel. A continuación vamos a bajar a la exposición. Y dentro de la exposición, tomemos el mínimo brillo y el máximo brillo. Y pongámoslos a dos. Por lo tanto 22. Y luego bajemos a Lens Flare. Demos clic en la intensidad y ponlo abajo a 0. Y realmente no necesitamos unas bengalas de lente. A continuación vamos a hacer click sobre los efectos de imagen y otros efectos de daño. Podemos establecer la viñeta a 0 antes de hacer cualquier gradación de color. Vamos a saltarme un poco eso por ahora. Están bajando y voy a encontrar la oclusión ambiental. Pero la oclusión ambiental que queremos establecer en 0, no necesitamos eso. Y el desenfoque de movimiento también, voy a ponerme a 0. De acuerdo, así que realmente no tenemos más ajustes con los que jugar aquí abajo. Así que volvamos a la gradación de color. Y de nuevo, pasé siete horas haciendo esto. Entonces justificar venir con números aleatorios. No es porque esté adivinando correctamente, es porque he estado intentando encontrar aquí los números correctos. Por lo que aquí primero en lo global, podemos hacer click en eso. Y tomemos esta llamada saturación. Para que puedas aumentar, puedes ver que puedes aumentar y disminuir la saturación de la imagen. Y para ello, 1.980 fue el número perfecto. Y vamos a desplazar un poco aquí abajo en las sombras. Por lo que pinchando sobre las sombras y tomando tanto la saturación como el contraste y la Gamma. Entonces, ¿qué es la saturación? Queremos ir con 0.9. Y con el contraste, vamos con 0.9 para la Gamma, Vamos con 1.01. Y vamos a bajar ahora. Y en los tonos mediados realmente no tenemos nada más que en lo más destacado, si hacemos click en ese, solo queríamos tomar éste llamado destaca mínimo. Entonces voy a ponerlo en uno. Y luego vamos a bajar a miscelánea. Voy a tomar esta llamada cantidad de curva de tono y vamos a poner eso abajo a 0. Se puede ver que cambia mucho en nuestros colores. Entonces bajando a 0, y esto debería solucionar todos nuestros problemas. Ahora vamos a hacer click en el mapa de teselas y podrás acercar y echar un vistazo. Y puedes echar un vistazo a nuestro nivel aquí, y puedes ver que se ven perfectamente igual Ahora. Son pequeño problema es ahora, y vamos a arreglar eso en la próxima lección. Como se puede ver, estos están pixelados, pero se puede ver que hay algún tipo de suavidad dentro de nuestro nivel, no demasiado pixelada. Y esto es por el antialiasing que tenemos que quitar. Pero puedes ver aquí, si vas al modo en vivo y vas al modo desvinculado, así es como se ve la textura correcta. Entonces así es como se ve sin ninguna iluminación. Entonces si vuelves al modo lead, puedes intentar comparar los dos. Entonces esto es lo que estamos tratando de lograr. Estamos tratando de lograr que el modo elite sea del mismo color que el modo desiluminado. Tan muy cerca el uno del otro. Lo único es que el modo en vivo es más suave hacia fuera por el anti-aliasing. Y lo arreglaremos en la próxima lección. 13. Eliminar la alivio anti: Muy bien, vamos a mover el anti-aliasing, que está causando ese efecto suave dentro de todo nuestro nivel. Y realmente no necesitamos ningún suavizado cuando estamos trabajando con lote de píxeles, queremos ver los verdaderos píxeles. Por lo que vamos a editar y vamos dentro de la configuración de nuestros proyectos. Dentro de aquí, podemos desplazarse hacia abajo y vamos a encontrar éste llamado render dentro del renderizado del motor y dentro de aquí. Ahora, esto es anti-aliasing, pero esto es para móvil y no estamos haciendo un juego móvil en este momento, así que esto no importa. Pero voy a bajar aquí. Y queremos encontrar esta configuración predeterminada mientras estamos en ella. En realidad vamos a quitar un par de cosas que florecen. Ya lo configuramos en 0, pero siempre podemos deshabilitar aquí también, la oclusión ambiental también. Esta, la exposición automática y también podemos eliminar el desenfoque de movimiento. Por lo que todos estos eliminaron. Y este es el importante, el método antialiasing. No sé si se puede ver una diferencia si acabo de ponerla aquí de un costado y se puede ver si pasa algo cuando lo deshabilito. Por lo que esta superresolución temporal, si hago clic en Ninguno, se puede ver la diferencia. Por supuesto, puedes mantenerlo encendido si quieres que tu juego se suavice así. Pero para el verdadero pixel art, en realidad no tienes esto. Por lo que al hacer clic en ninguno se verán los verdaderos azulejos, cómo se crean en el software pixel art. Entonces ahora si vamos en el modo desiluminado y el modo, esto ahora recuerda que esto es lo que estamos tratando de lograr, los mismos colores. Se puede ver que ahora no hay diferencia, y esto es lo que queremos. Queremos que el modo Lit sea el mismo que el desiluminado. Y si quieres ver la diferencia haciendo click en este volumen post-proceso con el que trabajamos en la lección anterior. Podemos dar click en esto habilitado para eliminarlo, y se puede ver la diferencia. Ahora este es el modo OnLoad. Este es un verdadero colores. Estos son el modo en vivo. Y cuando lo habilitamos, lo hacemos igual que como lo queremos. 14. Agregar colisión: Hagamos ahora la colisión para nuestras fichas. Entonces, lo que son las colisiones, son lo que en realidad hacen que esas baldosas se puedan caminar. Por lo que se puede imaginar si agregamos un personaje en el futuro, el personaje en este momento no puede caminar sobre estas fichas porque no tienen colisión. Por lo que el personaje en realidad seguirá a través de los azulejos y caerá por el suelo. Por lo que necesitamos sumar una colisión para que el personaje pueda caminar sobre estas fichas, y esto es muy sencillo de hacer. Así que vamos a pasar al conjunto de azulejos. Entonces vamos a la carretera del dragón de Tulsa. Y dentro de este azulejo dijo recordar lo único que hicimos la última vez fue solo para fijar el tamaño del azulejo a 30. Las bacterias en realidad también pueden agregar colisión. Por lo que al hacer clic en este botón se llama azulejos colisionantes. Ahora se puede ver la colisión. Ahora. En este momento no se puede ver nada porque no tenemos ninguna colisión. Por lo que al hacer clic en el primer mosaico aquí, y éste, por ejemplo, puede hacer clic en éste llamado Add box. Y ahora en realidad se sumó una colisión. Entonces si hago clic en Guardar ahora, y solo quería mostrarte que en realidad agregó colisión. Entonces si hago clic en, aparezco aquí y haga clic en colisión, ahora no se puede ver nada y esto es porque dentro del conjunto de teselas, hay que recordar hacer click en Refresh maps. Esto refrescará todos tus mapas de teselas. Y ahora lo puedes ver en realidad sumar colisión. Ahora se pueden ver estas cajas aquí arriba. Y esta es la colisión, solo lo agregamos y tenemos que hacer eso el personaje pueda realmente caminar sobre estos azulejos. Técnicamente en programación, ese personaje está caminando sobre estas pequeñas cajas, pero parece que el personaje está caminando sobre los azulejos. Entonces volviendo aquí y tenemos, desafortunadamente no hay un método donde podamos seleccionar todo y hacer clic aquí arriba. Tenemos que hacerlo manualmente, pero queremos llevarnos mucho tiempo. Por lo que pincha aquí, mirando cuadro, muy sencillo. Sólo estamos agregando colisiones a estas fichas. Y hay que hacer esto por todas las baldosas que has utilizado. Así como eso. Por ejemplo, no necesitamos agregar colisión para estas fichas porque no las hemos utilizado. Pero si los has usado en tu mapa, tienes que agregarles colisiones también. Por lo que no agregamos colisiones para estos porque obviamente el jugador no va a caminar sobre estas fichas. Entonces si guardo aquí y refresco mapas, ves aquí las fichas son aditivas, se agregan las colisiones, y realmente no necesitamos agregar colisión aquí abajo porque entonces el jugador nunca ir por aquí abajo. Entonces realmente no necesitamos hacerlo. Ahora, quiero hacer que mi caja de colisión sea más grande porque se puede imaginar cuando el jugador está caminando aquí en estas cajas, existe la posibilidad de que, recuerde que este es un motor 3D. Existe la posibilidad de que el jugador sea empujado de una manera en que el jugador caiga aquí a un costado y se caiga del suelo, cayendo de las casillas de colisión. Por lo que sólo para eliminar ese riesgo, quiero aumentar la caja de colisión es longitud. Podemos hacer eso dentro del mapa del azulejo. Dentro del mapa del azulejo aquí podemos ir a aquí en la parte inferior, espesor de colisión. Vamos a establecer que es 254. Ahora hagamos click en Guardar. Y cuando minimizamos, se puede ver que las cajas de colisión son mucho más largas y no tenemos oportunidad de que el jugador se caiga del suelo porque eso está cubierto ahora. De acuerdo, agreguemos colisión al resto de ella. Creo que creemos, creo que nos estamos perdiendo esta parte aquí. Entonces yendo al conjunto de herramientas y por dentro de aquí, vamos a sumar también colisión dos. Este es en realidad nos estamos perdiendo esos, así que, agregando una caja de colisión aquí arriba, haz lo mismo con esta. También necesitamos agregar una colisión aquí, por lo que el costado, así que pulsando Añadir cuadro, se puede ver aquí a un costado, realmente no necesitamos colisión todo el camino si refresco el mapa para que podamos verlo. Ahora agregó colisión todo el camino por aquí. Realmente no necesitamos eso. Sólo necesitamos cubrir el azulejo. Entonces lo que podemos hacer es hacer clic en éste y luego lamer y roncar y seleccionar ambos vértices. Y podemos hacer click y arrastrar. Entonces al igual que nuestra viewport, tal vez desactivaré el snapping. Veamos. O en realidad está bien. Así como esto, eso es perfecto. Haciendo lo mismo aquí. Voy a añadir caja de colisión y tomar estos dos vértices y reducirlos así. Por lo que ahora puedes refrescar el mapa y puedes ver cómo se ve. Esto, lo que parece. Entonces la colisión es de dos aquí. Y si sentimos que esto es demasiado, siempre podemos volver atrás y hacerlo más pequeño. Así que ahora nos estamos perdiendo éste. Agreguemos una caja de colisión. Y seleccionemos estos para acercarlas a lo mismo de aquí. Muévelos más cerca así. Y de nuevo, recuerda hacer click en Refresh maps. Lo último es que nos falta esta pendiente aquí porque ésta también usamos. Por lo que voy a hacer click en este primero y vamos a añadir una caja. Ahora éste es un poco más complicado, así que vamos a seleccionar estos vértices. Este vértice aquí arriba, haciendo clic en Eliminar en tu teclado lo eliminará. Y ahora sólo tenemos tres vértices. Ahora éste, puedes moverte hacia abajo así. Y pasemos a la siguiente. Por lo que este de aquí, haga clic en Agregar cuadro. Queremos mover éste hacia abajo, tal vez así, y también mover éste a un lado. Realmente no necesitamos colisión todo el camino aquí. Y voy a reducir mi chasqueo porque no me deja moverlo aquí en medio. Entonces lo voy a reducir a cinco en lugar de diez. Y creo que algo como esto funciona para mí. Ahora vamos a hacer click sobre éste. Se puede ver pendientes son un poco más complicado trabajar con. Por lo que al hacer click en éste, queremos sumar aquí una pequeña colisión para que el jugador no caiga. Por lo que haciendo click en el cuadro Agregar de nuevo, podemos seleccionar este vértice, click en Eliminar en el teclado. Podemos tomar éste y acercarlo más. Entonces si puedo golpearlo aquí, acercándome y luego tomando este vértice y moviéndolo hacia abajo así. Y luego podemos tomar el siguiente aquí y añadir una caja. Podemos tomar este vértice y moverlo hacia abajo. Y éste sólo podemos dejarlo ser. Creo que esta es una buena curva. Y el último, hay un pequeño bicho. Lo probé antes. También tenemos que sumar una colisión muy pequeña aquí mas el jugador realmente lo hará, si refresco el mapa y puedo mostrarte, el jugador en realidad se quedará atascado aquí. En la parte superior. Hay una brecha muy, muy pequeña que no podemos ver. Y tenemos que sumar aquí una colisión. Y obviamente esto es porque ya he probado esto antes. Lo que solo queremos hacer aquí es que queremos eliminar el vértice aquí arriba, igual que antes. Podemos moverlos muy de cerca. Ahora para ver el número específico para esto, puedes bajar aquí. Y los datos de colisión, y el índice, bajando dos formas. Haciendo click en este índice y viendo estos vértices. Se puede ver cuando muevo este vértice aquí arriba, este número de cambios. Por lo que sólo quiero que este número sea 14.9. Para que puedan ver que si elimino el chasquido, cuanto más cerca lo muevo hacia abajo. El último número es 15, obviamente aquí. Por lo que quiero moverlo a un 5.9th, 14. Y éste también. Así que muy, muy, muy cerca. Éste, si sólo lo muevo para ver cuál es, está aquí abajo. 14.9. Y no sé por qué dije 15.914, justo así. Por lo que ambos son 14.9. Por lo que hay un pequeño colegio aquí que hace que el jugador no pase por el suelo. Y esto se debe a que lo probé antes en mi proyecto de preparación. Por lo que ahora tenemos toda la colisión establecida. Acabo de recordar, recuerda siempre hacer click en el Mapa de Refrescar y dar click en Guardar, guardar todo. Y ahora estás listo para irte. Para que puedas echar un vistazo a tu mapa. Se puede ver que hay colisión aquí arriba. Podríamos necesitar reducir éste. Tal vez esté demasiado lejos. Y también lo puedes ver aquí. Pero generalmente tenemos que tener un personaje para correr alrededor del mundo y probar esto antes de que podamos decir con seguridad. Pero ahora tenemos la colisión inicial hecha y podemos pasar a crear nuestro personaje. 15. Creación de sprites: Ahora es el momento de importar los activos del personaje. Por lo que te he proporcionado aquí de nuevo, dentro de los materiales del curso, hay una carpeta llamada caracteres. Por lo que haciendo clic en esa carpeta. Y empecemos con Serena. Lo que quiero que hagas por ahora es solo importar el ocioso, el salto, y las animaciones de carrera. Entonces primero, antes de hacer eso, pasemos a la carpeta de activos. Hagamos una nueva carpeta llamada caracteres. Y luego dentro de aquí, hagamos uno nuevo llamado Serena. Y luego aquí podemos importar nuestros activos. Entonces quiero arrastrar el salto inactivo y correr, arrastrarlos a tu proyecto. Y cuando dejas ir, importas esas texturas. Entonces en realidad vamos a crear algo llamado sprites y flip books. Así que hagamos una nueva carpeta y voy a llamarla las texturas. Y voy a tener estos dentro de esta carpeta. Y todos los, todos los flip books que hagamos estarán aquí afuera. Entonces, en lugar de texturas, recuerda cuando importas texturas, y de nuevo, si haces doble clic en ellas y acercas, puedes ver que Unreal Engine está suavizando esos píxeles. Y como te dije antes, tienes que seleccionar a todas ellas. Y si quieres seleccionarlos así, puedes hacer click en un turno de espera y hacer click en el último. Seleccionará todos los. Y puedes hacer clic derecho en acciones de sprite y aplicar papel a la configuración. Como antes, se puede ver que elimina la suavidad y se pueden ver los píxeles con mayor claridad. Ahora puedes ver la textura viene con esta animación. Así que tienes la animación, tienes la animación corriendo, y se juntan en una sola textura. Y ahora hay que crear sprites de esos. Entonces empecemos con lo inactivo. Puedes hacer clic derecho e inspirar acciones. Se puede decir extraer sprites. Y aquí, hay que ir aquí a la parte superior derecha y hacer clic en rejilla en lugar de auto. Y luego hay que especificar cuán grande es la cuadrícula. Ahora, hice esto en Photoshop así que sé que la rejilla es de un ochenta, uno ochenta. Y si descargas algo de Internet, te dirán cuán grande es esta cuadrícula, una ochenta, una ochenta. Y extraerá esas animaciones como fotogramas simples. Por lo que al hacer clic en Extraer aquí abajo, se puede ver que los extrae a marcos individuales y estos se llaman sprites. Los sprites son imágenes estáticas. Así que aquí en nuestro nivel, realmente no podías arrastrar una textura y soltarla encima de aquí porque se puede ver que reemplaza lo que esté arrastrando, arrastrándola encima de. Entonces voy a hacer click en Control Z. pero los sprites son imágenes estáticas y en realidad puede arrastrar los que están dentro del nivel. Entonces si tienes algo estático, por ejemplo, un barril que nunca se mueve, en realidad puedes agregar eso aquí dentro de tu nivel. Pero nuestro personaje tiene animaciones, por lo que realmente no queremos arrastrar imágenes estáticas porque en realidad son animaciones, pero vamos a trabajar con las animaciones más adelante en el siguiente video. Entonces vamos a eliminar. Voy a eliminar este material que creó cada vez que arrastré esta textura encima de ella, así así. Ahora, voy a cambiar el nombre de los sprites. Por lo general elimino esto al frente. Solo recuerda que tienes que prestar atención a los números. Entonces este es el número 0123. Por lo que hay que hacer eso en orden. Y aquí, el primero, lo voy a llamar S para Sprite está inactivo y 01 así. Entonces estamos un poco más organizados. Este es 02 ahora y 0304. Así como eso. Entonces ahora tenemos el ídolo. Y hagamos lo mismo con el salto. Puedes hacerlo tú mismo solo para practicar si quieres. Puedes hacer clic con el botón derecho aquí e ir a detectar acciones y extraer sprites. Selecciona la cuadrícula aquí arriba, y de nuevo, 180, extrae los sprites. Y de nuevo, presta atención a los números. Dice 0123. Entonces no pienses que puedas entrar aquí y llamar a esto 10, porque éste es el número tres. A veces lo que hago es simplemente hacer clic de distancia de la carpeta. Así que haz clic en otro lugar y vuelve a la carpeta. Y puedes ver que los ordena como quieras. Entonces este es el primero, es r1, 01. Y haciendo lo mismo con los otros. Entonces sí toma un poco de tiempo organizar tus carpetas. Pero al final, cuando estén organizados, tendrás un tiempo fácil trabajando con él. Ahora el último es el salto. Y éste se puede ver el salto sólo tiene una animación. Entonces no tiene sentido hacer clic derecho y decir extraer sprites porque en realidad solo tienes un sprite. Entonces lo que quieres hacer es hacer clic derecho y simplemente hacer click en Crear Sprite en lugar de extraer porque solo tienes un sprite. Y llamemos a éste es saltar. Muy bien, entonces ahora hemos creado nuestros sprites. Vamos a guardar todo, y pasemos a la siguiente lección. 16. Crea libros de flippers: Entonces ahora que hemos creado sprites para nuestro personaje, ahora es el momento de animar esos sprites. Entonces lo que quieres hacer es, por ejemplo, empecemos con lo inactivo. Se pueden seleccionar todos ellos. Entonces cualquiera de ellos, puedes sostener Control. Yo iría a tres o cuatro. O una forma más rápida de hacerlo es hacer clic en el primero, mantener pulsada Shift, y dar clic en los últimos en el número cuatro. Y seleccionaremos todo el asunto aquí en la línea. Ahora puedes hacer clic derecho. Y aquí arriba dice crear flip book. Por lo que al hacer clic en Crear flip book, se creará uno. Y por lo general, en lugar de S y el frente, normalmente escribo FB para un flip book. Este es el libro de volteo inactivo. Ahora puedes hacer doble clic en el flip book. Y se puede ver ahora esto está animado, pero en este momento se anima demasiado rápido. Por lo que quiero que cambies los fotogramas por segundo aquí a la parte superior derecha. Así que toqué ayer Maple Story y vi lo rápida que fue la animación, y fue alrededor de dos fotogramas por segundo. Entonces escribiendo a, y se puede ver ahora está animado. Esta es la animación ociosa. Ahora, hagamos lo mismo por la carrera. Para ejecutar el número uno a cuatro, puede hacer clic con el botón derecho, crear un flip book, llamarlo FP run. Y puedes hacer doble clic en él de nuevo. Y para la animación de corrida, es de seis fotogramas por segundo. Por supuesto, puedes hacerlo más rápido. Por ejemplo, si lo eres, si quieres que tu personaje corra tan rápido, o simplemente que la animación sea tan rápida, puedes hacerlo. Pero para mí, estoy tratando de imitar a Maple Story tanto como pueda. Y parece que son animación es de unos seis fotogramas por segundo, así como esto. De acuerdo, vamos a cerrarlo. Y el último tenemos el salto. Ahora podemos crear un flip book fuera de esto y tenemos que hacerlo, porque más tarde cuando estamos creando nuestros personajes, el personaje quiere y entrada de un libro flip book. Así que realmente no podemos usar este sprite de salto. Recuerda, esto es un sprite, este es un libro flip. Tenemos que hacer esto en un libro flip porque el personaje más adelante necesita un libro flip book. Así que a pesar de que es un marco, tenemos que crear un libro flip book. Así que vamos a hacer clic derecho y crear un libro flip fuera del salto. Y llamémoslo FB, salta, así. Y obviamente este es solo un fotograma, así que voy a cambiar este fotogramas por segundo a uno y podemos cerrarlo y podemos seguir adelante y salvar todo. Por lo que ahora hemos creado nuestros flip books. Voy a mover esos libros flip fuera de la carpeta de texturas. Por lo que los voy a trasladar aquí a Tsarina y dar click en Muévete aquí. Entonces ahora tenemos esos flip books y estos sectores, realmente no necesitamos verlos de nuevo. Es por eso que creé una carpeta Textures solo para que sea más fácil de mirar porque solo realmente necesitamos esos flip books. 17. Introducción al Blueprint: Blueprint es el lenguaje visual de scripting en Unreal Engine. Y cuando estás escribiendo planos, créalo o no, eres programador. Estás programando. En lugar de escribir líneas de código tradicionales, puedes codificar todo el juego simplemente agregando notas y conectándolas. Entonces es un lenguaje visual de scripting. Blueprint es tan potente como cualquier otro lenguaje de programación por ahí, ya sea C plus, más C-Sharp o cualquier otro lenguaje, puedes crear lo que quieras usando blueprint. En este momento, estamos creando una mini versión de Maple Story. Pero también puedes crear Fortnite, Metal Gear, Sólido, óxido, o incluso anillo Aldon. Puedes programar cualquier idea con planos. Entonces lo único que te está limitando es tu imaginación. Lo que quieras programar, puedes hacerlo con blueprint. Y también está optimizado y se ejecuta muy bien con eso dicho, vamos a saltar a la derecha en el aprendizaje de los fundamentos de los planos. 18. Clases de Blueprint: Hablemos ahora de clases de planos. Entonces aquí en cualquier carpeta aleatoria voy a hacer clic derecho. Solo quería mostrarte las clases de planos por ahora. Puedes hacer clic derecho y arriba aquí, puedes hacer click en Clase Blueprint. También puedes encontrar esto bajo Blueprints, éste llamado Clase Blueprint. Entonces lo mismo, pero es más rápido sólo hacer clic aquí. Entonces estas son las diferentes clases que puedes crear en Blueprint. Y quiero empezar con el primero. El primero que tenemos es un actor y se puede ver la descripción aquí a la derecha. Dice que un actor es un objeto que se puede colocar o engendrar en el mundo. Entonces un actor muy simple, por ejemplo, puede ser una mesa, puede ser una silla, puede ser un martillo. Entonces cualquier cosa que pueda ser engendrada en el mundo, solo un objeto. El siguiente es un peón. Y upon es un actor que puede poseerse y recibir la entrada de un controlador. Y lo que esto significa está sobre, es algo que el jugador puede controlar. Entonces en otro curso que hice que se puede ver aquí en la página web es que estoy creando una pelota o una esfera. Moverse por ahí. Esta esfera que se mueve alrededor está sobre porque quería que el jugador controlara este miedo para moverse con el teclado. Entonces n upon es un actor que puede poseerse y recibir la entrada de un controlador. Por lo que hay que hacer lo que quieras en un estanque. Si quieres que el jugador controle ese objeto, no puedes hacer un actor y quieres que el jugador controle ese objeto, que hay que convertirlo en un punto en su lugar. A continuación tenemos un personaje. Y un personaje es un tipo de ****. Por lo que se puede ver que hay una relación. Entonces un personaje en realidad está sobre. Un personaje es un tipo de **** que incluye la capacidad de caminar. Así que siempre que quieras hacer un personaje, es solo que puedes imaginar a un humano con dos brazos y dos piernas caminando por ahí. Tienes que hacer un personaje. Pero si quieres hacer tu personaje algo así como una pelota o una esfera rodando alrededor en el mundo sin ella no tiene dos brazos, dos piernas. Puedes seguir adelante y crear un punto. Entonces esta es la diferenciación más fácil. Entonces cuando tienes un personaje, dos brazos, dos piernas caminando por ahí, puedes seguir adelante y crear un personaje en su lugar. Entonces tienes algo llamado controlador de jugador. Y aplicar controlador es un actor que se encarga de controlar sobre utilizado por el jugador. Por lo que hay que pensar en esto. Este no es realmente el mando que tienes en casa, ni tu mando Xbox o tu mando PlayStation. Esto es, se puede imaginar esto como los cerebros del personaje. Entonces este es el cerebro del personaje. Todos los personajes que engendréis en el mundo tendrán un controlador de jugador. Y dentro de aquí se pueden agregar códigos como interfaces de usuario. O si quieres hacer un juego para un solo jugador, estás creando movimientos impresionantes. Se puede hacer eso dentro de aquí, pero estaremos trabajando con todas esas cartas. Así que no te preocupes por esto. Esta es sólo la explicación básica por ahora. Entonces el último del que quiero hablar se llama el Modo de Juego, y esto es casi autoexplicativo. La base del modo de juego define el juego que se está jugando, sus reglas, la puntuación, y otras facetas del tipo de juego. Entonces por ejemplo, si tenemos un juego de disparos, tienes captura la bandera. Tienes cuánto tiempo tienes por ronda. Y por ejemplo, en Maple Story, si queríamos hacer un evento, por ejemplo, podemos definir cuánto tiempo tomará este evento y así sucesivamente. Así que sólo las reglas del juego. Por ejemplo, en Capture the Flag, cuando captes la bandera de un equipo, te dará algunos puntos. Y estos puntos también se pueden anotar dentro del modo de juego porque son las reglas del juego. Ahora, ya que estamos trabajando con 2D en este momento. Entonces todos estos son 3D. Ya que estamos trabajando con 2D, hay que hacer click en esto, éste llamó a todas las clases. Y aquí puedes buscar papel. Se puede ver que tenemos muchas clases y estas son sólo las básicas que usamos todo el tiempo. Y casi nunca entras aquí menos que estés trabajando con cosas avanzadas. Por ejemplo, un sistema de ahorro y carga, que vamos a hacer más adelante, ojalá. En todas las clases aquí, puedes buscar papel. Y el papel es solo el lote de píxeles 2D aquí en Unreal Engine. Entonces, por ejemplo, en lugar de este actor de aquí arriba, que es 3D, podemos crear éste llamado Paper sprite actor. O podemos crear un actor flip book si tenemos un libro flip book, recuerda, flip books fueron los sprites animados juntos. Entonces si tienes una animación, quieres usar un libro flip book. Si tienes un elemento estático, quieres usar un sprite y luego también tienes un personaje. Entonces en lugar de usar este personaje aquí arriba, porque este es un personaje 3D, tenemos que usar este llamado personaje de papel. Y éste incluye un libro flip book. Hicimos flip books para nuestro personaje que podemos poner aquí dentro de nuestro personaje de papel. Por lo que estas son las clases básicas que queremos usar, y en su mayoría no vamos a usar las de aquí arriba. Vamos a añadir un controlador de jugador y Modo de Juego porque estos no son necesarios. Pero para todos estos en su mayoría iban a funcionar aquí abajo en nuestro personaje de papel, sprite de papel y nuestro libro de papel. 19. Modo de juego y controlador de jugador: Empecemos ahora creando nuestros primeros planos. Entonces para hacer eso, vamos a ir en la carpeta de contenido. Puedes hacer clic con el botón derecho aquí y hagamos una nueva carpeta llamada blueprints. Y dentro de esta carpeta, y por cierto, se puede dar una dosis completa de colores. Entonces si puedes hacer clic con el botón derecho aquí debajo la carpeta Blueprints y puedes hacer clic en Establecer color. A veces hago eso solo para organizarme, solo selecciono un color azul. Entonces sé que son planos como este, por ejemplo. Y se puede ver claramente dentro de aquí. Puede volver a hacer clic con el botón derecho y seleccionar Clase de blueprint. Y vamos a crear un modo de juego. Cada juego que creas tiene un modo de juego y un controlador de jugador. Estas son las cosas básicas con las que empiezas en un juego. Así que vamos a crear un modo de juego. Y llamémoslo g, m como prefijo para el Modo de Juego. Y por lo general lo llamo el nombre del juego. Entonces historia de Maple para éste. El siguiente, de nuevo, haga clic derecho en Loop y clase. Haga clic en el controlador del jugador y llámala PC para el controlador del jugador , de nuevo, llámela el nombre del juego. Entonces Maple Story. Ahora, obviamente, tienes que crear múltiples modos de juego si tienes modo de juego múltiple. Entonces, por ejemplo, en Counter-Strike, tienes algo llamado partido de muerte. Has capturado la bandera, tienes cinco contra cinco jugadores. Por lo que tienes diferentes modos de juego. Y puedes crear múltiples modos de juego. Puedes, por supuesto, en lugar de llamarlos el nombre del juego, puedes llamarlos por algún dn, Capture the Flag. Entonces llamándolo el nombre del modo de juego. Pero para éste sólo tenemos un modo de juego. Así que sólo voy a llamarlo Maple Story. Ahora para que este modo de juego funcione en nuestro nivel, hay que, primero vamos a guardar todo. So File Guardar todo. Y vamos a Editar. Y dentro de la configuración del proyecto. Y en la configuración del proyecto puedes hacer clic en mapas y modos aquí arriba. Así que recuerda en mapas y modos previamente editamos el mapa de inicio a nuestro mat mean. Entonces ahora lo que queremos hacer también es establecer nuestro modo de juego predeterminado. Esta es la base que usa el motor. Por lo que voy a hacer click en él y luego haga clic en GM Maple Story, esta es nuestra costumbre. Entonces quiero que haga clic en esta pequeña flecha al lado del modo K seleccionado. Ahora hay que cambiar las clases predeterminadas. Por lo que podemos ver aquí dice la clase de controlador de jugador, acabamos de hacer uno. Así que pinchando aquí y cambiándolo a la historia de PC Maple. También tenemos que definir nuestra clase de estanque predeterminada, pero realmente no tenemos encendida en este momento, así que vamos a omitir esto por ahora. Y vamos a cerrar esto abajo. Ahora, dentro de este mapa en el que te encuentras, también tienes que recordar ir a la configuración del Mundo. Entonces si no tienes esta configuración mundial abierta, puedes hacer click en Ventana. Y luego puedes hacer clic en esta llamada Configuración del mundo para abrir la ventana. Pero aquí en la configuración mundial también hay que recordar cambiar este modo de juego sobrescribir. Así que pinchando aquí, haciendo clic en GM Maple Story, y voy a hacer clic en esta flecha solo para asegurarme de que el controlador del jugador sea correcto. Justo en lo que lo puse en la configuración del proyecto. Entonces PCM capaz historia. También puedes ver aquí, si haces doble clic en el Modo de Juego, puedes ver aquí a la derecha dentro de los valores predeterminados de clase. Aquí a la derecha, se puede ver si hago esto más pequeño. Dice que el controlador del jugador es PC, Maple Story. Lo decía automáticamente porque lo hicimos dentro de la configuración del proyecto. De acuerdo, realmente no queremos trabajar dentro de aquí ahora mismo, así que vamos a cerrarlo. Por lo que ahora hemos creado el modo de juego básico y el básico un controlador de jugador. Así que vamos a seguir adelante en la siguiente lección y crear el personaje. 20. Planos para padres y niños: Así que ahora es el momento de sumar el personaje. Al igual que lo que te he dicho antes. Haga clic con el botón derecho aquí y vaya a clases de planos o clase aquí. Cuando haga clic en todas las clases aquí, busque papel. Ahora en lugar de hacer este personaje, recuerda que estamos trabajando en 2D, así que tenemos que hacer un personaje de papel. Por lo que haciendo click en ese aquí y haciendo clic en Seleccionar. Ahora tenemos que llamarlo algo. Y por ahora quiero explicarte cuáles son los planos de padres e hijos. Entonces primero aquí, vamos a crearlo y llamarlo base de caracteres. Ahora tenemos una base de personajes aquí y vamos a hacer clic derecho en ella. Y ahora se puede ver que dice Crear clase Child Blueprint. Entonces déjame crearlo y quiero explicarte lo que estoy haciendo. Entonces PPE, llamémoslo base del jugador bp. Y hagamos otro aquí desde la base de personajes. Haga clic con el botón derecho en él nuevamente y cree la clase Child Blueprint. Llamemos a este VP base enemiga. De acuerdo, entonces lo que estoy haciendo aquí es dejar que en realidad ahorre todo primero. Entonces lo que estoy haciendo aquí mismo es que creamos un personaje base, y a partir de eso, hice clic derecho y creé planos infantiles. Entonces, lo que son los planos infantiles es cuando codificas algo dentro del personaje, de Hoy, ese código se llevará automáticamente a la del niño. Recuerde que la base enemiga y base del jugador son ambos hijo de la base del personaje. Entonces lo que tengo código o hago dentro de base de personaje también se aplicará a cualquier base y jugará una base. Esto es muy útil por lo que no tienes que codificar lo mismo una y otra vez. Entonces si yo, por ejemplo, quiero citar algo aquí, y quiero que lo mismo esté aquí, y lo mismo que esté aquí. Eso sería mucho trabajo y no estaría tan optimizado. En cambio, creé llamados planos. Entonces cualquier cosa que haga dentro de aquí también se llevará automáticamente al enemigo y al jugador. Y por ejemplo, en el carácter basado en, se puede hacer doble clic en él. Y tenemos algo llamado componentes de movimiento de personajes. Entonces dentro de aquí, por ejemplo, puedes controlar cualquier movimiento del personaje. Por ejemplo, ¿qué tan rápido debe caminar tu personaje? Y si escribo, por ejemplo, digamos 200 en lugar de 600. Y compilar es solo ahorrar. Hablaremos de eso en la próxima lección. Entonces compilar y ahorrar aquí. Y si minimizo esto y abro mi, digamos jugador. Y miro el componente de movimiento de jugadores, se puede ver que bajó automáticamente a 200. Porque recuerda que es un hijo de carácter basado. Así que lo que haga dentro del personaje, se aplicará al jugador. Entonces si vuelvo aquí y hago clic en esta pequeña flecha para volver a la predeterminada, y se remonta a 600. Ahora si voy al jugador, se puede ver en el jugador también cambió de nuevo a 600. Entonces esto es muy útil. Y lo que queremos hacer ahora, dentro de la base de jugadores, queremos hacer clic aquí. Y ahora queremos crear a los jugadores, porque ahora tenemos una base para los jugadores. Vamos a hacer clic derecho. Y quiero crear éste llamado Tsarina. Y también tenemos otro personaje llamado Luke. Trabajaremos con ellos más adelante, pero podemos crearlo en este momento. Así que crea de nuevo Child Blueprint del jugador y llámenlo BP Luke. De acuerdo, entonces ahora estos dos niños, cada vez que codificamos algo en la base del jugador , por ejemplo, el movimiento, realmente no queremos codificar el movimiento aquí para el bucle for. Y luego queremos codificar el mismo movimiento para Serena, porque estos dos jugadores, tienen el mismo movimiento. Están corriendo de la misma manera. Están saltando con el mismo botón. Por ejemplo, hacer clic en el espacio para saltar o hacer clic en las flechas del teclado para correr alrededor. No queremos hacer eso dos veces. Sólo tenemos que codificar esto dentro de la base del jugador. Ahora, no tendría sentido codificar el movimiento dentro de la base de caracteres. Porque recuerda que tenemos una base enemiga y el enemigo no está realmente caminando como tú como el jugador, el enemigo no está usando un teclado. El enemigo no tiene un ratón con el que mirar a su alrededor, por lo que no tiene sentido codificar el movimiento de los jugadores dentro del enemigo porque es inteligencia artificial. Realmente no tiene teclado, no es un humano. Por lo que tendría más sentido codificar movimiento de los jugadores dentro de la base del jugador. Muy bien, entonces ahora tenemos los planos padre e hijo creados. Y de nuevo, recuerda, si necesitas alguna ayuda con esto alguna vez, siempre puedes ir dentro de mi servidor de Discord y estoy más que dispuesto a ayudarte con todo esto. Así que vamos a hacer clic con el botón derecho ahora y crear una nueva carpeta. Y sólo voy a llamarlo jugador. Y estoy haciendo uno nuevo llamado enemigo. Por lo que nos estamos organizando. Voy a poner esta base enemiga en lugar de enemigo. Vamos a crear ai más adelante. Y luego poniendo a Luke, la base del jugador y Serena dentro del jugador. Por lo que ahora con eso hecho, vamos a hacer click en Archivo y Guardar todo. Y pasemos a la siguiente lección. 21. Descripción general del gráfico de Blueprint: Seguimos, tomemos una visión general del gráfico de planos. Así que vamos a nuestra carpeta Blueprints dentro del atlas de jugadores. Simplemente entra en esta llamada base de jugadores. Ahora se va a abrir así, pero hay que hacer click en Abrir editor completo, un editor de Blueprint. Y esto sucede siempre que no tienes ningún código dentro de aquí todavía. Por lo que pinchando aquí y se puede ver este es el gráfico de planos. Y dentro de aquí tienes el Gráfico de Eventos. Y dentro del gráfico de eventos, aquí es donde escribes todo tu código. Puedes ver aquí, Unreal Engine te brinda eventos muy sencillos por defecto. Y para navegar por dentro del gráfico de eventos, puede mantener el botón derecho y puede desplazarse así y usar la rueda del ratón para acercar y alejar. También puede hacer clic con el botón derecho para agregar funciones. Posteriormente vamos a usar esto para agregar algún código, pero no te preocupes por esto. Esto probablemente te parezca abrumador. Hay muchas cosas que puedes agregar dentro de aquí, pero estaremos trabajando con eso a lo largo de todo el curso. Aparte del gráfico de eventos donde escribimos el código, también tenemos una ventana gráfica. Y dentro de la ventana gráfica, aquí es donde agregamos nuestros artículos. Para que puedan ver aquí a la izquierda tenemos algo llamado componentes. Y dentro de esta pestaña de componente aquí, por ejemplo, el sprite, vamos a añadir aquí un libro flip para que podamos ver en el panel Detalles, igual que te dije de aquí en este panel Detalles, cuando hacemos clic en cosas aquí en nuestro nivel, podemos editar ítems y editar por ejemplo, la ubicación, la rotación, la escala. También podemos editar cosas sobre la colisión. Esto es lo mismo aquí dentro de la clase blueprint. Cuando hacemos clic en un componente, podemos agregar ajustes sobre este componente dentro de los detalles. Entonces, por ejemplo, el sprite. Posteriormente vamos a sumar el personaje. Y se puede ver cuando hago click en este libro flip fuente, se pueden ver, podemos ver las animaciones para el personaje que creamos en una lección anterior. Así mismo que antes. Contamos con un panel de detalles donde podemos editar ajustes y posteriormente vamos a añadir más componentes. Y esto se puede hacer haciendo clic en este botón Agregar. Y puedes ver que puedes sumar muchas cosas. Por ejemplo, un cubo, una esfera. Puedes agregar iluminación, audio y montones, muchas cosas. Aquí abajo. Podemos ver nuestros eventos que creamos en nuestro Gráfico de Eventos. Entonces si vuelves a la Gráfica de Eventos aquí, puedes ver Unreal Engine te da estos por defecto. Y también puedes ver estos eventos llamados Begin Play, actor, comienzan a superponerse y tomar, y puedes verlos aquí. Posteriormente cuando agregamos funciones, también puedes ver nuestras funciones aquí. Se pueden ver las macros, se pueden ver variables, y yo las voy a explicar en una lección posterior. Y después de eso, también tenemos esta barra de herramientas por aquí. Lo más importante es este botón llamado compile. Y cada vez que escribes algún código, así que si acabo de escribir algo por diversión, puedes ver aquí te da un signo de interrogación y dice que sucio necesita ser recompilado. Por lo que te dice que tienes que hacer click en este botón cada vez que hayas terminado de escribir tu código, tengo que hacer click en este botón. Y este botón es, solo comprueba si el código que has escrito es bueno o no. Entonces si hago clic en él y me da esta marca de verificación, significa que no tengo ningún error en mi código y estoy listo para presionar play y jugar mi juego. Pero si haces algo mal, te dará una cruz y te dirá que has hecho algo mal. Y cuando te dé un error, te lo dará aquí abajo y los resultados del compilador. Aquí se puede ver que tuvo éxito. En este momento no tenemos ningún error. Pero si tienes un error, aparecerá aquí abajo y te dirá cuál es tu error. Ahora voy a seleccionar este nodo en este momento esto fue solo para probar. Voy a hacer click en eliminar. Y de nuevo, aquí en la barra de herramientas, puedes guardar tu proyecto. Por supuesto, puedes buscar planos. Puedes ir a la Configuración de clase, ir a los valores predeterminados de clase y así sucesivamente. Y estaremos trabajando con todo eso a lo largo de este proyecto. 22. Eventos y funciones: Echemos un vistazo a los eventos y funciones. Voy a volver a mi base de jugadores bp. Por lo que dentro de aquí como predeterminado, Unreal Engine te da estos eventos predeterminados y los eventos siempre están marcados con rojo. Así que voy a pasar el cursor sobre estos este momento y voy a hacer clic en Eliminar en mi teclado. No los necesito ahora mismo. Pero tienes éste, el muy básico llamado start play. Este evento. Te dice qué debo hacer cada vez que hago clic aquí en la jugada, siempre que, cada vez que empiezo a jugar mi juego. Entonces, por ejemplo, muy simple. Puedes arrastrarlo desde este pin de ejecución y arrastrando hacia fuera y diciendo print. Entonces en busca de impresión. Esta es la función muy básica que aprenderás desde el principio, y solo imprime algún texto en la pantalla. Por lo que haciendo clic en esta función. Entonces esta es una función y se puede ver por la f aquí arriba. Entonces este es un evento, esta es una función. Siempre, siempre en Blueprint necesita eventos para disparar código. Y el código consta de varias funciones. Siempre necesitando un evento para disparar código más, tu motor no sabe cuándo quieres disparar este código. Entonces si tuviera esto desconectado y se puede hacer eso sosteniendo Alt en su teclado y haciendo clic aquí. Esto los desconectará. Si me dirigí como aquí, el motor, nunca sabremos cuándo disparar este código. Si no tienes un evento acoplado a él, voy a arrastrarlo aquí a la otra pluma de ejecución y conectándolo , haciendo clic en compilado. Recuerda hacer eso. También puedes aquí, en lugar de compilar y ahorrar todo el tiempo, puedes hacer click en estos tres botones son puntos y decir Guardar en compilar, solo infructuoso. Y lo que eso significa es cada vez que compilar ahora, se guarda automáticamente para usted si aparece esta marca de verificación. Entonces ahora lo que pasa es en Begin Play, mi pantalla va a saludar. Voy a minimizar esto un poco y hay que mirar aquí arriba a la izquierda. Por lo que al hacer clic en el juego, y se puede ver que no pasa nada. Y esto es en realidad un pequeño error de mi parte. Así que en realidad vamos a agregar la base del jugador. Recuerda antes en realidad te dije que queremos sumar el estanque. Así que hagamos click en la cruz aquí. Hagámoslo ahora antes de que lo olvidemos. Entonces yendo a editar la configuración del proyecto y en los mapas y modos subiendo aquí de nuevo, recuerda te dije que necesitábamos agregar esto más adelante cuando creamos un personaje y tenemos uno ahora. Así que pinchando aquí, y vamos a hacer nuestro personaje Serena por ahora. Lo vamos a codificar Serena. Por lo que no vamos a crear una base de jugadores en este momento. Por lo que queremos engendrar a Serena al mundo más adelante. Así que sólo voy a seleccionar mi clase de poema predeterminada, solo Serena. Pero más adelante tendremos una pantalla de selección de personajes. Y cuando tenemos eso, solo lo hacemos a ninguno porque entonces el jugador selecciona al personaje y aparecerán como Tsarina o Luke dependiendo de lo que hayan seleccionado. Pero en este momento no tenemos una pantalla de selección de personajes. Entonces voy a desovar como Tsarina por defecto. Voy a hacer click en Crosshair, ir a la configuración del Mundo y asegurarme aquí y el modo de juego general que Serena también se aplica aquí. Ahora, volvamos a hacer clic en Play. Y se puede ver mi pantalla dice, hola. Ahora cayendo por el suelo. Aquí se puede ver que estoy tirando por el suelo porque no tengo arranque de jugador. Y podemos sumar uno también, sólo para que no caiga por el suelo yendo aquí. Y rápidamente agregan botón, yendo a básico y agregando este inicio de jugador. Entonces aquí es donde podemos empezar aquí. Y si haces clic en G, puedes recordar mostrar y ocultar los iconos. Este es el inicio del jugador. Voy a colocarlo en mi mundo aquí en, vamos a hacer el y 0. Entonces está aquí en el frente. Y entonces podemos, voy a hacerlo más pequeño ahora mismo porque si tienes esta cápsula está en medio de tus fichas de colisión, va a decir mal tamaño. Voy a reducir la escala aquí abajo a 0.25.25.25. Y entonces sólo voy a arrastrarlo aquí abajo cerca del suelo. Ahora cuando hacemos click en Play, se puede ver dónde cayendo por el suelo, pero no estamos cayendo todo el camino porque tenemos nuestra colisión. De acuerdo, así que volvamos a los planos ahora dijimos Hola y se puede ver aquí a la parte superior izquierda que dice Hola en mi pantalla. Entonces el código está funcionando en este momento y está pasando por esta base de jugadores. Otros eventos que tenemos es algo llamado tick de evento. que puedas buscarlo aquí si haces clic derecho en el gráfico como te dije antes, puedes buscarlo aquí. Y si acabas de escribir evento, puedes ver todos los eventos que podemos aplicar a nuestro código. Por ejemplo, hit de evento, o si tu actor comienza a superponer algo, o si tu personaje ha saltado, quieres hacer algo. Quizás si empiezas a jugar el juego, esto es lo que tenemos en este momento. Y tal vez este llamado tick de evento, esto es lo que quiero mostrar en este momento. Éste es algo que nunca debes usar. Y siempre que lo uses, esto es probablemente porque tienes que usarlo en algún momento, pero trata de evitar esto, nunca lo uses en tu juego. Lo que quiero decir con eso es porque éste ejecuta tu código 60 veces por segundo. Entonces si hago clic en Control X para copiar esto y Control V para pegarlo aquí abajo. Si conecto esto aquí, por lo que el evento enfermo, puedes verla cuando hago click en Reproducir este lugar tantas veces y juega 60 veces por segundo. Por lo que se puede imaginar si tienes algún código que se está jugando 60 veces por segundo, tu juego se va a retrasar. Y si tienes varios de esos, tu juego le va a gustar más y los jugadores sentirán la pierna. Así que trata de nunca, nunca, nunca usar esto. Siempre hay una mejor solución que usar un evento seis. Voy a eliminar éste. Nunca lo uso en mis juegos. Y hay algunas veces en las que tienes que usarlo, Pero esto es siempre que tu juego es muy grande y te metes en una situación en la que en realidad no puedes hacer nada más que hacer esto. Pero yo diría un juego muy grande, úselo esto solo una vez. Así que nunca, nunca uses esto. Intenta eliminarlo. Ni siquiera pienses en esto, este evento. Y como puedes ver, hay muchas funciones que puedes agregar a tu juego. Tenemos tablas de datos, así que tenemos novio, tenemos capas y así sucesivamente. Por lo que muchas cosas que puedes agregar tu probablemente usaremos el 10% de todo esto. Así que ni siquiera te preocupes por todo esto, a pesar de que parezca abrumador. Nuevamente, si voy aquí y escribo cadena de impresión, hay otra función llamada delay. Para que pueda retrasar aquí. Si escribo retraso, entonces podemos retrasar dos segundos, por ejemplo. Y luego podemos imprimir otra cuerda. Y aquí lo voy a llamar terminado, algo así. Y puedes hacer click en esta flecha para que se reproduzca más tiempo. Por ejemplo, quiero reproducirlo durante diez segundos en mi pantalla. Quiero hacer el color rojo. Por lo que tienes algunas variables aquí que puedes cambiar. Y voy a compilar, recuerda hacer eso. Y luego puedes hacer clic en jugar en tu juego. Puedo decir que dice hola y después de dos segundos, va a decir terminado. Por lo que muy básico, esto es Blueprint. puede ver que es muy fácil trabajar con. Y una vez que aprendas lo básico, puedes crear unos juegos muy poderosos. Entonces ahora en la base de plantas, realidad eliminemos todo, compilemos y guardemos, y sigamos adelante. 23. Variables: Seguimos configurando el personaje. Hablemos de lo último que se llama variables. Y este es el principio principal en programación en planos y cualquier lenguaje que estés escribiendo. Entonces volvamos a la base del jugador y a la izquierda como viste antes, hay algo que se llama variables. Y quiero que pienses en variables como contenedores que contienen algún tipo de información. Pueden, por ejemplo, contener cuánto personaje más saludable tiene, qué tipo de arma está sosteniendo tu personaje , tu velocidad de movimiento, si tienes monedas suficientes para comprar un artículo en la tienda o no. Entonces un contenedor que contiene cuántas monedas tienes. Entonces las variables son contenedores que contienen información específica, sea cual sea la información que intentes almacenar. Y para crear una variable, hay que hacer click en este botón más. Y cuando creas una variable, tienes que darle un nombre. Y a la derecha, se puede ver todo el tipo de variables. Por ejemplo, crea un booleano. Y llamemos a este booleano tiene arma. Y por lo general empiezo mis booleanos con una b. Y esto es porque esto suele ser lo que se hace en C más plus. Y cuando arrastra esto, puedes arrastrarlo al gráfico. Y cuando lo sueltas, puedes optar por conseguir esta variable para configurarla en algo específico. Así que solo consigamos esta variable. Por lo que ahora tenemos esta variable y si compila, puedes ver aquí abajo en el panel Detalles, tienes algunos ajustes que puedes cambiar por ella. Puedes cambiar el tipo de variable, puedes cambiar el nombre que acabamos de decir. Puede agregar una descripción y replicación. Vamos a tocar eso más adelante. Esto es multijugador. Y ahora dice por favor compilar los planos. Y vamos a compilar aquí arriba. Y te va a mostrar cuál es el valor predeterminado. Lo que es un booleano, es algo que puede ser verdadero o falso. Entonces puede ser falso como este o puedo tomarlo y el valor predeterminado será verdadero. Por ejemplo, podemos comprobar si el jugador tiene el arma o no. Y tal vez podamos empezar por defecto a ser falsos. Por lo que el jugador no tiene el arma, pero más tarde cuando el jugador recoja el arma, ésta nos vamos a poner a verdad. De acuerdo, así que por ejemplo, tomemos un ejemplo aquí. Hagamos de nuevo el evento de inicio de juego. Entonces si sus derechos comienzan a jugar goteando aquí. Ahora, tomemos esto y podemos decir cadena de impresión. Ahora cuando imprimimos esta cadena, lo que puedes hacer en lugar de decir hola, puedes arrastrar esto y conectarlo aquí. Y te va a decir, voy a convertir esta variable booleana en una cadena, porque una cadena es en realidad una variable también. Se puede ver aquí hay una variable llamada cadena. Para que puedas arrastrar esto y va a convertirlo en una cadena, que simplemente significa en texto. Y voy a imprimir este texto a la pantalla. Por lo que ahora cuando enchufes la variable, ahora puedes hacer clic en play. Y va a decir falso, y este es el valor de lo booleano. Entonces más tarde, digamos después de cinco segundos. Entonces voy a hacer el nodo de retardo y hacer cinco segundos. Entonces después de cinco segundos, en realidad quiero decir que el personaje ha recogido el arma. Para que pueda arrastrar esto y luego decir set. Puedo conectarlo aquí y ponerlo en verdadero. Ahora, vamos, volvamos a hacer la cadena de impresión. Por lo que voy a hacer click en Control C, Control V aquí. Y voy a conectar mi variable ahora, el valor. Y va a imprimir eso a la pantalla, compilar y dar click en play. Entonces va a decir falso. Y después de cinco segundos, va a decir verdad aquí arriba, ¿de acuerdo? Entonces va a decir falso y luego va a decir verdad porque lo pusimos en verdad más adelante. Y así es como establecemos variables dinámicamente. Uno, el jugador más adelante entra en nuestra arma, vamos a establecer que tiene arma a verdad por ejemplo. Así que eliminemos todo esto por ahora. Entonces tenemos este booleano que puede ser verdadero o falso y se pueden revisar las cosas con él. Tienes los otros, tienes un sesgo, tienes un entero, un entero 64 y un flotador. Todo esto por nuestros valores numéricos. Entonces, por ejemplo, intentemos crear un entero. Vamos a arrastrarlo hacia fuera. Nuevamente. Haga clic en Obtener. En lugar de hacer clic en obtener y configurar todo el tiempo, puede hacer clic y arrastrar y mantener presionado Control en el teclado. Esto lo conseguirá automáticamente. También puedes mantener presionado Alt en el teclado y hacer clic y arrastrar, y esto lo configurará automáticamente. Entonces, en lugar de arrastrar y hacer clic en conseguir configurado, puedes sostener Control o Alt. ¿ De acuerdo? Entonces todos estos valores numéricos, por lo que el entero, entero 60 para el float, el byte, todos estos son valores numéricos. Y si compilo y hago clic en esto aquí, puede ver que es un número, necesita un número en éste, tal vez podríamos cambiar el nombre del mismo, haga clic en F2 para cambiar el nombre. Y éste podría decir cantidad de monedas. Entonces tal vez estamos recolectando monedas. Y voy a compilar dice por favor compilar el blueprint compilando. Y aquí se puede ver la cantidad de monedas. Entonces empezamos con 0, y mientras entramos en monedas, vamos a añadir monedas a esta variable. Por lo que tenemos algunos operadores. Y si haces clic y arrastra desde esto, realmente puedes guardar, por ejemplo, Plus. Y se puede ver podemos sumar monedas. Si escribirás menos, puedes restar monedas. Si escribes el letrero dividido, puedes ver que dice divide. También tenemos el multiplicar así. Entonces, por ejemplo, podemos decir plus así. Y en Maple Story puedes recoger las monedas. Creo que se llama micelas. Micelles, no estoy seguro. No estoy seguro de cómo se llama. Así que llamémoslo monedas. Y por ejemplo, puedo añadir, cada vez que entro en él, puedo añadir diez monedas como esta. Ahora si acabo de arrastrar desde aquí y escribir cadena de impresión, ahora puedo conectar esto a mi cadena de impresión, y va a convertir el entero a una cadena que es una variable de texto. Ahora va a imprimir diez. Así que permítanme simplemente hacer la duración mucho más aquí. Déjame hacer el color rojo. Esta compile save. Y cuando hago click en Play, se puede ver que dice diez aquí arriba porque tengo diez monedas. El entero. Muy cool. Puedes escribir números. Podemos utilizar estos operadores para modificar estas variables. Y otro tipo de variable es el flotador, muy importante, podemos decir por ejemplo, la salud de la capa. Esto es lo que podemos llamarlo. Podemos arrastrarlo, manteniendo el control, sacándolo automáticamente por aquí. Entonces si compinas ahora, lo bueno de nuestro flotador en comparación con un entero es que un flotador puede contener posiciones decimales. Entonces por ejemplo, puedo escribir 50.5 aquí. Y el valor predeterminado, en cuanto a las monedas, si trato de escribir un decimal lugares, por ejemplo, 50.5, va a convertirlo automáticamente a 50 porque no se puede escribir decimales dentro de un entero. Así que siempre que quieras un número con decimales, tienes que seleccionar un flotador. Este es el único, pero si quieres algo que sea un número completo sin decimales, puedes elegir un entero o algo que sea más grande y entero 64. En cuanto a la mordida, solo se puede establecer el número. Si cambio la variable aquí. En cuanto a la mordida, sólo se puede cambiar el número a un máximo de 255. Entonces para la salud del jugador ahora es un byte. Nuevamente, si escribo decimales, no lo va a aceptar. Es sólo el flotador el que acepta decimales. Y éste sólo puede contener el número 200 hasta 255. Entonces si escribo 256, va a cambiarlo a 255 para que pueda escribir cualquier número, las rodillas 255. Pero si escribo algo arriba, no lo va a aceptar. Para que puedas imaginar los usos de estos. Por ejemplo, si tengo una pantalla de selección de personajes y lo tengo, digamos que tengo tal vez 60 peinados y Maple Story, puedo usar la mordida. Pero si lo tengo, digamos el domingo tengo 600 peinados por alguna razón. Ya no puedo usar un bocado porque sólo puedo tener hasta 255 peinados. De acuerdo, Entonces estos son los valores numéricos y también tenemos otros valores. Tenemos el nombre, la cadena, el texto, y pedimos el nombre. Vamos a crear eso. Y si arrastro el nombre por aquí, se puede ver cada variable que creamos tienen diferentes colores. Entonces si solo creo variables aleatorias aquí arriba, y cambio ésta a una cadena, cambie ésta por un texto, whoops, textos. Y podemos arrastrarlos hacia fuera. Podemos, por ejemplo, llamar a este ID de logro. Podemos, podemos llamar al segundo nombre del servidor, y podemos llamar al último mensaje de chat. Vale, entonces la diferencia entre estas puedes intentar compilar y puedes ver cuando haces click en estas variables, sólo algunos textos que puedes escribir aquí. Lo mismo ocurre con el nombre del servidor y lo mismo va para el jugador. El jugador salud Ashley, tenemos que compilar. Ahora compilar esta es la equivocada. Voy a arrastrar éste en su lugar. Y se puede ver aquí este ID de logro, dice ninguno en este momento. Entonces todas ellas son variables de textos y se puede escribir algún tipo de textos por aquí. La diferencia entre esos es que siempre tienes que elegir esta variable de nombre siempre que tengas algún tipo de textos que nunca cambien en juego. Por ejemplo, identificación de logro. A lo mejor un logro que tengas se llama ID 273 o cualquier número aleatorio que tengas. Este ID, nunca tendrás la necesidad de cambiarlo en juego. Y aquí es donde puedes usar un nombre, porque lo que sea que escribas aquí. Nunca se puede modificar en el juego, pero este no es el caso con el nombre del servidor. Entonces, por ejemplo, si escribo Maple Story, mejor servidor, únete ahora, o algo así. Ahora bien este texto que escribo aquí, usted es capaz de modificarlo. Por ejemplo a y ejemplo te puedo dar es un nombre de servidor. Entonces si el jugador escribe esto como el nombre del servidor, en realidad podemos modificar el texto que el jugador derechos aquí. Si arrastra desde esta variable de cadena, y si solo escribes string, puedes ver todas las funciones que puedes usar con una cadena. Si se desplaza hacia arriba, puede ver que esta es la categoría llamada cadena. Y aquí tienes todas las funciones que puedes usar con esta cadena. Entonces, por ejemplo, puedes comprobar si el texto escrito aquí está vacío. Entonces si la variable está vacía, y si está vacía, se puede ver la roja. Recuerda que en realidad es un booleano, por lo que puede ser verdadero o falso. Entonces, por ejemplo, si el nombre del servidor está vacío, le vas a dar un error al jugador diciéndole que escriba un nombre de servidor porque no se puede crear un nombre de servidor vacío. Podemos arrastrar de nuevo, podemos escribir cadena y podemos volver a comprobarlo. Por ejemplo, puede hacer que todos los caracteres en minúsculas o en mayúsculas. O incluso puedes dividir el texto. Y tal vez algunos. Para lo que lo uso es si el jugador escribe una mala palabra, por ejemplo, el interior, y no quiero que el jugador escriba eso en el nombre del jugador. Puedo arrastrar aquí. Y puedo decir encontrar. Hay algo aquí en esta cadena llamada find substring. Y puedo escribir al interior. Realmente no quiero hacer eso aquí en el video. Y va a encontrar esa palabra dentro del servidor del jugador. Entonces, lo que sea que el jugador haya escrito aquí, va a encontrar esa palabra. Y si lo hace, se puede hacer algo con él. Y en ese caso podemos usar el que se llama reemplazar. Para que podamos reemplazar también, solo podemos hacer eso en su lugar, encontrar la subcadena. También podemos hacer eso. Entonces reemplazando el interior con algo más y solo puedes dejarlo vacío y se mostrará que lo reemplaza con nada, lo que significa que borra la palabra y no pone nada dentro de aquí. Cosas muy chulas. modificar las variables de cadena como desees, pero no puedes hacer eso aquí. Si arrastra de esto y sabías el nombre correcto, puedes ver en el nombre no tienes mucho que puedas hacer. Para que no tengas el está vacío, no tienes el reemplazo. Por lo que sólo se pueden modificar cadenas y no la variable de nombre. Lo último que tienes es el texto y el texto. Lo único que quiero decir de esto de manera diferente a la cadena es que, uh, textos que puedes localizar, para que puedas traducirlo a diferentes idiomas. Digamos que quieres traducir tu juego al alemán o japonés o chino. Sea cual sea el texto que quieras traducir, tienes que usar una variable de texto, lo que sea que escribas en una variable de cadena. Esto no se puede traducir más adelante en el juego. Entonces, antes de empezar a hacer tu juego, piensa, ¿quiero traducir mi juego al alemán? ¿ Cuando haya terminado? Si quiero, sea cual sea el texto que quieras traducir, tienes que escribirlo en una variable de texto. En cuanto al nombre del servidor, no creo que necesitemos traducir el nombre del servidor. Por ejemplo, digamos que hemos terminado nuestro juego. Realmente no tiene sentido traducir un nombre de servidor. Esto es justo lo que, sea cual sea el derecho del jugador. Pero en cuanto a un mensaje de chat, digamos, por ejemplo, alguien dice, hola, ¿cómo estás? ¿ O tal vez un NPC diciendo eso? Y ahora queremos traducir este mensaje al japonés porque alguien de Japón necesita ver lo que esto significa. Entonces vamos a cambiar esto a japonés. Pero si escribes esto aquí, dentro de aquí, no puedes traducirlo. Tienes que escribirlo en una variable de texto. Y entonces usted podría preguntar, ¿por qué no sólo estamos usando esto todo el tiempo? ¿ Por qué incluso tenemos que usar esto o esto? Y esto es para la optimización. El nombre usa menos memoria y luego viene la cadena. Y el que es más caro es el texto. Por supuesto que no va a afectar nada si solo usas uno o dos en tu juego. Pero si tienes un juego grande llevas trabajando durante tres años y solo lo usas todo el tiempo. Por supuesto que va a afectar tu juego. Entonces éste utiliza la menor cantidad de memoria. Así que siempre trata de ir con esto. Si tienes textos que nunca cambian, por ejemplo, un ID de logro, pero usa una cadena después de eso. Y por ejemplo, también puedes usarlo para un nombre de jugador. Porque el nombre del jugador, nuevo, hay que modificar el nombre. Si escriben una mala palabra, hay que verificarla a su nombre. Y como última cosa, si quieres que tu juego sea traducido y tienes algunos textos que necesitan ser traducidos, entonces tienes que escribirlo, escribirlo en una variable de texto. Muy bien, basta con eso. Eliminemos esto por ahora. Y de nuevo, se pueden crear más variables de valor. Y los últimos que tenemos son el vector, el rotador y la transformación. Podemos usar esto más adelante en el proyecto. No voy a cubrir esto por ahora, sino para el vector, muy, muy simple si solo lo creas en este momento y pincha en compilar. puede ver que viene con tres números. Y por lo general para lo que usamos un vector, generalmente lo usamos aquí. Si hace clic en algo aquí, se puede ver en la ubicación que generalmente usamos un vector para cambiar o comprobar si hay una ubicación porque la ubicación tiene tres números. Y generalmente usamos vectores para eso porque tiene tres números. Por ejemplo, podemos establecer la ubicación de los personajes cada vez que toman un portal, podemos configurarlo en una ubicación específica. Lo mismo ocurre con el rotador. Si cambio esto a un rotador, tiene tres valores, igual que aquí en el panel Detalles. Siempre que hago clic en algo, tienen una rotación. Por lo que este es un rotador y se puede configurar u obtener una rotación. Y como última cosa tienes una transformación. Y esto se usa siempre que estás desovando cosas en el mundo. Entonces, por ejemplo, estás desova al personaje en el mapa. Entonces hay que establecer la ubicación de los caracteres donde desea engendrar el personaje, qué rotación debe tener ese carácter, y la escala que debe tener el personaje. De acuerdo, por lo que estas fueron las variables más importantes y voy a eliminar todas ellas. Vamos a crear más variables personalizadas. Y quiero cubrir estos muy básicos para empezar, porque esto te lo hará muy fácil más adelante. Entonces voy a eliminar todo aquí. Vamos a compilar. Ahora. Pasemos a configurar el personaje y aprenderás todo esto paso a paso durante este curso. 24. Cómo configurar el personaje: Para configurar nuestro personaje, volvamos primero a nuestra carpeta Blueprints y configuremos Serena. Entonces en lugar de jugador, hicimos esta clase de plano llamada Tsarina. Este era un personaje de papel y esto era un hijo de base jugador. Aquí para BP Tsarina, tenemos que sumar esos activos. Recuerda, hicimos esos flip books y podemos agregarlos a nuestra clase de planos. Entonces volviendo a la carpeta del reproductor aquí, haciendo clic en Serena, cuando esto se abre, esto es porque está vacío. Por lo que es, el panel Detalles está llenando toda la pantalla por lo que hay que hacer click en Abrir todo editor de Blueprint. Y estamos dentro de aquí. Se puede ver que realmente no necesitamos codificar nada en este momento, así que voy a la ventana gráfica. Aquí. Aparecerá el libro flip book de Serena. Una vez que lo añadas. Agregas los flip books aquí a la izquierda. Se puede ver que tenemos un sprite y en realidad podemos agregar el libro flip book de Serena dentro de aquí. También tenemos movimiento de personajes donde podremos controlar el movimiento más adelante cuando agreguemos movimiento. Entonces vamos a hacer click en el sprite y aquí en el flip book, hay dos formas de agregar un flip book. Puede hacer clic aquí y seleccionarlo. Esta sería la forma más fácil en este momento. O si minimizas esto un poco y lo haces un poco más grande. También puedes ir a tu carpeta de activos, y también puedes hacer clic y arrastrar y ver que destaca esto por ti y puedes agregarlo a esa ranura. Por lo que depende de ti si quieres agregarlo de esta manera o de esta manera. Puedo ver tenemos nuestro flip book agregado y esto ya funcionará. Entonces si solo lo pruebes aquí, si solo haces clic en Compile and Save. Y de nuevo, se asegura de que no cometas un error aquí en la configuración del proyecto. Al igual que antes cuando agregamos el modo de juego. Aquí. Recuerda que también tenías la clase **** predeterminada a Serena porque esto es lo que estamos probando en este momento, solo para asegurarte de que has seguido esa lección. De acuerdo, así que ahora tienes que agregar un inicio de jugador de nuevo para desovar. Por lo que tienes esta arena también puedes comprobarlo aquí en la configuración mundial para revisar la Clase de Peón Predeterminado para asegurarte de que sea Tsarina. Y también que tengas un jugador empieza aquí en el nivel. Por lo que al hacer clic en Jugar ahora, puede ver que estamos desovando dentro del nivel, pero aún podemos ver al personaje, pero el personaje en realidad está ahí. Y esto es porque no conoce la vista que quieres porque no has agregado una cámara. Volvamos a Tsarina aquí. Y sobre este brillante, se puede hacer click sobre él aquí y en realidad hacer clic en la cápsula. No queremos colocar la cámara encima de aquí. Por lo que da clic en la cápsula y da clic en Agregar. Y primero que queremos sumar es algo que se llama primavera en un resorte sobre él aquí. Se puede imaginar esto como el soporte para la cámara, por lo que está sosteniendo la cámara. Podemos el brazo de resorte y luego de nuevo hacer clic en Agregar y dar click en una cámara. Entonces aquí, cámara. Por lo que tenemos este brazo ardiente y la cámara está dentro de este brazo de resorte. Entonces es un niño del brazo de primavera. Y se puede ver que la cámara está un poco equivocada, girada. Actualmente estamos viendo al personaje así. Entonces tenemos que rotar la cámara. Y recuerda, muchas personas cometen un error haciendo clic aquí y rotando la cámara presionando E en el teclado. Se puede ver que tiene estas diferentes herramientas. Nuevamente, al igual que lo tenías en la ventosa. Muchas personas cometen el error de rotar la cámara aquí, pero en realidad hay que girar el brazo de resorte. Por lo que al hacer clic en el brazo de resorte y girar, girando la z para que la cámara esté delante de él, por lo menos 90 grados. Así como esto. Y vamos a compilar y ahorrar. Puedes hacer click en Jugar ahora y ver qué pasa. Por lo que haciendo click en Play. Ahora podemos ver, se puede ver el personaje. Entonces la cámara está funcionando, pero los ajustes predeterminados están equivocados, por lo que tenemos que editarlos. Muy bien, así que terminemos todo esto arriba. Entonces lo que hay que hacer es hacer clic en el brazo de resorte aquí en la cámara y en realidad hay que cambiar la cámara a perspectiva. Entonces, lo que hay que hacer aquí en la cámara, hay que cambiar esto a vista ortográfica porque no estamos trabajando con 3D. Estamos trabajando con 2D. Por lo que haciendo clic en la vista ortográfica. Y aquí por el ancho orto, puedes cambiar lo cerca que estás de la cámara. Entonces cuanto menor sea, menor es el número, más cerca estás del personaje. Se puede ver que esto es muy enorme ahora. Y cuanto más grande sea, más lejos estarás del personaje. Para que puedas ver aquí, si acabas probar en gran número aleatorio, te saldrás más lejos. Entonces, ¿qué quieres hacer aquí? Lo probé en Maple Story, lo toqué y probé la longitud de la cámara y se trata de 1304. Nuevamente, esto es algo que miré y cuando probé Maple Story, así que tal vez sea 201,250, tal vez sea 1300. No puedo decir eso seguro en el juego real, pero parece que está alrededor de 1304. Traté de jugar el juego un par de veces y probando la cámara. Y a continuación lo que queremos hacer es hacer clic en el brazo de resorte y desactivar este llamado do pruebas de colisión porque va a hacer errores a la cámara. Entonces quitando eso, haciendo clic en compilar, haciendo clic en Guardar. Ahora, al hacer clic en Play, se puede ver que este es el personaje. Y si lo recuerdas, podemos hacer click en FL1 para maximizar la ventana gráfica. Así es como se ve. En este momento. El jugador no está comenzando en el arranque del jugador y podría tener algo que ver con nuestra colisión. Entonces si volvemos aquí en Serena, tenemos esta cápsula aquí se puede ver esta cápsula y esta es la cápsula de colisión, este componente de cápsula. Entonces tenemos que hacer esto más pequeño para que se ajuste a nuestro personaje. De lo contrario chocará con los azulejos y no funcionará correctamente. Para que puedas cambiar esta cápsula media altura y puede cambiar el radio para adaptarse más a nuestro personaje. Voy a anotar 16 aquí abajo. Y el radio de la cápsula, voy a escribir 33 años. Por lo que es un poco más pequeño y se adapta más a nuestro personaje. Ahora haga clic en Compile and Save. Veamos si ese fue el problema. Por lo que estoy haciendo click en Jugar ahora. Y era el problema, estaba chocando con esto. Puedes ver aquí tenemos datos de colisión aquí arriba, tenemos datos de colisión aquí arriba. Cápsula es demasiado grande, está chocando con estos dos aquí. Y lo está molestando. Por lo que hace que empiece aquí en la parte superior en su lugar. Pero ahora que hemos arreglado nuestra cápsula de colisión, del tamaño de la misma, al menos, ahora podemos hacer click en play y se puede ver que el personaje está aquí. Ahora el pequeño problema que tenemos en este momento, se puede ver los pies del personaje está detrás la hierba y queremos tener los pies frente a la hierba. Esta es una solución muy fácil. Recuerda, tenemos nuestros azulejos aquí a las 000, porque cuando miras aquí arriba, y otra vez, también puedes solo un buen truco. Puede hacer clic en esta herramienta de ajuste. Y se puede aumentar el número. Y al aumentar el número a algo así como, digamos 100. Se puede ver aquí la línea media que me interesa, esta línea muy media. Se puede ver la médula y pasa por los azulejos. Entonces esta segunda capa que tenemos, que hicimos antes, y la segunda capa, recuerda que tenemos un primer plano. Estos fueron el primer plano. Y la zona media que tenemos a ceros, ceros 0 es nuestros azulejos. Y en este momento, nuestro desove, nuestros jugadores empiezan tiene la ubicación de 0 en la y, pero sólo tenemos que empujarlo un poco más adelante para que el personaje no esté detrás de la hierba. Entonces lo que voy a hacer es que sólo voy a hacer esto abajo. Sólo voy a escribir uno aquí en el y porque 0 está básicamente en el nivel de esos títulos. Pero si escribes uno, técnicamente estamos frente a esos azulejos. Entonces si solo escribes uno para el lugar punto en la Y, y puedes hacer click en Play. Ya puedes ver que estás frente a la hierba. Por lo que ahora que hemos configurado a nuestro personaje, pasemos al movimiento del jugador. 25. Movimiento básico de jugadores: Vamos a crear ahora el movimiento básico del jugador. Así que volvamos a la carpeta Blueprints dentro de player. Y recuerda lo que dije antes sobre los planos infantiles y los planos de los padres. Entonces la mejor manera de hacerlo es codificar ese movimiento dentro de la base del jugador porque si sostienes el ratón sobre esto, puedes ver que la clase padre de Tsarina es el jugador, y la clase de padres para Luke es la base del jugador. Entonces si recubrimos el movimiento dentro de la base del jugador, Serena y look heredarán ese código porque son planos infantiles de esta base de jugadores. De acuerdo, así que vamos dentro de la base del jugador, codificar el movimiento. Por lo que pinchando aquí. Ahora vamos a abrir el editor completo del blueprint. Y ahora estamos dentro de este gráfico de eventos. Y nuevamente, puede hacer clic con el botón derecho, mantener presionado, hacer clic derecho para navegar alrededor. Ahora para codificar esto, empecemos con el muy básico, y se llama agregar entrada de movimiento. Esta es la que siempre estarás usando en cada proyecto si quieres agregar movimiento. Así que haz clic con el botón derecho y puedes buscar movimiento. Esto es algo que es realmente útil a veces cuando codifico y no sé cómo se llama la función. Y también lo hice cuando era principiante. Sólo estoy pensando en qué quiero hacer? A lo mejor quiero hacer algo con ubicación, así que solo hago clic derecho y busco ubicación. Entonces trato de descrejarme por ahí. A veces lleva mucho tiempo descremarse esto. Pero entonces lo encuentro. Por ejemplo, quería conseguir esta ubicación de actores y quiero usar esta información para algo. Y esto es lo que puedes hacer cuando eres principiante. Realmente no tienes que saber cómo se llaman todos estos. Puedes intentar buscar lo que estás tratando de hacer. Entonces, por ejemplo, puede resolver búsqueda de rotación si estás tratando de hacer algo con la rotación. Por lo que en este momento estamos tratando de sumar movimiento. Entonces buscando movimiento, siempre se puede tratar de desnatar, sé cómo se llama, pero quería ver si lo puedo encontrar ahora, el movimiento es un poco difícil de encontrar aquí. Como entrada de movimiento, esto es lo que estamos tratando de encontrar. Por lo que haciendo click en Agregar aquí, agrega entrada de movimiento. Ahora recuerda lo que dije antes. No puedes ejecutar funciones si no tienes un evento. Y queremos que el evento sea las teclas del teclado. Y luego quieres ir a editar aquí y la configuración del proyecto. Y dentro de la configuración de proyectos, tienes esta llamada entradas, y aquí es donde agregas tus teclas de teclado. Por lo que haciendo clic en las entradas. Aquí en el mapeo de acceso, también tienes éste llamado Action Mapping. La diferencia entre el mapeo de acciones y el mapeo de acceso es, se puede pensar que el mapeo de ejes es continuo. Un clic continuo, un movimiento continuo. Por lo que todos los movimientos estarán aquí abajo. Y por ejemplo, haciendo clic en W para avanzar, haciendo clic en D para moverse hacia la derecha y así sucesivamente. Usted tiene, esos son mappings de acceso. No obstante, si solo quieres un evento con un solo clic, por ejemplo, presionas la barra espaciadora para saltar, o presionas el botón del ratón para disparar tu arma. Se trata de mapeos de acción, movimientos, son asignaciones de acceso, y eventos con un solo clic. Están arriba en los Mappings de Acción. Aquí siempre suman los movimientos a las asignaciones de acceso. Por lo que queremos sumar, por ejemplo, mover a la derecha y a la izquierda. Entonces como se trata de un juego 2D, nos estamos moviendo a la derecha y a la izquierda en este juego de plataformas. Y aquí abajo tienes que asignar claves a lo que quieras usar para moverte a derecha e izquierda. Ya sea puede hacer click aquí y click aquí y encontrar la clave. Pero otro método útil es hacer clic en este botón y luego hacer clic en la tecla de tu teclado. Por lo que voy a hacer clic en D en mi teclado. Esto moverá al personaje hacia la derecha, y voy a hacer click en este botón plus, mirando este teclado y haciendo clic en una en mi teclado para moverme a la izquierda. Y hay que establecer la escala a menos una para la izquierda. Para que puedas pensar en ello como dos direcciones diferentes. Entonces es más uno cuando te mueves a la derecha y es menos uno cuando te mueves a la izquierda, igual que un gráfico con eje x e y. Muy bien, así que vamos a cerrar la configuración del proyecto y volvamos aquí. Ahora, cuando haya agregado el mapeo de ejes allí, ahora puede hacer clic derecho aquí y escribir el mismo nombre que lo ha llamado en la Configuración del Proyecto. Por lo que lo llamo mover a la derecha y a la izquierda. Y se puede ver aquí, puedo ver los eventos del eje. Por lo que desea agregar este llamado Eventos de Acceso, no los valores del eje. Y se pueden ver los eventos siempre tienen este ícono también. Para que pueda hacer clic en él. Nuevamente. Los eventos siempre se marcan como leídos. Para que sepas que esto es un evento. Ahora puedes conectarlo a la entrada de movimiento aquí. Lo siguiente que hay que aprender sobre las funciones es ese objetivo. Son muy importantes. Y se puede ver aquí dice aquí arriba, el objetivo es ****. Por lo que quiere sumar movimiento a un peón. Y recuerda nuestro carácter. Estamos dentro del personaje aquí, la base del jugador. Y este plano que hicimos, es un personaje, es un personaje de papel. Y al igual que antes de lo que dije aquí en la Clase Blueprint, un personaje es un tipo de estanques. Por lo que en realidad es un tipo de teléfono. Uno va a crear un personaje que ya tenemos el objetivo correcto. Se puede ver que dice auto. Yo significa este plano. Ya estás dentro, así que estás tratando de agregar movimiento al plano en el que ya estamos, para que eso sea correcto. Y en cuanto a la dirección a la que queremos agregar movimiento, puedes hacer clic aquí y decir Obtener rotación de control. Entonces estamos tratando de conseguir la rotación de nuestro controlador. Y entonces podemos decir sacar adelante vector. Y ahora podemos conectarlo aquí con la dirección mundial. Entonces estamos tratando de conseguir la dirección de avance de nuestro controlador. Ahora en cuanto al valor de escala, puede conectarlo aquí este valor de eje. Y ahora tienes el movimiento. Entonces vamos a compilar y ahorrar, e intentemos movernos. Por lo que haciendo click en Jugar ahora, voy a la persona D para moverme a la derecha y dar click en la edad y pasar a la izquierda. Para que puedan ver tenemos el movimiento arrodillarse ahora. 26. Salto del jugador: Ahora vamos a sumar el salto para los jugadores. Así que pinchando de nuevo aquí en la base del jugador. Y recuerda que necesitamos un evento. Entonces volviendo a la configuración de edición y proyecto dentro de aquí en entradas. Ahora, ya que el salto es un evento con un solo clic, vamos a agregarlo aquí en el mapeo de acción. Recuerda que son solo movimientos los que agregamos en Mappings de Acceso. Aquí, haciendo clic en el plus para el mapeo de acción. Vamos a añadirlo aquí. Vamos a llamarlo salto. Y voy a agregarle aquí mi barra espaciadora. Puedes añadir otro botón si quieres. Voy a cerrarlo. Y ahora podemos hacer clic derecho y decir salto. Y aquí lo puedes ver aquí abajo en los Eventos de Acción diciendo saltos. Por lo que pincha aquí, y ahora tenemos nuestros eventos. A continuación, ya tienes una función incorporada dentro de Unreal Engine llamada saltos. Para que puedas arrastrar desde esta pluma de ejecución y escribir salto, y ya tienes esta función llamada saltos. Por lo que pinchando sobre él. Ahora, compilar save. Y puedes hacer click en play. Y se puede ver cuando presiono en el espacio, usted está saltando. Obviamente, tenemos que sumar la animación Slater, y también tenemos que editar los movimientos. Entonces, cuánto estamos saltando y cuál es la gravedad, qué es eso para después. Así que volvamos ahora y quiero mostrarte algo para la optimización. Por lo que voy a añadir aquí una cadena de impresión. Por lo que va a decir Hola cada vez que hago clic en saltar, si hago clic en Jugar ahora y hago clic en el espacio, se puede ver a la parte superior izquierda, está diciendo Hola cada vez que hago clic en el espacio, ahora estoy haciendo clic en espacio todo en todo lo que puedo ahora. Y te puedes ver. Puedo hacer click en el espacio y saltar a pesar de que estoy en el aire. Y no quiero hacer eso por el bien de la optimización. No quiero ejecutar el código todo el tiempo. Solo quiero ejecutar el código una vez. Y cuando aterrizo en el suelo, permito que el jugador vuelva a saltar. Porque si permito que el jugador presione en el espacio todo el tiempo, se puede ver que podemos pasar el código. Esto no está realmente optimizado, así que solo quiero que el jugador ejecute solo este código siempre que el jugador pueda, cuando el jugador esté bajo tierra. Y tenemos algo que se llama está cayendo. Entonces, si tomas este Componente de Movimiento de Caracteres, puedes hacer clic y arrastrarlo a este gráfico de eventos. Y se puede ver que esto también es una variable. Recuerda antes de aprender esas variables muy básicas. Pero ésta es en realidad también una variable si la arrastra aquí. Por lo que ahora podemos hacer algo con el componente de personaje. Se puede arrastrar fuera de ella y se puede decir que está cayendo. Y ahora podemos comprobar si esto está comprobando si el jugador está en el aire. Y recuerda que el bolígrafo rojo aquí es un booleano. Para que puedas arrastrar desde este booleano y puedes hacer click en b, y puede hacer que éste se llame rama. Una sucursal es, solo está comprobando si este valor es verdadero o falso y se puede hacer algo con él. Así que ahora estás diciendo que estás tomando el movimiento de personajes, estás comprobando si el jugador está cayendo y si es cierto, sí, el jugador está cayendo. No queremos saltar porque el jugador ya está en el aire. Pero sin embargo, si el jugador ya no está cayendo, así que está revisando, ¿está cayendo el jugador? Dice que no, el jugador no está cayendo. De acuerdo, entonces se te permite saltar porque estás en el suelo. Por lo que ahora se puede ver si compilo y hago clic en play en realidad vamos a añadir una cadena de impresión aquí arriba para que puedan ver que el jugador está cayendo y realmente no podemos saltar. En realidad, eso es aquí abajo. Ese es un mejor ejemplo. Por lo que sólo va a saludar dondequiera que saltamos. Así que vamos a hacer clic en salto. Ahora. Haga clic en el espacio. Ya ves que no puedo gastar mi espacio. Sólo puedo ejecutar el código cada vez que estoy en el suelo. Entonces esto está optimizado. Así que ahora ese código está optimizado y el jugador no puede ejecutar el código todo el tiempo. No obstante, para facilitarme la lectura, puedo eliminar esto y puedo desconectarme sosteniendo Alt y haciendo clic en este pin de ejecución. Ahora, en lugar de hacerlo aquí, quiero tenerlo a la verdad porque puedo leerla mejor si tengo esta función establecida a true. Pero ahora tenemos que hacer otro booleano aquí. Entonces ahora está diciendo, ¿está cayendo el personaje? Lo que queremos decir si lo enganchamos a lo verdadero, ¿no está cayendo el personaje? Si eso es cierto, entonces el personaje no está cayendo, los personajes en el suelo. Podemos saltar para hacer esto sólo para hacer esto lo contrario. Podemos arrastrar aquí y decir nueces. Y se puede ver no éste no igual, tenemos que usar éste NO booleano. Y lo que esto está diciendo es, si el jugador se está volviendo locos cayendo, si eso es cierto, entonces adelante y usted es capaz de saltar. Y creo que esto es mucho más fácil leer que tener esto a falso. Muy bien, entonces lo último que quiero enseñarte es una creación de funciones. Entonces antes de que puedas ver, tenemos muchas funciones que podemos añadir que son prefabricadas, pero también puedes hacer tus propias funciones. Y quiero hacer de éste una función y puedes acortar ésta. Y por lo general hacemos esto para limpiar el código. Puedes hacer clic derecho aquí. Y se puede decir colapso para funcionar. Entonces lo hará, en lugar de que vayas aquí y creando la función, en realidad la creará para ti. Entonces seleccionando todos estos tres, haciendo clic derecho y diciendo colapso para funcionar. Ahora se puede ver que hizo una función y por lo general escribo F como prefijo para funciones. Llamemos a éste. No es saltar. Entonces esto es lo que es. Está comprobando si estás saltando. Solo está diciendo que ahora puedes hacer doble clic. Por cierto, tal vez lo hice demasiado rápido. Puedes hacer doble clic en esta función creada. Y ahora se puede ver la función aquí. Empieza. Voy a arrastrar esto aquí para que esté más organizado así. Entonces esta es la función. Comienza aquí, termina aquí, y da un valor de retorno. Y el valor de retorno, si vuelves al Gráfico de Eventos, saldrá aquí. Este es el valor que se está revisando aquí. Entonces esto es un poco más organizado. Estás ocultando este código dentro de esta función y solo aparecerá esta función. Ahora recuerda, hay que agregarlos a la pluma de ejecución porque en blueprint, realmente no puedes hacer así porque tienes desconectado, una función desconectada y esto lo hará nunca correr si lo tienes así. Entonces la mejor manera sería hacerlo como aquí y luego ejecutarlo a través del código. No obstante, puedes hacer esto un poco mejor. Sé que te he dado mucha información dentro de este video, pero quiero enseñarte el mejor método de codificación. Aquí creaste ahora esta función, y se está ejecutando correctamente a través del código. Para que puedas ver si hago clic en Play, nada está realmente mal con mi código. Puedo saltar y está funcionando perfectamente. Pero realmente no tienes que conectarlo a los pines de ejecución aquí. Porque por lo general en estas funciones azules, se puede ver que tenemos funciones verdes y tenemos funciones azules. Las funciones verdes solo te dan alguna información que puedes usar para algo. Por ejemplo, aquí tenemos la rotación de control. Conseguimos el vector delantero, por lo que la dirección hacia adelante. Y luego estamos obteniendo esta información y estamos utilizando como nuestra dirección mundial. Por lo que las funciones verdes se utilizan para obtener información. Y sin embargo, las funciones azules se utilizan para establecer información. Por lo que hemos establecido funciones y tenemos funciones get. Por ejemplo, la función de salto está configurando el salto. Y aquí realmente no estamos vendiendo nada. Entonces si haces clic en esta función que hicimos, realmente no es vender nada, solo se está consiguiendo si el jugador se está cayendo o no. Por lo que está recibiendo información. Entonces no tiene sentido tenerlo siendo luz azul aquí y puedes cambiarlo. Por lo que podemos hacer click en esta función y puedes hacer click en ésta llamada pura. Así que hacer clic en puro solo significa que estoy obteniendo información de esta función. Realmente no necesito configurarlo. No estoy configurando ninguna información, solo la estoy consiguiendo. El jugador está cayendo o no. Entonces volviendo al gráfico aquí, ahora, puedes conectarlo de nuevo así y puedes ver que está más optimizado. Ahora. Sólo te estás obteniendo si el jugador se está cayendo o se tuerce, y si el jugador no está cayendo, si eso es cierto, eres capaz de saltar. 27. Animaciones de movimiento de jugadores: Ahora estamos listos para sumar las animaciones de movimiento para el personaje. Espero que estén plenamente despiertos porque tengo mucho que enseñarles en esta lección. Entonces si volvemos a nuestro jugador y dentro de la base del jugador. Por lo que queremos sumar aquí las animaciones, por lo que estamos agregando el movimiento, pero también queremos sumar la animación. Pero ahora se está volviendo un poco más complejo, pero porque ahora estamos consiguiendo un multijugador real. Si minimizo esto primero antes de hacer nada, quiero enseñarte sobre enumeraciones, hagamos clic derecho aquí y hagamos una nueva carpeta llamada enums para enumeraciones. Puedes ir dentro de esta carpeta, puedes hacer clic derecho aquí y blueprints, puedes crear esta llamada enumeración. La enumeración es, es sólo una lista de cualquier cosa. Entonces si solo lo haces y puedo mostrarte, normalmente empiezo enumeraciones, prefijos escribiendo E, y llamémoslo movimiento Estados. Estamos creando una lista de movimientos estados. Entonces una enumeración es sólo una lista de cualquier cosa. Puedes hacer click en este botón aquí arriba. Puedes ver cada vez que haces clic en ella, agregas una lista o agregas un elemento a esa lista. Entonces una enumeración es sólo una lista de lo que quieras hacer una lista de. Por ejemplo, comestibles. Puedes escribir tu Apple, naranjas o pepino o lo que quieras escribir. Puedes escribir autos, por ejemplo, una lista de autos. Puedes escribirlas aquí y tal vez los modelos de los autos. Se puede escribir una lista de armas y una lista de cualquier cosa. Voy a listar de artículos. Pero por este bien, estamos escribiendo una lista de los estados de running o movimientos aquí más bien. El primero que voy a llamar inactivo. Entonces tenemos una animación ociosa, y luego tenemos una animación de derechos de carrera. Tenemos una animación de carrera a la izquierda, y luego tenemos una animación de salto. Y también tenemos una animación de otoño. Y en realidad no tenemos realmente una emisión caída porque solo hicimos, volvamos al Carácter de Activos. Hicimos una animación ociosa, una animación de corrida. A pesar de que se llama correr, ambos hemos corrido a la derecha y alrededor de la izquierda. Y luego tenemos aquí la animación de salto. Pero realmente no tenemos una animación de otoño. Pero en Maple Story, la animación completa es la misma que el salto. Por lo que sólo vamos a usar este salto como nuestra animación completa también. Así que vamos a hacer clic en guardar todo. Ahora hemos hecho nuestra enumeración, hemos hecho la lista. Ahora volvamos a la base de jugadores. Ahora aquí puedes agregar la enumeración. Entonces si se crea una variable y llamémosla movimiento Estados. Y puedes cambiar la variable aquí. Y para encontrar tu variable personalizada, puedes llamarla como llamaste , el archivo de enumeración. Entonces e como prefijo y puedes escribir movimientos, fecha, y puedes ver, puedes ver tu enumeración aquí. Por lo general son de este color verde oscuro. Entonces este movimientos E afirman esta es nuestra enumeración, haciendo clic en ella, y ahora es una variable que puedes compilar. Si quieres ver cómo se ve, siempre puedes sacarlo aquí y hacer click en, Consigue esto como conseguir la información. Puedes mirar aquí, click en set y puedes ver que puedes configurarlo en todos estos diferentes elementos de lista que has establecido aquí en la lista. Entonces si agregas una cosa más y haces clic en Guardar, puedes ver aquí esta cosa nueva en realidad necesito compilar aquí, Compile y Save. Ahora puedo hacer click en él y se puede ver el nuevo elemento de lista que se ha agregado. Entonces así es como se agregan cosas a la izquierda. También puedes eliminarlo aquí. Podemos ahorrar, de nuevo, Compile y Save. Y ahora se puede ver esta es la lista que tenemos. ¿De acuerdo? Entonces básicamente lo que queremos hacer es tomar este valor de eje. Ahora déjame imprimirlo en la pantalla para que pueda mostrarte lo que está pasando. Así que ahora vamos a imprimir. Si arrastra este valor de eje y se conecta a la cadena de impresión. Ahora va a imprimir este valor de eje cada vez que se ejecute. Entonces si haces clic en play y corres, puedes ver que es uno cuando me mudé a la derecha y es menos uno cuando me muevo a la izquierda, recuerda que esto es lo que escribimos dentro de la configuración del proyecto y la insumos. Uno para moverse a la derecha. Sólo quiero moverme a la izquierda y cuando estemos quietos, es 0. ¿De acuerdo? Pero esta información que tenemos ahora, nos estamos volviendo mucho más astutos ahora. Entonces cuando lo es, cuando esto es igual a 0, estás parado quieto, estás inactivo. Entonces sacando esto y escribiendo el signo igual, o puedes escribir igual si quieres. Puedes conseguir que este operador aquí diga igual. Entonces si este número es igual a 0, y puedo arrastrar aquí de nuevo y escribir b o una rama. Si este número es igual a 0, si eso es cierto, ¿qué queremos hacer? Y en última instancia lo que queremos hacer. Queremos establecer este elemento de lista en inactivo porque ahora sabemos que el jugador está ralentí porque el jugador está parado, el valor del eje es igual a 0. Pero si no es igual a 0, esto significa que te estás moviendo. Sí, te estás moviendo. Pero si acabo de copiar pegue este control C control V. ¿Te estás moviendo a la derecha o te estás moviendo a la izquierda? Por lo que esto, también tenemos que comprobar. Entonces, por ejemplo, se puede arrastrar desde este valor eje y se puede decir, el signo mayor como este, ¿es esto mayor? Para que puedas elegir éste. Es este valor eje, ¿es mayor que 0? Y podemos arrastrar este año, yo sería para la sucursal. Y whoops, se alejó. No sé qué está pasando así. Entonces si este valor x es mayor que 0, esto significa que nos estamos moviendo hacia la derecha. Entonces conectemos éste desde lo falso. Entonces ahora lo que estamos diciendo es este valor x igual a 0. Si lo es, entonces está inactivo. Si no lo hace, adelante y revisa éste, entonces aquí abajo, lo que estamos comprobando es, es el exceso de valor mayor que 0. Si es mayor que 0, entonces te estás moviendo hacia la derecha. No obstante, si te estás moviendo, si es menor que 0, entonces realmente te estás moviendo hacia la izquierda, así porque es menos uno. Muy bien, entonces este es el principio principal. Ahora tenemos que hacer un poco más de trabajo para que funcione en multijugador. Voy a mover este salto, saltar la función IF aquí, saltar lógica aquí abajo. Por lo que tengo más espacio aquí arriba. Entonces éste realmente quiero convertir en una función. Entonces voy a bajar aquí y voy a hacer clic derecho. Y también puedes, viste aquí si escribías eventos, podrías seleccionar un evento para agregar, pero puedes hacer tus propios eventos. Entonces si escribes disfraz, puedes ver puedes agregar un evento personalizado y puedes llamarlo como quieras. Voy a llamar a este un estado de movimientos de conjunto porque esto es lo que estamos tratando de hacer. Entonces establece el estado de movimiento y tenemos ahora este evento. De acuerdo, así que quiero tomar uno de esos, así que voy a hacer clic en Control X para cortarlo y pegarlo aquí abajo. Ahora, alternativamente, lo que quiero que hagan es establecer aquí mi estado de movimientos y el evento. Y una cosa genial que puedes hacer aquí. Ya viste, podrías agregar variables aquí, pero también puedes agregar variables a funciones. Puede ver todas estas funciones prefabricadas. Todas estas son en realidad variables. Para que puedas hacer click en estos eventos personalizados. Puedes agregar una nueva variable, pero también puedes agregarla fácilmente arrastrando este pin y soltarlo encima de tu función personalizada. Puedes verlo crea automáticamente esta variable para ti. Si quisieras agregarlo manualmente, siempre podrías hacer click en el plus aquí y puedes darle un nombre. Entonces, por ejemplo, nombre. Puedes verlo cambia de nombre aquí y puedes volver a seleccionar E. Movimientos se quedaron y podrías haberlo seleccionado así. Sólo voy a eliminar éste. Sólo te estaba mostrando. Entonces compuestos Guardar ahora. Entonces ahora lo que puedes hacer aquí arriba. Así que ahora en lugar de tener esta enumeración escrita, podrías sacar esto y escribir el nombre del evento que escribiste aquí abajo. Entonces así es como se llama un evento personalizado. Establece los Estados de movimiento. Y se puede ver llamada función aquí, establecer estado de movimientos. Ahora, en lugar de tener esta enumeración ejecutándose directamente, en realidad va a ejecutar este evento que establece esta variable a lo que esté seleccionando aquí. Por lo que esta información que estás eligiendo aquí está pasando por aquí. Y está configurando tu variable a cualquier información por la que esté pasando aquí arriba. Muy bien, tan cosas muy, muy cool, pero tenemos que hacer un poco más porque estamos en multijugador. Este no es un juego para un solo jugador. Esto se habría funcionado perfectamente en un solo jugador. Pero en multijugador, generalmente no establecemos variables en los clientes, por lo que tenemos un cliente y el servidor, y generalmente el servidor, que es el tipo que hace el juego. Entonces si juego Counterstrike, creo un servidor. Yo soy el servidor. Imd, el verdadero juego. Por lo que tengo la autoridad del juego. Y se oye a veces que hay tramposos o hex, eso se llama ataque del lado del cliente. Entonces lo que normalmente hacemos es establecer variables a través del servidor porque el servidor controla el juego, siempre hay que recordar que en Unreal Engine, servidor tiene el control del juego y lo que hagas, Sea cual sea la lógica que escribas, tienes que ejecutarla a través del servidor. Los clientes son todas las capas conectadas. Entonces harás el servidor, eres el servidor y todos los jugadores que te conecten a tu servidor. Se les llama los clientes. Y si no ejecutas todo el código a través del servidor, así que si no verificas lo que estés haciendo, por ejemplo, saltando o haciendo esto configurando una variable. Si no lo revisas primero, con el servidor, el cliente tiene un tiempo más fácil hacer trampa en el juego. Entonces, si solo ejecutas esto a través del cliente y estableces esta variable, el cliente tiene una manera fácil de hacer trampa dentro de tu juego. Así que recuerda siempre, el servidor tiene la autoridad del juego, que el servidor es el verdadero juego. El servidor comprueba si has cerrado el arma, entonces el servidor dice, sí, este cliente realmente ha disparado el arma. Después sigue adelante y aplica daños a ese personaje. Por lo que el servidor siempre tiene que revisar esa información para asegurarse de que el cliente no está haciendo nada ilegal. Entonces otro ejemplo, justo antes de continuar, por ejemplo, el cliente, por lo que la capa conectada. Dispara un RPG y RPG más lejano que tienen que revisar a través del servidor. El servidor comprueba. ¿ Este jugador realmente tiene un RPG en la mano y disparando el arma? Entonces el servidor comprueba y dice, sí, este cliente realmente tiene un RPG en la mano y lo cierra. Entonces enviará esa información vuelta al cliente que disparó el RPG. Y le dirá a ese cliente que se le permite disparar esa arma porque sí, tiene el RPG en la mano. Regla motor. Tiene esta autoridad donde el servidor tiene la autoridad y lo que haga el cliente tiene que revisarse a través del servidor. Podemos simplemente ponerlo aquí. Esto es, puedes ver aquí este es el cliente y también puedes comprobarlo aquí si haces clic derecho y escribes cadena de impresión. Y recuerda que la cadena de impresión es tan, tan poderosa a pesar de que solo está imprimiendo una cadena. Vamos a compilar y ahorrar. Y se puede ver lo que estoy diciendo. Ahora, en lugar de hacer clic en play ahora, vamos a hacer click en estos tres botones y cambiémoslo por un número de jugadores. Ahora estamos dentro de Multijugador. Vamos a escribir dos. Aquí en modo net, haga clic en éste llamado play as listen server. Volvamos a hacer clic en estos botones, y voy a hacer click en esta nueva ventana del editor. Entonces esto es lo que voy a jugar ahora. Ya no voy a jugar en la ventana gráfica seleccionada. Por lo que haciendo clic en la nueva ventana del editor. Ahora podemos ver que tenemos el servidor. Lo puedes ver en la parte superior aquí. Contamos con el servidor. He creado este juego. Y se puede ver al cliente conectado a mi servidor que he creado. Si hago click aquí, se puede ver que puedo moverme como el servidor, y también puedo moverme como cliente por aquí. Por lo que ahora estamos dentro de multijugador. Y como puedes ver aquí, el cliente hola y el servidor también imprime hola. Esto significa esta información. Significa que este evento se está ejecutando en el servidor y en el cliente. Ambos están diciendo hola. Y cuando establezco variables, solo quiero configurarla en el servidor. Quiero asegurarme de que el cliente no esté engañando. Por lo que nunca quiero establecer variables en el cliente. Y eliminemos esto. Y así vamos a hacer clic aquí y decir otros eventos personalizados. Vamos a agregar evento personalizado. Llamémoslo S RV por servidor. Normalmente los llamo como R V. Y llamémoslo el mismo nombre que éste de aquí arriba. Dice que el movimiento afirma. Así como eso. Ahora para que se ejecute solo por el servidor, tienes éste en multijugador llamado replicación. Por lo que haciendo clic aquí y haga clic en ejecutar en servidores. Por lo que sólo queremos ejecutarlo en el servidor y dar click en confiable. Voy a desconectar esto sosteniendo Alt, desconectando estos y conectando el set de aquí con esto. Y ahora lo que podemos hacer aquí es ejecutar estos eventos. Entonces aquí arriba, correr es nuestra v así, y conectando estas entradas así así. De acuerdo, así que ahora va correctamente en realidad. Ahora lo que estamos haciendo es que estamos comprobando si el valor x es 0, por lo que el jugador está al ralentí si eso es cierto. Y esta información ídolo. Ahora estamos ejecutando este evento llamado estado de movimiento conjunto, que es éste. Por lo que estamos configurando esta información en Sur la ociosa. Esta información se está imprimiendo al servidor. Y el servidor está configurando esa variable a lo que haya escrito aquí o lo que haya elegido aquí. De acuerdo, entonces este es el método correcto para hacerlo. Entonces ahora lo que tenemos que hacer aquí, así que eliminemos esos. Y de nuevo, solo puedes escribir aquí el nombre de este evento para llamar a los conjuntos de eventos. Movimientos, estados así y selecciona éste, no éste, por lo que éste de aquí. Y vamos a copiarlo, pegarlo aquí abajo. Entonces si, si el valor del eje es mayor que 0, significa, si eso es cierto, significa que estamos corriendo hacia la derecha. Eso es falso. Estamos corriendo a la izquierda, así como esto. Entonces ahora es más correcto. De acuerdo, entonces ahora hemos puesto la variable ¿qué ahora? Porque se puede ver si compilar y guardar y guardar todo, si puedo hacer click en Play now, realmente nada está pasando. Y eso está bien. Porque esencialmente lo que estás haciendo momento es que estás configurando esta variable, pero realmente no has definido al supervisor. Si vuelvo aquí, realmente no has usado este flip books. Recuerda, solo estás configurando esta variable a cualquier información que estés configurando aquí también. Entonces para las enumeraciones, tenemos algo llamado switch on enumeration. Así que justo como prueba, si acabo de arrastrar esta enumeración hacia fuera, y si la arrastro aquí y digo switch, se puede ver un interruptor en la enumeración. Lo que es, es básicamente, solo te da unos pines de ejecución dependiendo de lo que hayas escrito aquí en la lista. Y se pueden hacer diferentes acciones. Y se puede ver aquí, cuando estamos al ralentí, podemos ejecutar este flip book. Cuando lo estamos. Vuelvo aquí. Si estamos corriendo a la derecha, puedo ejecutar este libro flip run y así sucesivamente. Por lo que podemos hacer diferentes acciones dependiendo de lo que seamos, a qué nos hemos fijado esta variable. De acuerdo, Así que dentro de multiplicador de nuevo, puedes hacer click en una variable. Y aquí en multijugador, al igual que antes, donde tienes replicación en el evento, diciendo ejecutar en servidores se están ejecutando en el cliente específicamente. También para variables, se pueden replicar esas. Para que como puedas imaginar, si estableces una variable en el servidor aquí, el cliente tiene que conocer de alguna manera esta información. Y esto es lo que usas esta bifurcación de replicación. Porque si configuras esa variable en el servidor, ¿cómo lo notaría el cliente? Porque el cliente no tiene posibilidad saber qué lo has dicho también, porque eres el servidor. Ha establecido la información en el servidor, pero hay que enviar esa información de vuelta al cliente para que el cliente sepa a qué le ha establecido el servidor. Y aquí es donde entra la replicación variable. Por lo que si hago clic en esto y hago clic en replicado, se puede ver aparecer estas dos esferas. Esto significa que estoy configurando la variable en el servidor, y ahora estoy enviando esa información al cliente para que el cliente sepa cuál es el valor para esta variable. Esto es lo que hace replicado. Ahora un poco complejo. Lo último de lo que quiero enseñarte antes de que te vuele los sesos es éste llamado Rep, notifíquelo. Y esto crea una función para ti. Por lo que si haces clic en retinas die, puedes ver aquí crea automáticamente esta función de desenvolver. Y lo que hace es que va a ejecutar esa función cada vez que establezca esta variable. Entonces cada vez que establezcas esta variable, se va a ejecutar esta función. Entonces voy a hacer doble clic en esta función. Y voy a arrastrar este movimiento se quedó aquí sosteniendo Control, soltándolo aquí, y ahora arrastrándolo aquí, diciendo interruptor en la enumeración. Así como eso. Cada vez que voy a ejecutar este código, ejecútelo aquí a través del servidor configurando esta variable. Cada vez que cambia este valor, se va a ejecutar esta función. Entonces lo que quiero hacer con esta función es cambiar el libro flip book. Porque recuerda en el sprite's en realidad no aquí estamos dentro de la base del jugador. Entonces si voy a la jugadora Tsarina, recuerda en los sprites, tenemos esta llamada fuente flip books. Entonces es un flip book que estamos cambiando. Lo que tenemos aquí es algo llamado sets flip book. Y ahora te va a decir que es para el sprite aquí. Y vas a hacer clic OK, Sí, esto es para el sprite y lo creará automáticamente para ti. También podrías simplemente haber hecho clic y arrastrarlo desde aquí y decir flip book, eso es lo mismo. Entonces vamos a poner este flip book al ídolo aquí. Cuando estamos al ralentí, cuando estamos corriendo a la derecha, voy a copiar pega esto, conectando esto con el objetivo, así. Cuando estamos corriendo a la derecha, estamos ejecutando la animación de corrida o ejecutando flip book. Voy a copiar pegue esto unas cuantas veces. El recorrido a la izquierda es en realidad también la animación de corrida. Y el salto es la animación de salto como esta, salto, lípido como este, y la caída. Realmente no tenemos una nueva animación, así que voy a conectar mi otoño aquí y simplemente usar lo mismo aquí, el libro flip jump. Vale, recuerda tomar esto brillante, o puedes hacer así y conectarte a múltiples lugares o tal vez a veces es más limpio solo usar varios como este. También puedes hacer eso. Hagamos eso por éste de aquí. Voy a copiar pegue esto un poco. Y conectando el último aquí. Voy a hacer esto más limpio más adelante, pero vamos a trabajar con él ahora. Compuesto guardar, haciendo clic en Play. Ahora, se puede ver aquí, si corro a la derecha, estoy corriendo. Si corro a la izquierda, mira, estoy corriendo Pero no estoy corriendo la dirección correcta cuando estoy saltando. Saltando correctamente. Y esto es porque recuerda que realmente no hemos hecho la animación de salto y lo estaremos haciendo justo después de esta lección. Pero vamos a centrarnos en la carrera. Entonces correr está funcionando, pero estoy corriendo por la dirección equivocada cuando estoy corriendo a la izquierda. Y esto se debe a que esto es un sprite y hay que rotar su imagen para que se ejecute correctamente. Así que sólo quiero rotar este sprite cuando estoy corriendo. Entonces cuando corro a la izquierda aquí, no está corriendo la dirección correcta. Entonces lo que puedes hacer es tomar este sprite aquí y puedes decir rotación. Recuerda, cuando no sepas lo que estás haciendo, solo busca la rotación y puedes intentar descremar a través de esos y ver lo que quieres hacer. Y el que estamos utilizando es la rotación relativa establecida. Queremos rotarlo. Se puede poner algunos minimizar y hacer click en cualquier cosa aquí. Por ejemplo, este jugador inicia y clic en E para la herramienta de rotación. Y puedes ver que tienes que rotar la z Entonces si quieres algo que gire hacia el otro lado, tienes que girar la Z por 180. Por lo que voy a hacer click en Control Z aquí. Y la z, hay que rotar el sprite por 180. Y puedes llamar conectado aquí. Entonces lo va a rotar antes de que ponga el libro flip book. Y recuerda, para la carrera, correcto, tenemos que rotarlo hacia atrás. Así que copiar pegar este código se está poniendo desordenado, va a moverse de esta manera. Entonces aquí vamos a rotarlo de nuevo. Entonces configurándolo a 000 y conectando correr bien, así. Ahora, debería funcionar correctamente si compilar y en realidad olvidé agregar un objetivo aquí. Así que vamos a copiar esto, pegarlo aquí así. Y se puede ver cuando tienes un error, él, escribe la flecha aquí y dice que necesitas un objetivo. Aquellos Compila y Ahorra. Así como eso. Y ahora vamos a jugar y ver si me muevo a la derecha, me muevo a la izquierda. Porque ahora nuestra animación está funcionando perfectamente. Y ahora nos falta la animación de salto, y lo haremos en la próxima lección. 28. Animaciones de salto del jugador: Hagamos ahora la animación de salto. Así que volvamos a la base de jugadores. Y aquí, en el Gráfico de Eventos. Aquí hicimos este movimiento con la OIT, con la derecha de carrera y lo que corren a la izquierda. Lo que realmente no hemos puesto el salto. Y saltando aún más si arrastramos a éste llamado set movements state de nuevo, por lo que arrastrando éste aquí para que el estado de movimiento, podamos arrastrarlo dos veces. Por lo que tenemos tanto el salto aquí y también tenemos la caída. Tenemos que comprobar si el jugador está saltando o si el jugador está cayendo. Es lo mismo. Es la misma animación en Maple Story. Entonces realmente no importa. Pero si estás creando tu propio juego y tienes dos animaciones diferentes para el salto y el doblez. Esto sería realmente agradable saber. Así que de nuevo, al igual que antes de aquí abajo, en la lógica de salto, estás comprobando si el jugador está cayendo o no. Entonces tenemos que hacer lo mismo aquí. Si volvemos al Gráfico de Eventos, tenemos que hacer lo mismo aquí. Entonces antes de que ídolo, voy a sostener Alt y pincha aquí para desconectar esto. Voy a mover esto un poco más lejos porque ahora podemos sumar el salto. Por lo que voy a tomar el movimiento del personaje y comprobar si el jugador está cayendo. Entonces estamos consiguiendo, si puedo encontrarlo aquí se está cayendo, conseguir éste. Y vamos a crear una rama como esta. Ahora, estamos comprobando si el jugador está cayendo y si el jugador está cayendo, estamos saltando. Entonces estamos en el aire. Y si el jugador no está cayendo, decir que el jugador está bajo tierra, entonces no estamos en el salto. Sólo vamos a ejecutar ese código en ejecución igual que antes. Pero aquí estamos saltando si estamos en el aire. Por lo que ahora tenemos que revisar. ¿ Está saltando el jugador o es el jugador cayendo? ¿ Cuál es? Podemos hacerlo si obtenemos la velocidad de estos actores. Así que voy a hacer clic derecho y a la derecha conseguir la velocidad, como aquí. Y estamos consiguiendo la velocidad. Y ahora esto es un vector. Ahora puedes romper este vector. Pero porque en lo que me interesa ahora mismo, si tenemos al jugador aquí, me interesa si el jugador está saltando o cayendo. Y de nuevo, esta es la z, la flecha azul aquí es la z. en el eje z. Quiero ver, va en la dirección más, lo que significa que el jugador va hacia arriba o es el avión que va hacia abajo, lo que significa que la z está en realidad en el valor negativo. Entonces voy a terminar por base de jugadores, esta velocidad. Puedo tomar este vector y puedo decir break. Puedes romper este vector en la x, y, y z. recuerda un vector, si puedo mostrarte aquí atrás, cuando creamos una variable vectorial, un vector consta de tres números, al igual que la ubicación aquí, tres números. Entonces si vuelvo, déjame simplemente eliminar éste de nuevo. Entonces estamos rompiendo este vector en el x, y, y z porque sólo nos interesa el valor z. Quiero comprobar si esto va hacia arriba, lo que significa que está en el plus, o yendo hacia abajo, lo que significa que está en el menos. Por lo que voy a tomar esto y decir mayor. Entonces, ¿esto es mayor que 0? Y creando una rama de nuevo como esta. Entonces si es mayor que 0, esto significa que el jugador está saltando porque vas hacia arriba si no es mayor que 0, por lo que está en el menos significa que te estás cayendo. Y si el jugador no está cayendo, solo ejecutarás este código normal de ejecución. De acuerdo, así que déjame mover esto un poco más cerca ahora. Ahora tenemos esta lógica saltando y siempre podemos, por lo general dedicar toda una lección para una limpieza todo esto arriba, así que no te preocupes si se ve un poco desordenado. Pero aquí sólo podemos compilar y ahorrar. Y ahora te lo quiero explicar. En realidad, simplemente haga clic en Play y veamos qué pasa. Por lo que si hago clic en jugar y salté, se puede ver que estoy saltando. Está funcionando. Impresionante. Vale, entonces lo que está pasando es que estás revisando aquí y luego te mueves a la derecha, a la izquierda. Antes de que estés ejecutando esta animación de movimiento, estás comprobando si el jugador está cayendo. Y si el jugador está cayendo, significa que estás saltando. Está bien, eso está bien. Entonces sí, estás saltando. Es cierto. Te estás cayendo. ¿ Entonces qué? Aquí tomas la velocidad de este personaje y estás rompiendo este vector porque sólo nos interesa el valor z. Estamos comprobando si el valor z está por encima de 0. Si es así, estás saltando. Si la velocidad está por debajo de 0, lo que significa que estás bajando, eso significa que estás cayendo. De acuerdo, entonces, ¿qué pasa aquí? Estás ejecutando este evento y lo configuras para saltar esta información, estás sentado aquí, vamos a pasar por este evento porque este es en última instancia el evento que estás ejecutando. Establezca movimientos Estados que recuerdan que está llamando a este evento. Por lo que se está ejecutando a través de este evento. Es poner esta información que salta al que la has establecido aquí, corriendo por el código. Está pasando por el servidor. El servidor está configurando esta variable. Y recuerda, configuramos esta variable a un rep notifique. Y de nuevo, si no recuerdas un aviso, porque en este momento eres el servidor y el servidor establece la variable. ¿ Cómo sabría el cliente qué es esta variable si no haces nada porque recuerda, estás en el servidor y el cliente realmente no puede ver a qué te lo estás configurando a menos que estás en el servidor y elcliente realmente no puede ver a qué te loestás configurando a menos que están replicando esta inflamación. Por lo que está replicando la información de nuevo al cliente para que el cliente pueda ver el valor de esta variable establecida. Entonces lo que sea lo que sea notifique, notifica a todos los clientes a qué se le ha establecido y lo hace a través de esta función Ribner onReceive. Por lo que un rep notifique cada vez que establezca una variable para rip notify, crea esta función de desenvolver. Y dentro de aquí, sea cual sea lo que usted código aquí, todos los clientes verán ese cambio. Es por eso que estamos poniendo el libro flip book aquí. Porque queremos que todos los clientes vean que estoy en mi libreta ociosa. Quiero que todos los clientes vean que estoy en mi libro de salto flip y así sucesivamente. Por lo que estás enviando toda esta información al cliente. Ahora, la información se estableció aquí, es salto, pasó por el servidor aquí, establece la variable, y va a ir dentro de la función unwrap porque cada vez que cambias un rep notifique variable, va a ejecutar la función unwrap. Y puesto que usted establece este valor ahora para saltar, sólo va a correr a través de este pin de ejecución de salto. Va a ignorar todos estos porque sólo ve que ahora lo has puesto para saltar. Entonces se va a ejecutar este pin de ejecución, y va a poner el flip book de este brillante para saltar. Por lo tanto, al hacer clic en el espacio y saltar, establecerá su libro flip book para saltar. Y para probarlo. Ya lo puedes ver, funciona. Yo también lo puedo ver en el cliente. Para asegurarse de que funcione. También necesito correr como cliente y saltar como cliente para ver si yo como cliente y permitido saltar. Porque recuerda, el servidor comprueba lo que sea que estés haciendo como cliente. Por lo que ahora se puede ver puedo saltar como cliente. Y además si tomo esto un poco abajo, se puede ver que el servidor puede hacer todo eso. Por supuesto, el servidor, de nuevo, el servidor tiene la autoridad para hacer cualquier cosa en el juego porque el servidor es el verdadero juego, el servidor comprueba a todos los clientes lo que están haciendo y el servidor es capaz de hacer cualquier cosa. Entonces es más como el cliente. Tenemos que consultar con el cliente también. Si el cliente es capaz de hacer todo eso y el cliente es capaz de hacer todo eso también. Entonces está funcionando perfectamente. 29. Entrada variable personalizada: Ahora quiero mostrarte algunas entradas variables personalizadas. Entonces si volvemos a la base del jugador, y aquí dentro de tu función de movimiento no leída, puedes ver aquí antes de configurar ahora el libro flip inactivo, configuramos el libro flip run, configuramos el libro flip jump y así sucesivamente. Pero, ¿y si vamos aquí a mirar, ahora? Si engendramos, mire al servidor. Por lo que ahora podemos ver estamos respondiendo como Tsarina. Y es decir, eso es genial. Pero, ¿y si engendramos a Luke? Luke realmente no tiene este libro flip book. Mira. ¿No está volteada esta chica? Tenemos que hacer otro flip book para Luke. ¿ Y cómo usamos el libro flip book de Luke en lugar de que Serena está aquí? Y es por eso que casi nunca hardcode cosas en los juegos. Por lo general odio la codificación dura como esta. Esto se llama hardcoding o simplemente seleccionar una variable. En cambio, simplemente haga clic con el botón derecho aquí y promocione esto a una variable. Y ahora se puede llamar a esto una variable, algo por ejemplo, lo puedo llamar ocioso, voltear, no tan buen espacio como ese. Voy a voltear libro. Ahora tengo esto hecho en una variable. Ahora, si compilo, y se puede ver si hago clic en esta variable, el predeterminado en este momento es este flip book, porque he seleccionado aquí, hemos seleccionado el flip book run. Ahora si hago clic derecho y promueve una variable, va a establecer eso como predeterminado. Ahora podemos eliminar esto como predeterminado para éste. Ahora, déjame simplemente dar click en Borrar. Entonces haciendo clic en el inactivo, voltea una variable que acabas de hacer. También se puede ver que lo hizo en un tipo de libro flip book de papel. Puedes dar click aquí, hago click en Borrar. Ahora el defecto no es nada. ¿De acuerdo? Entonces a partir de aquí, ¿cómo sabemos qué flip book correr para Serena y cómo sabemos qué correr por Luke? Ahora, desde que lo hiciste en una variable. Y recuerda que estamos dentro de bajista. Jugador bajo es el padre para el bucle for y para Serena. Entonces estos son los padres. Cada variable que hagas dentro del padre también aparecerá en los hijos. Entonces si hago click en Tsarina primero, y si voy a la clase por defecto aquí a la derecha, se puede ver que tengo tanto el estado de movimiento el libro flip inactivo porque en la base del jugador, tenemos tanto el movimientos variables, estado y el libro flip inactivo. Entonces aquí para Serena, por ejemplo, puedo elegir la animación ociosa para el libro flip inactivo. Pero si vuelvo a Luke ahora, y abrí el editor completo de planos para Luke. Si voy a los valores predeterminados de clase, puedo elegir otro flip books ociosos. este momento no lo hago realmente, no hemos importado parece animaciones todavía. Pero puedo seleccionar una animación ociosa personalizada. Y aquí podría seleccionar el libro de tirón inactivo de Luke si lo he hecho. Entonces, en lugar de codificar cosas duras a cabo variables de codificación aquí, por lo general lo hago en una variable. Y ahora puedes configurar esas animaciones constantemente dependiendo de si lo tienes, digamos que tienes diez personajes ahora podemos hacer click en los diez personajes y configurarlos como un flip book personalizado aquí para los ociosos, puedes volver atrás y hacer clic derecho aquí y promocionar esto a una variable para el salto. Y luego puedes configurar el libro de salto flip para cada uno de los personajes. Entonces podemos ver si hago clic derecho todos esos, promueve una variable. Y si hago clic aquí, si acabo de promover todas ellas a una variable, puedes ver que consigo muchas variables y puedes ahorrarte espacio de todas esas variables mediante el uso de una estructura. Esto es de lo que vamos a hablar en la próxima lección, vamos a hablar de estructuras. Por lo que voy a eliminar los de nuevo aquí. Si solo las elimino, no quiero hacer demasiadas variables en estas animaciones. Se llama que se puede hacer una variable de esos, pero en realidad se puede utilizar algo llamado estructura que es más eficiente. Y te mostraré cómo hacer uno en la siguiente lección. 30. Estructuras: Mega estructura. Ahora vamos a clic derecho y hacer una nueva carpeta. Voy a hacer una carpeta llamada structs. Estas son para las estructuras y haciendo doble clic en eso y en lugar de aquí puedes hacer clic derecho dentro de los planos. Puedes hacer que éste se llame estructura. Entonces creando eso, te mostraré lo que es eso. Empecemos con el STS, el prefijo. Y para ésta, esta estructura va a contener todas las variables para los jugadores. Voy a llamarlo info de jugador. Entonces toda la información sobre este jugador. Ahora dentro de la estructura, puedes agregar tantas variables como quieras. Por ejemplo, el primero, llamémoslo animación ociosa. Sin un espacio. En realidad, sólo voy a llamarlo así. Voy a hacer click en nueva variable y voy a hacer una para la animación de corrida. Y solo trabajemos con eso por ahora. Entonces aquí está la derecha. Puede cambiar el tipo de animación. Y para las animaciones, recuerda, estamos trabajando con 2D, por lo que es flip books de papel. Y si puedo encontrarlo aquí, si acabas de escribir papel, éste libro flip book en papel y selecciona la referencia del objeto. Lo mismo con este libro flip book de papel. Ahora, cuando creas una nueva variable, configurará automáticamente para pavimentar un libro flip porque esto es lo que seleccionaste anteriormente, la animación de salto. Agreguemos también la animación de otoño. De acuerdo, entonces tenemos estas animaciones ahora. Entonces antes en lugar de hacer clic derecho y promover todos aquellos a una variable. Y ya ves aquí teníamos muchas variables aquí abajo. Puedes ahorrarte espacio si pones todas estas variables dentro de una estructura. Ahora la estructura que podemos usar se llama información del jugador. Entonces más adelante podemos usarlo para algo así como el nombre del jugador. Si tienes una miniatura para el jugador, podemos poner la imagen aquí. Si tienes algunos efectos de sonido de salto, también podemos crear una variable para los efectos de sonido. Entonces toda la información del jugador está dentro de esta estructura. Ahora para usar una estructura, puedes volver a la base del jugador. Y dentro de aquí puedes hacer una nueva variable y puedes llamarla, llamémosla info del jugador. Ahora vamos a cambiar este tipo a lo que llames aquí es t info del jugador. Por lo que es t información del jugador y se puede ver aquí. Esta es la estructura. Si estás Compile and Save, ahora puedes arrastrar hacia fuera esta estructura aquí, haz clic en Obtener información. Y se puede arrastrar desde esta estructura. Y lo que normalmente, suele hacer es hacer clic en la estructura de ruptura. Al romper esta estructura, se pueden ver todas las variables que ha agregado a la estructura. Y como algo muy, muy cool, ahora que tienes esta estructura agregada, recuerda cuando añadas variables, ahora déjame borrar este flip book por ahora, el libro flip inactivo que hicimos antes aquí arriba, voy a borrarlo. Por lo que ahora tenemos esto solamente. Entonces ahora lo que puedes hacer, cosas muy chulas es que ahora puedes enchufarlas al inactivo. Entonces éste era el ídolo aquí, y esta es la animación corrida. Entonces voy a tapar la carrera aquí, la carrera aquí. Esta es la animación de salto aquí. Y la animación de otoño es la misma que el salto, pero sólo podemos conectarlo aquí. ¿ De acuerdo? Por lo que ahora puedo ver que tienes todas estas variables en una estructura y se ve mucho mejor ahora. Y al igual que lo que te dije antes, puedes, cuando agregues una variable a la clase padre, la clase child también la heredará. Entonces si vas a Serena ahora, y puedes hacer click en los valores predeterminados de clase, puedes ver esta infraestructura de jugador. Y si haces click en él, puedes ver todas estas variables y puedes ponerlas llevar disfraz a cualquier libro flip que quieras agregar. Entonces para Luke, también podemos hacer lo mismo cada vez que agregamos bucles, animaciones, también podemos agregar los libros flip books de papel de Luke aquí. Entonces para que funcione, volvamos a Serena y puedes hacer click en inactivo aquí para la animación inactiva. Para toda la animación de ejecución, puede seleccionar ejecutar, el salto, puede seleccionar Java. Y para el otoño, es justo el mismo que este salto como este. Así Compile y Ahorre, guarde todo. Vamos a probarlo. Demos clic en Play. Y ahora cuando corremos, se puede ver que todas las animaciones están funcionando y estamos usando ahora esta ruptura. 31. Finalizar el movimiento de personajes: Entonces como lo final, en realidad vamos a finalizar el movimiento para el jugador y seguir adelante. A partir de aquí, volvamos al jugador, la base del jugador. Y lo que quiero hacer es sólo editar el movimiento del personaje. Por lo que haciendo clic en los movimientos del personaje, vamos a fijar la escala, escala de gravedad a uno. Así que ahora mismo cuando salté, creo que mis personajes volando un poco demasiado alto. Entonces es como si la gravedad no fuera lo suficientemente alta. Por lo que voy a aumentar la escala de gravedad por aquí en el componente de movimiento a 1.9. Recuerda en el espacio pleural, cuando lo cambies, va a aplicar también para Serena y para Luke también porque son hijos de la base del jugador. Entonces aquí en la escala de grises, 1.9 y S para la velocidad de movimiento para Maple Story, lo probé. Estaba jugando el juego y creo que en algún lugar alrededor de 155 en la velocidad de caminata. Y se puede ver si hago click en Play, ahora estamos trabajando mucho más despacio. Y es más como Maple Story. Esta es la velocidad que estarás corriendo con ella. Entonces si lo hago más grande, puedes verlo aquí. Entonces esto es más como Maple Story, el salto, pero creo que deberíamos saltar un poco más alto. Por lo que voy a volver a los movimientos de personajes base de jugadores. Y aquí abajo en el salto Z Velocity, voy a enviarlo, ponerlo en 500 en su lugar. De acuerdo, así que vamos a compilar y ahorrar. Y creo que eso es todo por el movimiento. Entonces si hago click en Play y veo que este es el movimiento y puede saltar. Entonces ahora mismo nos estamos bloqueando el personaje también. Tenemos que quitar eso para que puedas ver que está molestando a nuestro personaje, empujado, nuestro carácter bec. Pero en realidad volvamos a la base del jugador y haciendo clic en los componentes de la cápsula. Entonces esto está haciendo la colisión. Y vamos a desplazarse hacia abajo y se puede ver a éste llamado colisión. Demos clic en este preset de colisión para ver qué está pasando, y esto es todo de la colisión. Por lo que ahora en realidad vamos a hacer click aquí y dar click en disfraz porque queremos editar esto. Por lo que ahora podemos ver los pons. Esto es lo que es. Este es un peón. Los estanques se están bloqueando entre sí. Y no queremos eso. Queremos que los puntos se ignoren unos a otros por ahora, simplemente ignorémonos unos a otros. Vamos a compilar y veamos si ese trabajo. Así que da clic en Jugar y correr por ahí. Ya veo que no puedo bloquearme ahora. Entonces si llevo a este cliente, así que eso está arreglado ahora, ¿de acuerdo? Por lo que los estanques ya no pueden bloquearse unos a otros. Entonces esto es lo que queremos. Y se puede ver que todo está funcionando bien. El salto, creo que estoy saltando lo suficientemente alto. Pero de nuevo, este es tu juego. Si quieres correr más rápido, si quieres, la cámara para estar más cerca. Recuerda que podrías editar la cámara si fuiste a Tsarina y en realidad la agregamos mal. Puedo ver que agregué la cámara dentro de Tsarina, pero necesitamos sumar en la base del jugador porque Luke también necesita la cámara. Entonces esta es una solución rápida. Déjame borrar este brazo de resorte. Eliminar la cámara. Déjame ir a la base del jugador en su lugar. Haga clic en la cápsula, agregue el brazo de resorte. En la cámara, así, solo busca la cámara. Por lo que ahora tenemos el brazo de resorte y tenemos la cámara. Y de nuevo haga clic en la cámara, suba aquí, cámbiela a vista ortográfica. Y recuerda, puedes cambiar lo cerca y lejos que está la cámara cambiando este valor. Y fue en 130 por justo así. Por lo que ahora tanto Luke como Tsarina tienen esta cámara. Así que antes de terminar esto, vamos a pasar por el código simplemente rápido porque quiero limpiar las cosas para que no sea un verdadero lío. Entonces solo revisando aquí, así es como se ve. Y para limpiar el código, también puedes hacer doble clic en estos pines. Al hacer doble clic, crearás este nodo redireccionado, redireccionar pin. Y puedes hacer doble clic aquí y hacer que se vea un poco más limpio. Y creo que esto se ve bien y mira aquí, tal vez solo, solo colocándolo aquí, así. Otro truco es que puedes seleccionar lo que quieras aquí y hacer click en Cola. Esto enderezará todas estas notas que haya seleccionado. Entonces seleccionándolos, Al hacer clic en Q los enderezará. Entonces tenemos el salto y tenemos la caída aquí uno al lado del otro. Y alejémoslo un poco más lejos. Y también tenemos la animación a pie. Creo que esto es, esto es bueno. Ahora lo que podemos hacer, puedo bajar esto, y puedo bajar esto también. Nuevamente, puedes seleccionar todos esos, pincha en la señal para enderezarlos así. Y también puedes hacerlo potencialmente con éste. O creo que tal vez así y podemos mover esto más abajo. Así, esto probablemente se ve mucho mejor. Y podemos hacer que esto se mueva más lejos para que no estén agrupados uno encima del otro así. Y tal vez puedas mover esto también encima de aquí. Al igual que también puedes crear nieves redireccionadas para pasadores de ejecución si lo deseas. Pero creo que voy a dejar que sea así en realidad. Voy a ponerlo más cerca. Creo que esto se ve un poco raro como aquí. De acuerdo, así que ahora hemos corregido esto. Y otra cosa es que puedes pasar el cursor sobre todos estos nodos. Puedes hacer click en ver para crear un comentario. Por lo que haga clic en ver. Se puede llamar a este movimiento de un jugador. Ella también puede ser más específica de lo que quieres decir. Entonces Claire movimiento, sólo voy a llamarlo algo corto solo para el curso que los videos no se alarguen demasiado. Movimiento lento FUE en realidad, no es un juego 3D, así que derecha e izquierda, por ejemplo, algo así. Y para éste, estas son también la etapa de movimiento, por lo que podemos incluirlas en el comentario. Voy a hacer click y arrastrar el comentario hacia abajo así. Y ahora aquí abajo tenemos el salto. Voy a hacer click en ver y decir salto. Y ponlo aquí abajo. De acuerdo, así que ahora está un poco más organizado. Y también puedes ir a la función desenvolver. No olvides que también puedes acudir a las funciones y organizar esas funciones. Entonces éste parece un poco desordenado por esas líneas, pero hemos llegado a hacer mucho al respecto. Entonces realmente no podemos hacer un más estructuras como esta. Entonces creo que esto se ve bien, pero siempre se puede tratar de separarlos un poco más lejos el uno del otro. Trata de ponerlos como unos debajo del otro, así. De acuerdo, creo que esto se ve bien por ahora. Siempre puedes, si quieres probar, puedes crear notas redireccionadas. Si quieres. Escucha por algunos doble clic, intenté, incluso puedo hacer para redirigir notas si quieres tratar de limpiarlo tanto como sea posible. Pero creo que voy a dejar que esté aquí por ahora sabemos lo que está haciendo en este momento. También puedes hacer un comentario si quieres. Y vamos a compilar y ahorrar. Y ahora todo está funcionando. Y haciendo clic en jugar aquí. Y se está oscureciendo y sé por qué olvidé rotar la cámara. Así que volviendo a la base de jugadores aquí primero en la primavera vuelvo a retirarme. Hacen pruebas de colisión. Y en las ventanas gráficas, hagamos clic en el brazo de resorte. Demos clic en E para rotar. Y vamos a rotar este 90 menos 90 grados, por lo que está delante de, para que podamos ver al personaje. Y ahora vamos a hacer click en Play. Y ahora todo está funcionando correctamente. Podemos saltar, el movimiento está funcionando. Y de nuevo, hay que revisarlo también en el cliente. Entonces si hago esto más pequeño, hay que revisarlo con el cliente. Y el cliente puede saltar y correr también para que puedas jugar juntos ahora. Y ahora todo está funcionando y pasemos a la siguiente lección. 32. Crea el segundo personaje: Ahora estamos listos para crear a Luke como el personaje. Ahora tengo lo importante para ti dentro de los materiales de tu curso. De nuevo, si vas a tus materiales del curso, personajes Luke y dentro de Luke, quiero que importes estos aquí. Así que vamos a ir a los personajes activos aquí. Hagamos una nueva carpeta y la llamemos luke. Ahora vamos a importar lo que esté dentro de esta carpeta. Y probablemente tengas más animaciones aquí. Voy a sumar animaciones a medida que voy junto con este curso. Así que arrástrelos a tu navegador de contenidos y los has importado. Como ejercicio, lo que quiero que hagan, intente hacer usted mismo todo este proceso porque este proceso es como lo que hemos estado haciendo previamente en las lecciones anteriores. Así que intenta, intenta aplicar configuraciones 2D en papel, intenta extraer los sprites, intentó hacer flip books tú mismo. Intenta importarlos al personaje del blueprint de Luke, personaje de papel que creamos. Y así trata de hacer esto todo tú mismo y ver si tienes éxito. Y si aún te cuesta mucho, vayamos juntos aquí y sigamos, pero trata de hacerlo tú mismo. Es muy buena práctica probar eso. No le hace daño a nadie. Puedes volver aquí y lo haremos juntos. Entonces, si no estás seguro de cómo hacerlo, todavía es, podemos intentar hacerlo juntos. Por lo que de nuevo, voy a hacer click en todos ellos. Haga clic con el botón derecho en la producción, aplique papel a la configuración, y luego pasar por cada una. Entonces el ocioso, voy a extraer los sprites. Voy a ir un poco más rápido porque hemos estado haciendo esto previamente ahora vamos a Tsarina. Por lo que grilla subiendo el 180 por 180 para extraer los sprites así. Y de nuevo, voy a cambiarles el nombre. Muy bien, así que los he extraído todos en sprites aquí. Y también he creado flip books. Así que recuerda que podrías seleccionar, ejecutar por ejemplo, y hacer clic derecho y crear flip book. Por lo que he creado estos tres flip books y ahora tengo que cambiar los fotogramas por segundo. Y para la carrera o para el salto más bien, solo hagamos un fotograma por segundo. Y para el inactivo, fueron dos cuadros por segundo. Y para la carrera, creo que son seis. Sólo estoy revisando con Tsarina aquí. Sí, seis fotogramas por segundo. Entonces estamos haciendo lo mismo. Seis cuadros por segundo como este. Ahora, hagamos aquí una nueva carpeta. Entonces haz clic derecho, haz una nueva carpeta llamada Textures. Y voy a llevar todos estos aquí, tanto este brights como las texturas dentro de aquí, sólo tenemos los flip books. Lo siguiente que podemos hacer es ir al jugador de planos, Luke. Ahora vamos a añadir el flip book. Tan abierto editor de planos completo. Y vamos a las ventanas gráficas. Y dentro de aquí, dando click en los sprites y luego agregando mirada aquí. Entonces la animación ociosa por aquí. Tenemos de nuevo que ajustar esta cápsula para que no choque con nuestros, todos nuestros azulejos. Sólo voy a referirme de nuevo a Serena para ver lo que era ella. O tal vez algo mejor que podamos hacer es hacerlo en la base de jugadores. Por lo que aplica para todos los jugadores Si tienes más jugadores. Por lo que 33 por 16, voy a volver al default y simplemente recordar los números 3316. Entonces voy a hacer eso dentro de la base de jugadores, por lo que no tenemos que hacer esto todo el tiempo. A lo mejor añadimos muchos más personajes más adelante. Por lo que haciendo clic en la cápsula, escribiendo 33. Y tenemos que cambiar este número aquí abajo en realidad primero más te va a permitir. Por lo que 16 por 33. Y cuando compilemos estos planos infantiles estarán todos en ese tamaño. Muy bien, por lo que se debe hacer. Y recuerda en la base del jugador dentro de nuestra función unwrap, agregamos esta estructura. Así que recuerda que hay que tener que contar una mirada qué animaciones tiene el personaje. Y recuerda, cuando hagas, cuando hagas variables dentro de una clase de blueprint padre, aparecerán en el defecto secundario aquí en los valores predeterminados de clase. Por lo que aquí hay que seleccionar al igual que Serena donde seleccionamos esas animaciones. Tienes que hacer eso también, o Luke. Por lo que ahora se puede ver lo genial que es esto. Cada personaje podemos tener nuestra costumbre, ídolo, nuestra carrera personalizada, nuestro salto personalizado, y nuestra caída personalizada. Más adelante. Hagamos esto. Y para el salto tenemos un salto y para la caída también usamos lo mismo aquí. Ok. Así que no creo que nos falte nada. Tratemos de jugar y ver qué pasa. Y vayamos primero a los ajustes del Mundo. Recuerda que hemos seleccionado Serena como la clase predeterminada en este momento porque aún no tenemos una pantalla de selección de personajes. Así que vamos a hacer clic aquí y cambiarlo para mirar en su lugar para que pueda probarlo. Y vamos a hacer click en Play. Ahora miran los encuestados y se puede ver que Luke también está funcionando. Todo está funcionando muy bien. Por lo que tenemos ambos mirada ahora y tenemos a Tsarina en el juego. 33. Agregar el efecto de sonido de salto: Muy bien, entonces para el efecto salto, de nuevo, en el curso materiales he importado dentro de audio. He importado éste llamado SF6 saltos. Entonces tenemos el efecto salto y hagamos una nueva carpeta. Voy a hacer clic en esta carpeta de contenido. Y aquí afuera, hagamos uno nuevo llamado audio. Y dentro de aquí, volvamos al audio y vamos a arrastrarlo a esta carpeta. Y podemos tocarlo y ver si es demasiado alto. Creo que el volumen es agradable. Así que aquí cuando importes un sonido, en realidad vamos a tratar de codificar esta cosa y te mostraré cómo hacer eso en multijugador. Entonces en última instancia, lo que quieres hacer aquí en el plano, volvamos al jugador, la base del jugador. Ahora, si volvemos a la Gráfica de Eventos, tal vez estés tentado a hacer esto. Entonces aquí por el salto. Ahora, lo voy a hacer de la manera equivocada para que puedas aprender de esto. Entonces aquí en el salto, en un solo jugador, estoy comparando solo jugador y multijugador para que puedas ver las buenas prácticas. Entonces en un solo jugador, lo que quieres que haga es como aquí en el salto. Cuando presento salto, obviamente, vamos a hacer este efecto de sonido aquí, pero esto está mal en el multijugador. Y te mostraré por qué aquí. Para hacer un sonido, podemos decir tocar sonido. Y puedes reproducir sonido en un lugar o reproducir sonido a d. Así que si quieres que la gente escuche el sonido, entonces cuál es la diferencia si tocas un sonido en un lugar. Entonces si eres jugador, está parado aquí a este lado y salta, el sonido se escuchará desde este lado aquí. Entonces si un jugador está parado aquí y aquí está tu salto aquí, escucharán el sonido que viene de esta zona aquí. Pero si tocas sonido 2D, por lo que si eliges delay sonido 2D, no se colocará en una determinada ubicación, pero se reproducirá como un efecto 2D. Por lo general usamos esto como elementos de la interfaz de usuario. Y si quieres que se escuche un sonido en un determinado lugar, usamos el sonido de reproducción en el lugar. Todo depende de si quieres que la gente te escuche saltando. Y digamos que queremos hacer eso. Por lo que en última instancia quieres que reproduzca sonido en un lugar. Quieres seleccionar el sonido. Y en lugar de seleccionar la onda de sonido, en realidad regresemos aquí al Audio. Vamos a hacer clic con el botón derecho. Y vamos a crear una cola. Y llamémoslo como C para sonido taco y salto. Puedes hacer doble clic en él ahora para abrirlo. Y esta es una túnica de sonido, por lo que puedes hacer click en Reproducir aquí. Y puede escuchar el sonido. Algo muy cool es que si quieres variación aquí, puedes arrastrarte de esto. Puedes ver estas son las notas sonoras que puedes usar. Puedes arrastrar aquí y decir modulador. También se puede ver el modulador aquí. Así que al hacer clic en el modulador y lo que hace es que aquí cambie el sonido cada vez que se toca. Por lo que elegimos el terreno de juego, mínimo y máximo aquí. Entonces, por ejemplo, 0.9 a 1.1. Y cada vez que hagas clic en Play now, va a cambiar el tono del sonido para que suene como si fuera un sonido diferente cada vez. Para que puedas ver que es un poco de una variación que puedes hacer a veces. Pero quiero que el sonido sea el mismo, así que sólo voy a eliminarlo y hacer esto. Entonces creo que esto está bien por ahora. Y vamos a cerrar este sonido cue abajo. Así que aquí se juega en el lugar. Vamos a seleccionar nuestra taca de sonido. ¿ Y cuál es la ubicación? Y ahí es justo donde está el personaje. Así que vamos a hacer clic derecho y digamos obtener ubicación de actor así y conectado aquí. Entonces estamos consiguiendo esta ubicación de actriz donde quiera que estés y tú estás tocando el sonido ahí. Vale, entonces estás intentando hacer esto, y luego haces clic en jugar y saltas aquí. Funciona. Y esta es la forma equivocada de hacerlo. Porque recuerda que estás en multijugador en este momento. Entonces cada vez que hagas esto, los demás no lo van a escuchar. Entonces recuerda que tenemos este servidor y las relaciones con los clientes. Por lo que tienes esto como el servidor y lo tienes como cliente. Y quieres tocar el sonido y luego desplegarlo a todos los clientes. Por lo que el servidor coloca el sonido y lo arroja al cliente. Así que volvamos aquí y otra vez, igual que lo que te he dicho antes, tenemos que revisar todo con el servidor para que los clientes no engañen. El servidor es el verdadero juego. El servidor tiene la autoridad para hacer cualquier cosa dentro de este juego. Así que cada código que hagas necesita ser revisado por el servidor y luego replicarlo a los clientes. Entonces veamos un ejemplo de esto. Volvamos con el jugador. Apenas eliminemos éste. Entonces tal vez también estás tentado a decir, bien, así que antes de hacer este movimiento aquí, y pasamos por los estados del movimiento, entonces este estado de movimiento pasó por el servidor. Y el servidor estableció esta variable. Y se va a ejecutar una función on-ramp porque recuerda que esta variable fue replicada como un representante notifique. Entonces con el servidor se va a notificar a todos los clientes el cambio de esta variable. Dentro de esta función desenvolver. Todo esto se va a replicar a todos los clientes. Así que tal vez estás intentando decir, está bien, todo esto se está replicando a los clientes. Para que pueda agregar aquí el sonido de mi lugar y se va a replicar a todos los clientes. Entonces tenemos un salto aquí. Tenemos el libro flip jump. Y tal vez se intenta agregar el sonido de reproducción en la ubicación de aquí en su lugar. Se puede hacer eso y va a funcionar. Todos los clientes te escucharán saltar. Entonces si eres el servidor, si eres el cliente, está bien. Todos te van a escuchar saltar. Esto también está funcionando correctamente. Pero hay un pequeño error y te voy a enseñar que esto es lo último en multijugador, y tenemos algo llamado multicast. Entonces si voy al evento y te voy a decir la diferencia entre una función on-ramp y un multicast. Entonces sabemos que tenemos algo llamado multicast. Entonces si hace clic en el evento del servidor, lo configuramos para que se ejecute en el servidor. Pero también tienes algo llamado multicast. Así que intentemos crear primero el código y puedo explicarte más fácilmente después de eso. Así que vamos a mover esta lógica de salto aquí abajo. Y aquí voy a hacer un nuevo evento personalizado. Agreguemos este evento personalizado y llamémoslo MC para multicast. Y sólo voy a llamarlo salto porque queremos hacer el efecto de sonido del salto. ¿ De acuerdo? Ahora puede hacer clic en esta replicar y seleccionar multicast, y luego seleccionar confiable. Y aquí, vamos a añadir éste llamado reproducir un sonido en el lugar. Vamos ahora por este sonido en lugar de codificarlo duro así. Recuerda que agregamos una estructura. Entonces básicamente la estructura, contiene toda la información del jugador, por lo que incluso podemos agregar sonidos aquí. Entonces en esta variable aquí puedo hacer click en Agregar variable y llamarlo salto Como efectos para el efecto de sonido de salto. Y vamos a añadir una túnica de sonido, porque en última instancia, esta fue una túnica sonora que creamos. Por lo que es una túnica de sonido. Busquemos la túnica de sonido. Y está aquí, referencia objeto. De acuerdo, entonces ahora tenemos un efecto de sonido de salto y podemos usar eso desde nuestra estructura. Así que de nuevo, puedes volver a, volvamos al jugador. Por Luke. Desde que agregamos esto, cada personaje puede tener su propio efecto de sonido personalizado, pero realmente no lo tenemos en Maple Story. Entonces vamos a añadir este efecto de salto, o Luke. Para Serena, voy a añadir aquí el mismo efecto de salto o efecto de sonido. De acuerdo, entonces tenemos los agregados ahora en la estructura. Y volvamos a la base de jugadores. Y ahora quiero explicarles qué es un multicast antes de continuar. Por lo que no estaba mal hacer esto aquí. Entonces el servidor establece esta variable aquí y regresas a la función de desenvolver y luego se agrega el efecto de sonido aquí. Esto funcionará como los clientes mayores te oirán saltar. El servidor te escuchará saltar. Por lo que esto funcionará. No obstante, la diferencia está entre una función desenrollada aquí y el multicast. El multicast aquí, hace lo mismo. Entonces el multicast, se puede imaginar como le cuesta toda la información de vuelta al cliente. Entonces la información va al servidor y el servidor establece una variable. Y luego puedes ejecutar un multicast para costar esta información de nuevo a todos los clientes para que los clientes sepan lo que está sucediendo. Por lo que aquí se puede ejecutar el multicast. Así que vamos a hacer clic aquí y añadir aquí un salto DMC. Y lo más importante a saber aquí es eventos multicast solo se pueden ejecutar a través del servidor. No se puede ejecutar esto aquí arriba, por ejemplo, esto no va a funcionar. Recuerda, todavía estamos en declive a saberlo. Nuevamente, si quieres saber si actualmente estás en el cliente o en el servidor, puedes imprimir una cadena simplemente. Entonces esto es muy básico imprimir una cuerda. Y whoops, arrastro esto por error. Y aquí, Demos click en Play. Ahora, ya se puede ver que tanto el servidor como el cliente están diciendo bajo. Entonces sé que no sólo estoy en el servidor, sino que también estoy en el cliente, así que estoy tanto en el servidor como en el cliente en este evento. Pero si imprimo la cadena aquí abajo, y como estamos ejecutando este evento en el servidor, es sólo el servidor el que va a saludar. Así que imprimo cadena es muy útil para saber dónde realmente se encuentra actualmente. Y un multicast sólo se puede ejecutar a través del servidor. No se puede ejecutar un Multicast en el cliente. Esto no va a funcionar. Y esto también te está diciendo aquí arriba. Servidor. Entonces esto sólo va a funcionar si es el servidor desde el que lo estás ejecutando. Por lo que ahora podemos multicast el efecto de sonido de salto a todos los clientes para que puedan oír que estoy saltando. Entonces, ¿cuál es la diferencia entre esta y la función unwrap? Porque están haciendo los dos lo mismo. Este también está funcionando como cuando se agrega el efecto de sonido de salto aquí también va a funcionar. Entonces, ¿cuál es en última instancia la diferencia entre éste y éste? La diferencia es que si estás parado lejos, digamos que tienes un gran mapa de mundo abierto. Si estás parado lejos y estás tocando un multicast, esta es la forma correcta de hacerlo aquí para el sonido. Porque cuando el, cuando el jugador que está pie lejos se acerca a ti, ya no escucharán el sonido porque tal vez has saltado como hace diez minutos. Entonces, pero si lo haces aquí en la función de desenvolver y el jugador está de pie lejos cuando saltas, está bien. El jugador no puede oírlo. Pero si el jugador se acerca a ti, como diez minutos después, el reproductor escuchará el efecto de sonido aunque saltó hace diez minutos. función Unwrap actualizará el reproductor. A pesar de que hiciste esa cosa como hace una hora o dos horas atrás o por mucho tiempo que sea atrás. Y digamos que un jugador aún no se ha conectado a tu servidor y tú saltas, el jugador se conecta diez minutos después. Entonces ese jugador que se conecta puede escucharte saltando. A pesar de que no estás saltando, como si estuvieras quieto, pero saltó a hace diez minutos, ese efecto de sonido de salto será escuchado por el reproductor de conexión. Y esto no es correcto porque saltó a hace diez minutos. No has saltado ahora mismo. Esto sucede si lo agregas al desenvuelto. Entonces lo que quiero que tomen de esto es la función unwrap se usa para cambios visuales. que puedas ver aquí el flip book en el que estoy, por ejemplo, si estoy corriendo o IM, digamos bailando, saltando, lo que sea. Todos los efectos visuales se hacen en el desenvolver. Entonces digamos que tengo un semáforo y está cambiando de rojo a verde o rojo a amarillo a verde, ese semáforo. Quieres añadir. El efecto visual cambia dentro de lo desenvuelto. Porque si un jugador se conecta cinco minutos después, y digamos que eres una luz, tarda cinco minutos en cambiar de color. Digamos que va de rojo a amarillo. Ese jugador que se conecta al servidor puede ver que tu luz ahora es amarilla. Pero si agregas cambios visuales aquí, el multicast, ese color amarillo seguirá siendo rojo para el reproductor de conexión. Porque el multicast solo se actualiza para los jugadores conectados. Solo se actualiza para los jugadores que están cerca de ti. Entonces, si un jugador está parado lejos y la luz cambia de rojo a amarillo, ese jugador que está de pie lejos se acerca ahora a ti, y ese jugador seguirá viendo que la luz es lee porque estás ejecutando esto a través de un multicast. Esto solo se actualiza para jugadores cercanos a ti y para jugadores conectados al servidor. Entonces lo que solemos usar funciones inmaduras para nuestros cambios visuales porque esto debe actualizarse visualmente para los jugadores que se conectan. Entonces digamos que me conecto diez minutos después y diez meses después, puedo ver que estás en el, digamos aquí en el estado corriendo, o tal vez estás sosteniendo unas armas diferentes. Entonces si tenemos más flip books aquí, pero no quiero escucharte o no quiero escuchar el efecto de salto que hiciste hace diez minutos, no tiene ningún sentido. Entonces cualquier efecto de sonido, cualquier efecto visual. Entonces, por ejemplo, un efecto de partícula, un efecto de fuego y así sucesivamente. Quiero que todos estos estén en el multicast. Esta es la forma correcta de hacerlo. Todos los cambios visuales se realizan en el desenvolver. Entonces aquí estamos a través del servidor, estamos ejecutando el multicast. Y de nuevo, el multicast sólo puede ejecutarse a través del servidor. Y en lugar de poner el salto por aquí, déjame conectarlo aquí. Una muy buena práctica en multijugador es ejecutar estas variables todo el camino de regreso a los eventos iniciales para que funcione correctamente. Entonces arrastrando este sonido y agregándolo aquí, apuntala aquí, por lo que crea una variable automáticamente para mí. Entonces si hago clic en este multicast, se puede ver que crea esta variable. Y sólo voy a llamarlo aquí en lugar de efectos de salto de sonido S. Y voy a arrastrar esta ubicación también, ponerla aquí y llamarla tal vez ubicación del jugador. Por lo que ahora puedo hacer el efecto sonoro aquí. Y recuerda por el efecto sonoro, teníamos información de nuestro reproductor. Así que vamos a arrastrar nuestra estructura. Y a partir de aquí, digamos romper la pluma de la estructura para que podamos ver las variables. Voy a mover esto un poco para que tengamos más espacio. ¿ De acuerdo? Entonces este de aquí, voy a hacer click sobre esta flecha para ver mis variables. Puedes arrastrar desde este efecto de sonido de salto y automáticamente va a reproducir lo que tengas. Inserta aquí en el salto como efectos para Serena y cuatro lucen también. Así que recuerda hacer esos. Y volviendo aquí. Ahora, para aquellos que no estás usando, puedes hacer click aquí en Ocultar pines desconectados, y los ocultará para ti. Eso es un poco más limpio para trabajar. ¿ Y cuál es la ubicación? De nuevo, consigue jugador o no consigue jugador, consigue ubicación actor. Y así. Por lo que ahora va a funcionar correctamente. Entonces ahora que lo hemos hecho, intentemos compilar y guardar todo. Y hagamos click en Play y veamos si funciona. De acuerdo, así que para completar esto, ahora, en lugar de hacerlo aquí arriba, esto estará jugando constantemente porque en este momento esto se establece a través del estado de movimiento, que coloca todo el tiempo aquí. Entonces en lugar de hacer eso, eso te hará daño a los oídos. Así que tomemos esto y hagamos uno nuevo llamado servidor. Así que el servidor de paletas personalizadas salta. Y esto va a correr a través del servidor así. Y conectemos juntos. Entonces el servidor va a ejecutar estos eventos multicast. Y recuerda que teníamos esta estructura. Saquémoslo y alejémonos de esto y digamos estructura de ruptura. Para que podamos ver los alfileres. Aquí. Puedes hacer click en esta pequeña flecha. Voy a mover esto un poco al revés para que podamos ver qué está pasando. Y ahora puedo arrastrar este salto como efectos a esta variable. Y recuerda, hay que, en Tsarina en los valores predeterminados de clase, hay que agregar el efecto sonoro aquí para que funcione. Así como para Luke, la clase por defecto el efecto de sonido aquí. Simplemente asegúrate de que sean agregados. Por lo que este también funciona. Para los pines que ya no estás usando, puedes hacer click en el éste y hacer clic en Ocultar pines desconectados. Eso será mucho más limpio. Y la ubicación del jugador vuelve a hacer clic y arrastrar aquí y decir consigue ubicación de actor. Entonces así. Por lo que ahora tienes este salto, salto evento aquí. Ahora realmente no estás ejecutando este evento en ninguna parte. Así que recuerda que no lo haces, realmente no tienes frío este evento. Entonces phi y en realidad antes de continuar, vamos a hacer click sobre esto. Replica fiable antes de que me olvide aquí, y sólo para asegurarme de que los otros se dañen. Entonces si hago clic en Jugar ahora, se puede ver que realmente no está haciendo un sonido. Y esto se debe a que nunca lo hemos definido. Nunca hemos llamado a esta función ni a este evento aquí. Entonces para llamar a este evento, llamémoslo aquí abajo en el salto. Por lo que ahora podemos hacer eso. Entonces saltan servidor. Entonces, ¿ahora qué saltamos? Va a pasar por el servidor y podemos llevar esto aquí solo para que esté más organizado. Grupos. Voy a arrastrar eso hacia abajo así. De acuerdo, entonces ahora lo que va a pasar es que voy a hacer clic en salto. El efecto de sonido de salto va a pasar por el servidor. Y entonces eso va a pasar. Y en realidad me gustaría llevar mis variables hasta aquí. Por lo que voy a hacer clic en Control X para cortarlas y pegarlas por aquí. Y déjame simplemente correr esto también, así. Me gusta ejecutarlas todo el camino regreso al evento fuente aquí. Ahora, aquí podemos seleccionar nuestras acciones. Entonces como, conectemos esto de nuevo aquí, así. Entonces ahora esto va a pasar por el servidor. El servidor va a revisar, ¿ se le permite hacer esto? Y si eso es correcto, se va a correr por el multicast donde cuesta la información, el efecto sonoro a todos los clientes. Y luego recuerda, el multicast es para todos los clientes que están cerca de ti ya están conectados al servidor. Para los jugadores que no están cerca de ti, no tendrán esto jugado más adelante cuando se acerquen a ti. Y para los jugadores desconectados, cuando se conecten al servidor, no escucharán esto si lo has hecho hace cinco minutos. Entonces esto tiene sentido. Y en última instancia los jugadores que se acercan a ti, o los jugadores que se conectan diez minutos después. Sólo verán los cambios aquí. Y queremos que vean eso. Queremos que vean nuestro libro actualizado para voltear. Eso está bien. Pero no queremos que escuchen un sonido que se toca hace diez minutos. Entonces esto es algo que corremos a través de un multicast en su lugar. Así que vamos a hacer clic en compilar y simplemente asegurarnos de que todo esté correcto. Tratemos de hacer click en Play y ver qué pasa. Y se puede ver que el sonido está tocando muy bien. Muy bien, salgamos de este juego aquí. Hagámoslo un poco más organizado. Entonces para este salto, voy a incluir todos estos nodos aquí juntos. Porque ahora todo esto está saltando. Y para este de aquí, hagamos esto más pequeño así. Compilemos y guardemos todo y sigamos adelante con el curso. 34. Interfaz de Blueprint: Entonces antes de pasar a la siguiente sección, quiero hablar de Blueprint Interfaces. Las Interfaces de Blueprint se utilizan para organizar tu proyecto. Y también son más fáciles de trabajar cuando se habla de comunicación Blueprint. ¿ Y a qué me refiero con la comunicación de Blueprint? Lo que quiero decir es a veces aquí en la base de jugadores, por ejemplo, si volvemos aquí, a veces dentro de la base de jugadores, hay que usar algo de los modos de juego. Así que en este momento no hemos hecho realmente nada dentro de aquí. Y si voy al modo de juego y lo abrí, en algún momento estamos codificando algo dentro de aquí. Entonces en algún momento de la base de jugadores, necesitamos alguna información que se almacene dentro de nuestro modo de juego. esa información podemos acceder por algo llamado Comunicación Blueprint. Por lo que este actor de planos se está comunicando con este actor de planos. Por lo que estos dos Planos se estarán comunicando juntos. Y aquí es donde entran las Interfaces de Blueprint. Pero ahora mismo, no quiero hablar demasiado comunicación Blueprint porque aún no la hemos usado. Pero estaremos clasificando nuestros eventos. Entonces aquí en la base del jugador, lo que hicimos antes es este conjunto de movimientos estado. En lugar de hacer eventos personalizados como este, vamos a seguir adelante y una Interfaz de Blueprint. Así que vamos a hacer clic aquí y vamos a los planos y crear una Interfaz de Blueprint. En realidad necesito hacer una carpeta para, así que hagamos una carpeta llamada interfaces. Y dentro de aquí, déjame hacer clic derecho en planos y Blueprint Interface. Por lo general empiezo con int o interfaz. Y en este momento queremos hacer uno para la base del jugador. Por lo que normalmente los llamo el nombre del plano. Quiero usarlos para. Quiero usarlo para la base del jugador. Voy a abrir eso ahora. Y se puede ver que es básicamente una biblioteca de funciones. Así que dentro de aquí en el gráfico, realmente no se puede hacer nada. No puedes arrastrar esto. Y puedes hacer cualquier cosa. Puedes ver que tienes tus funciones aquí para que puedas agregar una nueva función. Y puedes ver los detalles sobre esta función aquí abajo. Así que acaba de empezar, vamos a crear este llamado estado de movimientos de conjunto. Entonces en lugar de crearlo como un evento personalizado aquí, vamos a la interfaz y hagámoslo aquí establece estados de movimiento como este, compilar y guardar todo. Ahora para agregar una Interfaz de Blueprint, hay que ir a ese blueprint, por lo que vamos a usarlo y la base de jugadores yendo a la Configuración de Clase. Y aquí se pueden ver interfaces implementadas. Busquemos así, y podemos elegir la interfaz aquí. Ahora vamos a compilar y ahorrar. Y ahora te está dando un error. Y esto es porque acabas de hacer una interfaz. Lo puedes ver aquí, el que hiciste establecer movimientos de estado, y ahora es porque tienes dos de ellos, así que te está dando un error. Vamos a eliminar éste. Pero recuerda aquí, si esto no te aparece, recuerda volver a la interfaz y haz click en compilar. Muy, muy importante que siempre compile sus planos. Así que vamos a pasar a la base de jugadores. Ahora, eliminemos este movimiento conjunto Estados y compilar. Y ahora nos está dando muchos más errores. Y en realidad son estos porque tenemos que reemplazarlos. Pero no nos preocupemos por estas flechas por ahora. Ahora, esta interfaz, hemos hecho algún estado de movimiento. Podemos llamar a esto haciendo clic derecho y diciendo establece movimiento Estados. Y ahora podemos ver que tenemos este evento se establece movimientos estado. Entonces si haces clic en él y este ícono está en Pier, este ícono significa que es de una Interfaz de Blueprint. Porque recuerda que lo hicimos dentro de aquí establecer movimientos estado. Entonces cada vez que añadas la interfaz dentro de tu blueprint, aparecerá aquí y podrás llamarla como, como evento. Y también se puede ver aquí, realmente no podemos arrastrarlo hacia fuera. Para que eso no funcione. Entonces tenemos que hacer clic derecho y buscar el nombre. Lo bueno de las interfaces es que si haces una nueva, llamémoslo al azar. Solo quería mostrarte cuando es así. Y vuelves al plano o a la base de jugadores, puedes ver este evento aleatorio aquí. Si hago clic derecho y escribo al azar y encontrar los eventos, y puedes ver aquí, evento aleatorio aquí. Pero si yo, si pongo una salida aquí, así que si hago clic en aleatorio y agrego aquí una variable, así que hago clic en este botón más y vamos a añadir aquí una variable aleatoria. Si compilo ahora y guardo, y vuelvo a mi base de jugadores, ya puedes ver que ya no es amarillo. Entonces si i, si agregas una salida a un evento aquí, esto en una función. Por lo que ahora en realidad podemos hacer doble clic este año. Y se puede ver que es una función en su lugar, al igual que cuando creaste funciones aquí arriba no es saltar. Por ejemplo, creamos eso antes. También puede crear funciones dentro de interfaces y utilizarlas. Entonces cuando añadas una salida, dos funciones dentro de aquí, se convertirán en funciones. Y si no agregas una salida, se convertirán en eventos. Así que muy, muy bueno recordar eso. Los eventos son amarillos, las funciones son de este color, así que eliminemos ese aleatorio. Realmente no lo necesitamos por ahora. Vamos a compilar y ahorrar. Y volvamos aquí y conectemos este estado de movimiento establecido. Ahora teníamos aquí el movimiento se quedó. Y al igual que antes para los eventos del cliente, no podemos hacer clic y arrastrar y agregar la variable automáticamente. Para que puedas ver aquí, si hago clic y arrastro, no puedo agregarlo automáticamente, así que tengo que hacerlo yo mismo. Entonces Blueprint Interfaces, tardan un poco más de tiempo en configurarse, pero hay más optimizados. Tu juego correrá mucho más rápido. Entonces volvamos a la Interfaz de Blueprint. Haga click en éste y agreguemos los insumos. Y se llamaba estado de movimientos E. Entonces esa fue nuestra enumeración. Entonces vamos a hacer clic aquí, y llamémoslo movimiento Estados así. Y ahora se puede ver que no me deja hacer eso. Entonces tengo que compilar y déjame intentarlo de nuevo. A veces, brota así. Probablemente tenga que cerrar el proyecto y abrirlo de nuevo. Muy bien, acabo de cerrar y abrir el proyecto. Así que intentemos de nuevo, pinchando aquí, etapa de movimiento. No me deja seguir haciéndolo aquí. Creo que es porque en la base de jugadores ya tenemos. Volvamos a una base de jugadores. Vamos a averiguarlo. Creo que es porque ya tenemos este llamado estado del movimiento. Permítanme borrar todos aquellos así. A lo mejor puedes hacerte una foto para que puedas recordar lo que estaba diciendo. Pero ahora vamos a compilar aquí, guardar, volver a la interfaz, y ahora intentemos cambiarlo Estados Movimiento. Y ahora me llevó, probablemente sea por las otras funciones que hay. Por lo que ahora que lo tenemos, se puede ver agregó eso a nuestra interfaz de evento. Y de nuevo, al igual que antes, podemos conectarlo. Y ahora podemos llamarlo aquí arriba. Entonces tengo que recordar lo que había aquí. Estaba inactivo cuando el movimiento era 0. Por lo que al ejecutar los movimientos de evento de nombre se declaran aquí, así establece el movimiento Estados. Y puedes ver aquí, puedes llamar a esta función diciendo int player base. Entonces llamándolo desde la interfaz, puedo hacerlo aquí arriba. Pero descubrí cuando estaba trabajando que es mucho mejor seleccionar éste bajo int base de jugador. Cuando lo seleccionas a través del interior en lugar de la función de carbón, ésta se actualiza automáticamente. Siempre que lo actualices aquí en la interfaz, te va a dar un error si seleccionas el otro, solo uno se actualiza automáticamente. Por lo que siempre selecciono éste. Entonces el ídolo aquí, sólo puedo hacer clic y copiar pegar aquí y bolsas conectadas. Por lo que era derechos de carrera y luego correr a la izquierda. Y aquí arriba era salto. Entonces cuando no era plus era basura y era caída. Así que así. Por lo que ahora hemos implementado la Interfaz de Blueprint y tenemos la función aquí. Y es mucho más limpio y puedes tener todas tus funciones para la base del jugador. A lo mejor ya lo adivinaste. Posteriormente vamos a crear más Interfaces Blueprint, una para el modo de juego, una para el controlador de jugador, y así sucesivamente, cada vez que matamos cosas ahí dentro. De acuerdo, así que ahora ya no puedo ver eventos personalizados que hicimos aquí, así que todo está bien y eso fue todo por ahora. Así que pasemos a la siguiente lección. 35. Introducción al plan de trabajo: Ahora es el momento de hablar sobre el sistema de desove y empezar, hablemos de los blueprints de widgets y Widget Blueprint es donde se crea la interfaz de usuario. Entonces con lo que queremos empezar, hagamos una nueva carpeta aquí en el contenido. Voy a hacer clic derecho hacer una nueva carpeta y llamémosla UI para interfaz de usuario. Dentro de aquí, vamos a hacer clic derecho. Y aquí abajo en la interfaz de usuario, puedes crear un Widget Blueprint. Entonces creando ese y seleccionando Widget Blueprint aquí arriba. Redacción WB para Widget Blueprint. Y lo primero que vamos a crear es la selección de personajes. Así Selección de personajes. De acuerdo, Así que ya puedes hacer doble clic en él. Y para empezar, quiero hablar la interfaz o visión general de en qué consiste esto. En lugar de aquí en el medio se puede ver el gráfico. Y de nuevo, puedes hacer clic con el botón derecho y desplazarte para moverte en el gráfico. Aquí es donde diseñas la interfaz de usuario. Y la segunda parte de esto consiste en es el gráfico. Por lo que tiene el diseñador diseñará la interfaz de usuario. Y luego tienes el gráfico donde agregas funcionalidad a la interfaz de usuario. Para que puedan ver, esto nos resulta familiar. Estos, aquí es donde codificamos. Aquí. Podemos ver nuestras variables y funciones y así sucesivamente. También puedes ver los diferentes detalles sobre, por ejemplo, una variable en la que hacemos click. Esto nos resulta muy familiar ahora. Y en el diseñador, lo que tienes aquí es el gráfico. Tienes los elementos que puedes usar para diseñar tu interfaz de usuario. Y luego se pueden ver todos los elementos que se suman aquí abajo. Nuevamente, tienes un panel de detalles donde puedes cambiar detalles sobre los elementos. Por ejemplo, puede cambiar el estilo de fuente, el tamaño de fuente, la imagen es estilo, y así sucesivamente. Solo por una pequeña práctica antes de que termináramos, intentemos agregar algo. Entonces, por ejemplo, tienes un bloque de texto, por lo que tenemos aquí los activos comunes y comunes. Puedes intentar hacer click a través de ellos y ver lo que tienes por aquí. No te sientas libre de agregar cosas a la interfaz de usuario. Se puede. Siempre es agradable probarlo. Entonces lo que puedes hacer es con lo que normalmente empiezo al crear UI, por lo general creo un panel de lienzo. Entonces si buscas aquí arriba por Canvas, tienes este panel de lienzo. Para que puedas arrastrarlo y colocarlo aquí abajo. Se lo agregará a la interfaz de usuario así. Y se puede ver el lienzo se ha agregado. Ahora esto es algo muy básico. Se agrega un lienzo, el lienzo, se agregan diferentes elementos. Entonces, por ejemplo, podemos añadir este texto. Puedes agregarlo haciendo clic y arrastrándolo hacia abajo sobre el lienzo. Y se puede ver el texto se ha agregado. O puedes hacer clic y arrastrarlo y colocarlo en cualquier lugar aquí dentro del lienzo y lo coloques. Por lo general, lo que me gusta hacer es simplemente arrastrar hasta aquí y luego hago clic en él. Así que simplemente eliminemos uno de ellos haciendo clic en Eliminar en mi teclado. Puedes hacer click en ese texto, por ejemplo, y puedes ver diferentes detalles sobre este texto. Para que puedas cambiar la posición de la misma, para que pueda hacer clic y arrastrar y puedes cambiar la posición. Por ejemplo, podemos escribir ciento ciento y la y. y se puede cambiar el color del texto. Puedes cambiar la fuente aquí, seleccionando qué tipo de financiación es, qué tan grande es el fondo, etcétera. Por lo que tienes diferentes detalles. Se puede cambiar sobre los elementos. Aquí están los elementos más comunes. En lo común, puedes intentar, por ejemplo, arrastrar un botón y puedes ver qué cosas puedes cambiar sobre un botón. Así que siempre agradable simplemente arrastrarlos aquí, una imagen. Siempre usamos imágenes para que puedas tratar de familiarizarte con ellas. Puedes ver, puedes escalarlos aquí con estas bonitas cosas de montar para que puedas hacer clic y arrastrarlo alrededor. Puedes hacer click en este pincel, por ejemplo, para una imagen y puedes seleccionar qué tipo de imagen es. Entonces por ejemplo, pinchando aquí, puedo seleccionar, vamos a ver mi sprite. Y se puede ver que el sprite se ha agregado como una imagen. Y puedes cambiar el tamaño de la imagen por aquí. También puedes cambiar el color de la imagen. Por lo que tienes muchas opciones con las que estaremos trabajando más adelante. Otras cosas geniales antes de que termine esto aquí, tienes algo llamado caja horizontal. Aquí una caja horizontal, podemos arrastrar eso aquí. Y vamos, déjenme borrar todos esos por ahora. Haga clic en Eliminar. Por lo que tenemos esta caja horizontal. Voy a arrastrarlo por aquí y escalarlo. Entonces en esta caja horizontal, dondequiera que coloque aquí se colocará horizontalmente. Entonces si tomo este texto y lo coloco aquí abajo en el cuadro, ya se puede ver que está dentro de esta caja horizontal. Y si agrego un texto más, o en realidad vamos a añadir una imagen en su lugar. Agreguemos una imagen en la caja horizontal. Ahora se puede ver que está agregando cosas horizontalmente para que no se superpongan entre sí. Y si agrego otro texto, ahora se puede ver que agrega elementos horizontalmente. Por lo que ahora añadí, agregué esto por error aquí abajo para que pueda hacer clic y arrastrarlo a este cuadro. Y se puede ver agrega elementos horizontalmente. Ahí. Lo mismo va para una caja vertical. Agrega cosas verticalmente una por debajo del otro. Y si quieres que las piezas se superpongan juntas. Entonces por ejemplo, tenemos un botón y tenemos una imagen en el botón. Usamos algo llamado superposición. Para que pueda agregar una superposición aquí. Y déjame simplemente agregar un botón. Entonces si hago clic en el botón o busco botón, agrégalo a la superposición. Ya puedes ver mi botón está en la superposición, y ahora puedo buscar imagen y colocarla en el botón aquí. Por lo que ahora se puede ver que estoy superponiendo cosas una encima del otro. Tengo un botón y tengo una imagen en los botones. Entonces por ejemplo, puedo elegir una imagen aquí y ya puedes ver tengo una imagen en mi botón para que puedas ver que no se ve muy bien porque tengo que hacer click en mi superposición y redimensionarla y así sucesivamente. Pero estaremos trabajando con todo esto. Solo quiero presentarte a la interfaz de usuario. Siéntete libre de solo buscar cosas aquí, trata de poner esta barra de progreso en. Ve qué pasa si aumentas el porcentaje como este e intentas jugar con la interfaz de usuario, siempre es agradable jugar. Y cuando haya terminado, adelante y elimine todos aquellos incluyendo el panel de lienzo y compilar y guardar. Y luego pasemos a la siguiente lección y comencemos crear la interfaz de usuario de selección de caracteres. 36. UI de selección de personajes: Empecemos a crear la interfaz de usuario de selección de caracteres. Por lo que aquí en el Widget Blueprint que creamos anteriormente, Demos click en eso aquí. Entonces lo que queremos crear, fui adelante y lo creé de antemano para poder mostrarte lo que estamos tratando de crear. Y siempre es agradable ver ese objetivo al que estamos apuntando. Estamos apuntando a crear este personaje. Y luego tenemos dos botones donde puedes desovar ya sea un bucle o Serena dependiendo de lo que presiones. Entonces esto es lo que estamos tratando de crear. Y luego tenemos un trasfondo que se desdibuja. Entonces este es el objetivo que tenemos que crear. Y siempre es agradable imaginarlo en tu mente y tratar de descomponerlo. Así que de nuevo, hablé una caja vertical y una caja horizontal en la lección anterior. Y por ejemplo, estos dos botones están dentro de una caja horizontal porque llegan tarde uno al lado del otro. La imagen y el botón están dentro de una superposición porque se superponen cosas una encima de la otra. Así que cosas muy básicas, así que muy bueno para imaginarse lo que estás tratando de hacer para que sepas qué elementos vas a usar. Pero vamos a repasar y crear lo nuestro propio. Entonces primero tenemos que importar algunos activos. Primero aquí en la interfaz de usuario, haga clic con el botón derecho y vaya a Nueva carpeta. Hagamos uno llamado fondos. Vamos, agreguemos otra carpeta llamada Botones. Agreguemos otro llamado Fonts. Y el último, llamémoslo imágenes. A lo mejor necesitamos uno llamado iconos más adelante, pero eso es para más adelante. Entonces aquí en los antecedentes, te he proporcionado estos materiales del curso aquí. Entonces en los materiales del curso, salta adelante y encuentra la interfaz de usuario. Y también aquí estas son las carpetas. Entonces en los fondos, se puede arrastrar eso aquí. Y para éste, no haga clic derecho y aplique configuraciones 2D. Esto no es una púa, esto no es pixelado. Esto es básicamente sólo una imagen. Así que volvamos atrás y dentro de los botones. Aquí, vamos a importar todos estos botones. Por lo que no vamos a utilizar todos ellos, pero tienes una variedad si quieres usar diferentes colores en tu versión del juego. Y luego vayamos a las fuentes, y volvamos aquí, vamos a los fondos y vamos a sumar todos estos fondos. Y entonces te va a preguntar, ¿quieres crear esos fondos aquí y simplemente haz click en Sí, Todo lo que va a crear fondos para ti. Y lo último son las imágenes o las imágenes. Y volvamos a sumar las imágenes, que es una chupada y Serena. Entonces agregándolos aquí, voy a aplicar a estos ajustes porque estos son en realidad selecciones mucho. Así que haga clic derecho en esos y aplique los ajustes de textura 2D de papel. Así como eso. Si te estás preguntando dónde puedes obtener fuentes como esta, siempre puedes buscar fuentes de Google. Yo uso esto para hacer mis videojuegos. Tan divertido. Google Fonts busca eso. Dentro de aquí tienes impresionantes fuentes gratuitas y puedes usarlas comercialmente para lanzar en Steam o en cualquier otra plataforma. Por lo que todos estos son gratis. Sea cual sea lo que encuentres dentro de aquí, puedes intentar buscar un fondo, intentaste encontrar diferentes estilos específicamente y así sucesivamente. Sitio web tan genial si lo quieres, adelante y encuéntralo en fuentes de Google. Por supuesto, puedes comprar fuentes por dinero e importarlas dentro de aquí también. Así que hagamos clic en Archivo y guardemos todo. Ahora que lo tenemos todo, volvamos al Blueprint Widget y estamos listos para empezar aquí. Entonces primero lo que quiero hacer es agregar una caja vertical. Busquemos vertical y agréguelo aquí. Y en realidad antes de que hagamos eso, en realidad olvidé agregar el panel de lienzo. Entonces agrega el panel de lienzo siempre como el primer elemento. Y luego agreguemos la caja vertical. Siempre necesitamos un lienzo primero. Ahora tenemos esta caja vertical donde todo estará dentro. Entonces tenemos, de nuevo, si llevo esto de vuelta aquí, tenemos la caja vertical donde teníamos este título y debajo de él tenemos los botones. Por eso estamos usando una caja vertical. Y primer año, necesitamos centrar esta pieza en medio de la pantalla. Y para ello, aquí es donde se utilizan los puntos de anclaje. Muy importante usar puntos de anclaje y ponerlos para todos tus elementos. Por lo que da click en este ancla y configurándolo a la mitad de la pantalla así. Ahora en el puesto si escribes 00, puedes verlo alinea a esta parte superior aquí, pero queremos que sea en el medio. Y aquí es donde se puede jugar con la alineación. Se puede ver la alineación en la x y alineación en el Y. Y parece que si escribes 0.5 en cada uno, se alineará en el medio, así como esto. Muy bien, así que empecemos aquí. Vamos a crear una superposición y colocarlo aquí en los bugs verticales porque ahora una superposición es donde se superponen elementos. Por lo que quiero superponer una imagen y un texto encima de ella. Así que busquemos imagen. Arrástralo aquí, colócalo en la superposición y ya puedes ver que tenemos una imagen. Vamos a seleccionar qué imagen queremos usar. Ahora, este es solo el fondo que quieres usar. Sólo voy a usar este botón llamado. En realidad este un botón plano, Negro Cuadrado Plano. Entonces usando éste y voy a hacer que llene todo este segmentos. Para que puedas ver aquí tienes alineación horizontal y vertical. Horizontalmente, quiero llenarlo a todo el asunto aquí. Por lo que ahora, dependiendo de cuán grandes sean tus cajas verticales. Básicamente va a llenar todo el asunto. Esto es lo que son las alineaciones verticales y horizontales. Entonces voy a usar algún texto, y voy a dejar caer los textos encima de la superposición. Aquí. Quiero el texto en el medio. Por lo que voy a alinear este texto al medio aquí, al medio aquí. Y llamémoslo aquí en el texto. Selecciona un personaje. Así como eso. Ahora, podemos seleccionar el color, creo que está bien. Entonces podemos seleccionar cosas sobre la fuente. Lo que quiero hacer es, utilicemos este llamado Source Sans Bold. Entonces usando éste aquí. Y voy a hacer que sea 14 de tamaño. Por lo general, cuando miro cuando creo la interfaz de usuario, suele ser más correcto cuando tienes Zoom Plus dos aquí arriba, si miras eso, así que si alejas y adentro, generalmente está alrededor de Zoom Plus dos, pero a veces las corrijo después de que los agrego al juego. Así que selecciona personaje y hagamos algunas sombras. Me gusta tener algunas sombras en mi texto. Entonces aquí abajo en el color de la sombra, que actualizar alpha aquí el alfa es básicamente la opacidad de la sombra. Entonces si escribes uno, puedes ver que tienes sombra para nuestras 0.5 opacidades como 50%, voy a escribir 0.35. Por lo que 35 por ciento sombra y el desplazamiento de la sombra voy a escribir 22. Entonces está un poco más lejos del texto, algo como esto. Lo que voy a hacer ahora es que también voy a añadir una imagen aquí arriba solo para peinar. Así que voy a agregar una imagen aquí arriba bajo superposición de nuevo. Así que ahora estás superponiendo uno encima del otro. Voy a seleccionar el azul ahora, el botón, cuadrado azul plano. Entonces lo que puedes hacer ahora es que puedas disminuir el tamaño aquí en la y, para que sea más pequeña. Y también quiero llenarlo horizontalmente así. Voy a hacer el tamaño sólo cinco pixeles, así como eso. Y si quieres visualizar tu interfaz de usuario sin estas líneas discontinuas, puedes hacer clic aquí arriba. Y creo que a veces es genial hacer eso para que pueda ver cómo se ve realmente mi interfaz de usuario. Acabo de hacer eso por peinar. Puedes hacer click sobre esta imagen aquí. También puedes hacerlo más pequeño. Entonces si hago click en esta imagen aquí, puedes hacer más pequeña y la y Por si acaso crees que esto es demasiado grande, voy a hacerlo algo así. Ahora bien, este texto no parece que esté completamente en el medio, porque cuando lo haces más pequeño, puede ver que casi llega a esta línea más rápido que aquí abajo. Entonces volviendo al 61, voy a empujar un poco este texto hacia abajo. Entonces aquí arriba en el relleno, podemos empujar las cosas a los lados. Entonces desde arriba, voy a empujarlo. Te imaginas que alguien lo está empujando desde arriba. Puedo empujarlo a pixeles. Para que puedas ver, si escribí diez, puedes ver que está bajando. Alguien lo está empujando desde arriba. Aquí a la derecha, alguien lo está empujando desde la derecha. Entonces esto es lo que significa. Y el emparejamiento aquí desde la tina, solo quería empujarlo hacia abajo a píxeles, así que está más abajo así. Muy bien, a continuación voy a hacer una caja horizontal para poder tener estos dos botones aquí abajo. Entonces en busca de horizontal. Y lo voy a dejar caer encima de mis dólares verticales porque quería debajo de esta cosa aquí que creé. Entonces esta caja horizontal, quería tener dos botones. Vamos a crear nuestro primero. El botón consiste en un botón y una imagen. Entonces hagamos primero una superposición porque queremos superponer dos elementos uno encima del otro. Queremos un botón, primer botón, y vamos a poner ese botón en la superposición. Y luego necesitamos una imagen en la parte superior del botón, así como esta aquí. Entonces poniéndolo hasta la superposición. Por lo que tenemos dos elementos superpuestos entre sí. Entonces haciendo clic en el botón, vamos a seleccionar el estilo. Entonces por aquí en el estilo, en lo normal, seleccionemos el botón y quiero usar aquí el botón azul, botón, cuadrado azul, éste. Ahora, algunos ajustes podemos cambiar. El tinte es genial. No quiero que haga eso. Entonces voy a cambiar el tinte a completamente ancho para poder usar los verdaderos colores de mi botón. Y luego en lugar de errores redondeados, se puede ver que hay una extraña línea alrededor de mi botón. Y esto se debe a que es una caja redondeada. Lo voy a cambiar a una caja en su lugar. Puedo ver que se ve un poco de baja resolución, es borrosa. Y puede hacerlo por, se puede hacer eso aumentando el margen para que parezca más claro. Entonces 0.5 es el margen máximo que puedes hacer. Por lo que va entre 0.10123450. Entonces 0.5, el mejor para usar. En este caso, si alejo un poco así así, así es como se ve el botón. Necesito hacer lo mismo aquí por el Hubbard y presionado. Entonces en lugar de ir aquí y encontrar este mismo botón una y otra vez, como pequeño truco, puedes hacer clic derecho y puedes copiar esto, y luego puedes hacer clic derecho y pegarlo aquí. Un atajo para esto. Puedes ver si mantiene presionada Mayús en tu teclado y haz clic con el botón derecho, puedes copiar. Así que mantenga presionada Mayús, haga clic con el botón derecho y copie, y luego mantenga presionada Mayús Y puedes pegarlo aquí. Por lo que puede hacer eso con esto. Se puede hacer eso con el color del tinte también. Así que haga clic derecho en turno y haga clic derecho para copiar Mayús y haga clic izquierdo para pegarlo en estos dos. A eso. Lo mismo con los márgenes son flujo de trabajo muy rápido aquí. En cuanto al tinte cuando pongo el cursor. Entonces cuando alguien se cierne sobre mi botón, quiero que lo hagan, quería cambiar un poco de color. Entonces algo como esto. De acuerdo, cuando estés contento con esto, puedes hacer click en OK. Y aquí en deprimido, quiero tener un poco de un color más oscuro cuando alguien presiona el botón. Y ahora tenemos el botón aquí y aquí para esta imagen, vamos a ponerlo aquí en medio del botón así. Seleccionemos la imagen. Y lo que quiero usar es aquí en las imágenes que queremos usar Serena para esta. Yo voy a, ya sea puedes encontrar Tsarina aquí en las imágenes como esta o puedes hacer click y arrastrar. A veces es una forma más rápida como este año. De acuerdo, entonces tenemos la imagen aquí. Voy a empujarlo un poco hacia arriba porque se puede ver que tenemos esto aquí abajo y necesito empujarlo un poco hacia arriba para que parezca que está en el centro del botón. Así que de nuevo, lo que te he enseñado sobre el relleno, lo estamos empujando desde abajo, desde el botón, puedo empujarlo a píxeles hacia arriba, así como eso. Lo que quiero hacer aquí, quiero dar click en este cuadro horizontal y quiero hacer click en Rellenar. Por lo que ahora puedo ver la caja horizontal está realmente llenando todo el asunto. Y lo mismo con la superposición, quiero hacer click en llenar el agujero. superposición llena toda la zona aquí abajo. Y por lo que respecta a este botón aquí, hagamos clic en él y hagamos clic en Rellenarlo horizontal y verticalmente, así así. Y luego necesitamos un poco de espaciamiento entre estos dos. Se pueden ver que están montados y no queremos eso. Por lo que aquí arriba puedes buscar espaciador. Esto, quiero ponerlo entre la oreja y la caja vertical, entre la superposición y la caja horizontal por aquí. Y se puede ver que está entre estos dos elementos ahora, seleccionando eso, y esta es la x y, y está en la y, necesitamos algún espaciado. Voy a hacer que sea diez, así. Y ya puedes ver que tenemos algún espacio entre ellos. Podrías pensar, ¿por qué llenaste todo el asunto aquí abajo? Y me gustó que mi interfaz de usuario fuera dinámica. Entonces lo que quiero decir con eso es si hago clic en este cuadro vertical ahora por lo cambio de tamaño, puedes ver mi UI cambia de tamaño dinámicamente. Cambiar el tamaño que hago por aquí. Entonces en lugar de definir, si hago clic en el botón, en lugar de definir el tamaño por esta imagen. Y más tarde me entero que me gusta que esto sea más grande. En lugar de ir aquí y cambiar el tamaño de las cosas, me gustaría simplemente hacer clic en mi, mi elemento superior y simplemente redimensionarlo y hacer que se vea bien. Así que eso es una semana que tenemos que hacer. Y creo que también es más limpio hacerlo así. Tenemos ese botón ahora necesitamos otro botón. Por lo que si hago click en esta superposición y hago clic en Control D, o puedes hacer clic con el botón derecho y hacer clic en duplicado. Eso es lo mismo. Por lo que ahora tenemos dos botones. Ahora para esta imagen, quiero usar el botón rojo. Este, botón rojo, cuadrado rojo, botón derecho mientras mantiene pulsado Mayús para copiar, haga clic con el botón izquierdo mientras mantiene pulsada la tecla Mayús para De acuerdo, entonces ahora tengo eso y para esta imagen, necesito cambiarla. Entonces voy a conducir mirada a esta imagen ahora. Voy a añadir un espaciador entre estos dos botones. Entonces un espaciador entre estas dos superposiciones, así. Y ahora este espaciador está en la x. voy a subir 15 por éste. Por lo que ahora tengo dos botones y se ponen muy bien juntos. Ahora puedo arrastrar esto y hacerlo más grande. También puedo redimensionarlo por aquí. Creo que algo así sería muy apropiado para mí. Ahora, si haces clic en el cuadro vertical, asegúrate de que esté en el medio. puede ver que no está completamente en el medio. Ahora, voy a cambiar esta posición en la x e y a 00, justo así. Y ahora está dentro del medio. Entonces compile y guardemos todo. Entonces lo último que tenemos que hacer aquí ahora que tenemos nuestros botones, necesitamos agregar un fondo. Y esto es simplemente una imagen. Entonces si minimizas esto aquí, y si acabo de arrastrar una imagen aquí detrás de todo, quiero que llene toda la pantalla. Nuevamente, puedes hacer click en el ancla y dar click en éste para llenar toda la pantalla. Y ahora solo podemos escribir 0 en las compensaciones aquí, 00. Ahora llena toda la pantalla y puedes cambiar el fondo. Entonces dentro de la carpeta de mi fondo, puedo arrastrar mi fondo. Y ahora está llenando toda la pantalla aquí. Ahora quiero desenfocar la imagen. Y tú puedes hacer eso. Si escribirás desenfoque aquí arriba y tienes a éste llamado desenfoque de fondo, voy a poner eso aquí y tienes especificar la cantidad de desenfoque de nuevo, tienes que hacer click en los puntos de anclaje, hacer que llene toda la pantalla, a la derecha 00 y las compensaciones. Y puedes escribir la cantidad con la que desenfocarla. Ahora podemos escribir diez por ejemplo, y se puede ver que no pasa nada. Y esto se debe a que el desenfoque de fondo necesita estar debajo de la imagen para estar encima de ella, así aquí. Por lo que ahora podemos ver el desenfoque. Y así es como se desdibujan las imágenes. Y creo que un desenfoque de diez está funcionando muy bien para éste. Entonces ahora lo que te aconsejaría que hicieras, puedes, por ejemplo, hacer click en este texto aquí. Si estoy haciendo un proyecto serio, en realidad estoy cambiando los nombres de todos estos aquí. Porque si vas al gráfico, puedes ver, en realidad puedes ver los elementos que has creado. Para que puedas ver todas las imágenes y los dos botones que has creado. Entonces vamos, por ejemplo, a este botón si haces clic aquí en él, y también puedes seleccionarlo aquí, puedes cambiar este botón a btn. Usualmente uso eso como prefijo para botones. Y lo llamo por Serena. Y hago click en el otro y lo llamo n. mira, esto es muy bueno hacer porque si vas al gráfico ahora, en realidad podemos ver cuáles son estos elementos. Este es el botón para bucle. Este es el botón para Serena. No tengo ni idea de cuáles son si no les doy un nombre, así que es imposible para mí saber cuáles son estos. Y a veces realmente no necesitamos variables. Para que puedas ver estas son en realidad variables que puedes usar aquí en el Gráfico de Eventos. Pero a veces no las necesitamos como variables. Entonces, por ejemplo, este cuadro de título de aquí, nunca vamos a cambiar nada al respecto. Entonces realmente no necesito que sea una variable. Entonces es aquí donde puedes desmarcar esta llamada es variable. Por lo que puede desmarcarlo. Puedo hacer lo mismo con este de aquí arriba es variable. Y creo que también podemos hacerlo con estos. Hagámoslo en realidad. Así que mantenga el control, seleccione ambos, elimine esta variable, Compile y Save. Y se puede ver en el gráfico ahora hemos eliminado todos estos. Ahora tenemos una sola imagen que queda. Podemos intentar adivinar esas imágenes y ese es probablemente el fondo. Entonces si lo miras aquí, imagen 1026, se llama lo mismo, 1026. Y tampoco necesitamos cambiarlo realmente. Por lo que voy a quitar esto es variable. Y esto hace que todo se vea mucho más limpio. Por lo que me gusta mantenerme limpio dentro de mis proyectos. Y probablemente sean sólo los botones que necesitamos como variables porque los vamos a utilizar para cuando el jugador presione los botones. Entonces esto fue todo chicos para la pantalla de selección de personajes. Espero que te hayas divertido creando esta interfaz de usuario, y pasemos a la siguiente lección. 37. Cómo agregar la interfaz de usuario al Viewport: Así que sigamos adelante y agreguemos nuestra interfaz de usuario a la pantalla. Por lo que hicimos esta pantalla de selección de personajes y queremos agregarla aquí a la ventana gráfica. Entonces cuando hacemos clic en Jugar ahora mismo , realmente no pasa nada. Estamos de vuelta aquí con nuestro personaje, pero queremos sumar la pantalla de selección de personajes. Entonces para hacer esto, por lo general agregamos una interfaz de usuario en el controlador del jugador. Así que vamos a los planos, y ahora vamos a usar nuestro control de jugador. Creo que aún no lo hemos usado, así que todavía está vacío, abierto editor de planos completo. Y dentro del controlador del jugador es donde agregamos UR es tan importante recordar. Eliminemos estos eventos predeterminados. Siempre podemos agregarlos si queremos. Ahora, muy importante entender, interfaz de usuario es algo de cara al cliente. Por lo que solo eres tú como jugador quien va a ver tu propia interfaz de usuario. Entonces cada jugador en el juego como una interfaz de usuario. Así que tal vez tengas un bar experimentado aquí abajo. Tienes algo de nivelación aquí abajo. No sé, alguna interfaz de usuario aleatoria. Entonces toda la interfaz de usuario que tienes es del lado del cliente, por lo que no es del lado del servidor. Entonces toda la interfaz de usuario es individual para cada jugador. Así que volvamos al controlador del jugador aquí. Y lo primero, vamos a hacer unos eventos personalizados. Así que hagamos un evento personalizado y lo llamemos inicializar widgets. Y de nuevo, te lo dije antes, en lugar de hacer esos eventos personalizados, es bueno usar una Interfaz de Blueprint, pero en realidad lo hagamos primero y luego cambiarlo con una Interfaz de Blueprint después de eso. Así que hagamos otro, otro evento personalizado y lo voy a llamar CL, inicializar widgets. Por lo que esto va a ser un cliente de lado uno que no ha usado a un cliente a un lado. Lo único que usamos si volvemos a la base de jugadores ahora, lo único que usamos hasta ahora es un lado del servidor, así que ejecutándose en el servidor. Pero para la interfaz de usuario, se están ejecutando en el cliente. Así que haciendo clic en Ejecutar en poseer cliente y luego confiable. Y ahora para crear UI, decimos que crea widgets. Ui se llama widgets. Creamos widgets. Así que crea widget. Y así es como se crea una interfaz de usuario dentro de Blueprint. Entonces vamos a conectarlo aquí arriba. Y ahora tienes que seleccionar qué interfaz de usuario quieres crear. Y obviamente no tenemos mucho. Sólo tenemos éste, selección de personajes. Entonces esta es la que queremos sumar. Así que ahora que lo agregaste, siempre es agradable hacer clic derecho aquí y promoverlo a una variable para que puedas usar esa variable más adelante cuando quieras ocultar o volver a mostrar la ventana. Así promueve una variable. Llamémoslo WB, ese es mi prefijo. Puedes elegir lo que quieras. Y lo voy a llamar selección de personajes. Por lo que esta es la selección de caracteres Widget Blueprint variable. Ahora a la ventanera, por lo que es visible. Puedes ver aquí si hago click en Jugar ahora, no pasa nada y esto es porque necesitas agregarlo a la ventana gráfica. Entonces si vuelvo aquí, tengo que arrastrar desde la variable y decir agregar dos ventanas gráficas. Y se puede ver éste llamado Agregar a Viewport. Así como esto. Así que ahora si haces clic en play y no va a pasar nada porque recuerda que tienes que llamar al motor LCD de eventos no sabe lo que estás haciendo. Así que huyendo de este evento personalizado, tal vez ya lo hayas adivinado. Tenemos que llamar a nuestro evento del lado del cliente aquí. Entonces CL inicializó widgets. Está pasando de un evento normal que entra en la carrera en el cliente. Entonces desde el cliente estás creando la interfaz de usuario y se mostrará. Pero claro que tenemos que ejecutar este evento también porque el motor no sabe qué cuando se quiere ejecutar este evento. Y solo quiero ejecutarlo aquí al principio de juego. Así que cada vez que hago clic en jugar en el juego, quiero mostrar aquí mi selección de personajes. Así que llamemos a este evento aquí, inicialicemos widgets así. Así que ahora cuando haga clic en Play, se va a ejecutar este evento. Este evento ejecutará este evento que se ejecuta en el cliente. Y luego vamos a crear la interfaz de usuario y luego agregarla a la ventana gráfica. Vamos a salvar todo. Demos clic en Play. Y se puede ver cuando hago clic en Play, ahora mi interfaz de usuario está en la pantalla. No obstante, se puede ver que puedo pasar el puntero sobre los botones, pero mi mouse no es visible. Esto se debe a que en el controlador del jugador, tienes en los valores predeterminados de clase. Tienes que hacer click en éste llamado Mostrar cursor del ratón. Entonces haciendo click aquí, vamos a compilar y guardar y ver qué pasa. Ahora puedo ver mi cursor, y ya puedes ver ahora puedo ver mi IU y dar click en los botones. Ya ves aquí tenemos un pequeño bicho. Puedo pasar el cursor el botón se puede ver cambios de colores. Pero si pongo el puntero sobre la imagen, ya no puedo pasar el puntero. Se puede ver que el efecto de hover desaparece. Esto se debe a que mi imagen está bloqueando mi botón. Tenemos que arreglar eso. Entonces volver a la interfaz de usuario aquí, y esto es muy importante. Esta imagen actualmente está bloqueando este botón, por lo que no puedo presionarlo. Y seleccionemos tanto esta imagen como esta imagen. Bajemos y hay que cambiar éste. El visibilidad en su comportamiento. Discapacidad, cambiarlo a ninguno, golpear comprobable. Y esto significa que no importa que esta imagen esté ahí. Sólo quiero ignorarlo. Entonces el ratón lo va a ignorar. Se puede ver aquí por jugar ahora, y me desplomo sobre la imagen, no importa. Todavía estoy flotando sobre el botón. Entonces esto para que tengas que establecer elementos a no golpear comprobable si no quieres que bloqueen tu interacción con los botones y el mundo. Vale, así que antes de terminar, en lugar de hacer este evento personalizado widgets inicializados, hagámoslo en realidad en una, una Interfaz de Blueprint y luego puedes tener algunos ejercicios de eso también. Entonces vamos a minimizarlo e intentar hacerlo tú mismo si quieres. Este es el mismo método que hicimos antes de ir a la carpeta interfaces. Ahora habíamos hecho uno para la base del jugador, así que tenemos que hacer uno nuevo para el controlador del jugador. Así que vamos a hacer clic derecho, vaya a los planos aquí y seleccione Interfaz de Blueprint. Y de nuevo, por lo general lo llamo el nombre del blueprint en el que quiero usarlo. Por lo que queremos usarlo en el controlador del jugador como este y dar click sobre él. Y ahora vamos a darle un nombre a esta función y llamarla de nuevo, inicialicemos widgets así. Compilar y Guardar. Y volvamos al controlador del jugador. Recuerda, de nuevo, recuerda compilar aquí, muy importante, compilar save. Volvamos al controlador del jugador. Y dentro de aquí, vamos a Ajustes de clase. Y aquí en las interfaces, agreguemos nuestra interfaz para el controlador del reproductor. Y ahora lo puedes ver aparecer aquí. A continuación, puede escribir widgets de inicialización. Y se puede ver el evento inicializar widgets aquí, y viene de una Interfaz Blueprint. Esto es lo que significa el ícono. Ahora podemos conectarlo aquí arriba. Y también podemos llamar al evento aquí, inicializar widgets. Y de nuevo, voy a seleccionar éste bajo controlador de reproductor int, así como eso. Así que ahora está funcionando a la perfección. Nuevamente. Si hago clic en Play, ahora, va a funcionar como debería. 38. Funcionalidad de la selección de personajes: Así que volvamos ahora a nuestro widget. Vamos en la interfaz de usuario y el Blueprint Widget. Y dentro de aquí ahora queremos agregar funcionalidad a la interfaz de usuario. Así que para agregar funcionalidad a la interfaz de usuario, recuerde, este Widget Blueprint se divide en un diseñador y un gráfico. Y el gráfico es donde agregamos nuestra funcionalidad para los botones. Por lo que al hacer clic en el diseñador, puede hacer clic en uno de los botones. Entonces empecemos con Serena haciendo clic en ese botón. Y si bajas al botón, puedes ver que tienes algunos eventos que puedes agregar. Por ejemplo, ¿qué debería pasar si hago clic en este botón? ¿ Qué debería pasar si pongo el puntero sobre el botón? ¿ Qué debería pasar si destapo el botón? Por lo que tenemos diferentes eventos que podemos añadir para el botón. Ahora, quiero usar este por ahora, ¿qué debería pasar cuando hago clic en el botón? Por lo que haciendo click en el plus, y agregarás este evento aquí. Ahora, puedes eliminar estos si quieres. Estos son los predeterminados. Podemos agregarlos si queremos. Entonces seleccionándolos, haciendo clic en Eliminar en mi teclado. Así que sólo voy a tener éste por ahora. Entonces el flujo de trabajo, antes de empezar, el flujo de trabajo con el que vamos a trabajar es cuando se quiere engendrar al jugador, vas a presionar este botón. Este botón te va a llevar a un evento en el controlador del jugador. Por lo que tenemos que tener un evento aquí y el controlador del jugador para desove está seleccionando al personaje. Y cuando selecciones al personaje, va a pasar por el modo de juego. Y muy, muy importante recordar que el modo de juego solo se ejecuta en el servidor. Así que no puedes venir aquí y hacer un evento personalizado y configurarlo en cliente run-on. Esto no funciona. El modo de juego solamente, solo existe en el servidor. Y esto es muy bueno porque podemos usar el Modo de Juego para comprobar lo que está haciendo el cliente. Nuevamente, recuerda, en Unreal Engine o simplemente multijugador en general, el servidor comprueba lo que están haciendo los clientes, por lo que evitamos hacer trampa. Y el modo de juego es muy bueno de usar para eso porque solo se ejecuta a través del servidor. Para que podamos atravesar las cosas aquí y luego engendrar un jugador en el modo de juego nos permite engendrar al jugador. Así que volvamos al Widget Blueprint. Teniendo un evento en el controlador del jugador, el controlador nos va a tirar al modo de juego. El modo de juego, cuando vea eso, sí, se le permite engendrar al jugador, va a arrojar esa información de nuevo al controlador del jugador. Podrías preguntar, ¿por qué no estamos agregando esto, este código aquí? ¿ Por qué lo estamos agregando al controlador del jugador en lugar de la base del jugador? Porque este es el jugador que queremos gastar un jugador y es Particultor Específico. Ya que no tenemos un Pleno en, recuerda que estamos desova al jugador. Entonces esto, este código no existe cuando estás aquí en la pantalla de selección porque aún no has engendrado al jugador. Por lo que no puedes agregar código aquí. No funcionará porque esto en realidad no existe todavía si no has engendrado al jugador. no se pueda, no podemos hacer el código dentro de aquí, así que tenemos que hacerlo en el controlador del reproductor, porque el controlador del jugador genera cada vez que el jugador se conecta al servidor. Entonces si estoy jugando Counter-Strike o si estoy jugando a la historia de Maple, cuando me conecto al servidor, automáticamente crea un controlador de jugador para cada jugador. El controlador del jugador existe a pesar de que mi **** aún no ha contestado. Entonces vamos al Blueprint Widget. Y dentro de aquí, queremos en realidad empecemos con un control de placa. Creo que será más fácil para ti aquí. Entonces aquí, hagamos un nuevo evento, hagamos uno aquí, y llamémoslo. Llamemos al Select Character. Ahora, a veces cuando me confundo de cómo debo hacer un mecánico, suelo empezar desde atrás, así que esto es a veces creo que es muy bonito hacerlo. En ocasiones se puede empezar desde atrás. Entonces, ¿qué intentas lograr al final? Lo que estoy tratando de lograr es éste llamado actor de desown. Esta es la que vamos a utilizar. En última instancia. Queremos engendrar a un actor, quieres engendrar al personaje. Y aquí, este es el personaje que queremos desovar. Y déjame hacer un evento aquí abajo llamado capa de desove. Este es el evento definitivo que queremos terminar con un resultado. Para que puedas empezar por atrás. Y en lugar de empezar aquí, en realidad a veces es mucho más fácil de entender. Entonces ir, volver atrás es mucho más fácil a veces, nuevo, engendrar al jugador. Esto debería venir del modo de juego, porque como dije antes, cuando haces clic aquí, va a ir al controlador de jugador aquí, el controlador de jugador nos va a tirar dentro del modo de juego, y el modo de juego nos va a tirar aquí, responderá al jugador. Voy a arrastrar Es variables sobre el evento aquí. Y en lugar de clase, vamos a cambiar el nombre de la misma, llamarlo jugador y engendrar transformar. Podemos simplemente llamarlo desown transform, eso está bien. Por lo que tenemos el evento de reproductores de desove aquí. Esto va a venir del modo de juego. Así que volvamos al modo de juego ahora. Entonces estamos trabajando al revés yendo al modo de juego ahora, voy a eliminar este evento para que puedas empezar a jugar porque no los necesitamos en este momento. Compuesto guardar, y voy a hacer un nuevo evento aquí, eventos personalizados. Llamémoslo solicitar capa de desove. Así como eso, solicita jugador de bonos. Y va a ejecutar nuestro reproductor de Spawn desde el controlador del jugador. Pero en este momento no tenemos, no tenemos una variable para el controlador del jugador, así que no puedo llamar a este evento aquí. ¿ Recuerdas? Ahora se está poniendo un poco más avanzado porque necesitamos usar este jugador de desove de eventos, que está en el controlador del jugador, necesitamos usarlo en el modo de juego. Y esto se llama comunicación de Blueprint, como les dije antes, utilizamos Interfaces de Blueprint para eso. Pero en este momento, lo que podemos hacer es simplemente hacer click en este plus podemos agregar el controlador del jugador. Y luego como la variable, podemos seleccionar el controlador del reproductor y lo llamamos PC. Creo PC Maple Story, lo llamamos sí, una PC Maple Story. Y luego vamos a crear realmente desde el controlador del jugador. Ahora si arrastra sobre él, porque ahora que la variable es esta clase de blueprint aquí, ahora podemos llamar a esta capa de desova. Entonces si arrastras de esto y dices capa de desove, Ok, ahora podemos llamar a este evento aquí. Y al igual que antes, voy a arrastrarlos de nuevo. Así que arrastrando al jugador de vuelta aquí porque esta solicitud desova jugador, vamos a llamarlo aquí desde el controlador del jugador otra vez. Y S4, la ubicación. Usualmente descompongo esto. Así que recuerda una variable transformada, si hago una y te muestro aquí abajo, una variable transformada es una variable donde podemos ver la ubicación, rotación, y escala, al igual que en nuestra viewport aquí, cuando hacemos click en algo, podemos ver la transformación. Esta es la variable transformada. Por lo que siempre necesitamos eso para definir dónde debe desovar el jugador, cómo debe rotarse el jugador al desovar, qué tan grande debe ser el jugador un desove. Entonces permítanme borrar éste por ahora. Y en lugar de tener la transformación inversa, se puede arrastrar desde aquí y hacer clic en ésta, hacer esto, lo desglosaremos en estos tres. Entonces la ubicación, rotación y la escala. Y por lo general solo dejo que esto esté en el modo de juego. Así también es como prefieres como programador, algunas personas lo hacen de manera diferente, pero por lo general lo tengo, suelo hacer el transformador y lo descompongo así. Y luego solo engancho la ubicación por aquí afuera porque la rotación es la misma y la escala es la misma. Entonces así es como se ve. También podemos, en lugar de ubicación, podemos llamarlo ubicación de desove. Sólo para que no te confundas más tarde en lo que es eso. De acuerdo, así que ahora tengo esta llamada peticion spawn player. Ahora aquí afuera en el jugador selecto, es donde va a estar porque el jugador selecto nos va a tirar por aquí. Y para comunicarse con un modo de juego. Nuevamente, dije antes, el modo de juego solo se ejecuta en el servidor, por lo que hay que ejecutar esto en el servidor. Entonces sabemos cómo hacer esto ahora. Así que vamos a hacer un evento personalizado y llamarlo S RV, seleccione carácter. Y ya desde aquí arriba, podemos ejecutar ese evento. Entonces SRB seleccione carácter y recuerde ejecutarlo en el servidor, éste, seleccione carácter y haga clic en confiable. Por lo que ahora tenemos este selecto personaje. Va a correr por el servidor. Y recuerda, vamos a llamar al jugador de desove de solicitud. Y de nuevo, necesitamos comunicarnos con nuestro anteproyecto. Tenemos que usar el modo de decaimiento aquí dentro del controlador del jugador, te voy a enseñar cómo comunicar qué Blueprints. Esto es algo que no hemos tocado antes. Para comunicarse con el modo de juego. Tienes que decir, consigue el modo de juego. Muy básico. Ahora, consigue el modo de juego. Este no es tu, tu modo de juego aquí. Este es solo un modo de juego general en el motor. Cuando dices obtener el Modo de Juego, entonces tienes que definir. Puedes ver aquí, si mantienes el ratón sobre él, dice que regresa a la base actual del modo de juego. Ahora cuando se obtiene el modo de juego, hay que definir de qué modo de juego estás hablando, porque este es solo el modo de juego general. Y tenemos algo llamado casting. Entonces si arrastras esto y dices costo costar dos medios como el cual, del que Blueprint hablo. Estoy hablando de TM Maple Story. Entonces le costó a Maple Story, éste. ¿ De acuerdo? Ahora como Maple Story, esto significa que ahora puedo usar todo lo que hay dentro de este blueprint. Ahora, por ejemplo, puedo usar o puedo llamar a esta solicitud spawn player. Entonces si me arrastro y digo solicitar reproductor de desove, puedes ver que puedo llamar a ese evento ahora. O digamos que si hice un evento llamado una variable llamada hola, y es una transformación, puedo volver a mi controlador y decir, Hola. Puedo ver ahora puedo conseguir esa variable también. Entonces así es como se comunica entre planos para que pueda obtener el Modo de Juego General. Y lo digo, estoy hablando específicamente historia de GM Maple porque a veces en juegos tienes modo de juego múltiple, por lo que no solo tienes uno a veces. Esto es de lo que estoy hablando. En cuanto al controlador del jugador, lo que puedes hacer aquí es decir get player controller. Y se puede ver, se puede conseguir el controlador del jugador, mismo principio. Entonces se puede ver, ahora este es un controlador de jugador general y se puede ver costo también, porque estoy hablando específicamente de esta BC Maple Story. Arces Bc. Se puede ver así es como se comunica con los planos. Ahora, este buen control de placa radica para un solo jugador. Te lo explicaré en un poco. Entonces vamos a eliminar este aquí. Y en lugar de costar, así que ahora ya sabes qué es el costo. En lugar de costar, me gusta usar interfaces de blueprint. El problema con el casting es que crea referencias duras y se retrasará tu juego, muchas de ellas. Entonces si tienes un juego grande llevas trabajando desde hace un año y tienes mucho casting como tú causa a esto te costaste eso. Y lo estás haciendo mil veces en un juego, va a ralentizar tu juego. Ahora no digo que sea malo usar. Yo lo uso a veces y deberías usarlo a veces. Pero siempre que puedas usar una Interfaz de Blueprint, te recomendaría que uses una Interfaz de Blueprint para que no creas estas referencias duras, lo que ralentizará tu juego. Entonces primero tienes que pensar en qué estás tratando de referirte? Lo que estamos tratando de hacer referencia al modo de juego. Por lo que en realidad podemos usar este evento aquí. De acuerdo, así que para el modo de juego, tenemos que hacer realmente una nueva Interfaz Blueprint para el modo de juego. Ahora, vamos a las interfaces, hagamos aquí una nueva Interfaz Blueprint, y luego llamémosla termina el modo de juego. Ahora esta de aquí, se llama a la función que queremos hacer, yo la haré. Entonces puedo mostrarte de lo que estoy hablando. Creo que es mucho más fácil. Así que llamémoslo get's Game Mode ref. Entonces estamos tratando de conseguir la referencia del modo de juego. Y esta es una función, por lo que estamos creando una salida. Aquí. La variable que desea seleccionar es a que esté tratando de referirse. Tratando de hacer referencia a mi historia de arce GM. Entonces mi modo de juego, y vamos a llamarlo modo de juego. De acuerdo, así que ahora tengo la función y vamos a añadir de nuevo. Salió a nuestro plano de camo, la interfaz a un juego o plano. Así que vamos a Configuración de clase y seleccionemos. Salió aquí y compuso Save. Y de nuevo, se puede ver la interfaz apareciendo por aquí. Y como el Modo de Juego. Ahora tenemos que definir qué es este modo de juego. Y sólo voy a arrastrar y decir yo mismo, lo que sí significa, sea cual sea el plano en el que estoy. Ahora mismo, estoy dentro de la GM Maple Story. Así que ahora sabe el modo g, m, k, o este modo de juego significa GM Maple Story. Entonces esto es lo que significa yo. Entonces yo solo significa qué, en qué Clase Blueprint estoy ahora mismo. Vale, ahora que hemos creado esto, ahora podemos volver al controlador. Y en lugar de hacer casting, ahora podemos llamar a esta función aquí llamada Get Game Mode rough. Así que arrastremos desde aquí y digamos Get Game Mode ref. Y como funciones cuando dice mensaje, esto significa que proviene de una Interfaz de Blueprint y esta es la correcta. Por lo que siempre ve si dice mensaje antes de seleccionarlo, si viene de una Interfaz de Blueprint. Entonces seleccionándolo aquí. el modo de juego ahora y podemos hacer lo que queramos igual que antes, por ejemplo, llamando a esta variable hola aleatoria. Por eso saludando, ya puedes ver que funciona también. Así que solo para explicarlo rápidamente, lo que pasa es que obtienes el modo general Okay, y luego dices obtener el modo de juego rref. Y esta es la función que creamos aquí. Y sabe cuál es el Modo de Juego porque dentro de aquí, configuramos la variable Game Mode como la autoreferencia, lo que significa que la conoce. Historia de Arce Gm. Entonces esta es GM Maple Story que estamos utilizando. Muy bien, entonces ese es el modo de juego ref que ahora queremos usar. En realidad eliminemos esta variable antes de que me olvide. Llamemos a este llamado Solicitudes desovar jugador. Por lo que aquí, solicita reproductor de desove. Y tengo que definir a mi jugador. Y no quiero hacer eso todavía. Quiero definir a mi jugador por aquí porque cuando haga clic en Tsarina, mi jugador va a ser Tsarina. Y cuando hago clic en el botón, Luke, quiero definir mi mirada de personajes. Así que déjame simplemente arrastrar esto y continuar aquí. Y en cuanto a la ubicación, también podemos continuar y arrastrarla aquí. Y entonces se puede ver por aquí. Selecciona personaje, sólo voy a seguir enchufándolos ahí. Ahora podemos llamar a este llamado Select Character. Y aquí es donde quiero llamar en el Widget Blueprint. Ahora, el Widget Blueprint, tengo que llamar a este selecto personaje. Por lo que ahora vamos a practicar de nuevo con nuestra Interfaz Blueprint. Entonces en el Widget Blueprint, se puede decir consigue personaje jugador. Ahora, esto es bueno usar en un solo jugador porque se puede ver al jugador y este índice es 0. Pero tú, como te conectas como jugadores y el juego en multijugador. El jugador a la conexión debe ser planeado X1. Y luego el tercer tipo se conecta al servidor, y está planeado x2 y 3406 y así sucesivamente. Para que a medida que más jugadores se conecten, tendrán diferentes índices. Así que realmente no podemos usar esto en multijugador. Esto es solo para un solo jugador y multijugador. Utilizamos Get Owning Player. Y si coloca el ratón sobre él, dice, obtiene el controlador del reproductor asociado a esta interfaz de usuario. Se va a conseguir este controlador de jugador, tu controlador de jugador, tú como el jugador que has conectado, va a conseguir tu controlador de jugador, que está asociado con esta interfaz de usuario. Por lo que ahora tenemos el controlador de jugador, y de nuevo, tenemos que decir obtener el controlador de jugador ref, y que aún no lo han hecho. Recuerda antes hicimos una interfaz para el controlador del jugador. Podemos utilizar ese click aquí. Y al igual que antes, vamos a hacer clic en Agregar función y digamos obtiene controlador de diseño ref. Y ahora podemos sumar una salida. Y al igual que lo que dije antes, ¿a qué estás tratando de referenciar? Esto es lo que deberías tener como la variable que estoy tratando de hacer referencia a mi controlador de reproductor, PC. Llamamos a la historia de PC Maple aquí y lo llamamos controlador de jugador. De acuerdo, así que ahora recuerda entrar en el controlador y hay que definir el controlador del jugador. Así que al igual que antes, arrastra desde el año y dime yo. Por lo que el controlador del jugador se define como esta PC Maple Story. Ahora lo que podemos hacer en el widget, podemos conseguir el Owning Player. Entonces ahora tenemos el controlador del jugador, y ahora tengo que especificar de qué controlador de jugador estás hablando específicamente? Estoy hablando e hicimos este llamado consigue controlador de jugador ref ahora aquí. Por lo que ahora tenemos el controlador de jugador y lo que queremos hacer dentro de aquí, queremos llamar a este eventos select player, select character. Y podemos llamarlo aquí selecto personaje. Y se puede ver podemos seleccionar el personaje. Por lo que al hacer click en Tsarina, queremos que el personaje sea Serena. Cuando hacemos click en Luke, queríamos una mirada placentera. Aquí en lugar de usar el Select Character, tiene el evento normal, igual que lo que te dije antes, hagámoslo en realidad en una, una Interfaz de Blueprint. Entonces volviendo atrás, este es el controlador del jugador. Entonces yendo al controlador del jugador, vamos a hacer una nueva función aquí, llámalo selecto carácter. Y hagamos dos nuevas variables. Uno es el jugador y el otro son las ubicaciones de los bonos. Entonces voy a eliminar éste aquí por ahora. Voy a compilar. Vamos al aquí, a la interfaz y al Select Character que acabamos de hacer. Hagamos un actor aquí. Entonces la variable es actor, y es una referencia de clase porque es algo que vamos a desovar. Entonces una referencia de clase, y vamos a llamarlo jugador. Y el otro es la ubicación de desove y es un vector. Entonces la ubicación del lapso vectorial, al igual que esto. Y ahora podemos terminar como controlador, llámalo diciendo select character. Y es aquí viniendo de una Interfaz de Blueprint. Y podemos conectarlo juntos. Ahora, ya que tenemos éste, ahora podemos volver al Widget Blueprint aquí y llamarlo de nuevo selecto carácter. Por lo que muy bueno para practicar. Normalmente no lo hago directamente dentro del controlador del jugador o en la interfaz porque quiero enseñarte la diferencia. Así que hagamos éste. Entonces como personaje, esta es la función aquí. Así como eso. Y seleccionas a Serena como el personaje. De acuerdo, así que ahora vuelve con el diseñador. Haga clic en Luke, el botón aquí, retroceda, haga clic en unclicked. Y como Luke, sólo voy a copiar pegar todo este código de nuevo, copiar pegar. Y voy a ponerlo a mirar aquí en su lugar. Entonces cuando hacemos clic en bucle, se va a engendrar mirada. Cuando hacemos click en serina, eso va a ir y patrocinar arena. Así que pasemos por el código. Entonces cuando haga clic, voy a seleccionar a mi personaje. Voy a ejecutar esta función. Esta función está al final, el controlador del jugador. Entonces voy a ejecutar esta función, este evento aquí, select carácter va a pasar por el servidor. Los servidores, luego van a pasar por el modo de juego. Y va a solicitar un jugador. Y de nuevo, quiero hacer esto en una función Blueprint Interface, como puedes ver aquí en el modo de juego, esta es solo una función normal por ahora. Por lo que podemos ver que lleva un poco de tiempo crear las funciones de interfaz, pero muy agradable hacer eso y mantiene tu proyecto optimizado y limpio. Así solicita reproductor de desove, volvamos a la función de interfaz de modo de juego o interfaz. Llamémoslo jugador de desove de solicitud. Así como esto. Y para éste agregamos, Volvamos al modo de juego. Agregamos el controlador del jugador. Agregamos al actor como el jugador. Agregamos las localizaciones de desove. Así que déjame borrarlo por ahora, compilar save, y volvamos. Sólo los estoy borrando antes de hacerlos para que no se molesten. Entonces aquí vamos a crear tres variables diferentes. El uno era el controlador del jugador, el otro era el jugador. Y el tercero fue la ubicación de desove. En la ubicación de desova es un vector y el jugador era actor. Y es la referencia de clase porque queremos engendrar al jugador. El controlador del jugador es nuestra PC Maple Story. Ahora esta una solicitud capa de desove, voy a llamarla aquí solicitar capa de desove, Indie Game Mode. Y entonces ahora podemos reconectarlo así. Entonces el objetivo es el controlador del jugador y éste en la ubicación. ¿ De acuerdo? Entonces antes vamos a hacer click sobre Serena, va a pasar por el modo de juego. Aquí está el controlador del jugador, lo siento, esta carga eléctrica va a pasar por el servidor y ahora tenemos que llamar a la correcta aquí. Si lo elimino, necesitamos llamar al reproductor de desove de solicitud porque acabamos de hacerlo. Y voy a seleccionar este mensaje. Recuerde seleccionar el mensaje cuando se trata de una función de interfaz. También puedes ver este ícono cuando golpea una función de interfaz. Y luego vuelve a conectar esos. Y ahora hay que definir cuál es el controlador del jugador. Porque a pesar de que en el modo de juego has llamado el control de placa aquí y llama a esta función aquí. Realmente no has definido lo que es el controlador del jugador. Y volvamos. Ahora. Esto está vacío en este momento. Así que vamos a arrastrar de esto. Recuerda que estamos dentro del controlador del jugador. Podemos simplemente arrastrar y decir yo mismo. Sólo estamos hablando de controlador de pantalla aquí. Entonces va a pasar por este evento. Y luego en el modo de juego, solicite reproductor de desove, se va a ir. Y lo pasamos por el modo de juego porque no queremos que el cliente haga trampa. Estamos revisando todo esto y va de vuelta al reproductor de desove, al controlador del jugador. Va a engendrar al jugador. Y va a engendrar a un jugador aquí. Ahora en lugar de pequeño jugador, de nuevo, podemos convertirlo en una función de interfaz. Por lo que contiene al jugador como el actor y engendra la transformación. Yendo a eliminarlo, vaya a la interfaz para el controlador del reproductor. Sé que hay muchas cosas sucediendo, pero si sacas esto abajo, intenta ver este video dos o tres veces, obtendrás una como serás experta en esto. Así que intenta practicar y sé que es difícil, pero una vez que veas esto dos o tres veces, esto se volverá mucho más fácil. Me costó mucho cuando empecé a hacer todo esto. Así que hagamos el reproductor de desove. Y teníamos, ahora casi lo olvidé, teníamos al jugador como actor y también teníamos la transformación de desova. Entonces esto fue una transformación y el jugador era actor, y fue una referencia de clase. De acuerdo, así que volvamos al controlador del jugador y seis capa de enlace de eventos de capa de desova. Y ahora podemos conectarlo aquí. Conecto dosis y conecto esto aquí. Y recuerda que esto viene del Modo de Juego. Por lo que hay que cambiarlo también en los modos de juego, probablemente va a bicho. Y recuerda, también es de las funciones de interfaz. Entonces necesitamos esto, este ícono de aquí arriba. Entonces déjame borrarlo y decir desova. En realidad, déjame arrastrar desde la capa de desove del controlador del jugador. Ahora puedo hacer clic en este mensaje de un reproductor de desove. Y vamos a conectarlos de nuevo aquí, así así. Entonces vamos a engendrar al jugador. Y vamos a volver al controlador del jugador y va a engendrar al jugador. De acuerdo, entonces cuando engendramos a un jugador, tenemos que hacer una última cosa. Tenemos que usar algo llamado proceso porque has engendrado al jugador, pero no le has dicho al motor que quieres controlar a este jugador y esto es lo que llamamos poseer. Así que hagamos referencia a la base del jugador. Esto es lo que necesitamos, porque necesitamos hacer referencia a un actor. ¿ Qué intentas controlar? Y estamos tratando de controlar esto, este actor engendrado que ahora es una base de jugadores porque ahora lo hemos engendrado. Aquí. Tenemos ahora la referencia a la base del jugador. Y creo que no hemos hecho una interfaz para ello. En realidad tenemos una base de jugadores. Vayamos dentro de aquí. Y hagamos uno nuevo de nuevo. Digamos que consigue el rep de capa. Entonces estamos obteniendo la referencia del jugador igual que lo que hicimos con el controlador de jugador y el modo de juego. Y estamos tratando de hacer referencia a la base del jugador bp. Aquí, llamémoslo capa. Y de nuevo, recuerda volver a la base del jugador, volver al jugador, base del jugador. Y dentro de aquí, encontraremos el Get Player ref. Al igual que antes, ¿qué es el jugador? El jugador es auto. Entonces, sea cual sea el plano en el que estemos. Ahora, lo que estamos tratando de hacer es aquí en el controlador del jugador. Por lo que necesitamos hacer referencia a la base del jugador. Así consigue capa REF. Y esto es porque ahora este es el jugador, este es el actor, pero hay que definir esto ya que este es el jugador. Y como jugador, quiero poseer esto responden jugadores. Por lo que hay que hacer esto en Blueprint para que pueda decirle al motor. Sí, engendré al actor, pero en realidad quiero controlar también a este actor. De acuerdo, así que ahora hemos hecho todo esto. Entonces mucho código en este video, me disculpo por hacerlo demasiado largo. Sé que a veces se pone agitado, pero en realidad no podíamos hacerlo más corto. Y traté de explicar todo lo que paso. Pero ahora que hacemos clic en play y hacemos clic en el botón, en realidad estás desove. Pero esta interfaz de usuario sigue quedando en la pantalla. Y pasemos a la siguiente lección donde eliminamos esta interfaz de usuario. 39. Eliminar la interfaz de usuario del Viewport: Ahora que hemos terminado nuestra selección de personajes, sigamos adelante y eliminemos la interfaz de usuario de selección de personajes. Por lo que cuando hago clic en el botón ahora se puede ver la interfaz de usuario sigue quedando aquí arriba. Entonces vamos a quitar eso primero. Pasemos a la interfaz de usuario y el Blueprint Widget aquí. Entonces cuando hago click en Serena, cuando selecciono mi personaje, quiero eliminar la interfaz de usuario. Y esto es muy fácil de hacer porque ahora lo hemos configurado todo. Puedo tomar este controlador de jugador, lo que en última instancia estoy tratando de hacer. Recuerda, agregamos el widget aquí. Agregamos widget inicializado. Agregamos el widget de selección de caracteres. En lugar de agregar dos viewports, hay algo llamado eliminado de los padres y esto es lo que estoy tratando de hacer. Entonces necesito obtener una referencia para esta variable dentro del Blueprint Widget. Por lo que ya tenemos éste y tenemos el control de capa get nuestra referencia. Por lo que ya tenemos la referencia del controlador del jugador, por lo que podemos llamar fácilmente a esta variable. Tenemos acceso a este anteproyecto. Ahora, si me arrastro de esto y digo WB, y se puede ver que tenemos esta variable que teníamos por aquí, consigue la selección de caracteres WB. Lo único que tengo que hacer es decir quitar de los padres. Así es como eliminas la interfaz de usuario de la vista. Vídeo tan muy fácil, muy corto. Voy a copiar pegue esto para Luke también. Así que copia pega aquí abajo. Y conectémoslo juntos así. Entonces ahora estamos moviendo a Dui. Veamos qué pasa. Si hago clic en Jugar ahora, selecciono el personaje. Se puede ver que en realidad estoy desove. Realmente no hemos fijado un punto de desove todavía. Y si abro mi otra pantalla aquí, el cliente, y si hago clic en bucle por ejemplo, se puede ver también desove como Luke y me he engendrado como Tsarina por aquí. Ahora, la ubicación para, como se puede ver, los pies están molestos y esto es porque aún no hemos establecido una ubicación de desove. Y también se puede ver que engendramos como el personaje por aquí. Y esto es porque ahora tenemos que volver a ir, te lo dije antes, en la configuración del proyecto y en los mapas y modos y el modo de juego. Ahora que tenemos una pantalla de selección de caracteres, podemos eliminar esta clase de punto predeterminada. No queremos desovar como ningún personaje. Solo queremos seleccionar Ninguno. Y seleccionamos nuestro propio personaje de la pantalla de selección de personajes. Por lo que no queremos engendrar con un personaje prefabricado. Vamos a cerrarlo y voy a guardar todo para asegurarme de que eso esté funcionando. Y voy a la configuración mundial y solo asegurándome en la configuración mundial que The Game Mode tampoco diga ninguno por aquí. Ahora cuando hago clic en jugar y desovar como look por ejemplo, se puede ver que no tenemos un personaje por aquí, pero porque no estamos desovando ahí por defecto, ahora esto está funcionando. Y lo siguiente que queremos hacer es crear una ubicación de desove, porque ahora realmente no tenemos una ubicación de desova. Sólo estamos desovando de la nada aquí. Por lo que queremos sumar una ubicación de desova, y esto es lo que haremos en la próxima lección. 40. Crea la locación en el Spawn: Entonces para esta ubicación y queremos engendrar al jugador en el inicio del jugador. Entonces antes de que funcionara, porque hemos establecido esta cláusula ON predeterminada a uno de los caracteres. Pero ahora mismo cuando engendras un jugador en la interfaz de usuario aquí en los planos del widget. Si vuelves a ir al gráfico, como ves aquí, cuando engendramos al jugador, los engendramos a ceros, ceros 0. Y es por eso que están respondiendo aquí. A la parte superior izquierda. Tenemos que definir para desovar aquí en el inicio del jugador. Y quiero crear puntos de desove en el modo de juego, porque recuerda que el modo de juego solo se ejecuta en el servidor para que el controlador del jugador engañe si hay algo dentro de aquí. Este es el propósito completo del multijugador. Estamos tratando de dejar de declinar de hacer trampa aquí en el lugar de inicio. Entonces cuando empezamos a jugar el juego, quiero definir este último punto como mis puntos de desove. Podemos decir que consigues actor de clase. Y lo que este conseguir actor de clase es, te permite obtener lo que ya se engendra dentro del nivel. Entonces muy, muy importante recordar lo que ya se engendra dentro del nivel. Este inicio de jugador ya está engendrado y podemos intentar buscarlo. Así que consigue actor de clase, podemos conseguir lo que ya está engendrado y se puede buscar el jugador empieza. Y puedes ver aquí, el jugador empieza, puedes seleccionarlo aquí. Por lo que va a seleccionar un jugador empieza, va a ser mucho más difícil. Así que imagina si tuviéramos estadísticas de múltiples jugadores, entonces tenías que definir cuál estás tratando de conseguir, porque en este momento solo es conseguir una de una en forma aleatoria. Pero esto está bien por ahora, para este propósito, sólo nos estamos desplazando aquí. Sólo tenemos un punto punto ahora mismo. Entonces vamos a compilar y ahorrar. Por lo que a medida que este jugador empiece, voy a conseguir la ubicación de los actores a la ubicación. Y entonces voy a hacer esto en una variable, promover a una variable y llamarlo ubicación de desove jugador. De acuerdo, entonces ahora tenemos esta variable, ubicación de desove del jugador dentro del modo de juego. Por lo que ahora tenemos esta ubicación. Ahora podemos usarlo dentro del jugador. Entonces dentro de la base del jugador, dentro del gráfico de eventos aquí. Por lo que ahora podemos engendrar al jugador en esa ubicación que creamos en el modo de juego. Entonces cuando engendramos al jugador arriba en la parte superior aquí, antes de hacer nada, digamos sets. En realidad, hagamos una variable personalizada. Llamémoslo establecer ubicación de desove del jugador. Entonces vamos a establecer esta ubicación de enlace dentro del jugador aquí. Y quiero ejecutar esto a través del servidor. Entonces no es hacer trampa. Y diciendo que los servidores establecen deslumbramiento, engendran ubicación y lo ejecutan a través del servidor, se ejecuta en servidor, confiable. Y lo que estamos tratando de hacer es que estamos tratando de decir, como tratamos de usar esta llamada ubicación de actor set. Esta es la función definitiva que estamos tratando de usar, establecer la ubicación de la actriz. Recuerda, tienes que hacer esto dentro de una costilla. Notificar. Porque recuerda igual que lo que dijimos antes en la función unwrap, esto se actualizará para todos los clientes porque momento estás ejecutando esto a través del servidor. Entonces lo que estamos tratando de hacer aquí, así que hagámoslo y tal vez sea mucho más claro si lo hacemos primero por aquí, lo que estamos tratando de hacer es que estamos tratando de conseguir esta última ubicación del juego modo. Así que al igual que lo que dije antes, consigue el Modo de Juego. Y entonces se puede decir obtiene gráfico de quimio, que creamos antes. Y ahora como modo de juego, puedes tomar esta llamada última ubicación ósea. Ahora tenemos esta variable dentro de aquí. En realidad vamos a hacer clic derecho y promovido a una nueva variable dentro de aquí. Y sólo voy a llamarlo lo mismo , ubicación de desove jugador. Pero esta vez, ya que estoy en el servidor, vamos a replicarlo ahora a los clientes porque en realidad vamos a ejecutar esto aquí y puedo decirte por qué. Por lo que el jugador del servidor establece ubicación plasmon. Y hagamos el juego de inicio. Y cuando empiezo a jugar el juego y el Begin Play, correrá cada vez que engendréis al personaje. Así que cuando hago clic en el juego, la jugada inicial para el personaje aún no ha jugado. Pero, ¿y si hago clic en el jugador? Ahora la jugada inicial va a jugar. Entonces cada vez que engendro a mi personaje, esto se lanzará. Entonces para la jugada de inicio, cada vez que engendré al personaje, inmediatamente quiero establecer la ubicación del jugador. Así establece la ubicación de la capa, ubicación de desove, en realidad no ubicación. Por lo que el jugador engendran ubicación. Y hagamos de éste también una Interfaz de Blueprint. Por lo que establecer ubicación de desove jugador. Eliminemos éste aquí de la base del reproductor y vayamos a la base del reproductor de interfaz. Hagamos una nueva función llamada set player spawn location. Volvamos a la base del jugador y digamos Establecer capas ubicaciones de enlace. Entonces llamemos a ese evento. Y conectado aquí. Cuando comencé a jugar el juego, llamaré a este evento por aquí. Entonces establece la ubicación de desove del jugador y luego va a pasar por el servidor y a través del servidor. Se va a conseguir los modos de juego. Los modos de juego engendran ubicación aquí. Y yo voy a poner la variable aquí. Pero recuerda, estás ejecutando esto a través del servidor. Entonces el cliente no tiene oportunidad de saber cuál es esta variable porque esto solo se está ejecutando en el servidor. Por lo que sólo el servidor se puede ver aquí arriba soy el servidor ahora. Sólo el servidor sabe lo que está pasando en este momento, el cliente no puede ver la ubicación de desove. Y al igual que lo que te dije antes con multijugador, tienes que replicar esta variable de nuevo al cliente. Entonces, cuando el servidor ha terminado de hacer la lógica, la lógica tiene que ser replicada de nuevo al cliente. Por lo que los datos tienen que volver a los clientes. Y al igual que lo que hicimos con el estado de ánimo, lo hicimos en función de rampa. Podemos hacer click en esta variable y replicarla de nuevo a los clientes con el rep notifique. Por lo que vamos a notificar a todos los clientes. Y de nuevo, te lo dije antes de usar el rep notificar cada vez que tengamos cambios visuales, y es un cambio visual, estamos respondiendo al personaje, estamos moviendo al personaje de esta punto donde respondan al personaje. Entonces en este punto de aquí, por lo que es un cambio visual. Por lo que hay que establecer ese cambio visual para que todos los clientes puedan verlo. Voy a hacer un aviso de costilla, para que todos los clientes puedan verlo. Y lo que queremos hacer aquí y las letras on-rampa enlace ubicación. Y en realidad sólo por mi OCD, veo que hay espacios entre aquí. Sólo voy a borrarlo de nuevo. Quiero cambiarlo antes de hacer nada. Voy a quitar esos espacios aquí abajo en mi variable. Así. Voy a presionar de nuevo sobre la retina osificar, así como eso. Ahora aquí en la función desenvolver, tomemos ahora en realidad estamos dentro del personaje ya, por lo que sólo podemos decir establecer ubicación actor. Esto es lo que queremos hacer. Por lo que la ubicación de la actriz y la ubicación es, queremos configurarla a esta ubicación actualizada, por lo que este jugador engendra ubicación. Así que vamos a ir por aquí a la función desenvolver. Arrastra esta ubicación de plasmón. Acabo de enchufarlo en la nueva ubicación. Por lo que esta es la nueva ubicación a la que queremos poner al actor. Ahora, todos los clientes podrán ver que el personaje está cambiando de posición a esta nueva ubicación. Por lo que ahora vamos a hacer click en Play y ver qué pasa si hemos estropeado algo. Entonces haciendo clic en jugar aquí, y se puede ver que ahora estoy desoviendo aquí abajo, por lo que esto está funcionando. Y si vuelvo a los labios de Luke a mirar, así que estos son los clientes. Hagamos buscar por ejemplo. Ya se puede ver esto en realidad desove correctamente y puedo jugar como que puedan jugar juntos siempre bueno para probar y ver si está bugged no lo son. Antes de continuar. Se puede ver que esto está funcionando, respondiendo correctamente. Así que sólo para pasar por esto muy rápido porque a veces me preocupa que esto pueda ser confuso. Entonces empecemos aquí en la interfaz de usuario. Aquí hacemos click en Serena, por ejemplo. Permítanme arrastrar a los más cerca el uno del otro. Por lo que aquí hacemos click en serena para apadrinar arena. Se va a ir al controlador del jugador y seleccionar al personaje. Por lo que va a ejecutar este evento aquí. Y también va a eliminar la pantalla de selección de personajes. Entonces va a este selecto personaje al controlador del jugador. Así que vayamos al control de la placa y veamos qué está pasando. En el controlador del jugador, que está aquí. Se está ejecutando este Select Character Event ahí select character está pasando por el servidor, y luego el servidor está llamando a este evento aquí en el modo de juego porque queríamos evitar engañando, queremos comprobar si se nos permite engendrar al personaje. Pasando por él de nuevo modo, solicita jugador bond. Está pasando por el modo de juego. Y luego nos va a arrojar nuevo al controlador del jugador. Y en el controlador del jugador, vamos a engendrar al jugador. Y también vamos a controlar al jugador. Siempre que engendras al jugador, se ejecuta este lugar de inicio. Así que cada vez que el jugador acaba de desovar, se va a establecer la ubicación de desove del jugador. Está ejecutando este evento aquí, y este evento está pasando por el servidor. Nuevamente, estamos impidiendo que declinó hacer trampa. El servidor. Necesita comprobar si lo que estás haciendo es correcto. Para que puedas ver el método aquí es donde todo lo que siempre estamos tratando de establecer variables a través del servidor. Así que sólo voy a saltar a la derecha en el servidor. Y luego servidor sin fin, estoy haciendo toda esa lógica de codificación. Servidor. Se va a establecer la ubicación del lugar. En realidad, se va a llegar a la ubicación del jugador desde el Modo de Juego, que aquí hicimos. Entonces conseguimos que esta obra de la clase de actor empieza y conseguimos la ubicación de acceso y lo hicimos en una variable. Por lo que ahora sabemos la ubicación específica para este jugador empieza aquí. Y ahora tenemos eso, esa ubicación para este punto de desove. Y luego lo convertimos en una nueva variable dentro de la base del jugador y llamamos a la ubicación de desove del jugador. Ahora lo replicó en un rip notify, que luego te lleva a la función unwrap porque cada vez que cambia el valor o una función de notificación de rep es una variable de notificación de naufragio. Se va a ejecutar la función de notificación de rep. Por lo que ahora se puede ver configuramos esta variable. Entonces automáticamente vamos a ejecutar esta función unwrap. Y lo único que está desenvolviendo la función es establecer la ubicación de nuestros actores. Nuevamente, estamos usando un rep notifique porque esto es lo que hacemos en multijugador. Siempre que tengas un cambio visual y cambiar la ubicación de un jugador desde este punto a este punto es un cambio visual. Todos los clientes pueden ver el cambio visual haciendo esto, igual que lo que hicimos con el estado del movimiento. Por lo que dijimos los flip books. Estos son también cambios visuales. Así que cambiando flip books para que el jugador pueda ver ese libro flip book cambiado. Ese es un cambio visual también. Por lo que espero que esto fuera claro. Nuevamente, si algo es confuso y necesitas algo que te aclaren mucho más, eres bienvenido a unirte a mi servidor de Discord, y estoy más que feliz de ayudarte. Así que continuemos desde aquí. Vamos a salvar todo. Permítanme cerrar esto y pasemos a la siguiente lección. 41. Cómo crear el actor de la cámara: Para que como se puede ver aquí en este momento, estoy dentro de Maple Story y la cámara y Maple Story ahí. No es como la nuestra en este momento se puede ver cuando me muevo, la cámara está siguiendo sin problemas. Realmente no está apegado al personaje. Entonces cuando me estoy mudando por aquí, se puede ver que me está siguiendo, pero realmente no está apegado a mí. Por lo que se mueve como este suave movimiento. Entonces esto es lo que estamos tratando de lograr. Así que de vuelta aquí en nuestro juego, en lugar de tener la cámara adjunta aquí y la base del jugador. Por lo que actualmente tenemos esta cámara adjunta al jugador. Tenemos que hacer unas cámaras separadas para que podamos seguir al jugador sin problemas. Ahora, claro, puedes mantener la cámara así si este es el lugar que quieres, pero estoy tratando de replicar Maple Story tanto como pueda para que podamos practicar desde eso también. Entonces empecemos creando el actor de la cámara. Entonces, en lugar de tener la cámara atada, hagámosla en un plano en su lugar. Entonces haz clic derecho, haz una clase de blueprint. Y hagamos sólo un actor. Y llamémosla cámara BP. De acuerdo, así que pinchando aquí, cámara VB. Volvamos a subir aquí y sumar las cámaras. Entonces primero, al igual que antes, agreguemos un resorte a esos. Por lo que este es el titular de la cámara. Y luego vamos a sumar la cámara. Así que al igual que antes, nada nuevo. Haga clic en el brazo de resorte. Voy a rotarlo menos 90 grados, igual que antes, Compile y Save. Y voy a quitar este llamado Remoto do test de colisión. Voy a hacer clic en la cámara y cambiarla a una vista ortográfica y establecer el ancho en 1304. Y esto no es realmente algo nuevo. Esto es lo que también habíamos hecho aquí en nuestra cámara. Entonces estos son sólo los mismos ajustes con los que estoy tratando de ir. De acuerdo, entonces ahora tenemos la cámara y voy a ir a mi base de reproductores y voy a eliminar esta cámara ahora. Entonces ahora que hemos creado una cámara, podemos engendrarla en la siguiente lección. 42. Cómo hacer un balancín de la cámara: Entonces lo que estamos tratando de hacer es que ahora estamos tratando de engendrar el ecto de la cámara. Y el objetivo es desovar en la cámara cada vez que un nuevo jugador se une. Entonces hagamos la lógica de desove dentro de los jugadores. Entonces cada vez que el jugador se une al nivel, lo harán, habrá una cámara desove para que pueda seguir a ese jugador igual que lo que teníamos antes. Así que aquí de nuevo, más en el lugar de inicio, así que aquí es cuando nuestro jugador va a desovar. Aquí vamos a decir engendrar actor. Por lo que muy bueno recordar todas estas herramientas. actor de desove se usa cada vez que engendras algo. Al igual que en el controlador del jugador donde engendramos al jugador. Puedes usar de nuevo a este actor óseo para engendrar la cámara. Entonces digamos engendrar actor de clase. Y anteriormente te dije que tenemos que pasar por el modo de juego para engendrar algo así que evitamos hacer trampa. Esto está bien ahora mismo para que esta cámara lo haga directamente desde el cliente también. Porque esta cámara solo está basada en el jugador. No es algo global, como agregar jugadores al nivel. Sólo estamos agregando una cámara para que el jugador sea seguido alrededor. Engendrar aquí a un actor. Y tenemos que elegir la cámara y la llamamos BB, cámara BP. Así que sólo busca cámara. Y esta cámara BP aquí. Ahora tenemos que seleccionar la transformación spline. Y voy a conducir desde aquí y haga click en Make transform, así así. Y ahora tenemos que definir en qué ubicación queremos engendrar esa cámara. Y sólo quiero engendrarlo en la ubicación del jugador. Entonces ya estamos dentro del jugador. Por lo que sólo podemos decir conseguir ubicación de actor. Y el objetivo es auto porque este es el personaje que actualmente estamos controlando. Entonces estamos consiguiendo ese personaje engendrado y sólo vamos a esa ubicación de este personaje de enlace. Voy a mover esto un poco aquí. El giro es éste y la escala es ésta. Eso realmente no importa ahora mismo. Y en cuanto al desove, quiero hacer click aquí, y hagamos click en éste diciendo tratar ajustar la ubicación pero siempre desova. Esto solo asegura que pesar de que estemos chocando con algunos, algo, en algún momento, simplemente estamos desovando la cámara de todos modos. Y en realidad creo que tenemos que hacer eso en el control de placa también. Aquí, si todavía lo tienes por defecto para el jugador, solo recuerda configurarlo para intentar ajustar la ubicación pero siempre engendrar. Eso nos impedirá que el jugador no pueda desovar en algún momento, pero estamos tratando de ajustar la ubicación pero aún desova al jugador. Esta colisión será un problema como predeterminado, como este cada vez que tengamos enemigos, porque habrá enemigos y estarás chocando. Por lo que siempre enlace a pesar de que tenemos alguna colisión intentó ajustar la ubicación. De acuerdo, volvamos a la cámara aquí. Por lo que ahora hemos engendrado la cámara. Ahora puedes ver aquí, pesar de que hayamos generado la cámara y voy a hacer click en play. Y también recuerda quitar la cámara por aquí si no lo has hecho en la lección anterior. Entonces quitando la cámara, desove una nueva cámara. Tratemos de hacer clic en Jugar ahora. Y ahora se puede ver aquí que pesar de que hemos engendrado la cámara, todavía estamos embarcados aquí en la vista. Y esto se debe a que a pesar de que estás desove una cámara, tienes que decirle al motor que quieres esa nueva cámara como tu nueva vista. Así que si se arrastra de esto y dices Establecer objetivo de vista, puedes ver, realmente no puedes ver nada a pesar de que lo estás buscando. Pero si quitas el contexto sensible, puedes ver que éste es el que estamos tratando de usar. Establece tu objetivo con Blend. ¿ Y por qué está sucediendo esto? ¿ Por qué no aparece aquí? Se puede ver si sostiene el ratón sobre él. Dice que el objetivo es un controlador de jugador. Sensible al contexto solo significa para el contexto aquí, para este bolígrafo desde el que estás arrastrando. Esto no es realmente un controlador de jugador. Esta es la cámara. Entonces si estás buscando algo que necesite control de suministro, no te voy a mostrar a menos que elimines este contexto sensible. Pero sin embargo, si obtienes el controlador del jugador, así que intentemos al revés. Digamos que es controlador. Entonces así es como se obtiene el controlador del jugador. En multijugador, estás dentro del jugador y acabas de decir get controller. Y dice devuelve controlador para este actor porque queremos que nuestro controlador de jugador aquí. Tenemos el controlador y vamos a usar el controlador get black REF que creamos con nuestra interfaz previamente. Entonces digamos controlador de jugador ref. Ahora estamos hablando específicamente de este controlador. Ahora conectemos esto juntos. Y a partir de aquí, como el controlador del jugador, podemos decir set view target. Se puede ver, lo puedo ver con la edición contextual sensible y esto es lo que significa. Ahora sabe de lo que estás hablando porque el objetivo es el controlador del jugador. Entonces algo de lo que hay que tener en cuenta. Ahora, vamos a hacer click en éste aquí dice Ver objetivo con mezcla. Ahora necesita un nuevo objetivo de vista. Y la nueva vista Chocolate es solo esta cámara. Sólo para hacer todo como tú puedes tomar esto y conectarte aquí, eso no es problema. Esto funcionará. Pero a veces me gusta organizar las cosas y me gustaría convertirlas en variables. Entonces voy a hacer clic derecho aquí y promocionar a variable y llamarla cámara negra. Y en realidad ya lo creé a partir de antes estaba probando algo. Así que déjame simplemente borrar el anterior, compilar y déjame hacerlo de nuevo. Cámara de capa. De acuerdo, así que ahora déjame conectarlo. Y ahora como esta variable, simplemente puedes saber que tienes la variable. Simplemente puedes hacer clic y arrastrar esta variable y conectada así. Entonces puedes hacerlo así o puedes hacerlo así, que ambos funcionen. Esa es la forma correcta. Simplemente me gusta a veces simplemente hacerlo por separado así para hacer todo más limpio. Nuevamente, está bien establecer esta variable a pesar de que estamos corriendo desde el cliente, así que no nos estamos ejecutando en el servidor, que ya te dije antes. Tenemos que establecer variables en servidor. Estoy configurando esta variable específica en el cliente porque esta es del lado del cliente ella, la cámara que estará siguiendo alrededor del personaje sólo va a ser vista por ese personaje. Todos los demás personajes, todos los demás clientes realmente no se preocupan por el personaje del jugador o la cámara del jugador. Más bien. La cámara del jugador es algo específicamente para ti y a todos los demás jugadores realmente no les importa. Al igual que la interfaz de usuario, la interfaz de usuario, tu interfaz de usuario, a otros jugadores no les importa. Tienen sus propias interfaces. De acuerdo, así que tenemos esta cámara. Ahora hemos establecido el objetivo de vista con blend. Y voy a organizar esto un poco mejor, así antes de que se ponga demasiado desordenado. Entonces algo como esto aquí y voy a acercar esto así. De acuerdo, Así que hagamos clic ahora en Compile, Save, y haga clic en jugar y seleccione un personaje. Se puede ver a pesar de que tenemos el código, sé que tenemos el código correctamente, pero se puede ver que todavía está en mal estado. ¿ Y por qué es eso? Esto se debe a que a veces se necesita, se puede ver aquí dice error o a veces toma un segundo para que un personaje engendra en multijugador, hay un pequeño, pequeño retraso. Y este código, todo este código aquí, se ejecuta tan rápido, es una locura. Por lo que hay que dar tiempo, a veces para que el personaje engendra. Entonces aquí estamos configurando los jugadores engendraron ubicación cada vez que los bonos del jugador, voy a poner un nodo de retardo. Entonces intentemos jalar aquí y decir retraso. Y a veces esto es de prueba y error. Sé que este código es correcto, así que a veces me confundo. ¿ Por qué esto no funciona? Y podría pensar que hay un pequeño retraso desde que los jugadores desovan hasta realmente sumar la cámara. Entonces no puede, no puede encontrar al jugador. Esto es, está tratando de engendrarlo aquí, pero no puede encontrar el controlador del jugador porque hay que darle algo de tiempo aquí. Entonces vamos a retrasar por 0.05. Tan muy, muy pequeño retraso. Si escribes uno, esto significa que es 1 segundo. Entonces 0.05 segundos. Por lo que muy, muy leve retraso aquí. Demos click en Compile and Save, e intentemos hacer click en Play now, click en el personaje y podrás ver al personaje desove. Por lo que el retraso ayudó mucho aquí. Tratemos de engendrar al cliente. Y el cliente también está desove y sólo para asegurarse de que se vean. Si hago esto más pequeño. Sí, así que todo está funcionando y solo tratando de desovar. Ahora nos da un error. Trataré de ver qué es eso. Tratemos de hacer click en Jugar ahora y salir como servidor y mirar aquí. Look también puede desovar. De acuerdo, entonces nos llega un error aquí y quiero tratar de ver por qué nos da ese error. De acuerdo, así que a veces el, el código se ejecuta demasiado rápido aquí, así que en cambio, lo jugamos aquí así que no tenemos ningún error. Entonces todo está funcionando perfectamente ahora. Y a veces el código corre rápido aquí y va a no poder encontrar el control de la vejiga otra variable está vacía. Entonces aquí lo que queremos hacer para asegurarnos de que esto no va a suceder. Arrastremos ahora desde aquí desde el controlador del jugador y digamos que es válido. Y puedes seleccionar este signo de interrogación. Entonces si el controlador del jugador es válido, podemos seguir adelante y configurar esta cámara. Y si no es válido, no hagas nada. que podamos intentar hacer eso aquí, y eso arreglará el error. Por lo que voy a hacer doble clic en este pin. Entonces no es demasiado confuso. Sólo para organizar las cosas aquí abajo, algo así. Y tratemos de correr con ese código en su lugar. Así que vamos a compilar save. Por lo que ahora si este controlador de jugador es válido, vamos a seguir adelante y crear la cámara. Si no, no hagamos nada que le impida dar esos errores cuando las variables vacían. Demos clic en compilar. Y ahora vamos a hacer clic en Crear este personaje. Vamos a crear a Luke. Ver todo está funcionando sin problemas. Voy a hacer click en Control o escapar. Se puede ver que no obtenemos errores. Ahora, también muy agradable comprobar si algo es válido. También puedes hacerlo con variables a veces cuando lo necesites. Entonces si acabo de tirar de esta cámara para la ciencia, podemos hacer clic derecho en ella y podemos hacer click en Convertir para validar, obtener. Esto también funciona. Por lo que en realidad podríamos haber hecho este control de placa líneas a una variable y podemos verificarla así. Si el controlador del jugador es válido, puedes hacer algo. Si no es válido, eso no hace nada. 43. Cómo actualizar la posición de la cámara: Ahora es el momento de actualizar la posición de las cámaras. Puedes ver aquí cuando hacemos click en Jugar ahora, podemos ir con el personaje, podemos movernos, pero la cámara es estática y no está siguiendo a nuestro personaje, y esto es lo que queremos. Así que volvamos a la base de jugadores, y hagamos esa lógica dentro de aquí. Por lo que tengo dos nuevas herramientas para enseñarte. Se trata de temporizadores y se trata de una línea de tiempo. Por lo que dos cosas muy esenciales en Blueprint. Entonces hagamos eso aquí en el lugar de inicio. Así que cada vez que empezamos a jugar el juego y engendramos la cámara, y adjuntamos nuestro yo, nuestra visión a esa cámara. Vamos también adelante y actualicemos la vista de la cámara para que siga al jugador todo el tiempo. Ahora, antes de hacer un temporizador, en realidad quiero hacer que un evento marque. Quería mostrarte esto y antes te dije que nunca usaras este evento tick, porque esto corre 60 veces segundo y tu juego no estará optimizado. Se puede hacer mucho mejor que usar esto. Voy a usar esto ahora mismo y lo cambiaremos con un temporizador. Y esto es lo que te dije antes. Puedes hacer otras cosas que usar una garrapata en algún momento. Y lo que quiero decir con eso es que puedes usar temporizadores para evitar usar textos que ejecuten tu código 60 veces por segundo. Por lo que podemos usar temporizadores para evitar eso. Pero vamos a usar una garrapata ahora. Y puedo mostrarte cómo lo cambiamos más tarde para que puedas aprender de ella. Entonces lo que estamos tratando de hacer esencialmente es que estamos tratando de conseguir la cámara de visualización que tenemos. Esta es la cámara que engendramos aquí. Estamos tratando de conseguir esta cámara y simplemente establecer la ubicación de la misma. Entonces esto es lo que esencialmente estamos tratando de hacer. Estamos tratando de establecer la ubicación de la misma a la ubicación del jugador. Entonces si lo hacemos muy, muy fácil, sólo podemos decir conseguir ubicación real. Y la ubicación real es auto, que es este jugador. Entonces la nueva ubicación de esta cámara es la ubicación del jugador. Entonces va a seguir al jugador todo el tiempo. Y como esto corre 60 veces por segundo, va a seguir constantemente al jugador. Ahora, vamos a hacer clic en jugar aquí. Y se puede ver cuando corro por ahí, ahora estamos siguiendo al jugador igual que antes. Entonces esto es esencialmente lo que estamos tratando de hacer. Y por supuesto esto te va a dar un error porque esencialmente estás ejecutando este evento antes de haber corrido esto, esta cámara, responde esta cámara aquí. Y se puede evitar eso de nuevo, igual que lo que dije en el video anterior, se puede convertir esto a una validar que se obtiene. Si es válido, puedes seguir adelante y actualizar la cámara. ¿ De acuerdo? Entonces esto corre, ni siquiera tome, esto corre 60 veces por segundo y está siguiendo a nuestro personaje. Pero queremos ese movimiento suave. No queremos que siga al personaje igual que antes. Porque ya lo hicimos antes. Queremos seguir al personaje sin problemas. Y para seguir algo sin problemas, puedes usar una línea de tiempo. Porque la línea de tiempo hay que pensarlo siempre que quieras pasar de 1 del punto a al punto B de una manera suave. Entonces, por ejemplo, si estás abriendo una puerta doble, estás abriendo las puertas dobles sin problemas, o incluso solo una sola puerta si estás abriendo la sola puerta. Entonces moviendo la puerta del punto a al punto B, Eso es movimientos suaves que puedes hacer con las líneas de tiempo. Por ejemplo, si has jugado a la historia de Maple, cuando dejas caer objetos o cuando matas algo y caen objetos, lo dejan caer aquí, como el objeto vuela al aire y cae al suelo. Ese movimiento suave también es una línea de tiempo. Por lo que cualquier movimiento suave del punto a al punto B, puedes usar una línea de tiempo. Así que busquemos la línea de tiempo y aprendamos al respecto. Así que vamos a hacer clic aquí en la línea de tiempo, y vamos a darle un nombre y lo voy a llamar layout, posición de la cámara. Y haz doble clic en esta línea de tiempo. Y dentro de esta línea de tiempo, podemos sumar una nueva pista. Y lo que queremos agregar es simplemente un flotador. Y puedo mostrarles por qué estamos agregando un flotador. Flotar de nuevo, al igual que la variable aquí abajo, a flote es solo un valor numérico con decimales. Eso es simplemente lo que es. Entonces por ejemplo, 25.2 y eso es un flotador. Así que déjame borrar este de aquí abajo. Entonces vamos a añadir un flotador. Y vamos a intentarlo. Vamos a llamarlo movimiento alfa. De acuerdo, así que déjame hacer clic derecho ahora en el gráfico a dos puntos. Y quiero seleccionar esto primero y en su momento 0, así que a los 0 segundos, quería que fuera 0, así 00. Y la duración de esta línea de tiempo aquí arriba, quiero que solo seas 1 segundo. Para el segundo, en el momento 1 segundo, quiero que el valor sea uno. Y puedes hacer click en estas dos flechas para que se ajuste a la pantalla aquí. Entonces después de 1 segundo, solo quiero que sea el valor de uno. De acuerdo, entonces puedo mostrarte por qué estamos haciendo esto y para qué podemos usar esto. También quiero que haga clic en esto, use el último fotograma clave como este. Así que volvamos ahora. Ahora tenemos esta línea de tiempo y se puede ver el alfa de movimiento, la carga que creamos ahora se está mostrando por aquí y podemos usarla. Y lo que queremos usar es algo llamado bucle. Entonces el bucle aquí, lo es. Interpolación lineal. Y va del punto a al punto B. Y necesita un Alfa. Y se puede ver que creamos este Alpha y lo que significa, va sin problemas del punto a al punto B. Así que va a jugar esta línea de tiempo. Sea cual sea el valor que enchufes aquí del punto a al punto B, va a bucle desde este punto hasta este punto sin problemas porque va a ir así al punto B. Así que podemos imaginar que esto es punto a, este es el punto B. Y después de 1 segundo, va a ir al punto B. Así movimiento suave, este es el alfa aquí, esto es lo que está haciendo. Entonces tenemos que especificar qué es el punto a y qué es el punto B. punto a es donde esté la cámara en este momento. Así que consigamos aquí la cámara. Y déjame bajar un poco esto y decir consigue ubicación de actor. Entonces punto a es donde esté la cámara en este momento. En realidad necesitamos un bucle para el vector porque se puede ver que esto es un vector, esto es un flotador, por lo que eso no es del todo correcto. Entonces vamos a escribir bucle, y vamos a seleccionar éste llamado vector, vamos a eliminar éste. Entonces aquí, consiga la ubicación real de la cámara. Así que el punto a es donde esté la cámara en este momento, punto B está donde esté el personaje en este momento. Estamos tratando de mover la cámara para desde donde está ahora mismo a donde esté el personaje en este momento, que tiene buena ubicación de actores. Y esto va a suceder sin problemas porque tenemos este alfa yendo del punto a al punto B sin problemas así. De acuerdo, así que déjame borrar todo esto en realidad, déjame simplemente borrarlo. Permítanme borrar todo esto en realidad sólo lo hará de nuevo. Ahora, quiero jugar esto desde el principio aquí. Así que no, no jugar aquí. Quiero colocar desde este pueblo empezar aquí abajo. Y ahora vamos a conectarlo aquí arriba en la actualización, queremos simplemente, de nuevo, igual que antes, queremos configurar la ubicación de la cámara. Por lo que establecer ubicación actor. La nueva ubicación es ésta. Y vamos a actualizar esto como aquí. Por lo que va a ir del punto a al punto B sin problemas porque tenemos esta línea de tiempo agregada. Y a través de esta actualización, se va a actualizar esta ubicación todo el tiempo de punto a punto B. Así que esto se va a actualizar 60 veces por segundo porque estamos usando un tick de evento. Así que hagamos clic en Jugar ahora y haga clic en Tsarina aquí. Se puede ver cuando me muevo ahora, se está moviendo sin problemas al igual que en Maple Story. Efecto muy fresco. Vale, entonces ahora esto está funcionando como se supone que debe. Impresionante. Entonces esto fue fácil. Y se puede ver, por supuesto que estamos recibiendo errores porque esto está trabajando en toma y podríamos haber evitado esto de nuevo, haciendo que este sea nodo válido. Pero no hagamos eso. En realidad quiero mostrarte cómo no podemos usar el evento enfermo porque esto ahora se está ejecutando 60 veces por segundo y puedes optimizar tu código. No me gusta cuando veo esto en mi proyecto. Así que vamos a mover esto un poco hacia abajo. Entonces para evitar usar tick, puedes usar algo llamado temporizadores para que pueda controlar cuánto se va a ejecutar por segundo. Digamos que establece un temporizador por eventos. De acuerdo, Entonces, ¿qué significa eso ahora tienes que especificar cuántas veces vas a correr cada segundo. Por ejemplo, si escribes uno, solo se va a ejecutar una vez por segundo. Si escribo 0.5, se va a ejecutar dos veces por segundo porque va a completar este evento en 0.5 segundos. Si R es 0.2, se va a correr por cinco veces por segundo. Así que esencialmente cómo se calcula esto es solo escribir uno dividido por 0 al número que has escrito aquí. Y se puede ver que da cinco, significa que este código se está ejecutando cinco veces por segundo. Si escribes 0.08, se va a ejecutar 12.5 veces por segundo. Y en cuanto a los eventos, los boletos del evento circulan alrededor de 0.1516. Entonces esta es la garrapata del evento. Está funcionando en 0.0017, así. Entonces, por ejemplo, puedes optimizar tu código ejecutándolo así. Entonces solo son diez veces por segundo en lugar de 60 veces por segundo. Para que puedas ver puedes optimizar las cosas usando temporizadores. No puedes, puedes optar no correr a 60 veces por segundo. Entonces conectemos esto aquí. Ahora, necesitas un evento para ejecutarlo. Entonces aquí lo que puedes decir, puedes arrastrar de este evento y tienes que hacer un evento personalizado. Y hagamos este evento, llamémoslo actualiza la posición de la cámara de capa. Por lo que ahora podemos conectar nuestro código. Permítanme borrar este evento tick. Y permítanme conectar este código por aquí desde los arranques del jugador. Ahora déjame hacer click en Compile, Save, y haga clic en Play. Y ahora en realidad déjame hacer click en este bucle, porque si no haces click en bucle, esto solo jugará una vez. Así que déjame hacer clic en bucle. Y si hago clic en Play now, mi cámara, está rezagada porque sólo me está siguiendo cinco veces por segundo. Por lo que sólo está actualizando nuestra posición cinco veces por segundo porque hemos escrito 0.2 aquí. Ahora el número que se me ocurrió es de 0.03. Esto fue así, lo hizo suave y algo por encima que hará que en realidad funcione más lento. Si tuviera que tomar esto aquí arriba. Y se puede ver que esto ahora se está ejecutando 33 veces por segundo. Entonces mucho mejor que correr a 60 veces por segundo. Entonces cada segundo lo estás ejecutando 30 veces menos que una garrapata. Así que trata de equilibrar esto y trata tener un equilibrio entre cómo se ve tu juego y tu optimización. Por lo que a veces tal vez quieras hacerlo 0.04 en su lugar. Y eso hace una gran diferencia porque si escribo 0.04 aquí, así que si lo tomo aquí arriba, 0104, se puede ver que va de 33 veces por segundo, corriendo el código, que sólo 25 veces por segundo. Por lo que sí hace una gran diferencia ir desde 0320403 fue el mejor resultado un visualmente también. Entonces no le gusta demasiado. Entonces si compilo y guardo y solo juego por aquí, puedes ver que funciona muy bien al igual que el tick del evento. Pero ahora solo lo estamos ejecutando 33 veces por segundo y no 60 veces por segundo. Entonces mucho mejor que antes. 44. Detener el movimiento de la cámara: Muy bien, así que ahora veamos cómo detenemos el movimiento de la cámara. Entonces cuando jugamos el juego y nos vamos a un lado aquí, quiero detener los movimientos de la cámara para que no pasemos por aquí este borde. Por lo que quiero detener la cámara en algún lugar por aquí. Por lo que nunca vamos al borde. Cuando el jugador camina. De ahora en adelante hasta este punto, la cámara sólo va a ser detenida y el jugador sólo va a caminar por ahí. Entonces así es como es en Maple Story. Entonces veamos cómo detenemos la cámara. Y esencialmente probé diferentes métodos y siempre trato de encontrar el mejor porque no estoy satisfecho, aunque dos de ellos están funcionando. Traté de encontrar el mejor si fuera yo haciendo mi juego. ¿ Y cuál sería la mejor solución para esto? Entonces lo mejor para esto es que podemos agregar algo llamado caja de colisión. Uno, el jugador o la cámara interesa esta caja de colisión y el evento debe suceder. Entonces para agregar caja de colisión, en realidad tenemos cambiar este mapa de teselas en un actor. Entonces hagamos eso aquí para empezar. Entonces vamos a la carpeta Blueprints. Podemos simplemente hacerlo aquí si quieres, o podemos hacer una carpeta. Y siempre podemos simplemente hacer una carpeta. A lo mejor en algún momento tienes más mapas, puede mantenerse más organizado. Así mapas de azulejos. Vamos a hacer clic aquí y hagamos una nueva clase de blueprint. Y si aquí abajo busca Talmud. Nuevamente, se puede conseguir éste llamado actor de mapa de azulejo de papel. Así que vamos a seleccionarlo ahora y llamarlo TM para mapa de teselas. Y déjame llamarlo camino del dragón. Este era el mapa, como se llamaba. Ahora, nuestro mapa de teselas es un actor de planos en lugar de solo ser un mapa de teselas por aquí. Por lo tanto, haciendo doble clic en él, despertando bajo componente render. Y solo seleccionemos nuestro mapa de azulejos. Y es éste llamado mapa de teselas, un dragón escribió aquí. Entonces vamos a compilar y ahorrar. Ahora para este mapa de teselas, tenemos que agregar dos cajas de colisión. Entonces esto es esencialmente lo que estamos tratando de hacer. Entonces vamos a añadir un nuevo componente. Busquemos colisión. Tenemos esta llamada la caja de colisión. Y esta colisión, caja de colisión, se puede ver aquí tenemos diferentes eventos. Entonces, ¿qué debería pasar si comienzas a solapar esta caja de colisión? Y vamos a pausar la cámara. Entonces vamos a cubrir el área que queremos pausar cuando. Así que subamos aquí. Y tenemos extensión de dólares, extensión aquí. Y el valor es que voy a poner en un 650 en la x Así que se va a extender aquí. Y 500 y DY. Y voy a poner mil y la z Y esto es sólo algunos números lo pruebo. Simplemente puedes hacerlas más grandes. Esencialmente. Permítanme en realidad sólo hacer esto 50 tal vez en el, el movimiento, chasquear y sólo tratar de ocularlo. A ver si voy a hacer que mi cámara acelere un poco más rápido. Así que sólo va a ocultarlo y hacerlo igual, así como esto. Así que está viniendo aquí abajo y está subiendo aquí. Y realmente no importa porque lo único que nos interesa es esta área porque el jugador nunca ha hecho aquí, pero sólo me gusta estar estructurado así. Entonces, esencialmente, solo estamos tratando de hacer que estos bichos sean lo suficientemente grandes. Y en realidad creo que tiene que ser mucho menos que eso. Vamos a probarlo. Entonces es dx, esa es la más interesante dependiendo de dónde se vaya a poner de pie el jugador. Así que hagamos 600 por ahora en la x. Y vamos a copiar pegue esto. Creo que podemos hacer eso, así que vamos a duplicarlo aquí. Y tomemos esta segunda caja y déjame moverla al otro lado del mapa. Así como eso. Así que ahora está del otro lado. De acuerdo, entonces ahora tenemos estas dos cajas de colisión. Siempre podemos probarlo y ver si necesitamos hacerlos más pequeños o más grandes. Así que vamos a componer Guardar. Entonces ahora lo que podemos hacer es dejarme realmente cambiarles el nombre primero. Permítanme llamar a esta caja de colisión izquierda. Así que si pudiera deletrear así y el otro, caja de colisión derecha. De acuerdo, así que para la izquierda, vamos a hacer clic en él y vamos a bajar y hacer clic en componente comenzar a solaparse. Entonces, ¿qué debería pasar cuando empiezo a solapar este componente? Permítanme eliminar estos eventos predeterminados estándar. Por lo tanto escuchar, con lo que solemos empezar es por solapamientos. Así que cuando nos superponemos algo aquí, realmente no tenemos un servidor run-on y ejecutamos en clientes. Entonces lo que solemos hacer es que usamos este llamado switch tiene autoridad. De nuevo, te lo dije antes que el servidor tenga la autoridad del juego. El servidor puede hacer cualquier cosa. Entonces autoridad significa si soy el servidor y remoto significa si soy el cliente, ¿qué debo hacer? De acuerdo, así que solo asegurándose de que esto, este componente superpuesto se ejecute en el servidor. Y por lo general lo que sucede es siempre que tengas cajas de colisión por aquí, cada vez que tengas cajas de colisión, generalmente quieres cambiar tiene autoridad y luego ejecutarlo en el servidor. Porque de nuevo, evitas hacer trampa. Sólo nos estamos asegurando de que en realidad haya una caja solapada aquí. Porque si solo lo ejecutas en el cliente, A veces el cliente puede hacer logrado donde ellos, se superponen con esta caja, pesar de que esta caja en realidad no existe en esta caja. En realidad se superpone. A lo mejor es aquí, están parados aquí y todavía lo superponen desde ahí. Trampa. Así que sólo nos estamos asegurando de que nos topemos en el servidor. Entonces autoridad significa que soy el servidor, por lo que switch tiene autoridad. Y aquí podemos ejecutar el código. Lo que queremos hacer es que queremos pausar la cámara siempre que el jugador haya interactuado con esta caja de colisión. Por lo que realmente no tenemos un evento llamado post camera. Así que hagamos eso en la base del jugador. Y lo que queremos hacer es que queremos publicar esta cámara, y aún no la hemos hecho variable. Así que hagamos eso por el tiempo que queremos pausar este temporizador es esencialmente así que no queremos ejecutar este código de posición de actualización aquí. Así que vamos a hacer clic derecho sobre este valor. Promociona tu variable. Y déjame llamarlo actualizaciones jugador, cámara, posición. Y por lo general me gusta decir manejar al final porque es un mango a la vez. Su mano, reproductor de actualización, mango de posición de la cámara. Lo que estamos tratando de hacer es hacer un nuevo evento personalizado. Y en lugar de simplemente hacerlo así, hagamos eso en nuestras interfaces Blueprint fueron casi expertos en Blueprint Interfaces ahora, así que vamos a crearlo aquí para la base de jugadores. Vamos al jugador, en realidad no aquí y las interfaces por base, hagamos una llamada. Hagamos que se pausa, pausa, capa, cámara, compilar y guardar. Así que volvamos a la base de jugadores y llamémosle publicar su cámara. Y en realidad necesitaba la cámara de capa de pausa de eventos. Así evento Pausa cámara del jugador aquí. Por lo que queremos llamar a este evento. Entonces si vuelvo aquí al mapa de teselas, ahora, estamos ejecutando este evento de caja de colisión y queremos llamar al jugador. El jugador. Podemos llamar a esto mediante el uso de este otro actor. Otro actor significa lo que se superpone, esta caja de colisión se superpone a componentes, la caja de colisión y el otro actor es lo que se superpone. Entonces estamos caminando dentro de ella. Es el jugador. Y sólo para asegurarme de que sea el jugador superponiéndolo, suelo hacer eso solo para asegurarme de que no cometamos un error aquí. Normalmente lo hago. Actor ha etiquetado. Por lo que el actor ha etiquetado, se le puede dar ataque al actor. Así que vamos a darle el tag player. Y lo que eso significa es aquí en la base del jugador. Si vuelves aquí, y si te vas, creo que está en los impagos de clase. Por lo que aquí si buscas etiqueta, puedes ver podemos añadir una etiqueta a esta base de capa. Así que agreguemos una etiqueta y llamémosla jugador. Entonces cualquier peón a choca con esta caja de colisión. Así que ahora recuerda, cuando tenemos al enemigo, el enemigo también está sobre. El enemigo aquí también está sobre. Así que sólo para asegurarse de que no sea el enemigo chocando con él. Y es sólo el jugador. Podemos decir que el actor ha etiquetado Jugador. Y si eso es cierto. Entonces si el actor tiene el tag player, que entonces ponemos aquí y la base del jugador. Por lo que todos los jugadores conectados tendrán el tag player. Ejecutaremos este código. Entonces si es cierto, vamos a ejecutar este código. Y lo que queremos hacer es que queremos ejecutar esta cámara de capa de pausa. El otro actor aquí es nuestro jugador. Así que definamos específicamente qué jugador es. Y luego de nuevo, podemos decir consigue capa REF porque esta es la que hicimos antes. Y entonces podemos decir capa de pausa, cámara. Y cuando se selecciona este mensaje porque es una función de interfaz. De acuerdo, así que volvamos aquí y hagamos algo con este evento. Y voy a ejecutar esto en los clientes porque realmente no quieres ejecutarlo en el servidor. Porque recuerda que esta cámara solo es específica del cliente. Esta cámara solo se ejecuta para ese jugador específico. todos los demás jugadores realmente no les importa tu cámara, no la van a ver. Entonces voy a ejecutarlo en el cliente, tan personalizado. Y llamémoslo CL para clientes, capa de pausa, cámara. Vamos a ejecutar este. Si hago clic aquí, vamos a ejecutarlo en poseer clientes como poco confiables. Recuerda hacer eso. Ahora, lo que queremos hacer es que queremos conseguir esta variable. Lo que estamos tratando de hacer es decir temporizador de pausa por manejado. Entonces cuando entramos en la caja, queremos hacer una pausa. Cuando caminamos fuera de la caja, queremos volver a despausar la cámara o al temporizador, por lo que se actualiza de nuevo. Entonces esto es lo que estamos tratando de hacer. Entonces en realidad necesitamos un booleano aquí, porque aquí, cuando nos superpongamos con la caja de colisión, vamos a hacer una pausa. Pero sin embargo, si volvemos a hacer click en el cuadro y bajamos, tenemos éste llamado n-componente end solapamiento. Entonces cuando salgamos de la caja de nuevo, voy a copiar pegue este código aquí, así. Realmente no tenemos que hacer eso maduro otra vez. Entonces otros actores conectados aquí. Ahora los actores también están conectados aquí. Entonces cada vez que dejamos la caja, queremos despausar. Realmente no, quiero decir, puedes seguir adelante y hacer un nuevo evento, pero en realidad puedes simplemente usar este evento para hacer ambas cosas usando un booleano. Así que recuerda a un booleano como si fuera verdadero o falso. Entonces hagamos aquí un booleano, haciendo clic en éste. Y el booleano solo debería decir pausa. Y si está en pausa, así que vamos a arrastrar desde aquí y hacer clic en B o rama. Entonces si es pausa, si esto es cierto, entonces debemos hacer una pausa. Y si no es cierto, debemos despausar así. Por lo que puede hacer ambas cosas dentro del mismo evento, así así al usar un booleano. Y obviamente tenemos que llevar a cabo este evento aquí arriba. Y entonces tenemos que correr este booleano por aquí. Por lo que necesitamos hacer un booleano y nuestro evento o en nuestra interfaz. Y ahora esto está molestando por alguna razón. No sé por qué. Vamos a compilar y guardar y hacerlo de nuevo. A veces eso sucede, sellar pausa, así. De acuerdo, así que hagamos eso en la interfaz. Supongamos cámara del jugador, hagamos una nueva entrada, un booleano, y vamos a llamarlo pausa de nuevo, Compile y Save, y volvamos. Puedo conectarlos juntos. Y ahora si vuelves al mapa de teselas, puedes ver que tenemos un booleano. Entonces cuando entramos al solapamiento, queremos hacer una pausa. Entonces estableciendo eso para corregir. Y cuando lo dejes, volvamos a llamar a este evento, pausar la cámara del jugador. Y queremos despausar. Entonces dejando esto falso. Por lo que ahora debería funcionar. Siempre que nos vayamos, vamos a tomar esto. Vamos a comprobar si es el jugador quien realmente está dejando esto. Vamos a establecer este booleano verdadero o falso. Y dependiendo de cuál sea el valor, se va a correr aquí. Dependiendo de cuál sea el valor, se va a pausar o onPause ese temporizador. Así que vamos en realidad antes de que pudiera hacer click en Play, vamos a revisar primero estas casillas de colisión. Entonces la caja de colisión izquierda y derecha, puedes bajar aquí y comprobar aquí su colisión. Entonces, ¿con qué chocan? Y sólo para asegurarse de que todo esté correcto, puede hacer click aquí y se puede ver que se superpone con todo, incluso el pon, se superpone con los estanques para que podamos hacer eventos de superposición. Entonces eso es yo creo que sí, eso se ve correcto. Eso está bien. Ahora, hemos terminado con el código, y ahora lo que tenemos que hacer, vamos a seguir adelante y eliminar este viejo Talmadge. ¿ Y eso borraría? Coloquemos nuestra nueva. Así que vamos al mapa del azulejo aquí. Y coloquemos la nueva. Y volvamos a colocarlo en 000. Voy a hacer que la excelencia se acerque aquí. Nuevamente, al igual que lo que te dije antes, vamos a moverla por diez. Creo que fueron diez. Y sólo para movernos, tenemos estas cinco capas, 123456 capas. Y yo voy, tenemos esta segunda capa en mis ceros, ceros, ceros. Para que lo puedan ver aquí. Está en mis ceros son 0, pero no lo es, no lo es. La primera capa amarilla es la segunda capa amarilla. Ahora al 0100 es que se puede ver tenemos las cajas de colisión. Por lo que ahora vamos a hacer clic en jugar y desovar como Tsarina. Y déjame caminar a un costado y se puede ver en realidad se está deteniendo. Entonces está funcionando. Ahora si voy a la derecha, en realidad no está funcionando y eso es porque me olvidé incluso agregarlo. Así que volvamos al mapa de teselas aquí y vamos, vamos a agregar en realidad el segundo. Incluso me olvidé de agregarlo en realidad. Por lo que al hacer clic en el derecho , pueden solaparse. Haciendo el mismo código que éste. Puedes copiarlo, pegarlo aquí abajo, conectarlo aquí, conectar aquí al otro actor, conectar aquí al otro actor. Y vuelve a hacer clic en el cuadro de la derecha. Y si lo dejas, así que si terminas el solapamiento, vas a copiar éste y luego conectarlo de nuevo aquí. Entonces otro actor o director aquí, y se va a dejar de pausar. De acuerdo, Así que esencialmente, esencialmente va a trabajar ahora, ojalá. Así que vamos a probarlo de nuevo. Moviéndose hacia la derecha, va a detener la cámara. Se puede ver que hay un pequeño bicho. Cuando entro a la caja aquí. Va a seguir a mi personaje por alguna razón antes de que se detenga. Entonces sigue a mi personaje y luego se detiene. No quiero que haga eso. Esto es algo que podemos mejorar en la próxima lección porque en realidad es, está haciendo una pausa aquí, pero está actualizada. Está terminando la actualización aquí en conseguir la ubicación de los actores. Por lo que está siguiendo un poco más al actor y cuando termina, entonces se detiene aquí. Entonces vamos a mejorar eso en la próxima lección. 45. Cómo mejorar el movimiento de la cámara: En esta lección, vamos a mejorar la cámara y el movimiento. Entonces de lo que hablamos aquí es cuando voy a la derecha, las cámaras se detienen, eso está todo bien. El problema es que sigue al personaje, se pega al personaje antes de que se detenga así, y luego se detiene por alguna extraña razón. Y aquí es donde estamos tratando de mejorar ahora. Entonces aquí está haciendo esta lógica por la buena ubicación del actor. Entonces a pesar de que estamos posando el temporizador, está terminando esta actualización aquí está terminando, terminando la posición de la cámara del jugador de línea de tiempo. Y aún está consiguiendo la ubicación de nuestro jugador y tratando de establecer la ubicación de la cámara o según eso. Entonces la forma en que podemos arreglar esto es haciendo una variable temporal para la buena ubicación del actor para que la cámara ya no consiga la ubicación de nuestros actores cuando estemos aquí al inicio de nuestra caja de colisión. Entonces vamos a decirle al temporizador, este fue el último punto al que debes actualizar y ya no deberías seguirme más por aquí. De acuerdo, así que de la forma en que hacemos esto, hagamos otro temporizador. Así que vamos, Y por cierto, en realidad hagamos primero la función. Por lo que se ve más claro. Entonces voy a hacer una función. Entonces haciendo clic en el plus aquí arriba y escribiendo f para función. Y luego llamemos a éste, consigue la ubicación actual del jugador. Ahora con éste, lo más simple que vamos a hacer es básicamente sólo conseguir la ubicación del jugador. Así que consigue ubicación real. Estoy consiguiendo esta ubicación de actriz, y sólo voy a guardarla en una variable. Tan cosa muy simple. Así que haga clic derecho, promueva a una variable y escriba ubicación de la capa actual. Así. Esto es, esto es lo único que esta función va a hacer. Entonces restaurando la ubicación get actor en una variable temporal que estaremos utilizando. Volvamos al Gráfico de Eventos. Y aquí vamos a crear nuestro segundo temporizador. Entonces digamos establecer un temporizador. Y esta vez en lugar de configurar un temporizador por evento, vamos a establecer el temporizador por nombre de la función. Entonces esto, podemos hacer esto también. Entonces conectemos esto y se puede ver cómo funciona esto. Entonces ahora te va a preguntar ¿cuál es la función que quieres ejecutar? Y es éste. Sólo estoy haciendo clic aquí, copiando el nombre. Y hay que copiar el nombre exactamente como es, tanto con mayúsculas, minúsculas, mayúsculas, etcétera. Así que cópielo exactamente como está. Y si alguna vez cambias el nombre, hay que recordar cambiarlo aquí también, lo contrario no funcionará. El tiempo que voy a establecer aquí es 0.1, por lo que se va a actualizar diez veces por segundo. Y también voy a configurarlo en bucear y hacer clic derecho en este temporizador promovido a una variable, y vamos a llamarlo get's parents layer location handle. De acuerdo, así que tenemos esta vez alrededor, ahora mismo, esta vez por ahora corriendo. Entonces en lugar de una buena ubicación de actor, utilicemos nuestra ubicación actual del jugador. Esta es la que acabamos de hecho, este, ubicación actual del jugador. Yo estaba mirando. Este se confundió. Esta es la ubicación de desove. Por lo que consigue esta ubicación actual del jugador. Voy a arrastrar eso y ponerlo aquí. ¿ De acuerdo? El truco es ahora es siempre que lleguemos a esta caja de colisión aquí, cada vez que lo alcancemos, vamos a detener este temporizador. Entonces en lugar de detener esta actualización aquí, vamos a detener este temporizador. Entonces el truco es, y en realidad déjame eliminar todas estas líneas de cuadrícula. Me molesta un poco. Entonces baja aquí de nuevo en renderizado y pinchando aquí. Entonces cuando llegue a esta línea de caja de colisión, va a detener el temporizador. Y cuando detenga el temporizador aquí en la base del jugador, ya no va a actualizar esto, obtener la ubicación actual del jugador. Ya no se actualiza, se va a quedar atascado aquí al inicio. Entonces este es el truco para hacer esto. Entonces en lugar de detener este temporizador aquí en el temporizador de post, eliminemos éste y vamos a detener éste llamado obtener la ubicación actual del jugador. Ubicación ya no se va a actualizar cada vez que lleguemos aquí. Y la cámara va a sólo parar también ahí. Entonces este es el truco. Vamos a conectar los de aquí. Ahora. Compila y Guardar. Ahora, déjenme hacer click en play and test y ver si todo es correcto. Entonces si camino hacia un costado, se puede ver que ya no está siguiendo y parando sin problemas. Y si salgo de aquí, también va a seguir sin problemas. Si voy a la derecha, también está parando sin problemas. Por lo que estamos deteniendo la ubicación actual get aquí, que nuestra ubicación actual, estamos deteniendo la actualización variable por aquí, por lo que piensa que el jugador todavía está aquí. Esto es lo que esencialmente está sucediendo. Esa cámara piensa que Player sigue aquí porque paramos el temporizador. Empezamos de nuevo el temporizador cuando dejo esta caja. Y de nuevo aquí, detengo el temporizador aquí para actualizar las variables. Entonces la cámara realmente piensa que todavía estamos aquí. Se puede ver que sigue recortando así que tenemos que ajustar el tamaño de la caja de colisión. Entonces si minimizo esto, vuelve a los mapas de teselas y ve al cuadro izquierdo. Y ahora vamos a ajustarlo un poco. Tenemos que hacerlo un poco más grande. Entonces en la x, probemos 625, tal vez seis, probemos 650 y veamos qué pasa. Por lo que seiscientos cincuenta, seiscientos cincuenta, da clic en play. Yo cuando camine aquí, se va a parar aquí. De acuerdo, tal vez podamos agregar un poco más, pero está parando el aire para que no haya problema. Sí, creo que esto es bueno. Así que ahora está parando aquí en los bordes. Ya no estamos viendo ese borde negro. Entonces ahora eso está fijo. Y caminando aquí. Y lo mismo es para éste. No obstante, todavía podemos caminar fuera del borde y esto es lo que vamos a arreglar en la próxima lección. Muy bien, así que antes de terminar esto, volvamos a la base de jugadores. Necesito estructurar esto un poco mejor. Así que déjame simplemente empujar esos. Recuerda organizar tu proyecto siempre porque va a ser un desastre. Confía en mí. Llevas un par de meses trabajando y no haces esto, tu proyecto se verá como un desastre y te arrepentirás en ese momento. Así que sólo trata de poner todo bien juntos. Estoy tratando de agarrar estas variables. Entonces poniendo las cosas muy bien juntas, haz doble clic en este pin para hacer un nodo redirigido como este. Por lo que ahora se ve bonito y organizado. Y éste, quiero decir, creo que se ve genial. Ahora. También puedes, incluso podemos empujar esto un poco más abajo. Hay espacio para que éste esté todo el camino por aquí. Y éste lo podemos poner justo debajo de aquí porque pertenecen juntos. Voy a ir por aquí. Esto también está organizado. Y siempre podemos poner un comentario. Entonces por aquí, podemos tomar esto y decir actualizaciones, actualiza los movimientos de la cámara para que siga a un jugador. Puedes intentar escribir lo que quieras. Así que sólo estoy tratando de pensar algo fuera de mi cabeza. Incluso puedes cambiar el color del comentario si quieres, cambiar el tamaño, si quieres. Y para éste estamos configurando los jugadores engendrados ubicación. Entonces permítanme comentar eso también. Digamos buscar las capas, ubicación inicial de desove. Así como eso. Así que trata de mantenerse lo más organizado posible. Incluso puedes salir de datos comunes. Y creo que esto se ve perfecto ahora vamos a compilar y ahorrar. De acuerdo, así que eso fue todo por ahora. Pasemos a la siguiente lección y agreguemos los límites. 46. Cómo agregar límites del mapa: Ahora agreguemos los límites para el mapa para que el jugador no pueda salir del borde. Esto es muy, muy fácil. Este es un video corto, probablemente aquí en detalle, mapa camino del dragón. Volvamos aquí. Y al igual que antes, agreguemos dos cajas de colisión más. Así que agreguemos aquí una caja de colisión a la izquierda. Y al igual que éste, voy a hacerlo, esta es la x, la y y z, y la z, voy a hacer mil de nuevo. Sólo están copiando pega esto y voy a arrastrarlo de nuevo así. Permítanme reducir un poco la velocidad de la cámara. Creo que esto es bueno, así que probemos esto. Voy a renombrar esto y llamarlo rebote izquierdo. Y voy a duplicar esto y llamarlo límites correctos. Y vamos a arrastrar éste hacia la derecha. Así, creo. Ok, Lo que queremos hacer aquí por los que están en la colisión, así que si haces click en uno de ellos y baja a colisión aquí y da click en esta pequeña flecha aquí. Quiero que haga click en éste y haga clic en personalizado aquí. Y ahora aquí puedes cambiar las cosas por los pons para que nuestro jugador esté sobre, y en lugar de superponerme, quiero bloquear mi teléfono. No quiero que el punto vaya más allá de esta caja de colisión. Lo mismo por aquí. Haciendo click aquí, pinchando disfraz y dando click en Bullock el. Pero tratemos de poner eso. Esa es probablemente la única edición que tuvimos que hacer. Entonces vamos a la derecha y veamos si nos estamos bloqueando. Estamos en el mar. Ni siquiera podemos ir más allá. Impresionante. Esto está funcionando y hay que probar esto para ver si el saldo es lo suficientemente grande. Van al otro lado. Y ojalá eso funcione también. Y eso funciona también y se detiene perfectamente así. Entonces así es como agregas límites de mapa donde básicamente estamos bloqueando que el personaje se caiga de la repisa con una caja de colisión. 47. Crea los libros de folletos enemigos: Ahora nos vamos a alejar un poco del jugador y vamos a implementar al enemigo. Entonces como lo primero que te he dado aquí en los materiales del curso. Entonces si vas a los materiales de costo, a los enemigos, te he proporcionado estas texturas. Probablemente haya más texturas en su carpeta. Y de nuevo, solo les estoy poniendo a medida que paso con el curso. Pero por ahora importante, el cerdo ocioso y se mueve y el caracol inactivo y se mueven. Así que primero vayamos a la carpeta Assets. Y dentro de aquí, vamos a hacer clic derecho y hacer una nueva carpeta y llamarla enemigos. Dentro de aquí, voy a hacer una nueva carpeta llamada texturas, que puedas intentar hacerlo tú mismo si lo deseas. Esto es algo que hemos hecho un par de veces ahora. Y puedes hacer clic y arrastrar esas texturas dentro de la carpeta de texturas. Seleccione todos ellos, Haga clic con el botón derecho, Aplicar configuración de textura 2D de papel. Por lo que eliminamos el desenfoque. Y empecemos con este caracol aquí. Entonces tenemos el ocioso, podemos hacer clic derecho y podemos crear un sprite. Voy a cambiarle el nombre a S4 sprites y caracol inactivo. Y luego hagamos eso por la mudanza. Así que haga clic derecho y vamos extraer este precio porque tenemos múltiplo. Por lo que seleccionando grid hasta aquí y luego escribiendo integran 90 por 90. Entonces ese es el ancho y la altura de la celda. Esto es lo que hice en Photoshop. Es por eso que sé cuántos píxeles es. Así que hagamos clic en extraer ahora. Y ahora voy a hacer clic lejos de la carpeta y en ella otra vez. Entonces ordenan automáticamente así de 0 a siete. Y ahora quiero que cambies el nombre de esto. Voy a saltarme esta parte. De acuerdo, así que ahora que los he renombrado, puedo seleccionarlos todos y hacer clic derecho, crear un flip book y llamarlo para FB caracol move. Voy a hacer click en este caracol aquí y establecer los tiempos son marcos por segundo a seis. Entonces esa es la velocidad con la que se mueve. Lo mismo que voy a hacer con el ídolo aquí. Haga clic con el botón derecho, cree un libro flip, y llamémoslo F sea caracol, inactivo, y haga doble clic en él. El fotogramas por segundo es solo uno porque es un marco. Y yo voy a tomar tanto el caracol aquí, éste, el Irlanda, el movimiento y moverlos a la carpeta de enemigos. Entonces los tenemos aquí fuera aparte de todo esto. Por lo que voy a hacer eso también con el cerdo ocioso y el movimiento de cerdo. Y voy a saltarme esta parte. Hice ahora el cerdo ocioso y cerdo mover flip books. Por lo que ahora voy a hacer click en el ídolo cerdo aquí y poner los marcos por segundo a seis, así. Y haz lo mismo con la mudanza. Establezca los marcos por segundo a seis. Ahora vamos a salvar todo. Demos clic en esos dos y arrástrelos a la carpeta de enemigos. Por lo que ahora tenemos los flip books para estos dos. 48. Cómo preparar los peones enemigos: Para configurar los puntos enemigos. Bajemos a planos. Y vamos a pasar a nuestra carpeta enemigos que hicimos camino, muy de vuelta en este curso. Así que recuerda la base enemiga. Hicimos eso haciendo clic derecho sobre la base del personaje y creamos una clase de Blueprint infantil. Entonces la base es un hijo de base de caracteres aquí. Así que aquí para la base enemiga, ahora vamos a hacer clic derecho y crear otro niño. Y ahora vamos a llamar a este caracol VP. Podemos volver a hacer clic derecho en la base de la imagen, crear un nuevo hijo, y llamemos a este VP pick. Pasemos a este caracol aquí. Vamos a hacer doble clic en él. Y aquí por el caracol, hacemos click en el sprite. Y aquí en el flip book fuente, seleccionamos el caracol inactivo. Voy, voy a buscar ocioso y seleccionar este caracol aquí. Voy a hacer lo mismo por el cerdo. Haciendo click en el sprite. Y aquí busca ocioso y selecciona al cerdo inactivo. Por lo que ahora tenemos el cerdo y los caracoles configurados aquí. Ahora tenemos que reducir el tamaño de esta cápsula y vamos a tratar de hacer eso y la base enemiga, por lo que se aplica para ambos. Así que vamos a hacer clic en la cápsula aquí arriba. Y aquí. Vamos a cambiarlo a tenemos que hacerlo aquí primero. Por lo que 15 por 15 quizá. Déjame volver al caracol y ver cómo se ve. Se ve, se ve bien por ahora. Siempre podemos ajustarlo en el juego. Se puede ver que es un poco pequeño para el cerdo. Entonces al hacerlo en la base, ya que es la clase padre de estos dos, automáticamente aplicará esto. Pero si necesitas cambios individuales, solo puedes hacer click en esta cápsula de cerdos. No tienes que seguir a los padres. Aquí cambia. Siempre se puede simplemente hacer el cambio individual para este cerdo específicamente, tal vez algo como esto en su lugar. Hagamos 2323, algo así. Éste no es realmente muy importante en este momento. Tenemos que probarlo en juego y ver cómo se ve. Por lo que tenemos que probar esto antes de saber que funciona. Entonces lo último que quiero hacer es ahora mismo, nuestros enemigos están chocando con nuestros jugadores, por lo que están bloqueando a nuestros jugadores. Yo creo que sí. Entonces intentemos echar un vistazo a eso. Por lo que BP base enemiga, podemos hacer click en la cápsula aquí y comprobar las colisiones. Y ahora mismo bloquea a nuestro personaje. Entonces, en realidad, no sólo bloquean a nuestro personaje porque los enemigos también sobre, por lo que se bloquean unos a otros. Entonces vayamos a aquí y la colisión presente sobre. Demos clic en la Custom aquí. Hagamos clic ahora. Entonces, para los pons, sólo vamos a hacer clic en la superposición porque tal vez necesitamos hacer algunos eventos superpuestos más adelante. Así que solo superpongamos los pons para que no se bloqueen unos otros cuando están caminando y además no bloqueen a nuestro personaje. Y esto fue todo para los que ahora. Y probablemente tengamos que hacer más cosas después, pero creo que esto fue todo para este curso. Entonces si ponemos esto al 0, se puede ver cómo se ve. Este es ahora el enemigo que tenemos. Y por supuesto que no hay movimiento este momento necesitamos sumar el movimiento. Y esto es algo con lo que estaremos trabajando en la próxima lección. 49. Volumen de límites de malla de navegación: De acuerdo, entonces ahora que estamos trabajando con inteligencia artificial, tenemos que decir a dónde pueden moverse todas estas IA, porque en este momento la IA no sabe realmente a dónde pueden navegar. Realmente no les has dicho a dónde se les permite trasladarse. Y esto es lo que vamos a hacer aquí. Y esto es muy simple en realidad. Subimos aquí y rápidamente agregan botón. Y los volúmenes que tienes algo llamado volumen de rebote de malla de navegación. Esto se utiliza para la inteligencia artificial, para la IA, y dice a dónde pueden moverse. Por lo que ahora crea esta caja aquí. Déjame ponerlo como 0 en la y Así que está por aquí en nuestro mapa de azulejos. Y entonces tenemos que hacerlo más grande. Entonces yendo aquí abajo en la configuración del pincel, hagámoslo más grande y dx, por lo que llena toda la zona. Y podemos moverlo hacia abajo así, así que está bajo tierra. Y si haces clic en P, Así P en tu teclado, puedes ver que aparece una línea verde. Y si haces clic en P De nuevo, es alturas ella. Por lo que dice instalarse aquí. Whoops, la configuración aquí llamó navegación y el espectáculo. Y el atajo es P para ello. Y te mostrará dónde se permite caminar la IA. Entonces en este momento, esto es verde. Se les permite trabajar aquí. No se les permite pasar esta línea aquí. Y en este momento la IA no es capaz de subir por aquí porque no tenemos línea verde. Y esto es porque hay que cubrir esa zona también. Así que vamos en la z, hagámoslo más grande y sólo voy a moverla hacia arriba así. Por lo que cubre ambos. Esta zona es ahora la verde, y esta área de aquí abajo también es verde como esta. Entonces hay algunos ajustes pequeños que tenemos que ajustar solo para asegurarnos de que todo esté funcionando. Aquí en la malla de navegación re-cast que hizo al agregar el volumen de rebote de malla de navegación. Por aquí en el desfase del sorteo, me gustaría sumar 0. Y esto es básicamente justo donde se quiere que este dibujo esté. Y sólo me gustó 0 en lugar de diez. Entonces no realmente algo importante, pero simplemente me gusta así. Lo siguiente es, la configuración más importante es aquí en la pendiente máxima del agente. Sólo voy a poner eso. Se puede ver qué pasa si lo baja. Significa que no pueden subir esa pendiente. Esto es lo que significa. Y sólo voy a ponerlo arriba porque quiero que puedan caminar por esa pendiente. Y esta es la altura del escalón. Voy a poner eso también. Y no creo que necesitemos ajustar más configuraciones. Tenemos que probar nuestro volumen de navegación para asegurarnos de que funcione. Así que déjame simplemente Archivar y Guardar Todo. Y antes de terminar estas ediciones aquí, hay que construir el volumen del balance de navegación. Así que al hacer clic en la acumulación aquí y haciendo clic en build o niveles hay que recordar para construir antes de que esto realmente tome en acción. De acuerdo, entonces ahora el edificio está terminado tan rápido. Y el edificio suele tardar mucho tiempo si tienes iluminación en tu escena. Entonces si estás trabajando con un juego 3D, pero puedes ver que esto no tomó tiempo. No tenemos ninguna iluminación. Esto es muy rápido de hacer. Y ahora que tenemos nuestro volumen de rebote de navegación hecho, ahora podemos pasar a trabajar con el movimiento del ojo. Por lo que podemos más adelante prueba para ver si esto está funcionando correctamente. 50. Controlador AI: Al igual que creamos aquí un controlador de reproductor, ahora podemos crear un controlador para nuestra IA. Así que pasemos a la carpeta Enemigo. Y dentro de aquí puedes hacer clic derecho y crear una nueva Clase Blueprint, C aquí, dentro de aquí solo puedes ver el controlador del jugador. Entonces el controlador es algo más avanzado y no realmente avanzado, pero no lo han incluido aquí porque es, la gente no suele trabajar con IA y un día comienza a trabajar con este motor. Puedes buscarlo aquí si haces clic en todas las clases y buscas controlador de IA. Y se puede ver este llamado controlador de IA. Vamos a seleccionarlo aquí. Y le voy a dar un prefijo de AIC para controlador AI. Y sólo voy a llamarlo por un Emmy como este. Así que vamos a salvar todo. Y ahora lo que voy a hacer es que voy a hacer click sobre esta base enemiga. Y aquí en la clase base se imprime a la derecha. Aquí puedes ver cómo poseer IA. Sólo voy a cambiar a lugar en el mundo o engendrado. Entonces tal vez engendras a los enemigos y la IA estará poseída. Y la clase de controlador AI, tenemos que cambiar esto a la clase de controlador AI que acabamos de hacer. Por lo que no va a usar el predeterminado. Queremos utilizar los nuestros propios. Y esto era lo único que teníamos que hacer. Por lo que ahora tenemos nuestro controlador de IA y puedes hacer click en él y ver cómo se ve. Y al igual que nuestro controlador de jugador realmente no contiene mucho. La única diferencia es que contiene un componente de acción y una ruta siguiendo componentes, pero nada realmente nos vamos a preocupar en este momento o usar. Entonces cerrémoslo y pasemos a la siguiente lección. 51. Pizarra y árbol de comportamiento: Ahora vamos a crear una pizarra y un árbol de comportamiento. Entonces si haces clic derecho por aquí en la carpeta enemigos y vas a la inteligencia artificial, puedes ver que tenemos algo llamado pizarra y un árbol de comportamiento. Así que vamos a hacer clic primero en Crear la pizarra, creándola aquí, llamándola dB para Blackboard, y luego escribiendo enemigo. Y si haces doble clic en esta pizarra, puedes ver que realmente no contiene mucho. Podemos crear una nueva clave que solo tiene una variable. Y esa variable, se puede ver alguna información al respecto. Podemos cambiar entre el árbol de comportamiento y la pizarra por aquí. Así que en realidad no pasa mucho y realmente no necesitamos usar esto en este momento. Entonces vamos a crear un árbol de comportamiento. Se puede ver que no podemos hacer click en él y esto es porque no tenemos uno en este momento. Así que vamos a cerrarlo. Volvamos a hacer clic derecho. Acude a la inteligencia artificial y crea un árbol de comportamiento. Y llamemos a este enemigo BT o enemigo de árbol de comportamiento. Ahora, puedes hacer doble clic en este árbol de comportamiento. Y dentro de este árbol de comportamiento es donde construyes la IA, como cómo se comporta la IA, cómo se está moviendo. Así que para empezar con aquí en el árbol de comportamiento, se puede arrastrar y soltar. Entonces como lo primero que haces en el árbol de comportamiento, tienes que elegir un selector. Algo muy importante saber dentro del árbol de comportamiento es que el código se ejecuta de izquierda a derecha. Y te mostraré cómo necesito hacer algunos de los nodos aquí para que puedas ver a qué me refiero. Así que a partir de la raíz, se puede arrastrar hacia fuera y haciendo selector. Y lo siguiente es hacer una secuencia. Tenemos un selector, tenemos una secuencia, y ahora vamos a añadir nuestro código. que puedas ver aquí, si agrego algo aleatorio, solo te voy a mostrar, solo voy a añadir lo mismo una y otra vez. Se puede ver, se pueden ver las notas. Tienen números. Entonces tenemos el número 0, número uno, y va a ejecutar el código de izquierda a derecha. Entonces aquí estamos empezando por la izquierda, tenemos el número dos y luego el número tres y el número cuatro. Si muevo esto, de esta manera, se puede ver que cambia al número tres, cambia al número dos. Entonces el código siempre va a disparar de izquierda a derecha. muy, muy importante para recordar. Vale, entonces lo que queremos hacer con este árbol de comportamiento es que queremos la IA, así que nuestro cerdo o un caracol aquí. Y el nivel que queríamos encontrar una ubicación aleatoria en esta malla de navegación. Una vez que encuentre una ubicación aleatoria, se va a trasladar a esa ubicación. Así que al igual que en Maple Story, donde el enemigo se está moviendo en el nivel. Encuentra un punto aleatorio en la malla de navegación, y luego se mueve a esa ubicación. A lo mejor espera dos segundos. Es como en el modo inactivo y luego se mueve a otro punto. Por lo que tenemos que empezar con encontrar un punto aleatorio en nuestra ubicación. Y luego después de que encontremos el punto aleatorio, tenemos que pasar a ese punto. Entonces antes de eso, tenemos que encontrar un punto aleatorio. Y esto es lo que vamos a hacer en la próxima lección. 52. Encuentra un punto aleatorio en el área movible: Pero ahora hagamos que nuestro enemigo encuentre un punto aleatorio en esta zona móvil en esta malla de navegación. Así que volvamos al árbol de comportamiento. Y dentro de aquí realmente no tenemos algo como esto, así que tenemos que crearlo nuestro. Y se puede hacer esto haciendo clic en la nueva tarea aquí arriba. Por lo que haciendo click en nueva tarea, entonces hay que guardar esa tarea y yo la voy a llamar, voy a quitar esto, así que BTT. Y luego vamos a eliminar todo esto y vamos a llamarlo enlazar ubicación aleatoria. ¿ De acuerdo? Y se puede ver la tarea que ahorra aquí. Por lo que tienes todas las tareas. Incluso podemos hacer una nueva carpeta o todas sus tareas. Entonces aquí dentro de la tarea, siempre comienzas con algo llamado recibir, recibir, ejecutar Ai. Este es el evento con el que siempre comienzas, y siempre terminas con ejecución terminada. Entonces tienes a estos dos siempre en una tarea aquí en el árbol de comportamiento. Y luego todo el código va entre estos dos. Entonces la función principal que estamos tratando de usar dentro de aquí se llama obtener punto alcanzable aleatorio en radio, tienes algunas otras. Así consigue punto aleatorio y radio navegable. Quiero conseguir uno en punto accesible. Así que tal vez tengas algo de navegación aquí arriba. Entonces si el enemigo está aquí abajo, tienes alguna navegación aquí arriba que el enemigo no puede alcanzar. Y en realidad no quiero fastidiarlo. Voy a usar este llamado Get Random punto alcanzable en radio. Entonces voy a hacer click en eso y va a mirar nuestra malla de navegación. Entonces, ¿cuál es el origen desde el que debe comenzar a buscar? Y solo quiero buscar desde donde esté el caracol o el más grande. Entonces pongamos aquí un caracol para que puedas visualizarlo un poco más. Entonces tenemos el caracol dentro de nuestro nivel aquí caminando por ahí. Entonces, ¿dónde quieres empezar a buscar? ¿Aquí en el origen? Yo sólo caracol grande y confiable está aquí. Entonces aquí en el peón controlado, Este es el enemigo que anda por ahí. Y recuerda, hicimos antes, consigue jugador ref y consigue controlador ref. No creo que tengamos uno para el enemigo, así que sigamos adelante y hagamos una, una Interfaz Blueprint porque en realidad necesitamos una referencia de esta base enemiga. Porque necesitamos usarlo aquí para conseguir la ubicación de los actores e insertarse como el origen. Por lo que aquí necesitamos una referencia a la Interfaz Blueprint o a la base enemiga, donde decimos consigue referencia enemiga. Volvamos aquí y hagamos una nueva Interfaz de Blueprint. Entonces este es el mismo método que lo que hemos estado haciendo hasta ahora. Así que haga clic con el botón derecho, vaya a blueprints y seleccione Interfaz de blueprint. Llamémoslo E termina base enemiga. Vayamos aquí. Y llamemos a éste consigue NME. Así que consigue a los enemigos para referencia. Ahora, en la salida, ¿a qué intentas referirte? Estás tratando de referirte a BP y a la interfaz. Entonces, así así. Y puedes llamarlo por enemigo. Vale, ahora recuerda ir a, a la base enemiga y por dentro de aquí ve a Configuración de Clase y luego agrega esa interfaz que acabas hacer llamada final base enemiga, Compile y Save, y aparecerá abajo aquí. Ahora, ¿quién es el enemigo? El enemigo es solo autodeseo, que significa cualquier plano en el que estoy. Entonces el enemigo es solo esta base enemiga. De acuerdo, ahora podemos volver a la tarea y desde el estanque de control, ahora podemos decir consigue referencia enemiga. Entonces si es el caracol caminando por ahí, sabe ahora que es el caracol. Esta es la referencia enemiga que tenemos aquí. Sólo voy a hacer clic derecho sobre ese enemigo y promueve una variable. Sólo voy a llamar a este peón enemigo variable. Así, sólo para decir más limpio. Y así este origen ahora podemos llevarnos a este enemigo **** y podemos decir consigue, consigue ubicación de actor como esta. Entonces el origen está dondequiera que esté este enemigo. Por lo que ahora el origen es de este enemigo. Y va a buscar un punto alrededor de ese enemigo. Este es el radio. Ahora tenemos que especificar cuán grande es el radio en el que se necesita buscar. Ahora, este radio, podríamos simplemente insertar un número y decir 50 y son 100 unidades. Pero tal vez tengas mapas diferentes. Así que imagina que no solo tienes este mapa en tu juego, sino que tienes varios mapas. Algunos mapas son más grandes que otros. En ocasiones necesitas buscar puntos más lejos. Entonces realmente no queremos tener como un número sólido escrito aquí en el radio. Normalmente lo que me gusta hacer por mis juegos, me gusta conseguir el tamaño de esta zona navegable. Y con este tamaño, este tamaño difiere de mapa a mapa porque puedes imaginar este volumen de rebote de malla de navegación es mayor o menor en otros mapas. Por lo que sólo va a conseguir ese tamaño, sea cual sea el mapa en el que se encuentre, y va a buscar dentro de esa zona. Entonces la forma en que haces esto es, alejemos esto un poco. La forma en que haces esto es otra vez, consigue actor de clase y usas get actor de clase. De nuevo, lo hemos usado antes, pero si necesito explicarlo de nuevo, hay que usar esto, conseguir un extra de clase. Se puede conseguir un actor que ya está engendrado dentro del nivel. Por lo que el volumen de los límites de malla de navegación ya está dentro de nuestro nivel en este momento. Por lo que sólo podemos buscar una malla de nav. Si puedo ver aquí nav mesh bounce volume. Por lo que ahora tenemos el volumen equilibrado de navegación. Ahora podemos arrastrar de esto y decir conseguir rebote actor. ¿ De acuerdo? Ahora nos dan los límites del actor. Y lo que podemos hacer con esto es que ahora necesitamos el radio, pero aquí el radio, se puede ver la extensión de los bichos. En realidad puedes imprimirlo a la pantalla y ver cómo se ve. Pero tenemos que correr el árbol de comportamiento antes de hacer esto, te voy a mostrar esto más tarde, pero por ahora, intentemos terminar esto. Lo que estamos tratando de hacer es encontrar el radio aquí, pero se puede ver que la extensión de los bichos es un vector. Voy a romper este vector que pueda ver la x, y, y z. lo único que nos interesa es la x. porque ves aquí el rojo, el punto de pivote rojo, si te acuerdas de antes, el rojo es la x. si se coloca el ratón aquí, sólo había realmente interesado en la zona en la x. realmente no nos importa la Z ni la y aquí. Estamos tratando de encontrar un punto dentro de ese tamaño aquí. Pero volvamos. Lo único que nos interesa es la X. Así que vamos, en realidad voy a dividir esta extensión de caja por dos porque lo probé mucho. Y creo que este tamaño, como buscar toda la zona navegable, es solo de gran tamaño. Y me gusta que mis peones solo busquen dentro de un área más pequeña. No me gusta que este caracol busque en toda la zona. A veces se mueve desde este punto del mapa, luego se mueve todo el camino hacia el otro lado de mi no me gusta eso. Me gustan los caracoles a veces se mueve de aquí a aquí solamente. Entonces ese es quizás el movimiento máximo. Entonces me gusta dividir esta caja se extiende antes de que realmente haga esta dosis dividida por dos. Por lo que es mucho más pequeño en área. Puedes ver aquí cuando escribes divide. Entonces si acabo de arrastrar de nuevo, tal vez lo hice demasiado rápido. Puedes escribir el botón dividir y puedes hacer click aquí. Ya puedes ver que es un vector, pero en realidad no necesito eso. Sólo necesito dividirlo por dos. Así que vamos a hacer clic derecho en este pin. Y puedes convertir este pin a un entero. Ahora es sólo un número, así que podemos dividirlo por dos. Puedo conectarlo de nuevo aquí con el vector break. Aquí. Ahora la x está dividida por dos. Y ahora puedo enchufarlo al radio, oops, así. Y vamos a derribar eso, algo como esto. Por lo que ahora tenemos esta ubicación aleatoria. Nuevamente, lo único que nos interesa es el valor x. Queremos que el valor Z sea el mismo porque todavía quiero que mi caracol esté aquí abajo. Y el valor y debe ser el mismo también porque todavía quiero que mi caracol esté aquí. Sólo me interesa moverlo al eje x. Entonces lo que voy a hacer es que voy a volver aquí y romper este vector. Así que ahora tenemos la x, y, y z. así que x es cualquier punto que se encuentre en la x. Y déjame hacer clic derecho y decir hacer vector. Ahora podemos reconstruir este vector para que la x permanezca igual. Este es el punto aleatorio que se encuentra. Pero quiero que mi y y z se queden igual. En realidad, sólo voy a copiar pegue esto aquí. Y sólo voy a volver a conseguir mi ubicación actriz y romper este vector x, y, y z. para que pueda usar esos valores. Sólo voy a tapar la y y la z. la y y y la z se queda igual que la, como el poema que tenemos al enemigo ****. Pero es sólo las salidas van a encontrar una ubicación aleatoria en, y esto es lo único que va a cambiar. Por lo que la Y y la Z siempre se va a quedar igual. Muy bien, entonces este es el resultado final y necesitamos enchufar esto en algún lugar y usarlo en nuestro árbol de comportamiento por aquí. Aquí es donde entra la Pizarra. Así que volvamos a la Pizarra. En realidad, creo que podemos encenderlo aquí y el árbol de comportamiento, por lo que bien puedes encontrar la pizarra dentro de aquí y abrirla. Pero al igual que antes, también podemos hacer eso yendo a su árbol de comportamiento y haciendo clic en la pizarra aquí arriba. Entonces hagamos una nueva clave, y hagamos un vector. Esto es lo que necesitamos. Y llamemos a este vector la ubicación x. Por lo que sólo nos interesa la ubicación X. Y solo asegurándonos de que esto sea un vector y realmente no necesitamos cambiar nada aquí. Así que vamos a guardarlo aquí. Y volvamos a la tarea. Y luego aquí vamos a hacer una nueva variable. Esta variable, sólo voy a llamarla vector porque es un vector. Y lo que hay que hacer aquí es buscar Blackboard. Y selecciona éste llamado selector de teclas Blackboard. Podemos compilar y ahorrar. Y entonces ahora puedes sacar este vector por aquí. Este es el, el vector de la pizarra. Y se puede decir establece Blackboard, valor de pizarra como vector. Tienes que seleccionarlo ahora. Y lo que va a hacer ahora va a añadir que este valor aquí en esto, este vector que has creado. Entonces vamos a añadirlo ahora aquí. Entonces ahora este es el resultado, y vamos a conectarlo. Entonces va a ir desde aquí todo el camino por aquí, así. Así que ahora está conectado. Y terminemos, ejecutemos. Y recuerda siempre hacer click en este botón de éxito. Tan importante. Compila y Guarda. Ahora veamos qué pasa. Volvamos ahora al árbol de comportamiento enemigo. Por lo que haciendo clic en el árbol de comportamiento. Ahora lo que podemos hacer es que podamos bajar aquí y buscar nuestra tarea. Entonces apenas escribiendo para BTT y podemos encontrar éste, PTT encontrar ubicación aleatoria. Y ahora tenemos que contarlo, es esta ubicación x que necesitamos usar en nuestra Pizarra. Pero puedes ver aquí, realmente no puedo, si hago clic en esta tarea, realmente no puedo, no tengo opción para hacer eso. Y esto se debe a que en la tarea, hay que hacer click en este vector y hay que hacer click en éste llamado instancia editable. Recuerda hacer eso o no podrás verlo. Entonces regresa con el enemigo. Y ya puedes ver podemos seleccionar un vector y el vector que queremos usar es esta ubicación x. Así que ahora va a encontrar una ubicación aleatoria y es este vectores. Por lo que ahora tenemos el resultado. Se va a trasladar a esa ubicación. Y al final lo que quiero hacer es simplemente decir esperar. Por lo que a veces cuando encuentra un punto, se mueve a ese punto. Quería esperar un poco antes de que se mueva de nuevo. Aquí en el tiempo de espera, sólo voy a escribir 0. Me pareció que era la mejor manera de hacerlo. Entonces el tiempo de espera es 0, pero la variación es de tres segundos. Por lo que a veces esperan 0 segundos, a veces esperan tres segundos, a veces eran dos segundos. Por lo que a veces pueden esperar 0 segundos para que no esperen, simplemente se mueven de nuevo. Hay variaciones aleatorias, es de tres segundos o a veces esperan tres segundos. Pero ahora va a encontrar una ubicación aleatoria. Se va a trasladar a esa ubicación. Y entonces va a esperar hasta tres segundos y luego ir de nuevo y repetir este proceso. De acuerdo, así que para que todo funcione, tenemos que volver al controlador del jugador. Y dentro de aquí, comencemos a jugar. Tienes que decir correr el árbol de comportamiento. De lo contrario tu árbol de comportamiento no va a funcionar. Y luego hay que seleccionar qué árbol de comportamiento es éste va a componer Guardar. Y ahora pongamos a un enemigo al nivel y veamos si funciona o si hay algo que olvidé. Así que solo golpea a un enemigo al nivel. Demos clic en Jugar ahora, seleccione el personaje. Y ahora mismo lo que miro a mi enemigo, puedo ver a mi enemigo no se está moviendo. Entonces hay algo mal y necesito encontrar lo que hice mal dentro de este proceso. Muy bien, así que la forma en que hago esto para depurar las cosas. Para que puedas ver aquí cuando vuelvo a jugar aquí, la IA no se está moviendo realmente. Algo anda mal. Y en realidad pongámoslo aquí arriba. A lo mejor está dentro del suelo y aún no se mueve. Entonces lo primero que hago no me gusta cuando debug, a veces la malla de navegación rebota volumen errores hacia fuera, por lo que no va a funcionar. A veces en realidad borré y traté de hacer esto de nuevo. Entonces no sé por qué en Unreal Engine a veces funciona. A lo mejor este no es el problema, pero podemos empezar aquí. Y así en los volúmenes, vamos a agregar el volumen de los límites de malla de navegación nuevo, ponerlo a 0. Y en la extensión de caja, lo voy a aumentar de nuevo, algo así. Y luego aumentar la, la z. bien, ahora lo tengo de nuevo y en el re-cast aquí, voy a establecer el empate de nuevo offset a 0. Y fijamos la altura del agente a realmente el agente max loop 289 y la altura máxima 289. Entonces voy a salvar y construir todo de nuevo. De acuerdo, ahora podemos intentar hacer click en Play y aún no se mueve. Entonces lo siguiente, lo que estoy tratando de mirar es, es encontrar un punto en mi, en mi árbol de comportamiento aquí en mi tarea en realidad. Así que para empezar, lo que normalmente hago es sólo voy a imprimir en la pantalla. Entonces print string es lo mejor que puedes hacer para depurar. Porque cuando imprime una cadena en tu pantalla, lo sabes, que este código se está disparando. Este código está funcionando. Entonces si hago click en Jugar ahora y puedes verlo dice Hola. Entonces la tarea es en realidad saludar. Entonces tratando de ejecutar el código, así que aquí no hay nada malo. Así que sigamos adelante con el código. Por aquí. Tratemos de ver si encuentra este punto. Así que vamos a imprimir a la pantalla de nuevo, conectado desde aquí ahora. Porque ahora lo sabemos, ahora sabemos que esta parte del código está funcionando, por lo que está lanzando esta tarea. Entonces por aquí, vamos a imprimir ahora este valor. Entonces se va a imprimir este vector y ver si realmente encontramos algo aquí. Y se puede ver en la X, realidad está encontrando diferentes ubicaciones, pero en realidad está funcionando. Por lo que es encontrar esas ubicaciones correctamente. Entonces está bien, son esas ubicaciones y sé que mis controladores de IA funcionan también porque este es el que está ejecutando el árbol de comportamiento que hicimos. Y podría ser una mudanza y luego esperar al instante. Entonces esto también es un, algo que puede suceder. Entonces aquí en el árbol de comportamiento, tal vez se está moviendo y luego está esperando instantáneamente por alguna razón. Así que déjame conectar esto y simplemente conectar estos dos. Permítanme Guardar y luego haga clic en play. Y si miro mi árbol de comportamiento, ves aquí estoy jugando el juego ahora. Y creo que esto es lo que está sucediendo en última instancia porque realmente no veo nada malo en nuestro código. Es encontrar un punto aleatorio. Está tratando de pasar a ese punto. Pero puedes ver aquí nuestro árbol de comportamiento se está volviendo loca. En realidad se está moviendo a esa ubicación, encontrar una nueva ubicación, moverse, buscar, moverse, moverse, encontrar movimiento, encontrar. Sigue haciendo eso. Encuentra una nueva ubicación. A pesar de que la ubicación está muy lejos, se mueve un poco paso antes de que empiece a llegar, buscando una nueva ubicación. De nuevo, creo que la clave de Blackboard aquí está puesta auto actor que este podría ser el error aquí. Así que volvamos aquí, salgamos del modo de reproducción, y hagamos clic en este movimiento a. Así que como que me olvidé de cambiar esta ubicación aquí. Así que conectemos esto de nuevo aquí. Demos clic en Play. Ahora. Se puede ver, ahora realmente está funcionando. Entonces el caracol se está moviendo. Se ha trasladado a un lugar. Está esperando hasta tres segundos y luego se está moviendo de nuevo. Entonces este fue el bicho. Y no quiero borrar esto del video porque quiero mostrarte cómo depuras las cosas porque te vas a encontrar problemas. Y cuando intentas usar la cadena de impresión para imprimir una cadena en la pantalla. Y cuando imprime una cadena, sabes que ese código está funcionando porque está disparando la decodificación por ti, está disparando el evento. También puedes intentar averiguar la ubicación a ver, ¿está encontrando una ubicación aleatoria o no? Entonces lo último, obviamente fue que el árbol de comportamiento es sólido. Se volvió una locura. Y esto se debe a que se estaba moviendo a ese factor celular en la Pizarra, que no tenía sentido. Se suponía que debía trasladarse a esa ubicación x. Entonces ahora está trabajando aquí. Pero se puede ver, por supuesto nuestra animación no está funcionando porque no hemos agregado ninguna animación para el caracol ni para ninguno de los enemigos. Entonces hagamos eso en la próxima lección. 53. Estado del movimiento enemigo: Muy bien, entonces lo que tenemos que hacer en esta lección es que necesitamos cambiar el estado de movimiento para este enemigo para que cambie el flip book. Siempre que se mueve, tiene el libro flip de movimiento, y cada vez que está inactivo, tiene el libro flip inactivo. Entonces en realidad el mismo proceso que hicimos con nuestro jugador cuando nos estamos moviendo y parando. Así que lo mismo. Volvamos ahora a la base enemiga. Y dentro de aquí, eliminemos todos estos eventos predeterminados. Y lo que queremos hacer en última instancia es crear una nueva variable y configurarla es en movimiento. Entonces en realidad voy a escribir una B delante de ella. Para Boolean está moviendo este booleano aquí. Si lo arrastro hacia fuera, queremos configurarlo para rep notifique. Entonces recuerda, todos los cambios visuales necesitan ser interrumpir notificar y cambiar el flip book es un cambio visual para que todos los clientes puedan verlo. Y esto es lo que queremos hacer. Así que aquí en la función unwrap, recuerda que crea una función on-rampa cuando haces algo para envolver notificar. Y dentro de aquí, sólo tomémoslo. Así que no en este momento, solo estoy trabajando revés para que puedas ver a qué me refiero. Entonces este es el resultado final, se está moviendo se establece a verdadero. Entonces creando una rama. Si esto se establece en verdad, vamos a tomar este sprite y set flip book. Por lo que ahora vamos a poner este flip book dos. Entonces si se está moviendo, no vamos a inactivo en realidad. Nos vamos a mudar aquí. Si se está moviendo, nos vamos a mover. Y si está al ralentí, si no se está moviendo, vamos a inactivo así. Pero ahora se puede ver que tenemos que seleccionar, tenemos que seleccionar también el cerdo. Por lo que tenemos que hacer esto dinámicamente. Entonces si tienes dos enemigos, esto es sólo para un enemigo, solo está trabajando para el caracol. También lo necesitamos para el cerdo. Y recuerda, como lo hicimos con el jugador, necesitas hacer una estructura. Vamos a la carpeta de estructuras. Vamos a hacer clic derecho y hacer una nueva estructura. Así que haga clic derecho y vamos a encontrarlo bajo planos y estructura y llamarlo s t animal info. Dentro de aquí, sólo vamos a crear dos cosas. Vamos a crear la animación ociosa, y vamos a crear la animación de corrida. Simplemente podemos llamarlo la animación de movimiento. Simplemente lo llamamos mover, mover animación. Y esto es obviamente un libro de papel como este. Y este es también un libro de papel. De acuerdo, entonces tenemos estos dos, y se puede adivinar tal vez más adelante podamos agregar salud a los enemigos para que en realidad podamos hacer una nueva variable más adelante y llamarla salud. Entonces toda la información sobre el enemigo va a ser almacenada dentro de aquí. Entonces, cuánta salud tienen, cuánto daño hacen, y cuánto oro te dan y así sucesivamente. Entonces toda la información animal estará aquí abajo más adelante. Entonces volvamos ahora a la base enemiga. Y ahora podemos sumar la estructura y las variables. Y podemos llamarlo info animal. Podemos seleccionarlo aquí y lo llamamos st info animal. Y esta es la estructura. Ahora tenemos esta estructura, podemos arrastrarla hacia fuera y al igual que antes, romper de ella y dar click en break para ver todas las variables. Entonces puedes agregar el inactivo. Se puede ver que tenemos el ADL aquí arriba y se mueven aquí va a ser un desastre porque va a ser cruzado así. Me gusta mantenerme limpio en mi proyecto. Entonces, lo que voy a hacer, intentemos tener el inactivo aquí arriba para que podamos revertir esto diciendo nueces. Así que no b significa NO booleano. Entonces si esto significa ahora es si el enemigo no se mueve, así que si esto se mueve es falso, por lo que si no se está moviendo, entonces estamos al ralentí. Así que déjame borrar esos flip book y conectado aquí. Entonces lo que tenemos que hacer aquí, así que si no te estás moviendo, si eso es cierto, estás al ralentí. Por lo que estamos conectando inactivo aquí arriba. Y voy a copiar pega esto aquí abajo, su cuello, los sprites. Ahí está conectar false aquí abajo y conectarlos muévete aquí abajo. Entonces cuando no nos estamos moviendo, estamos al ralentí. Cuando nos estamos moviendo, entonces estamos en la animación de movimiento. Y para que esto funcione, tienes que irte. Por lo que ahora tienes estas dos variables y tienes que configurarlas. Y recuerda cuando añades una variable a la clase de padres, así que estamos dentro de la base enemiga. Todas las Clases de Plano Infantil heredarán esa información. Entonces Cerdo y caracol son hijos de base enemiga. Entonces ir al cerdo y abriendo el editor de planos completo aquí en la clase impagos. Se puede ver la variable info animal está aquí porque la agregaste a la clase padre. Por lo que aquí puedes seleccionar la animación ociosa para el cerdo. Entonces busca ocioso, toma eso y por la luna, y selecciona eso. Mover animación. Lo mismo aquí para el caracol. Así que ábrelo, abre la clase de editor de blueprint full defaults animal info, busca ocioso, y agrega los caracoles, busca mudanza, y agrega el movimiento para el caracol también. Bien, entonces tenemos eso ahora, y volvamos a la base. Por lo que este es el resultado final al que vamos a estar apuntando. Y déjame acercar esto así para que esté más organizado. Volvamos a la Gráfica de Eventos. Por lo que ahora tenemos esta variable que necesitamos establecer, y siempre configuramos estos séquito para luchar a través de un servidor. Hagamos un valor personalizado llamarlo estado de movimiento del servidor así, y lo ejecutaremos a través del servidor y es confiable y ahora podemos conectar esto. Ahora recuerda estas variables de servidor, tenemos que ejecutarnos a través de una variable normal también. Y se llama etapa de movimiento. Así que en realidad vamos a crear uno directamente dentro de una Interfaz de Blueprint. Porque ahora tenemos uno. Vamos a las interfaces o a la base enemiga. Y llamémoslo aquí. Estados Movimiento. Vamos a compilar. Y aquí en la base enemiga hicimos una variable llamada se está moviendo, por lo que necesitamos un booleano. Entonces vamos a crear un booleano y la entrada llamada D se está moviendo. Vamos a compilar y ahorrar, y volvamos a la base enemiga. Por lo que ahora podemos llamarlo diciendo estados de movimiento. Y podemos llamar a eso eventos. Y ahora podemos ejecutar ese evento de servidor desde aquí. Vale, entonces ahora estamos trabajando al revés. Por lo que partimos de este evento movimiento estado. Va a pasar por el servidor y luego configurar esta función de notificación de disrupción. Y dependiendo de si es cierto o no, va a poner ese libro flip book. Por lo que tenemos que ejecutar este evento en alguna parte. Y creo que lo mejor, o encuentro, encontré que la mejor manera de hacer esto corriendo ese estado de movimiento es aquí en el árbol de comportamiento al final definido ubicación aleatoria. Entonces cuando se encuentra una ubicación aleatoria, sigamos adelante y digamos que se está moviendo. Entonces vamos a establecer que el estado de los movimientos sea verdad. Y entonces va a seguir adelante y pasar a esa ubicación. Por lo que aquí ya tenemos una referencia a nuestro peón. Entonces esto es muy fácil. Podemos tomar esto y decir Establecer estado de movimiento y seleccionar ese mensaje porque es una Interfaz de Blueprint. Así como esto. Y en realidad esta es una base de jugadores que es la equivocada. Volvamos a ver cómo lo llamamos. En realidad, acabo de llamarlo un estado de movimiento. Permítanme, déjame llamarlo Estado de movimiento establecido. Creo que eso es mucho mejor. Por lo que llamar a éste también, los movimientos establecidos se quedan así. Compilar. Volvamos a eso y digamos Movimientos de Set, Estados. Y aquí está en la base enemiga, no en la base de jugadores. Entonces de todos modos, mensaje seleccionado aquí. Ahora hemos dicho que el movimiento afirma ser cierto. Así que ahora se está moviendo. Pero tenemos que ponerlo falso en algún momento porque ahora si haces click en Play y puedes probarlo, puedes ver que se está moviendo ahora. Y déjame solo reducir un poco la velocidad de movimiento porque ahora se está moviendo tan rápido. Entonces para el caracol, vamos al Movimiento de los Personajes. Y voy a poner el movimiento a 45. Acabo de hacerlo mucho y creo que Cuarenta y cinco fue un buen número para este caracol de historia metálica. Para que puedas ver que se está moviendo, pero cuando está al ralentí, nunca se detendrá como en el libro flip book de animación ociosa. Y esto es porque nunca hemos puesto que el booleano sea falso. Por lo que realmente no sabe cuándo jugar ese libro flip de animación ociosa podría ver cuando está inactivo, todavía se mueve. Entonces tenemos que configurar, si vuelvo a la interfaz, tenemos que poner esto a false en algún momento. Hagamos eso aquí en el árbol de comportamiento, podemos hacerlo también. Por lo que se mueve a esa ubicación y antes de que pesa, vamos adelante y pongamos que booleano sea falso. Así que hagamos una nueva tarea aquí y simplemente haga clic en ésta de aquí abajo. Por lo que hacemos una nueva tarea. Y éste, voy a llamar sets movimiento Boolean, set balón de movimiento, lo que significa que el movimiento Boolean, esto es lo único que está haciendo. Nuevamente, al igual que lo que te dije antes, tenemos que empezar con un recibir ejecutar Ai. Y tenemos que terminar dentro de acabado ejecuta. Y tenemos que ponerlo abajo el éxito cuando esté terminado. Y lo único que estamos haciendo es tomar este dicho consigue enemigo, consigue referencia enemiga. Entonces estamos consiguiendo esa referencia enemiga aquí y en la base. Y desde la interfaz sólo podemos arrastrar y decir Set movimientos estados aquí y la base enemiga. Y lo único que estamos haciendo es simplemente establecer que este booleano sea falso porque ahora ya no nos estamos moviendo. Hemos terminado de mudarnos. Así que volvamos al árbol de comportamiento. Y aquí podemos arrastrar y decir BTT y seleccionar que un conjunto de movimiento booleano. De acuerdo, entonces la cosa está haciendo ahora, es encontrar una ubicación aleatoria. Se está mudando a esa ubicación. Y cuando se mueve y termina ese movimiento, va a poner el booleano verdadero, falso, así que ya no nos movemos. Entonces va a esperar aquí. Por lo que ahora vamos a hacer clic en la plaqueta. En realidad solo agrega unos cuantos enemigos más solo para que no tenga que esperar en ese caracol para parar. Así que pinchando aquí, y se puede ver que es ahora, éste está en el inactivo y funciona bien. Ahora está en el ocioso. Y luego cuando se mueve, está en el libro flip book del movimiento. Por lo que ahora funciona a la perfección. Entonces lo que podemos hacer ahora es que sólo podemos sumar unos cuantos enemigos más. Por lo que sostener Alt y arrastrar se duplicará. Y solo puedes duplicar unos cuantos enemigos en este nivel. Cuantos quieres. No voy a colocar en realidad, vamos a colocarlos aquí. ¿ Por qué, por qué no? Vayamos al enemigo y voy a colocar el cerdo aquí arriba. Tan enemigos más duros están en la cima aquí. Entonces pongamos esto al 0. Y en realidad, en lugar de 0, tenemos que poner uno para que no miente a los azulejos. Pero vamos a añadir, por ejemplo, para los cerdos aquí arriba. Y sí, creo, creo que eso está bien. Así que digamos vamos a hacer clic en Play para ver si todo está funcionando en contraposición a los cerdos son demasiado rápidos. Así que volvamos a las Fotos. Y más cerdos a los que estoy llamando voy a ponerlo a 90 años. Creo que los 90 yo probé eso también. Pero los cerdos es un buen número. Y se puede ver que están detrás de ella azulejos. Entonces en realidad tenemos que moverlos un poco hacia adelante. La forma más rápida de hacerlo es seleccionarlos aquí en el outliner. Entonces estos son los cerdos. Estos son los caracoles. Mantén presionada Shift, selecciona el último, por lo que los tenemos todos y lo configuramos a uno aquí en el Y. y pincha sobre el jugador. El jugador en vez de uno, quiero que estén frente a los enemigos. Por lo que haciendo clic en dos sobre este desove jugador, por lo que estamos frente a todos los enemigos. Y ahora vamos a hacer click en Play. Y así es como se ve. Entonces tenemos a los cerdos corriendo ahí arriba. El ralentí está funcionando bien y el movimiento también está funcionando bien. Se puede ver que estos caracoles están un poco en la parte superior. Lo que puedes hacer es dar click en el caracol. El caso es que cuando aumentes esta cápsula, va a empujar ese caracol hacia arriba para que no parezca que esté en el suelo. Entonces por ejemplo, para el caracol, si solo estás tratando de 11 aquí abajo y aquí arriba, haz clic en compuesto save. Y ya se puede ver que está en la hierba, ahora no está volando hacia arriba. El problema es ahora y lo vamos a arreglar en la siguiente lección, se puede ver que todavía se está moviendo, como lo es, en realidad está inactivo, pero se está moviendo así. Están disparando. Esto se debe a que la animación ociosa se bombea hacia fuera. Por lo que pasé un par de tiempo para ver por qué estaba haciendo esto. Y aún no tengo ni idea de por qué está haciendo esto. Pero creo que mi teoría es que está tratando de encontrar un punto en la navegación y luego se está molestando porque en realidad todavía se está moviendo. No está al ralentí, pero no se puede mover a esa zona. Y esto se debe a esta cápsula aquí. Está haciendo alguna extraña colisión y está abasteciendo al enemigo. Así que pasemos a la siguiente lección y arreglemos estos errores. 54. Fijar el problema del problema de bloqueo del movimiento y recorte: De acuerdo, así que para arreglar ese último buck del último video, tenemos que ir a, empecemos con este caracol. Entonces intentemos aumentar esta cápsula. Cuán lejos a 2828 sobre eso fue el mejor número para hacerlo por estos caracoles. Y vamos a mover este caracol menos 18 para ver si está en el suelo. Entonces moviéndola hacia abajo a menos 18 se está moviendo en el suelo. Y sólo para comprobar y ver si está molestando aquí en el Cerro, parecen estar moviéndose sin problemas ahora. Muy bien, así que eso se ve, se ve bien ahora. Así que si se guarda, puedes aumentar esta cápsula aquí y se puede mover por este caracol para que camine sobre la hierba si no lo haces, está flotando sobre la hierba. Y para los cerdos, lo que hice es que hice esa cápsula 30 por 30, y luego muevo ese cerdo por menos ocho para que uno también sea más grande. Éste es grande ahora, así que encontré que esta era la mejor solución para solucionar ese problema de errores. Y ahora podemos ver que todo se está moviendo correctamente y no tenemos problema. Nuevamente, si tienes el problema por donde el enemigo se mueve y sigue al ralentí en el mismo lugar. Puedes intentar el tamaño de la cápsula y luego bajar al enemigo. Por lo que ahora hemos hecho todo este progreso. Gran trabajo hasta ahora. En realidad has progresado muy lejos dentro de este curso. Y lo siguiente que podríamos hacer es daño o tal vez necesitamos una escalera aquí arriba. Entonces te veré qué voy a hacer para la siguiente sección. Y hasta ahora, todo se ve bien. Si quieres sumar más enemigos, puedes hacerlo. Si quieres hacerlo tú mismo, de nuevo, no puedes liberar esto en Steam ni en ningún otro lugar. Esto es sólo con fines educativos. Pero si solo querías practicar, utilizo este sitio web llamado arces que soy un simulador de arce. solo puedas hacer clic aquí abajo y crear un nuevo personaje. O puedes crear un nuevo monstruo aquí. Una turba puede ver aquí se pueden crear mapas. Puedes seleccionar qué tipo de mafia quieres crear, tal vez un limo, algo más para que puedas crear más mapas, puedes entonces, después de hacer eso, suelo voltear horizontalmente porque tienen que estar en esta dirección antes de que pueda funcionar. En ocasiones necesitas Photoshop para rotarlas. Entonces solo puedes descargar la hoja de cálculo. Y luego puedes usar esa hoja de cálculo de limo y puedes importarlos aquí dentro de nuestros proyectos. Entonces si vuelvo aquí y nuestro proyecto, solo puedes importar esas texturas de nuevo a los activos, enemigos, y puedes volver a hacer todo el proceso, y puedes sumar más enemigos. Por lo que hasta ti lo que quieras hacer con el juego, puedes intentar jugar y divertirte con esto. Entonces digamos, Bueno, y pasemos a la siguiente lección. 55. Agregar el primo de cuerda: Hola a todos y bienvenidos de vuelta. En este apartado vamos a trabajar con declinación siendo mecánico. Tan gran trabajo por llegar tan lejos. Has estado haciendo mucho progreso. Y se puede ver que hemos estado haciendo mucho. Y en esta sección para que el cliente sea mecánico, tenemos mucho que aprender. Así que sigamos adelante y empecemos a sumar el sprite de cuerda. En el material del curso. He incluido para ti, las cuerdas brillantes. Si vas al Curso Materiales y luego vas al medio ambiente. Y dentro de aquí tienes esta textura llamada cuerda. Así que volvamos a nuestra carpeta constante. Y dentro de los activos, y ya tenemos una carpeta de entorno. Entonces dentro de aquí, dentro de texturas, voy a subir mi cuerda, así que arrástrala a la carpeta de texturas. De acuerdo, así que dentro de aquí, hagamos clic derecho. Vaya a Acciones de Sprite y aplica papel a la configuración. Tratemos de hacer clic en él y luego crear un sprite. Por lo que nada nuevo hasta ahora. Esto es lo que hemos estado haciendo hasta ahora. Voy a llamarla como una cuerda. Vale, entonces ahora tenemos este sprite de cuerda. Entonces, hasta ahora hemos estado haciendo flip books. Y como se puede ver aquí, la cuerda obviamente no es un libro flip, no es una cuerda animada. Entonces vamos a arrastrarlo aquí al medio ambiente. Y ahora estamos trabajando con un sprite. Creo que este es el primer sprite que vamos a añadir a nuestro entorno. Y antes añadimos el sprite, como puedes arrastrar el sprite y agregarlo al entorno así y tal vez establecer el y a 0 o uno. Y se podría simplemente colocar la cuerda así y todo está bien y se agrega la cuerda. Pero el problema con esto es que vamos a agregar código a la cuerda porque nuestro jugador va a interactuar con ella. Entonces vamos a borrarlo aquí. Y voy a convertirlo en un plano en su lugar. Así que siempre que tengas algo con lo que el jugador está interactuando, debes pensar automáticamente en convertirlo en un plano. Entonces vamos a los planos y esto nos permitirá crear algún código para la cuerda. Así que déjame hacer clic aquí y hacer una nueva carpeta y llamarla escalando. Por aquí. Vamos a hacer clic derecho e ir a los planos. Y luego en realidad solo haz clic aquí arriba, Clase Blueprint. Al hacer click aquí de nuevo, busca el papel aquí abajo. Y queremos hacer un sprite. Entonces antes creamos flip books y mapas de teselas, pero esta vez también creamos personajes. Esta vez vamos a crear un sprite. Para éste, lo voy a llamar cal siendo base. Entonces este es el plano base para que el cliente sea igual a lo que teníamos para la base de personajes y la base del jugador. Ahora tenemos un cliente basado porque está bien. Tienes una cuerda en este momento, pero en el futuro, ¿y si quisieras tener una escalera? Y si quisieras tener una pipa como la tienes como un mapa de la industria, entonces tal vez tengas tuberías que usas como letras o cuerdas. Por lo que tenemos una base de sujeción y luego podemos sumar muchos objetos escaladores. Entonces escaleras, cuerdas, pipas, lo que quieras añadir a tu juego. Así que ahora hagamos clic con el botón derecho esta base de escalada y crear una clase Child Blueprint. Y a partir de esto vamos a crear la cuerda BP. De acuerdo, vamos a archivar y guardar todo hasta ahora. Entonces para la cuerda trepadora o más cuerda aquí, vamos a hacer doble clic. Y dentro de aquí tenemos el objeto render o recordar componentes renderizados. Y seleccionemos nuestra fila aquí. Entonces buscando cuerda y seleccionando nuestra cuerda. Muy bien, entonces ahora se agrega este. Y lo que podemos hacer aquí es que ahora podemos arrastrar nuestros planos, arrastrados al nivel. Vamos a establecer la ubicación a 0. Voy a configurarlo a uno porque recuerda las fichas base están en 0 y no quiero molestar a todo lo demás. Entonces voy a poner este a uno y vamos a moverlo aquí. No lo sé, tal vez algo como esto. Y voy a mover a este enemigo para que en realidad pueda ver dónde estoy colocando esto. Entonces algo como esto y un poco abajo para que, esa parte está colgando de los azulejos de aquí arriba. Ahora se puede ver que la cuerda en realidad está interfiriendo con nuestra malla de navegación, por lo que nuestros enemigos ya no pueden moverse aquí. Así que hagamos click sobre la base de escalada. No queremos eso. Por lo que da clic en la base de escalada. Vamos a quitarlo de todo el cliente siendo objetos. Dentro de aquí haciendo clic en los componentes de render. Veamos ahora, sólo escuchemos en la colisión o ninguna colisión en absoluto. Y el jugador no puede pisar encima de ella. Y no generará ningún evento de superposición. A los eventos de superposición que haremos más adelante, vamos a sumar casillas de colisión. Entonces no es realmente el componente de render en sí. Son las cajas de colisión que vamos a hacer, las superpuestas. Por lo que ya puedes ver que no se está superponiendo con nada y todo está fijo. 56. Evento de superposición de cuerdas: Trabajemos ahora con los eventos de superposición de cuerda. Entonces para los eventos de superposición de cuerda, necesitamos una caja de colisión. Entonces vamos a la base de escalada y añadamos uno. Y la razón de nuevo, por qué lo estamos agregando a la base colombiana y no a la cuerda es porque cada vez que creamos más tarde en una gran cantidad de objetos trepadores, todos esos objetos tendrán esta colisión bichos porque todos estos objetos de aglomeración serán hijos de esta base de escalada. Entonces lo que añadamos aquí se aplicará a todos los niños aquí en el componente render. Vamos sólo una caja de colisión. Entonces busca colisión y agrega esta llamada colisión de caja. Y déjame llamarlo caja de colisión y Compile y Save. Y realmente no necesitamos hacer más aquí. Así que minimicemos esto y déjame volver a la cuerda ahora. Y abramos el editor de planos completo. Dirígete a la ventanera. Y dentro de aquí tenemos que ajustar esta por lo que está llenando esta cuerda aquí en la caja extensión voy a hacerlo ahora mismo 55, realidad tenemos que probar esto en juego. Entonces, pero por ahora sólo podemos ponerlo en 55. O tal vez si quieres hacerlo más grande, puedes, incluso puedes hacer 1010. Y en realidad hagamos eso. Vamos, intentemos hacer diez en lugar de cinco. Negativo cinco es demasiado pequeño para este número, tal vez algo así como 50 de nuevo, o 6065. Nuevamente, tenemos que probar esto en juegos. No estoy seguro de cómo se verá ahora mismo. Entonces algo así donde lo hemos colocado como 40 en la z y 101065 aquí para la caja de colisión. Entonces voy a volver a la base de escalada y por la caja de colisión, bajando a la colisión, lo único que voy a cambiarlo, éste puede los personajes dar un paso adelante, voy para hacer click y no, creo que todo está bien por ahora, así que no toquemos nada aquí. Ahora para hacer los eventos de superposición, puede hacer clic en el cuadro de colisión de nuevo al igual que antes. Bajar a la parte inferior y haga clic en éste en el componente, comience a solaparse. Entonces, qué debería pasar cuando empecemos a solapar el cuadro aquí, voy a eliminar los eventos predeterminados. Entonces, ¿qué debería pasar si comenzamos a solapar esta caja de colisión? Y se puede ver la caja de colisión es ésta, esta plaza aquí que agregamos. Entonces, ¿qué debe el candado cuando el jugador viene aquí y saltando sobre esa caja de colisión, ¿qué debería pasar? En primer lugar, tenemos que comprobar si es el jugador el que está interactuando con nuestra caja de colisión. Y antes de eso en realidad voy a decir que switch tiene autoridad. Porque de nuevo, para colisiones añadimos cuál tiene autoridad para asegurarse de que sea el servidor quien maneja toda esta información. No queremos que el jugador haga trampa porque de nuevo, la autoridad es el servidor, el remoto es el cliente. Y si el cliente hace todo esto, así que si quitamos esto y solo codificamos aquí, el cliente tiene una gran posibilidad de hacer trampa y realmente no queremos que los clientes engañen en nuestro juego. Entonces switch tiene autoridad, el servidor tiene la autoridad sobre cualquier cosa. Y el servidor comprobará si se permite a los clientes hacer esto. Switch tiene autoridad y luego tenemos que comprobar si se trata de los jugadores. Entonces el otro actor, que es el jugador, vamos a arrastrar aquí y decir que el actor ha etiquetado. Y si el actor tiene el tag player, y hagamos una rama aquí. Autoridad. Entonces así. Por lo que pasa por el servidor y comprueba si el actor tiene el tag player, lo que significa que es el jugador. Y vamos a asegurarnos de que nuestro jugador tenga esta etiqueta. Entonces volviendo a los planos, jugador, base de jugadores, creo que lo agregamos antes. Déjame revisar los valores predeterminados de clase y aquí puedes buscar etiqueta. Y aquí agregamos antes. Así que solo asegúrate de tener el tag player agregado a tu base de jugadores. Entonces ahora si la etiqueta o si el actor tiene el tag player, que hacemos, si eso es cierto cuando queremos hacer algo. Y sólo voy a dirigir un evento llamado puede escalar. Entonces cuando choques con esta caja, puedes escalar. Pero si no choques con esta caja, significa que no puedes subir porque no hay cliente siendo objeto cerca de ti. Así que volvamos. Déjame abrirlo de nuevo aquí. Y aquí podemos decir, podemos ejecutar un evento diciendo que puede subir, y esto será dentro de la base de jugadores. Entonces dentro de aquí tenemos que hacer un evento primero, y vamos a trabajar aquí abajo por ahora. Permítanme hacer un evento personalizado diciendo una tormenta eventos diciendo Can cal. Y éste realmente podemos convertir en una Interfaz de Blueprint. En realidad, hagamos eso de inmediato en lugar de hacer todo ese trabajo. Entonces déjame ir a la Interfaz Blueprint y déjame ir a la base de jugadores. Y aquí, permítanme añadir una nueva función de blueprint. Y déjame decir puede subir. Lo que queremos agregar aquí es un booleano. Entonces voy a sumar dos variables. Primero, un dicho booleano puede escalar. Y permítanme añadir aquí una B para booleano puede subir. Lo segundo es que quiero definir al cliente siendo objeto. Así ser cliente. Objeto. Entonces, ¿es una carta, es una túnica o lo que sea? Entonces el objeto escalador es, nuevo, lo que hiciste aquí. Esta base de escalada. Si miras aquí arriba, es un actor sprite de papel, por lo que necesitamos una referencia de eso. Así que volvamos y digamos papel sprites actor aquí, referencia objeto. Por lo que ahora tenemos la puede subir y la referencia objeto. De acuerdo, entonces Endo jugador base, ahora podemos llamarlo diciendo puede subir línea y tienes ese evento aquí. Entonces esto es lo que finalmente queremos correr. Por lo que aquí cuando chocan en la base de escalada, cuando chocan con la caja de colisión. Y es el jugador. Queremos llamar a ese evento. Entonces para llamar a eventos desde la base del jugador, de nuevo, tenemos que arrastrar del otro actor y decirlo, jugar referencia que hicimos antes. Y entonces podemos decir, podemos escalar. Por lo que ahora podemos ejecutarlo y recordar que es mensaje porque es una función de Interfaz Blueprint. Por lo que aquí se puede subir. Tenemos que tomar esto porque ahora estamos superpuestos. Sí, queremos escalar o sí, puedes escalar. ¿ Cuál es el objeto de sujeción que puedes arrastrar desde aquí y decir yo mismo. Porque recuerda que estás dentro de la base de escalada. Entonces si es una cuerda, si es una escalera, nos va a dar auto-referencia y definirse automáticamente porque ya estás dentro de aquí. ¿ De acuerdo? Por lo que necesitamos una superposición terminada o solapamiento final. Por lo que haciendo clic en el cuadro de colisión de nuevo, bajando y haciendo clic en n-componente y solapamiento. Entonces, ¿qué debería pasar cuando termines superponiéndose con ese componente? Voy a copiar pegar todo esto de nuevo, no tenemos que escribirlo. Nuevamente. Me encanta el código copiar-pegar. Así que solo conéctate, recuerda conectar todos esos y puedes subir. Se debe simplemente quitar porque ya no se puede subir porque ha terminado el solapamiento. En cuanto al objeto Alambic, voy a eliminar esto y lo que esto significa, va a vaciar declinación siendo variable objeto. Entonces la variable estará vacía porque ya no estamos chocando con nada. Y eso tiene sentido. Así que vamos, digamos todo aquí. Y ahora va a pasar a la base de jugadores y jugar este evento. Entonces para este evento aquí puede escalar en lugar de hacerlo directamente aquí, recuerda que estamos jugando en multijugador, así que tenemos que ejecutarlo a través de los servidores. Entonces haciendo una nueva costumbre eventos llamados como Harvey y lima. Porque recuerda cuando estableces variables, tienes que hacerlo a través del servidor para asegurarte de que el cliente no esté engañando. Así que de nuevo, vamos a hacer clic en el servidor, ejecutarlo en el servidor, confiable. Y ahora solo puedes ejecutar esos eventos del servidor. Por lo que se puede ver que este es el mismo patrón que hemos estado haciendo todo el tiempo aquí. Como lo mismo con el salto, o pasa por el servidor y luego pasa por el multicast con el sonido. Y aquí lo mismo con el movimiento mal estado. Se pasa por el servidor y luego establece la variable por lo que es el mismo patrón que estamos haciendo todo el tiempo aquí. Yo diría que sólo sigue practicando y nos pondremos mucho más fáciles. Sé que es muy difícil desde el principio, pero ahora vamos a ejecutarlo a través del servidor. Y el servidor ahora va a establecer estas variables. Por lo que de nuevo, necesitamos dos variables aquí. Uno es un dicho booleano puede escalar. Y el segundo fue un actor de papel, que está disminuyendo objetos. Y fue el periódico un actor sprite. Este papel es actor brillante. De acuerdo, entonces ahora podemos establecer las variables. Vamos a hacer clic derecho en este objeto de sujeción y promovido a una variable. Y voy a quitar ese espacio aquí abajo. Por lo que ahora tenemos el objeto escalador como variable. Y vamos a hacer clic derecho se puede subir promovido a una variable. Y voy a quitar ese espaciado aquí abajo. Y dice que ya tenemos esa variable I, y creo que es la función aquí. Así que déjame poner una B al frente, así que es un booleano y ahora podemos escribirlo aquí. Así puede subir y bombear objeto. Recuerda que estamos en el servidor, por lo que el cliente no tiene idea a qué se establecen los valores de estas variables porque las estás configurando en el servidor. Entonces cuando juego como cliente, así que tienes el servidor aquí. Pero si juego como cliente, ahora, no tengo idea de lo que es la lata trepar. Por lo que en realidad puedo simplemente imprimir a la pantalla para que en realidad podamos ver y podemos aprender juntos de esto. Entonces arrastrando este booleano, voy a imprimir el valor de ese booleano hacia fuera. Así que ahora si soy el servidor, este es el servidor ahora y vivía con él. puede ver que dice falso en este momento. Esto se debe a que realmente no lo estamos pasando. Así que hagamos eso ahora. Vamos a conectar esos. Entonces el evento, por lo que va de esta caja de colisión a la línea aquí. Va a ponerlo en verdad. Así que puede subir se establece en verdad. Ahora, va a ir a la base de jugadores y conectemos esos. Y va a ir todo el camino por aquí y va a imprimirlo. Entonces ahora va a decir verdad. Vamos a saltar aquí. Y se puede ver que dice verdad cuando chocamos y dice falso cuando ya no chocamos. Entonces esto es correcto. Ahora vamos a jugar como cliente aquí. Estoy desove como cliente. Y se puede ver como el cliente, es decir verdad. Pero es naturalmente el cliente diciendo que es el servidor. Se puede ver que está imprimiendo como el servidor, pero yo soy el cliente. Este es el problema. Yo, como el cliente no tengo ni idea de cuáles son estos valores porque no los puedo ver. El servidor no me ha dado esa información. Por eso es tan importante replicar las cosas. Esta es la base de multijugador y Unreal Engine. Así que hagamos clic en esta variable y repliquemos esa información de nuevo a los clientes para que los clientes puedan ver cuál es el valor. Ok, Así que ahora que se replican, déjame eliminar que están en cadena. Entonces ahora si haces click en play y tú como cliente jugarás como este personaje, pesar de que estás saltando y ves que es el servidor imprimiéndolos? Eso es correcto. Es el servidor realmente configurando esas variables. Pero ahora que las estás replicando de nuevo al cliente, el cliente puede realmente ver el verdadero valor de esto si es verdadero o falso. Entonces recuerda replicar variables que necesitan volver al cliente también. Entonces para esto podemos subir, podemos arrastrar desde este booleano y hacer una rama. Por lo que ahora si puedes subir, tenemos que hacer algo. Si no puedes subir, tenemos que hacer otra cosa y lo haremos en la próxima lección. 57. Entrada del movimiento de ascenso y abajo: Demos ahora al jugador la capacidad de moverse arriba y abajo en esta cuerda aquí. Para moverse hacia arriba y hacia abajo. Volvamos a los planos y agreguemos el movimiento dentro de la base del jugador. Por lo que dentro de aquí, hasta ahora tenemos este llamado mover a la derecha y a la izquierda, pero necesitamos uno nuevo llamado mover hacia arriba y hacia abajo. Entonces hagamos realmente un nuevo insumos. Así que volvamos a Editar y configuración del proyecto. Recuerda que hicimos eso hace un tiempo. Por lo que espero que puedan recordar esto. Entonces yendo a la configuración del proyecto, haciendo clic en los insumos. Y dentro de aquí tenemos esto hasta ahora. Hagamos un nuevo mapeo de accesos y llamémoslo mover hacia arriba y hacia abajo, derecha e izquierda si quieres. También se puede escuchar que Lipsky hizo los equivocados. Por lo que aquí quiero hacer click en este plus aquí, puedes añadir más botones si quieres. Entonces, por ejemplo, la flecha derecha y la flecha izquierda en tu teclado. Entonces tanto da como también derecha e izquierda funciona en el teclado. Y recuerda por la izquierda hay que escribir menos uno. Así que en caso de que lo quieras en tu juego también, incluso puedes agregar un controlador también para jugar con, pero necesitamos un poco más de configuración ahí. Así que vamos a centrarnos aquí en ellos. Muévete arriba y abajo. Y podemos usar W para movernos hacia arriba y S para movernos hacia abajo. Y de nuevo tenemos que escribir menos uno para el S. Así que subiendo como uno, menos uno para el bajando. Si lo desea, puede agregar sus teclas de teclado. Entonces flecha arriba, flecha abajo. Y hagamos uno menos en la flecha hacia abajo. De acuerdo, Así que ahora nos hemos movido arriba y abajo. Vamos a cerrarlo. Y dentro de aquí en realidad voy a escribirlo como la primera cosa aquí arriba. Este es nuestro evento principal. Así que escribamos, movamos hacia arriba, hacia abajo, y seleccionemos este evento eje. Entonces moviéndose hacia arriba y hacia abajo. Entonces antes si regresas aquí, dijiste conseguir la rotación de control y luego obtuviste el vector delantero. A lo mejor ya puedas resolverlo. Entonces lo que vamos a escribir aquí, así consigue la rotación de control aquí. Entonces quieres levantarlo vector. Entonces ahora vamos a subir y bajar. Añadamos, de nuevo, añadir entradas de movimiento, al igual que antes. Vamos a conectarlo aquí, y conectemos aquí el valor del eje. Ahora, si compinas y haces clic en guardar, y haces clic en play. Y si haces clic en el arriba y hacia abajo, ves que realmente no está pasando nada, pero tienes tu código escrito. El problema está aquí en un irreal es que el arriba y abajo solo va a funcionar cada vez que cambies tu modo de movimiento. Entonces en el movimiento de personajes, se puede ver que tenemos diferentes modos de movimientos. este momento estás en el movimiento caminando. Por lo que hemos arreglado nuestra velocidad de caminar y así sucesivamente. Por lo que en efecto somos movimiento de carácter caminando. Pero en cuanto a subir y bajar, en realidad hay que cambiar su movimiento al vuelo. Así que en realidad estás volando. Técnicamente. Tenemos que cambiarlo a eso y lo haremos en la próxima lección. Así que no en este momento. Esta es la razón por la que esto no está funcionando en este momento. Pero antes de que termináramos aquí, permítanme realmente añadir este booleano aquí. Desde que ya lo hicimos. Sólo queremos movernos hacia arriba y hacia abajo cada vez que estamos aplicando seres. Por lo que no nos interesa hacer eso si no estamos subiendo. Entonces voy a arrastrarlo aquí y hacer una sucursal aquí. Entonces si este booleano puede subir es cierto, entonces vamos a ejecutar este código porque realmente no tiene sentido ejecutar este código si no puedes subir. Muy bien, así que esto fue todo para este video, muy corto. Pero más adelante vamos a sumar ahora en la siguiente lección en realidad el acondicionamiento de escalada. Por lo que estamos estableciendo algunas reglas en cuando el jugador puede escalar el burnout. Así que pasemos a la siguiente lección. 58. Acondicionamiento de la ascensión: Ahora vamos a añadir algo de acondicionamiento y las reglas para cuando el jugador puede subir. Así que volvamos a la base de jugadores aquí. Y en lugar de la base de jugadores, bajemos a ésta donde lo dejamos. Pueden escalar. Entonces si ahora de nuevo, déjame solo recordarte aquí en los planos dentro de la base de escalada y escalada, es donde interactuaste con la caja de colisión de solapamiento inicial. Y ahora puedo escalar es verdad. Entonces lo que sucede cuando pueden escalar es cierto. Cuando la vaca puede subir es cierto. Quieres comprobar si el jugador está presionando la tecla W. Así que moviéndose hacia arriba porque el jugador quiere escalar, porque realmente no queremos escalar aquí. Si el jugador no está presionando hacia arriba o w, sólo nos interesa que el cliente sea cada vez que el jugador esté presionando hacia arriba. Entonces esto es algo que hay que revisar. Así que volvamos aquí. Y cuando presiones aquí en el movimiento, así que recuerda que va a ir más uno. Si hace clic en S moviéndose hacia abajo, va a ir menos uno, como dijimos anteriormente. Entonces en realidad voy a convertir esto en una variable para que podamos usar eso más adelante. Así que déjame hacer clic derecho. En realidad, realmente no podemos configurarlo directamente. Sólo podemos hacer eso en un solo jugador. Así que de nuevo, tenemos que ejecutarlo a través del servidor. Así que permítanme hacer un nuevo evento aquí, evento personalizado y llamarlo dicho valor del eje Z. Porque recuerda, z es, nos estamos moviendo hacia arriba y abajo y este es el eje z. Así establece z x x, valor del eje z. Y vamos a ejecutarlo a través del servidor, servidor establece el valor del eje z. En realidad estoy podemos hacer esto a través de la interfaz, Blueprint Interface y la base del jugador. Así que permítanme realmente hacer eso en su lugar. Interfaces base del jugador y déjame hacer una nueva función, llámalo establecer el valor del eje z. Y obviamente hay, el valor es un flotador aquí, esto es lo que estamos tratando de establecer. Así que déjame crear un flotador entradas cargas, ¿de acuerdo? Y llamémoslo eje Z. Y déjame, sí, el eje z está bien. Déjame volver a la base del jugador. Y dentro de aquí, llamémoslo set valor del eje z. Y esta es la función de interfaz. Y ahora va a pasar por el servidor. Así que vamos a configurar este para que se ejecute en servidor y confiable. Déjame simplemente mover esto un poco para que podamos ver qué está pasando y déjame moverme hacia abajo. De acuerdo, vamos a ejecutar este evento de servidor aquí. Set x es el valor del eje z, y necesitamos un flotador. Entonces vamos a crear un flotador aquí. Y llamémoslo eje z. Y ahora lo que podemos hacer es que podamos hacer clic derecho y promocionar esto en una variable y llamarlo eje z. Aquí. Tenemos el eje z y déjame conectar todos esos. Y ahora podemos llamarlo aquí arriba. Entonces si se puede subir es cierto, sólo nos interesa actualizar esto cada vez que en realidad podemos subir, pero porque antes podemos subir, realmente no nos interesa realmente si el jugador presiona hacia arriba o no. Sólo nos interesa si el jugador presiona nada superior siempre que pueda subir. Así que permítanme aquí decir establecer el valor del eje z aquí. Y en realidad déjame llamarlo desde el valor del eje z establecido. Permítanme realmente llamarlo desde la base del jugador int. Y así. Y ahora tenemos conectar esto, tenemos que conectar esto, el eje o este valor del eje al eje z aquí abajo. Y déjame correr aquí. ¿ De acuerdo? Por lo que ahora tenemos todo conectado juntos y este valor de eje se va a actualizar a través de este valor conjunto del eje z. Va a bajar aquí y luego bajar en este valor. Recuerda lo que dije antes, hay que replicar esto para que esta información sea enviada a todos los clientes. Si no es sólo el servidor que conoce el valor de esta variable. Muy bien, así que vamos a bajar aquí otra vez. Entonces puede subir, si se puede subir es cierto. Por lo que ahora estamos interactuando con la cuerda. Tomemos aquí este eje z. Si el eje z es mayor que 0. Entonces, lo que significa que el jugador está presionando hacia arriba. Y en realidad podemos simplemente eliminar esto y simplemente decir, si el eje z no es igual a 0, entonces queremos hacer algo. Así que déjame simplemente hacer esto. Y entonces podemos hacer una sucursal aquí. Si el eje z no es igual a 0, entonces queremos hacer un nuevo dicho booleano está subiendo. Así que hagamos aquí un nuevo booleano. Decir B es escalar. Así que ahora, antes de tener este llamado puede subir, pero ahora en realidad estamos subiendo. Entonces estamos haciendo un nuevo booleano llamado es escalar. Y de nuevo, tenemos que ejecutarlo a través del servidor para que sólo pudiéramos hacerlo aquí así, porque recuerda, ya estamos dentro del servidor, pero creo que lo estaremos usando más adelante en donde en realidad lo van a utilizar aquí a través del cliente y necesita correr a través del servidor. Así que en realidad solo hagamos un evento para esto. Hagamos uno nuevo llamado evento personalizado. Y déjame hacerlo directamente dentro de la interfaz aquí. Y tan solo llámalo, set está subiendo. Y sólo va a tomar un booleano como entrada. Es Vi, está subiendo. Y volvamos a la base de jugadores. Y aquí podemos decir set está subiendo. Y podemos llamar a ese evento que acabamos de crear. Hagamos que pase por el servidor. Así que hagamos un nuevo evento personalizado. mismo conjunto de servidores está subiendo. Darle una entrada de un booleano llamado es línea siendo así. ¿De acuerdo? Y éste en realidad puede subir, pero voy a poner aquí una B solo por buenas prácticas, solo asegurándome de que todo esté correcto y pueda subir. Tiene una B aquí, así que eso es genial. Por lo que aquí set está subiendo y lo vamos a ejecutar a través del servidor, confiable. Y lo único que vamos a hacer aquí es a las dos, es escalar. Entonces hicimos esta variable, arrastramos, la configuramos aquí, y vamos a ejecutar esto a través los clientes para ir a los servidores. El conjunto de servidores está subiendo y conectarlo aquí arriba. De acuerdo, entonces vamos a establecer esta variable aquí. Y lo que queremos hacer con éste no se replica. Replicado solo se utiliza cuando se desea enviar información a los clientes. No obstante, de nuevo, rep notify se utiliza cuando se quiere cambiar algo visualmente. Por lo que no sólo la información como aquí y el valor del eje z, solo queríamos enviar información. No obstante, aquí queremos hacer cambios visuales porque vamos a cambiar el flip book el cliente siendo flip book. Por lo que vamos a cambiar esta replicación para envolver notificar porque tenemos algunos cambios visuales que necesitamos declinar para conocer. De acuerdo, así que aquí vamos a añadirlo. Entonces si el valor del eje z no es igual a 0, lo que significa que el jugador está presionando hacia arriba o hacia abajo, entonces queremos subir. Entonces hagamos eso. Digamos que el conjunto está moliendo. Ahora podemos llamar a éste, set es escalar y podemos hacerlo a verdad porque ahora queremos escalar. No obstante, aquí en el otoño. Así que permítanme realmente arrastrar esto una mejor manera aquí en lo falso. Para que podamos escalar. Pero ahora hemos dejado la cuerda. Por lo que ahora ya no podemos subir porque cuando terminas solapando con los bichos. Aquí, digamos que ya estamos siendo escalados y esto se pone falso. Tenemos que configurar esto a false también porque de lo contrario no tenemos ningún lugar en nuestro código en este momento hemos especificado cuándo esto será falso? Y si estás subiendo a la cuerda y vas a salir de la fila, entonces éste todavía está ajustado a verdadero. Así que vamos a copiar esto y colocarlo aquí abajo así. Entonces digamos que ya estamos subidos siendo, así que déjame llevar esto es escalar y déjame decir rama aquí. Entonces si estamos, así que aquí, si dejamos la caja de colisión aquí en la base de escalada, si la dejamos y se pone en falso. Si ya somos seres escalados. Entonces si hay, si hay escalada puesta a true, vamos a seguir adelante y ponerlo en falso. Sólo asegurándose de que esto esté configurado en falso. Y todavía no estamos subiendo así. Así que permítanme avanzar esto y mover esto hacia arriba y organizar esto un poco más. Nuevamente. Cuando algo no está estructurado correctamente, puedes seleccionarlos y hacer clic en Q en el teclado para convertirlos en una línea como esta. Vale, entonces tenemos un pequeño problema con esto y tal vez ya puedas resolverlo. Déjame solo compilar aquí y déjame imprimir esto en la pantalla así. Y en realidad déjame moverme, déjame ir al cliente que se basa en realidad a la cuerda. Entonces vamos a subir la cuerda. Déjame ir al mirador y sólo aumentar esto a 80 o algo así. Algo grande. Y permítanme colocar al jugador aquí arriba en su lugar. Así. Permítanme hacer click en Play. Y ahora en realidad quiero imprimirlo en la pantalla también. Entonces yendo a la base de jugadores, ahora vamos a imprimir hola. Sí, eso está bien. Así que déjame hacer click en Play. Y ahora si hago clic en la tecla de mi ratón hacia abajo y me muevo, se puede ver si me muevo. Y así déjame moverme primero. Por lo que haciendo click en un para moverme y luego hago clic en S aquí. Se puede ver que dice Hola porque puede comprobar que cuando estoy corriendo, entonces choco con cuando estoy corriendo y luego colisionar con mi caja aquí y está listo para poder escalar. Se puede ver que estoy presionando mi eje z para que no sea igual a 0, lo que significa que en realidad se va a poner para escalar seres. Entonces esto se está ejecutando correctamente. No obstante, el problema ahorita que tenemos es si estoy parado a la cuerda y quiero bajar, si hago clic en S para bajar, realmente no va a revisar. Porque recuerda, este evento solo se ejecuta una vez. Sólo se ejecuta cada vez que choques con la caja. ¿ Y si ya estás chocando con la caja? ¿ Qué pasa si estás parado en la caja? Esto nunca ha ido a correr de nuevo. Esto sólo va a correr cada vez que dejes la colisión y luego chocan con ella. Nuevamente. Este evento aquí solo se va a ejecutar una vez si no estás presionando el botón Abajo en el momento en que estás chocando con el, con la cuerda, esto seguirá siendo 0, por lo que esto nunca comprobará. Por lo que si hago clic en, si vuelvo a mi juego aquí, haga clic en S para bajar. Esto realmente no va a funcionar. Por lo que necesitamos algo que lo haga comprobar continuamente aquí cada vez que estoy parado en el cuadro de colisión aquí para comprobar continuamente si esto es igual a 0 o no. Y de nuevo, usamos temporizadores para esto, ya usamos el temporizador aquí arriba. Por lo que la comprobación continua, siempre puedes usar temporizadores, muy buenas herramientas para recordar. Entonces escuchemos, desconectemos esto y mejore este código. Así que déjame hacer un temporizador, set, temporizador por eventos. Vamos a conectarlo aquí. Ahora podemos hacer un evento a dos corridas desde aquí y arrastrarlo y decir entradas de cal. En realidad hagamos eventos personalizados. Eso es lo que quise decir. Y llamarlo entradas subidas. Entonces esta entrada del cliente, va a comprobar, ¿es esto igual a 0 o no? Y si no lo es, entonces adelante y sube. Voy a organizar esto un poco más así. Y para éste, para el temporizador, lo voy a bucle. Y por el tiempo que va a bucle, solo voy a escribir 0.1, lo que significa que todo el bucle se ejecuta cada 0.12, lo que significa que esto se ejecuta diez veces por segundo. Siempre que soy cliente siendo, realmente no quiero revisar esto más. Entonces voy a promover esto a una variable. Y llamémoslo chequear entradas encaladas. Y voy a tomar esto y decir Lear y temporizador invalidado Por mango. Entonces cada vez que, siempre que hayamos comprobado aquí, así que estamos comprobando la entrada. Entonces cada vez que estamos viendo que el jugador está presionando hacia arriba y hacia abajo sobre esta cuerda, lo que significa que vamos a subir. Y en ese momento ya no queremos comprobar más. Porque todo el propósito de esto es solo verificar si el jugador está presionando hacia arriba y hacia abajo en esta caja de colisión. Por lo que entonces podemos simplemente parar esta vez. Y recuerda, si no paras el temporizador, te voy a mostrar. Entonces si acabas de imprimir Hola todo el tiempo y te puede gustar depurar con el halo es tan útil. Así que al hacer clic en S hacia abajo para bajar, se puede ver que está imprimiendo Hola todo el tiempo. Por supuesto que es tops cuando ya no presionas S porque realmente no te estás moviendo hacia abajo. Pero si presiono, imprime todo el tiempo, realmente no quiero imprimirlo todo el tiempo cada vez que estoy subiendo porque esto sólo es útil para comprobar si ya, si en realidad quieres subir la cuerda . Entonces si ya estamos subidos siendo, realmente no queremos revisar esto. Y es aquí donde decimos temporizador claro e invalidado Por mango. Porque ahora podemos decir ahora, cuando esto sea cierto, vamos a ponerlo a subir y seguir adelante y quitar este temporizador. Entonces si hago clic en Jugar ahora y voy aquí y hago clic en S, manténgalo pulsado. Y por supuesto que tenemos que imprimir algo, así que voy a poner en algo realidad podamos ver lo que está pasando. Voy a hacer click en Play, haga clic en S para bajar. Y a pesar de que lo estoy sosteniendo ahora mismo, solo dijo hola una vez. Así es como haces algo optimizado y planos, recuerda detener el temporizador siempre que ya no lo necesites. Si no va a correr para siempre y en realidad no quieres hacer eso. Entonces para el temporizador aquí también, solo para asegurarnos de que se detenga, vamos a copiar este código. Déjame ir aquí. Entonces si se puede subir se establece en falso. Entonces cada vez que terminas solapando con la caja de colisión, lo estamos. Entonces si ya estás subiendo y dejarás la cuerda, solo recordemos de nuevo para detener este temporizador. Así que solo asegurándose de que el temporizador ya no esté funcionando. Entonces esto fue todo por este video aquí. Entonces tenemos muchas cosas hechas. Hemos configurado el temporizador para comprobar continuamente si el jugador se está moviendo hacia abajo o no. Entonces todo el proceso es solo para explicarlo muy rápidamente antes de que terminemos este video, acaso necesitas una explicación completa. Entonces lo que estamos haciendo aquí inicialmente es que el jugador va a saltar aquí en la cuerda. El jugador va a tocar esta caja de colisión. Y lo que el jugador toca esta caja de colisión, este evento jugará. El evento correrá por el servidor y se va a comprobar si el actor tiene al jugador tecnológico solo para asegurarse de que el jugador esté tocando realmente la cuerda y no a alguien más. Y esto es, si esto es cierto, vamos a llamar puede subir evento, que está dentro del jugador, actor jugador aquí. Vamos a establecer puede subir booleano para ser verdad. Entonces queremos escalar, ¿ y qué es lo que vamos a subir? Esa cosa que vamos a subir por sí misma, que es lo que sea que haya colocado aquí. Por lo que en este caso, hemos colocado su cuerda, que es un niño de subida, base de escalada. Entonces al escribir uno mismo, automáticamente sabe ir aquí a la cuerda. Y este es el actor que estamos subiendo. Por lo que se va a ir a poder escalar. Entonces empezamos aquí. La información aquí, el booleano, lo pusiste a ser verdad, por lo que va a ser aquí abajo a verdad. La información va a continuar aquí en el servidor, enviando esas variables y vendiéndolas para replicarla. Debido a que estamos interesados en dar esta información a los clientes porque estamos en el servidor en este momento, el cliente no tiene idea de cuál es este valor si no la replicas de nuevo a los clientes. Ahora, si pueden escalar es cierto. Vamos a comprobar si el jugador realmente está presionando el botón hacia abajo para subir la cuerda. Si el jugador está presionando el botón Down, vamos a configurar, esto es escalar a true. Cuando hagamos eso, va a ir a establecer que su cliente esté pasando por el servidor, pasando por el servidor aquí, y luego configurando esa variable a true. Ahora hemos codificado esto todavía lo estaremos haciendo en la próxima lección. Por lo que hemos configurado esto para envolver notificar, que luego de nuevo, recordar un aviso rojo crea una función on-rampa. Aquí vamos a codificar muchas cosas como cambiar tu libro flip book para rechazar ser flip book. Por lo que el jugador visualmente puede ver que estás subiendo. Y si vuelvo aquí, Así que si pueden escalar es falso. Si ya lo estás, si ya has dicho que la está subiendo para ser verdad, eso es cierto. Vamos a ponerlo falso porque ya no se puede escalar. Y vamos a detener el temporizador de todos modos. Si pueden, subir va a ser falso y no lo encontrarás. 59. Actualización del modo de movimiento de un jugador: Hola y bienvenidos de vuelta. Entonces hay un pequeño bicho ahora mismo antes de empezar, se puede ver si me muevo por aquí a un costado, de repente desaparece mi sprite y si vuelvo, aparece. Así que bicho muy, muy raro que tenemos en este momento. Vamos a arreglarlo en realidad, antes de pasar a arreglar este raro bicho, descubrí que si vas a los planos y vas a la base de escalada, escalada aquí, seamos realistas por toda la sujeción objetos, puede hacer clic en el componente de renderizado. Y si baja a renderizado aquí, puede hacer click en Avanzado. Y si sólo minimizo esto, también se puede ver desaparece cada vez. Permítanme hacer click en G para eliminar todo esto. Se puede ver que aparece cuando estoy aquí, desaparece cuando estoy aquí. Me enteré aquí en el renderizado bajo componentes de render que se puede ir a la translucidez buscada prioridad, y escribir uno, Compilar y Guardar. Y se puede ver que aparece por lo que este bug ya no aparecerá. Muy bien, entonces lo que queremos hacer en este momento es que queremos actualizar el movimiento de los jugadores. Entonces en este momento tenemos lo correcto, estamos haciendo lo correcto. Pero ahora mismo, realmente no podemos vivir aquí arriba. Y esto es porque queremos, debemos cambiar nuestro modo de movimiento de jugador. Así que volvamos a la base de jugadores. Y dentro de aquí, comencemos a codificar la cosa dentro de nuestro ISClient siendo función desenvolvente. Así que entrando de aquí, primero vamos a arrastrar la variable y escribir una rama. Entonces, ¿qué debería pasar cuando estás escalando? Por lo que el jugador golpea la cuerda y presiona el botón W para subir. ¿ Qué debería pasar? Lo primero que queremos hacer es tomar el componente de movimiento de personajes y luego arrastrar desde aquí y decir Modo Set movements. Éste. Y entonces esto es, vamos a poner esto a volar porque cuando estás subiendo, en realidad estás volando. Por defecto en este momento estamos caminando por ahí, y esta es la caminata. Siempre que estamos saltando. Recuerda aquí en el salto, si vuelvo a la Gráfica de Eventos, cada vez que saltamos, así que si puedo encontrar el código está en algún lugar aquí. Entonces para el código de salto de aquí, puedes ver antes si recuerdas, hicimos de esta una función pura donde comprobamos si el movimiento del personaje cayendo no era cierto. Caída es siempre que estamos saltando aquí y el modo de movimiento, si vuelvo a la función desenvolver, la caída es cada vez que estás saltando, el caminar es ahora mismo cuando estamos caminando por ahí. No obstante, cuando queremos escalar, tenemos que ponerlo a volar. Por lo que en realidad estamos volando por ahí. Y justo antes de que me olvide, déjame ir a los movimientos de los personajes y bajar aquí al vuelo por aquí. Permítanme fijar la velocidad de vuelo a 1 quinto. Lo probé en la historia de Maple, así que toqué la historia de Maple hoy para echarle un vistazo. Y se trata de 115 velocidades. Tienes que probarlo en juego para ver solo puedes dejar que sea 600 y en realidad puedes probar y ver qué tan rápido es esto. Pero lo voy a cambiar a 150 en este momento. Y rompiendo la aceleración si no te pones eso. Por lo que si haces clic en W y te dejas ir, aún vas a volar hacia arriba. No quiero eso. Quiero como Wonder player que suelte el botón W para no subir más. Quiero que el jugador se detenga por completo y no se deslice hacia arriba todavía. Voy a poner eso a algo alto, como 10 mil. Entonces algunos solo un número aleatorio, Compile y Save. Y cuando el jugador no está subiendo, así que cuando el jugador ha dejado ir de la cuerda, voy a copiar pega esto y ponerlo a caer porque realmente caminando, porque quiero que el jugador caiga de la cuerda. Entonces algo como esto. Y si tú, de nuevo, si quieres que esto se vea mejor, probablemente deberías mover esta plataforma y pujar hacia arriba. Entonces esto en realidad no está golpeando el suelo. Así que volvamos a la base de jugadores aquí. Entonces cuando el jugador no está subiendo siendo, vamos a ponerlo a caer. Ahora vamos a poner nuestro flip book. Así que tomemos nuestro sprite aquí. Digamos set flip book. Y conectémoslo primero aquí arriba a la escalada. Entonces cuando estamos subiendo, queremos que el cliente sea animación y déjame copiar pegue esto. Y cuando estamos cayendo, queremos tener nuestra animación de salto. Entonces la animación de salto que tenemos en este momento, pero declinando, no lo hacemos, por lo que necesitamos preparar eso. Entonces aquí para la caída, tienes esa animación de salto. Recuerdo que tenemos dos personajes y queremos que esto sea lo más dinámico posible. Entonces volvamos a tomar nuestra estructura. Vamos a romperlo. Y aquí ahora podemos tomar nuestra animación de salto. Tomando esta animación de salto y conectándola aquí, ocultando todos los otros pines como este. Por lo que se ve mucho más limpio. Así que ahora tenemos esto listo, pero en cuanto al vuelo, realmente no tenemos una animación de subida en este momento. Aquí en los materiales del curso en los personajes en Tsarina. Se puede ver que he preparado la subida para ti así como en Luke. Así que sigamos adelante y minimice esto aquí. Vayamos al azul, realidad aquí en los activos personajes o Serena primero y las texturas. Y déjame importar la subida y hacer lo mismo por el bucle for. Entonces ve a la textura de Luke. Aquí. Tenemos a Luke y la subida, tan importante, pero ambos hacen clic derecho en este 1 primero y aplican papel a la configuración. Haz lo mismo por Serena. Haga clic con el botón derecho del ratón, aplique papel a la configuración y haga clic derecho aquí Y extrayamos los sprites. El cuadriculado es de un ochenta, un ochenta clicando sobre extractos. Y así éste, hay que renombrarlos a S lima 01. Éste es en realidad 0202. Y éste, ¿Dónde está el otro aquí? 01. Y haz lo mismo por Luke. Así que haga clic derecho, Extraer sprites, rejilla, uno ochenta, uno ochenta. Este de aquí es como 01 y el otro es el clima 0 a. Ahora, puedes seleccionarlos con el botón derecho del ratón crear un libro flip llamado FB escalado. Arrástralo a la carpeta de Luke. Y fijemos los marcos por segundo a cuatro. Así que pongámoslo a cuatro así y hagamos lo mismo por Serena aquí por el cliente, haga clic derecho, hagamos un flip book llamado subida. Colóquelo fuera de esta carpeta. Aquí vamos a cambiar los fotogramas por segundo a cuatro. Ahora vamos a guardar todo y tenemos que recordar agregarlo a nuestra estructura aquí en la base del jugador. Entonces aún no hemos hecho eso. Así que vamos a ir a la estructura y los planos, estructuramos la información del jugador, y agreguemos una nueva, una nueva variable llamada animación colina. Ahora, si quieres sumar, vamos a hacerlo más dinámico. Así que no necesariamente tienes una cuerda. También puedes tener una carta y eso tendrá otra animación. Entonces podemos llamarla emisión climática o ser mejor, o puedes llamarla animación de cuerda. Y más adelante si lo desea, puede agregar una animación de escalera. Y esa es otra animación. Entonces animación robot, llamémoslo libro flip book de papel o la variable es un libro flip book de papel, como aquí. Y ahorremos, permítanme realmente mover esto hacia arriba, así que arrástrelo por encima de los efectos de sonido. Sí, en realidad quería sonar efectos para estar aquí abajo en el fondo. Por lo que la emisión de Robin, ahorre. Por aquí. En realidad vamos a guardar todo, compilar y ahorrar. Y se puede ver la animación de cuerda aparece. Permítanme volver a hacer clic en él, haga clic en Ocultar pines desconectados. Entonces aquí arriba, lo que queremos hacer es copiar pegar esta estructura. Y puedes, como, puedes ver cada vez que escondes alfileres desconectados y simplemente se esconde así, ya puedes verlos más. Puedes hacer click sobre él y dar click en esta categoría predeterminada y puedes seleccionar ésta es la voladora, por lo que es una escalada, esta animación de cuerda y puedes ver que aparece y puedes conectarla aquí. Ahora recuerda, hay que conectar la animación de cuerda porque aún no hemos especificado de qué es. Por lo que hay que ir tanto a Serena como a Luke. Por lo que los planos jugador. Empecemos con mirar aquí. Recuerda en la clase T false, tienes que configurar la animación de cuerda. Entonces si subimos por Luke, vamos a Serena. Para Serena, se va a quedar así. Así animación de cuerda. Y luego encontremos el fúnebre. Este FP subió. De acuerdo, entonces ahora deberían estar trabajando. Ahora, volvamos a nuestra base de jugadores. Entonces ahora lo que estamos haciendo es que lo estamos enviando al modo volador. Entonces deberíamos poder movernos arriba y abajo aquí en el gráfico, bajaré. Por lo que deberíamos poder movernos hacia arriba y hacia abajo porque ahora estamos en el modo volador y podemos escalar. Y déjame volver aquí y luego estamos poniendo el libro flip book. Así que en realidad intentemos jugarlo y ver si me falta algo. Siempre es bueno probarlo. Así que vamos a salvar todo. Vamos a jugar. Ahora, si voy aquí, hago clic en abajo. Se puede ver que en realidad me estoy moviendo. Pero el problema es que este azulejo de colisión está deteniendo a mi personaje. Así que permítanme realmente probarlo desde abajo aquí. Caída. Y si voy a la cuerda aquí, se puede ver que en realidad estoy subiendo y bajando la escalera. El problema está aquí, el título nos está impidiendo subir. Y esto es algo que queremos arreglar eso en el siguiente. Pero creo en la siguiente otra vez, eliminamos esas colisiones para que podamos movernos hacia arriba. También tenemos un pequeño bicho donde podemos caminar a los lados a pesar de que estamos caminando aquí. Así que sigamos adelante y arreglemos eso. Permítanme hacer click en escape y déjame abrir la base del jugador. Y aquí arriba, en realidad déjame ir al Gráfico de Eventos. Déjame simplemente cerrar todo. Creo que tengo mucho abierto, muchas cosas abiertas. Ahora, aquí en el Gráfico de Eventos, voy a hacer clic derecho y decir cerrar pestañas a la derecha. Por lo que sólo tengo eso abierto ahora mismo. Entonces por aquí en el movimiento a derecha e izquierda, realmente no queremos movernos a derecha e izquierda cada vez que estés subiendo. Por lo que podemos sumar un booleano para eso. Entonces si sólo lo arrastro de vuelta aquí y podemos usar el que está subiendo y se puede escribir un booleano. Por lo que si no estás subiendo, lo harás, podrás moverte a derecha e izquierda. Pero dos, si estás subiendo una cuerda, realmente no queremos movernos a derecha e izquierda. Entonces algo simple como esto puede arreglar un error como este. Entonces solo usando un booleano, a veces se puede evitar algún código. Así que recuerda siempre los booleanos son muy, muy útiles aquí. Y se puede ver que no puedo moverme a la derecha y a la izquierda. Y también nuestra animación, animación de escalada está funcionando a la perfección. Ahora, no puedo, no puedo alejarme de mi cuerda porque creo que mi caja de colisión es muy larga en este momento. Así que déjame volver a la cuerda. Porque estábamos probando aquí, yendo a la cuerda aquí. Y déjame solo reducir esto a algo así como 65, algo así. Haciendo click en Jugar ahora puedes, bueno, en realidad déjame poner mi jugador empieza aquí abajo. Realmente no necesitamos caernos todo el tiempo. Aquí. Puedo escalar, puedo moverme hacia abajo y puedo dejar aquí mi soga. Nuevamente. Puedes poner esta plataforma más alta si quieres, o simplemente puedes hacer que la caja de colisión sea un poco más pequeña que no necesariamente tengas que ir hasta aquí abajo. Entonces algo así como 60 y puedo moverlo hacia arriba, algo como esto. Por lo que haciendo clic en Jugar de nuevo. Y podemos saltar y dejaremos la cuerda cada vez que estemos en algún lugar por aquí. De acuerdo, tan genial. Ahora podemos movernos hacia arriba y hacia abajo. Y también se puede ver que nos estamos deslizando un poco cuando me muevo a un costado. A veces en realidad me estoy alejando de la cuerda, algo como esto. Por lo que ahora me estoy moviendo arriba y abajo de la carretera, pero también estaremos ajustando la ubicación del cliente más adelante. Así que no te preocupes por esto, pero por ahora, puedes ver que podemos saltar mientras estamos aquí en la cuerda. Así que vamos a arreglar eso también. Así que volvamos a la base del jugador y para el salto. Entonces volvamos a encontrar la lógica de salto. Si no te estás cayendo y no estás alineado siendo realmente no queremos saltar cuando estás subiendo. Así que tomemos esto. Y aquí podemos decir terminar aquí y booleano. Y no estás escalando. Tan locos, booleano. Nuevamente, si lo eres, si no te estás cayendo y no estás subiendo, realmente no queremos saltar cuando estés escalando. Permítanme avanzar esto y permítanme hacer click en éste y haga clic en Ocultar pin desconectado. Por lo que vuelve a subir y conectar éste en su lugar. Entonces si estamos cayendo, no queremos saltar. Si estamos siendo colina, tampoco queremos saltar. Por lo que tenemos que comprobar por estos dos para asegurarnos que sólo podemos saltar sobre tu nullclina siendo o cayendo. Así que déjame acercar esto y podemos probarlo de nuevo, Compile y Save. Podemos jugar, ir en el camino. Y si hago clic en el espacio, puedo añadir salto aquí. De acuerdo, así que ahora esto está fijo y pasemos a la siguiente lección donde en realidad hacemos una enumeración de objetos escaladores. Entonces en lugar de hacer la, la cuerda sólo se pueden agregar letras y animaciones para esos también. 60. Subir la inclusión de objetos: De acuerdo, entonces, hasta ahora aquí en la en-rampa es la función de escalada. Hasta ahora hemos añadido que debemos cambiar a la animación de túnica cada vez que estés escalando. Pero, ¿y si también tienes una escalera? Y si tienes algo más y necesitas una nueva animación, necesitas una animación de escalada en escalera. A lo mejor tienes dos animaciones en tu juego. Ahora queremos hacer una enumeración para arreglar esto. Y me gusta que mi juego sea dinámico. Entonces en el futuro cuando quiera agregar algo, puedo hacerlo en dos minutos, no en 30 minutos. Así que hagamos que todo sea dinámico en este momento. Se tarda un poco más en hacer esto, pero te ahorrará tanto tiempo cuando hayas creado tu juego. Intenta siempre hacer estas cosas bonitas para tu juego. Intenta hacer buenas prácticas de codificación. Y puedes ahorrar tanto tiempo cada vez que creas un DLC o lo que sea que estés tratando de crear actualizaciones más adelante. Se puede hacer eso en dos segundos. Entonces intentemos hacer primero una enumeración. Nuevamente, las enumeraciones son muy, muy poderosas. Hasta ahora hemos creado estos estados en movimiento. Así que en realidad hagamos clic derecho aquí, vaya a los planos y cree una nueva enumeración. Llamemos a este tipo de objeto de escalada E. Si pudiera deletrear así que aquí escriba y haga clic en él aquí. Y permítanme añadir dos tipos por ahora. En realidad no tengo más que eso. Entonces tengo una cuerda y tengo una escalera como esta, así que guarde todo. Y volvamos a la línea estando aquí y escalando base. Y permítanme añadir esa variable a mis variables. Por lo que llamar a esta línea siendo tipo de objeto. Ahora vamos a añadir este tipo a nuestra enumeración que hicimos llamado tipo de objeto escalada. Esta es la enumeración. Entonces, lo que podemos hacer esto ahora que recuerden cuando agregamos variables al padre, se agregará la clase Blueprint a todos los hijos. Entonces haciendo clic en la cuerda aquí, se puede ver en los valores predeterminados de clase, ahora puedo ver esta enumeración. Y puedes cambiar el tipo para cada cosa que añadas aquí. Entonces esta cuerda es obviamente una cuerda. Pero si posteriormente agregaste una escalera, en realidad puedes cambiar esto a un encendedor y sabrá que se trata de una escalera. Y cuando se sabe que esto es un lateral, sabe que debe reproducir la animación más ligera. Así que en realidad vamos a codificar esa información en. Entonces esta es sólo una cuerda. Así que acabo de poner mi nueva enumeración a cuerda. Y volvamos al cliente siendo base y podemos añadirlo aquí en realidad, en realidad no la base de escalada. Volvamos a la base de jugadores. Eso es lo que quise decir. Ir a una base de jugadores. Y en los oídos recorte es escalar. Función Desenvolver. Aquí es donde queremos añadirlo. Así que vamos a alejar esto un poco más lejos. Aquí nos preguntamos referencia a que nuestro cliente sea base porque queremos usar esta variable. Y recuerda que ya hicimos una variable para esto. Si vas por aquí, cuando dijimos podemos escalar, agregamos recordar esa autoreferencia. Por lo que en realidad ya estamos definiendo esa base de escalada, que necesitamos llamar a esta función o a esta variable. Ahora, podemos crear una Interfaz de Blueprint y decir consigue que el cliente sea base. Podrías hacer eso si quieres. Pero para este juego, esto es muy mínimo. Yo no, no quiero molestarme porque realmente no lo vamos a utilizar tanto como la base de jugadores y para qué la hemos estado usando. Así que sólo voy a costar, dije antes está bien costar mientras no lo hagas todo el tiempo. Así que volvamos aquí y podemos sólo para tomar esta referencia aquí, déjame encontrar que el objeto de sujeción, déjame ahora arrastrarlo y decir costo también. Entonces, ¿cuál es el objeto escalador? El objeto de sujeción es cuando costamos algo que podemos decir que está hablando específicamente de esta base de escalada BP. Entonces el objeto escalador es específicamente este blueprint porque recuerda esta referencia, si se sostiene el ratón sobre él, es sólo un actor de sprite de papel. Y estamos definiendo que este actor sprite de papel es específicamente esta base de sujeción y S declive siendo base. Ahora puedo acceder a cualquier información que necesite dentro de aquí. Lo que necesitamos es esta variable llamada tipo de objeto de escalada. Así que vayamos a la base del jugador y arrastremos de esto y digamos que el ser colina consigue subir tipos de objetos. Por lo que ahora podemos usar esa variable. Al igual que antes. Recuerda lo que hicimos. Así que si recuerdas aquí, en realidad, está por aquí a un lado. En el movimiento on-rampa Estados. Creamos estos movimientos estados hace mucho tiempo. Y se puede hacer eso, el interruptor en la enumeración para seleccionar qué animación desea algún lugar. Por lo que vamos a hacer esto de nuevo, yendo a la base de jugadores, el ISClient siendo desenvuelto. Y dentro de aquí podemos arrastrar de esto y decir switch, encienda esta enumeración. Entonces, ¿qué debería pasar cuando se trata de una cuerda? Entonces, ¿qué debería pasar si tenemos este conjunto a cuerda? Queremos reproducir esta animación. Entonces esta es la animación de cuerda. ¿ De acuerdo? Y lo que es es una escalera, si es una carta, queremos tocar otra animación. Así que déjame copiar pegue esto aquí abajo. Y ahora realmente no tenemos una animación para ello. que podamos ir a la estructura aquí y se puede agregar una nueva animación llamada animación de escalera. Realmente no tenemos uno para el juego. Sólo te estoy mostrando cómo puedes hacerlo en caso de que lo tengas o quieras aprender a hacerlo dinámico. Así que creando aquí un libro flip book de papel , animación de letras, solo puedo moverlo aquí. Ahora lo que puedes hacer, solo voy a poner una animación aleatoria solo para ver si funciona. Entonces voy al jugador a Tsarina. Si acabo de guardar todo en realidad necesito compilar para que aparezca así ahorrando aquí e yendo a Serena. Y por alguna razón no está apareciendo realmente. Creo que necesito compilar en mi base de jugadores. Entonces aquí, pinchando y compilar. Recuerda muy importante compilar. Ahora volviendo a Serena en los valores predeterminados de clase, se puede ver que aparece. Entonces para la animación de letras, sólo voy a poner a ese cerdo aquí. El cerdo inactivo. Algo muy aleatorio solo para ver si funciona. Se puede hacer eso en Luke también, yendo a Luke y simplemente poniendo alguna animación ociosa de cerdo al azar solo para ver si eso funciona. Por lo que ahora está en letra y podemos tratar de hacer click en Place si vuelvo al juego basado, asegurándonos de que todo sea correcto. Entonces vamos a golpear esto o conectar esto aquí. Para esta última animación, voy a conectarla aquí abajo. Por lo que ahora tenemos ambos. Y si sólo estamos llamando, así que quitando al cliente, si es falso, sólo vamos a saltar lejos. Y permítanme hacer clic en Ocultar alfileres de nuevo, así como esto. De acuerdo, entonces ahora esto debería funcionar. Entonces si hago click en Play, ahora, estoy subiendo. Se puede ver que esto está funcionando. ¿ Y qué pasa si cambio esto a otra cuerda? Pero, ¿y si esto fuera una escalera? Por lo que cambié este tipo de escalada. Esto es en realidad una escalera ahora. Y si subo ahora, se puede ver que la animación está cambiando. Entonces dependiendo de si tienes una cuerda o no lo haces, esto cambiará la animación a cualquiera que sea la animación que hayas añadido aquí, dependiendo de si es una cuerda o si es una escalera. 61. Canal de colisión personalizado: Entonces el problema que estamos enfrentando en este momento es una granja que sujeta aquí en mi cuerda. En realidad déjame cambiar esa animación. Eso se ve tan raro. Necesito cambiar esto en una cuerda de nuevo. Entonces si voy a los planos, vaya a la escalada de la cuerda y en realidad cambiándola de vuelta a una cuerda aquí. ¿ De acuerdo? El problema que estamos enfrentando en este momento es si estoy subiendo aquí y si voy a la cima, realmente no puedo subir a la parte superior aquí. Y la razón es este azulejo de colisión aquí. Recuerda que tenemos colisiones. Estas colisiones mosaicos, están bloqueando a mi personaje para que se mueva aquí arriba. Y así necesitamos de alguna manera decirle a estas colisiones que se apaguen cada vez que estamos subiendo. Pero realmente no queremos apagarlo para cada uno. Si queremos, si lo apagamos para todos, todos estos enemigos caerán del suelo. Y así lo harán todos los jugadores que estén conectados contigo, caerán del suelo si no hay colisión. Por lo que queremos quitarlo específicamente para que ese cliente sea jugador. Y la forma más inteligente de hacerlo es crear nuestro propio canal de colisión personalizado, que es muy, muy fácil. Entonces te voy a enseñar eso ahora mismo. Podemos hacer esto yendo a Editar e yendo a la configuración del proyecto. Y dentro de aquí, podemos ir a la colisión, que está aquí bajo el motor. Y luego aquí en los canales objeto , estos son colisiones, por lo que sólo podemos hacer clic en nuevo canal de objeto, haciendo clic en él aquí. Y entonces tenemos que darle algo aquí. Así que llamémoslo línea siendo capa. Y la respuesta por defecto, vamos a ponerla a solapar. Haga clic en Aceptar. Por lo que ahora tenemos un canal. Entonces, ¿qué significa esto? ¿ Qué aparece esto? Y esto realmente aparece. Volvamos al mapa de teselas que creamos en la carpeta de mapas de teselas. Aquí es donde tenemos estas colisiones. Entonces dentro de aquí, recuerda en el componente render para este mapa de teselas aquí, si bajas a la colisión, puedes ver encontrar una colisión de Alice aquí, Presets de colisión. Demos clic en esa flecha para verla. Se puede ver que en realidad nos está bloqueando a todos aquí. Y acabamos de crear este jugador de escalada. Mira lo fácil que es. Simplemente aparece aquí. Entonces cada vez que creas un canal personalizado, aparecerá aquí. Y en realidad puedes configurarlo un entorno dependiendo de lo que estés tratando de hacer. Entonces, hasta ahora, todo nuestro jugador es un peón. Y cuando el jugador está sobre, nos estamos bloqueando por todas partes la colisión que está debajo de las fichas. Y para el jugador de sujeción ahora, lo configuramos para que se superponga por defecto. Recuerda que siempre puedes cambiar esto haciendo clic aquí arriba y diciendo disfraz. Y siempre se puede cambiar a otra cosa. Simplemente porque lo dijiste aquí en la Configuración del Proyecto, en la colisión, solo porque estableces el valor predeterminado para solaparse, por supuesto solo puedes hacer clic en Custom y cambiarlo a otra cosa, pero sólo estará en solapado por defecto. Entonces aquí voy a volver a bloquear todo de nuevo. Por defecto ahora están subiendo jugador está configurado para solaparse, lo que significa que en realidad puedo ahora en realidad dejarme quitar todas estas líneas aquí. Entonces por defecto, ahora puedo, si soy el cliente siendo jugador, ahora puedo pasar por todas estas colisiones porque ya no me bloquearán. Se solaparán conmigo. Entonces tenemos que decirle el motor ahora que cada vez que estoy subiendo, quiero que el jugador sea esta colina siendo jugador. No quiero que mi jugador siga siendo un estanque porque a pesar de que hice este canal en este momento cuando estoy subiendo a mi personaje todavía sobre y está bloqueado por estas colisiones. Entonces tenemos que decir que queremos cambiar nuestro canal. Y si voy a un jugador ahora jugador base, se puede ver aquí en el sprite o en la cápsula. Aquí en este brillante se puede ver que estoy sobre, por lo que el canal objeto es peón. Y recuerda aquí y los estanques de objetos renderizados están siendo bloqueados desde el canal de colisión. Entonces tenemos que cambiar esos ajustes. Y hagamos eso en la base de jugadores donde tenemos el ser cliente, sólo nos interesa hacer esto siempre que el jugador esté subiendo. Hagamos esto antes de cambiar la animación. Así que permítanme mover todas estas animaciones a un lado, más lejos aquí. Así que cada vez que soy la línea M, quiero llevarme al jugador. Así que tomando este Componente Cápsula, puede ver el componente cápsula aquí está configurado para disfraz, pero aquí abajo en el canal objeto, se establece a un estanque y no queremos que la cápsula se superponga. Así que volvamos aquí a la cápsula, menos arrastre esto aquí en el mundo. Y podemos cambiar este tipo de colisión. Entonces si bajaras, puedes ver que este es el tipo de objeto. Y siempre es bueno mirar los nombres porque entonces en realidad se puede saber cómo se llama. Entonces si sólo arrastra de aquí y dices colisión, porque esto es lo que nos interesa cambiar. Recuerdo que se llamaba tipo de objeto. Tratemos de ver si tenemos una función llamada set object type. Y aquí establecido o está aquí Establecer tipo de objeto de colisión. Por lo que pinchando aquí. Y si por alguna razón me hizo uno, déjame simplemente borrar mi anterior y déjame conectarme aquí. Entonces cada vez que estamos subiendo, me interesa cambiar mi cápsula que está chocando. Quiero cambiarlo a una línea siendo jugador. Esta es la costumbre que hemos hecho. Y cada vez que ya no estoy trepando, quiero cambiarlo de nuevo a sobre. Para que puedas copiar, pegar esto aquí abajo, conectado de nuevo así. Y alejémoslo. Aquí. Puedes cambiarlo de nuevo a un poema. Así que solo lo estamos cambiando a un jugador de sujeción cada vez que estamos subiendo, pero lo estamos cambiando de nuevo a **** cuando ya no estamos subiendo. Ahora vamos a compilar y ahorrar, y es tan fácil como esto. Entonces intentemos ver si tenemos algún bichos. Por lo que ahora se puede ver, ahora puedo escalar a través de él porque soy un jugador de escalada. Canal de objetos y mis colisiones. Y puedo subir aquí, y ahora solo puedo caminar por ahí porque ahora estoy en mi canal de objeto peón ahora. 62. Ajustar la ubicación de la subida: De acuerdo, entonces el pequeño problema que tenemos en este momento, cada vez que caminamos y saltamos, a veces aterriza en la cuerda. En ocasiones se puede ver que aterriza en el costado de la cuerda. Por lo que realmente no específicamente en la bata aquí. Por lo que tenemos que ajustar la ubicación de salto cada vez que estés saltando encima de esa cuerda aquí. Así que déjame volver aquí y volver a la base de jugadores. Y la mejor manera de hacerlo se actualiza continuamente en algún lugar. Y lo que estoy pensando cuando hago esto es ¿qué eventos tengo esa actualización continua que puedo usar? Realmente no quiero hacer que un evento marque. Realmente no quiero hacer eso. Entonces tenemos algunos temporizadores, pero estos se detienen cada vez que pongo a mi cliente siendo así cada vez que estoy subiendo siendo lo que se está actualizando continuamente, esto se detiene cuando estoy subiendo. Entonces la cosa está aquí cuando nos movemos arriba y abajo, esto sigue actualizándose. Así que sigo moviéndome hacia arriba y hacia abajo. Así que en realidad hagamos esto aquí. Después agregamos la entrada de movimiento. Sólo queremos ajustar la ubicación cuando estamos siendo colina. Así que déjame porque aquí si no hago eso, se ajustará la ubicación cada vez que solo esté interactuando con la cuerda y pueda subir. Así que arrastremos esto aquí y hagamos un booleano o en realidad una rama. Siempre que estoy subiendo, quiero ajustar a mi cliente siendo ubicación. Entonces lo que estamos tratando de hacer es que queremos establecer la ubicación del jugador a donde sea esto, este actor de aquí es este actor de cuerda. Entonces dondequiera que esté este actor y cuando estamos saltando encima de él, quiero poner a los jugadores x ubicación. Recuerda que la ubicación x es lo que está pasando mal en este momento. Porque o bien el jugador está demasiado lejos a la izquierda o demasiado lejos a la derecha de la cuerda. Entonces es la ubicación x que necesitamos ajustar aquí. Quiero configurar a mis jugadores x ubicación para que sea la misma que esta ubicación de actores x. Entonces si vuelvo a la base de jugadores, así que si estoy reclamando aquí, quiero ajustar mi ubicación. Tomemos este objeto o objeto de sujeción. Permítanme hacer clic derecho y decir Convertir a un get validado. Porque recuerda si ya no te estás solapando, si vuelvo a mi lógica que veas por qué estoy haciendo esto. Volviendo a la base de escalada. Recuerda, cuando ya no estás subiendo, estás configurando esta variable para que no sea nada, lo que significa que no tienes nada dentro de esta variable. Entonces es por eso que estoy configurando esto solo para no recibir ningún bichos. Entonces solo estoy viendo si esta variable es válida, si contiene algo y si lo hace, si lo hace. Así que permítanme llevar aquí la ubicación de los actores, sin embargo ubicación de actores. Y entonces también estoy consiguiendo la ubicación de los actores de los jugadores. Así que consiga la ubicación del actor. Y éste, el objetivo es uno mismo. Recuerda que estamos en la base del jugador, por lo que esta es la ubicación del jugador. Esta es la ubicación del objeto. Voy a romper por ambos para que pueda usar la X, Y, y Z porque sólo me interesa la x aquí. Voy a romper el vector aquí también. Y sólo voy a ejecutar este código aquí, ajustando la ubicación del jugador cada vez que no estamos en la cuerda. Pero si nos hemos ajustado a la cuerda, entonces ya no quiero ejecutar este código. Entonces si la x de la cuerda no es igual a la x de los jugadores, por lo que si son diferentes, eso es cierto. Por lo que voy a conectar esto como válido aquí. Si eso es cierto, voy a ajustar la ubicación. Por lo que en realidad voy a hacer un nuevo evento aquí. Recuerda, esto se está ejecutando en el cliente y cuando ajustamos una ubicación, esta es una actualizaciones visuales. Y tenemos que hacerlo a través de un rep notifique. Así que hagamos un nuevo evento aquí abajo. Llamémoslo evento personalizado. En realidad, hagámoslo primero en una Interfaz de Blueprint. Entonces déjame ir a los jugadores Blueprint Interface. Y hagamos una nueva función llamada Ajustar, línea siendo ubicación, compuesto Guardar. No sé si necesitamos alguna aportación en este momento. No puedo pensar en ello ahora mismo. Hagámoslo y siempre podemos agregar variables si queremos. Entonces aquí déjame llamarlo diciendo ajustar, subir ubicación. Y esta es una función de interfaz de blueprint. Hagámoslo a través del servidor. Así servidor personalizado y ajustar la línea siendo. Si puedo escribir escalando ubicación y vamos a cambiarlo para correr respuesta y confiable. Y desde aquí por supuesto podemos ejecutar este evento de servidor, solo escalando ubicaciones. Entonces ahora lo que queremos hacer es aquí arriba, si esto es cierto, si el, si la ubicación de la cuerda y la ubicación x no es lo mismo que la ubicación x del jugador. Queremos ajustar la ubicación del jugador. Por lo que ajustar la escalada. Queremos ejecutar ese evento esencialmente. Por lo que aquí queremos ajustar la ubicación del jugador. Entonces, en última instancia, lo que estamos tratando de hacer es que estamos tratando de hacer un vector. Entonces vamos a crearlo. Ahora. Estamos tratando de hacer un vector llamado ubicación de escalada. Y vamos a convertirlo en un vector porque es una ubicación. Y éste, en última instancia queremos configurarlo a un rep notifique. Y dentro de esta ubicación de sujeción desenvolver, lo único que tenemos que hacer es establecer la ubicación del actor. Esto es lo que estamos tratando de hacer. El objetivo es auto, así que estamos tratando de establecer la ubicación del jugador, esta nueva ubicación, esta ubicación ajustada. Vamos a conectarlo aquí. Esto es lo que queremos hacer en última instancia. Así que estableciendo la ubicación del jugador a esta ubicación ajustada, que está en esa ubicación de cuerdas, eso cuerdas x ubicación. Entonces si la x de la cuerda no es la misma, actúa como el jugador, queremos ajustar la ubicación. Entonces, ¿cómo ajustamos la ubicación? En primer lugar de nuevo, quiero volver a tomar este objeto de aglomeración, puedes hacer un get validado solo para asegurarte de que sea válido. Así que de nuevo, tomemos, en realidad déjame copiar esto de nuevo. En realidad vamos a escribir lo mismo. Por lo que estamos consiguiendo la ubicación de las cuerdas y estamos consiguiendo la ubicación del jugador. Lo único que nos interesa es cambiar esta ubicación x porque la ubicación y de esta manera no estamos realmente interesados, interesados en ajustar eso. Tampoco nos interesa ajustar la z Sólo nos interesa ajustar la x aquí. Si vuelvo a mi anteproyecto, lo único que nos interesa como ajustar esto. Así que déjame tomar mi vector de ubicación de escalada aquí, conectado y arrastrar de esto y decir make vector. Ahora, lo que podemos hacer aquí es que queremos establecer la ubicación del jugador. Recuerda que esta es la, en última instancia, la ubicación o el ajuste del jugador. Por lo que queremos poner la ubicación del jugador a las cuerdas x. luego hacer y y z. sólo queremos que se queden igual. No queremos tener la y y z de la cuerda. Sólo queremos la y y z y la z del jugador, sea lo que sea actualmente. Por lo que sólo nos interesa ajustar la x. toda esa información va a entrar en este vector en este momento. Y cada vez que se va a configurar tour rep notifique, se va a ejecutar esta función aquí. Por lo que ahora vamos a establecer la ubicación de la actriz. De acuerdo, así que vamos a hacer clic en Jugar ahora, cuando saltemos sobre la cuerda, acuerdo, ahora esto es realmente perfecto. Volvamos a saltar aquí. Perfecto también. De acuerdo, entonces cuando jueguemos el juego ahora, voy a jugar como Luke en el servidor y Serena en la línea. Así que sólo haciéndolos un poco más grandes así. Entonces en el servidor y ahora puedo saltar sobre la cuerda. Estoy ajustando muy bien mi ubicación. Z sin embargo salté, está ajustando mi ubicación. ID de Alice en el cliente para asegurarse de que todo esté funcionando así que estoy saltando, está ajustando mi ubicación correctamente. Se puede ver en el servidor, hay algún error aquí. Soy cliente siendo, pero de alguna manera mi animación no está jugando. Creo que se va a arreglar más adelante en las lecciones donde estamos posando y actualizando. Ya se puede ver que funciona. Entonces vamos a hacer una pausa y actualizar esta animación de Columbia porque obviamente no queremos jugarla mientras saltamos. Pero en un principio vamos a establecer esta animación de salto, reproducirla y detenerla. Creo que va por todas partes. lo que sale mal Conlo que sale malestá aquí en la base del jugador. Es como juega. A pesar de que hemos colocado un booleano aquí en el movimiento a derecha e izquierda. En realidad está jugando la animación aquí antes o después. Aquí en el, en la en-rampa es subir siendo después de que pusimos el flip book a subir o escalera, sigue pasando por aquí y jugando. Por lo que más tarde vamos a parar e iniciar la animación dependiendo de si el jugador está saltando o no. Entonces creo que se arreglará. Posteriormente veremos. Pero por ahora, dejemos que sea así. Entonces todo está funcionando correctamente ahora y el salto está bien, todo está bien. Estamos ajustando la ubicación. Así que compilemos, guardemos todo, y pasemos a la siguiente lección. 63. Eliminar el sube de la espada: De acuerdo, entonces tenemos un pequeño error que tenemos que arreglar en este momento. Y si voy al ser cliente y a la túnica y me dejo ir a los visores. En realidad voy a aumentar esto aquí y ponerlo aquí arriba para que en realidad pueda subir desde la cima. Por lo que ahora puedo jugar como servidor y estoy subiendo aquí arriba, subiendo a la cima, eso está funcionando perfectamente. Pero el problema ahora es si subí, se puede ver que también está funcionando bien. Pero ahora si estoy aquí arriba y hago clic hacia arriba, se puede ver que puedo calmarme, eso está bien. Pero si hago clic hacia arriba, en realidad puedo spam. Y se ve así. Quiero decir, no es realmente el mayor problema de tu juego, pero visualmente, creo que podemos hacer que el jugador haga esto. Creo que es un poco estúpido, así que vamos a arreglar eso. Al igual que quitar a este cliente Bob spamming aquí arriba. Así que volvamos aquí. Y para ello, creo que la mejor manera es agregar otra caja de colisión, que luego te niega presionar el botón Arriba si lo estás. Así que agreguemos una caja de colisión aquí arriba en la parte superior de esta cuerda. Hagamos eso en la base de escalada. Y aquí en el objeto render, Apenas agreguemos otra caja de colisión. Busca colisión en la caja de colisión, y llamemos a esta caja de colisión superior. Lo que queremos hacer inicialmente como aquí y la base del jugador. Lo que queremos hacer es que queremos hacer un evento diciendo que se puede subir. Y esto es básicamente sólo un booleano. Entonces hagamos un booleano llamado y subamos. Esto es en realidad lo que queremos hacer y lo vamos a configurar para replicarlo, obviamente porque todos los clientes necesitan saber sobre esto. Y así puede escalar a Bob, esto es lo que estamos tratando de establecer, y obviamente vamos a configurarlo a través del servidor. Así que hagamos un evento personalizado pasando por el servidor diciendo que el conjunto puede subir. Y vamos a conectarlo aquí. Y ahora necesitamos un, necesitamos un evento normal aquí, no un servidor. Así que en realidad me permite recordar ejecutar esto en el servidor, haciendo clic en poco fiable. Entonces queremos uno normal llamado set, pueda subir a Bob y hagámoslo dentro de la Interfaz Blueprint. Terminar interfaz de Blueprint base del jugador. Hacer una nueva función aquí llamada set puede subir. Hagamos un booleano. Haz lo mismo. Se puede subir. ¿ De acuerdo? Ahora podemos volver a la base de jugadores y llamar a ese conjunto de eventos puede alinearse aquí. Y ahora podemos ejecutar los eventos del servidor a través de éste. Veamos dónde está, se puede subir. Y vamos a conectarlo. Y ahora va a correr por esto. Entonces esto es lo que estamos tratando de correr y lo vamos a poner en falso cuando el jugador no puede subir a Bob. Entonces vamos a compilar y ahorrar, y volvamos a la base de escalada. Y aquí tenemos esta ahora caja de colisión superior. Voy a moverlo un poco arriba, así que está aquí arriba para que pueda verlo compilar y guardar. Y podemos volver a la cuerda y en realidad podemos ajustar el tamaño. No creo que deba ser tan grande. Quiero decir, realmente no importa, pero tal vez vamos a cambiarlo por algo como 25. Piensa, solo puedes intentarlo. Y sólo voy a ponerlo aquí. Entonces, cuando el jugador está de pie aquí en el suelo y golpeando esa caja, no se puede presionar el botón Arriba. De acuerdo, así que vamos a compilar y guardar esto y volvamos a la base de escalada. Por lo que ahora haciendo clic en este cuadro de colisión superior, vamos a bajar a la parte inferior y haga clic en éste en el componente comenzar a solaparse. Entonces, ¿qué debería pasar cuando se superpone esta caja aquí? Lo que debería pasar es que no se puede hacer clic en el botón de arriba y no se puede subir. Nuevamente. Permítanme sólo copiar todo este código. Estamos haciendo lo mismo. Estamos pasando por este servidor con comprobando si es el jugador, y si es el jugador, llamemos a este llamado, lo llamamos set puede subir. Entonces set puede subir y es el mensaje porque es una función de Interfaz de Blueprint. Así que puedes subir a Bob se pone en falso porque cuando estás golpeando esta caja de colisión, no puedes presionar el botón Arriba. No obstante, ahora hagamos el segundo es cuando dejes esta caja. Entonces cuando estás bajo tierra, por ejemplo, puedes subir. Así que déjame conectar esto juntos. Otro componente es éste de aquí también. Puedes subir cada vez que ya no te superpongas con esta caja. Entonces la cosa es que ahora tenemos este booleano. Y así en la base del jugador, vamos a ver dónde podemos usarlo. En la base de jugadores podemos usar aquí cuando estamos comprobando que el cliente está siendo entrada, no queremos que el jugador suba siempre que esto se ajuste a verdadero y están ahí arriba en el suelo. Por lo que puede subir hasta aquí. Podemos decir, en lugar de simplemente decir no es igual a 0, podemos simplemente eliminar esto y actualizarse a otra cosa. Entonces si es inferior a 0, lo que significa que el jugador quiere bajar, realmente no tenemos problema con esto. El jugador puede bajar. No obstante, cuando el jugador, y ahora podemos tomar esto de nuevo, en realidad puedo simplemente, whoops, en realidad puedo simplemente arrastrar de esto y decir si es mayor que 0, lo que significa que el jugador es tratando de subir. Aquí está el problema que tenemos. Entonces si el jugador está tratando de subir y se les permite, por lo que puede subir buck. Recuerda que no pueden subir cuando están chocando con eso, esa caja de colisión aquí arriba. Entonces si es mayor que 0, podemos decir fin. Y pueden escalar buck. Entonces queremos seguir adelante y escalar. Y lo que podemos hacer aquí, sólo podemos decir, lo que puede arrastrar de esto y decir, o éste o booleano. Y luego podemos conectar esto aquí y conectarnos este año. Entonces lo que estamos diciendo es si el, si el jugador está presionando hacia abajo, lo que significa que el eje z será negativo. Somos capaces de escalar. Si el eje z es positivo, lo que significa que el jugador está presionando hacia arriba y en realidad somos capaces de subir. Entonces vamos a escalar. Entonces es o bien esta condición aquí o esta condición aquí. Esto es lo que está diciendo en última instancia. Así que ahora podemos subir, así que se está comprobando ahora, ¿en realidad se puede subir? Y esto solucionará nuestro problema con el spamming. Así que déjame compilar y ahorrar. Simplemente puedo hacer click en Play y ver qué pasa. Entonces cuando subo ahora, tengo un pequeño bicho. Ya ves que no puedo escalar a Bob, así que en realidad voy a volver a ver lo que hice mal. Por lo que el eje Z puede subir está pasando por esto. Y está fijando ese valor. Y déjame bajar aquí a ver si he dicho esto correctamente. El problema es en este momento es en realidad esto necesita ser cierto por defecto porque por defecto se puede subir. Por lo que tenemos que componer seguro. Así que recuerda también, eso puede subir como cierto en el default. Por lo que en realidad podemos subir aquí. Para que puedas ver ahora podemos escalar a Bob. Y si subo a Bob aquí, puedo caminar por ahí. Si hago clic en el botón de arriba, no puedo gastar más. Pero si hago clic en el botón Hecho, puedo subir por la escalera. Así que ahora está funcionando. No podemos spam aquí arriba. Simplemente podemos caminar hacia abajo, pero podemos caminar arriba y abajo, aquí abajo. Entonces eso no es problema. 64. Pausar la animación de escaladas: Entonces lo final en esta sección, quiero pausar la animación del cliente cada vez que no estoy escalando. Entonces cuando estoy subiendo aquí se puede ver la animación sigue tocando y no quiero hacer eso. También teníamos un buck previamente donde yo como cliente por juego. Y yo sólo lo hago un poco más grande aquí. Cuando subo, puedes ver mi personaje se ve raro aquí, la animación luce rara. Así que tal vez se va a arreglar una vez que hacemos una pausa y reproducimos la animación. Entonces intentemos hacer eso. Volvamos a la base de jugadores. Y dentro de aquí, quiero que hagas esto en el movimiento hacia arriba y hacia abajo porque continuamente va a comprobar que me estoy moviendo hacia arriba o bajando o simplemente parado quieto. Entonces lo que voy a hacer ahora se está poniendo un poco de lío y tenemos que limpiar esto al final de este video. Así que permítanme mover esto por aquí. Así que quiero actualizar esto cada vez que estoy escalando siendo porque antes estoy subiendo y realmente no quiero hacer nada. Entonces después de éste, estoy subiendo. Desconectemos esto. Entonces antes de ajustar la ubicación, juguemos y detengamos la animación. Así que tomemos aquí nuestro eje z. El eje z simplemente nos va a decir, ¿está el jugador presionando hacia arriba o hacia abajo, o el jugador está parado quieto? Entonces si esto no es igual a 0, lo que significa que el jugador se está moviendo, queremos reproducir la animación. Para reproducir la animación, puedes tomar este sprite aquí y puedes entonces, puedes decir Play, y toca ese flip book. Pero recuerda, no puedes simplemente jugar el flip book porque ahora mismo, estás en la placa auto del cliente. Y esta es una actualización visual. Nuevamente, estamos en multijugador por lo que necesitamos ejecutarlo a través de un rep notifique. Porque si haces esto, sólo un cliente lo verá. Entonces vamos a quitarlo. Y ahora necesitamos convertirlo en un nuevo evento llamado la pausa, subir flip book. Y podemos poner eso a verdadero o falso. Así que volvamos a la función de interfaz para la base del reproductor. Hagamos una nueva función. Y llamemos a éste. Pausa, subió. Supongamos que subió, flip book. Hagamos una variable aquí en Boolean. Yo sólo lo llamo pausa, subió, libro iluminado. Y vamos a compilar y ahorrar. De acuerdo, así que vamos a llamarlo aquí, pausar a ciegas, flip book, y queremos ejecutarlo al servidor, llámalo pausa limed flip book. Ahora, éste es también, también tiene un booleano llamado pausa ciega flip book. ¿ De acuerdo? Entonces aquí solo estoy asegurándome de tener B delante de mi booleano solo por buenas prácticas. Y bien, así que ahora tenemos este evento, ejecutarlo en el servidor, confiable, y queremos promocionar esto a una variable. Promover esto a una variable llamada pausa, colina, pero flip book y voy a poner una B delante de ella aquí y quitando los espacios así. De acuerdo, así que éste es un rep notifique. Por lo que haciendo click aquí, haciendo clic en rep notificar, compilar y guardar. Y vamos a ejecutar el servidor corriendo por aquí. Así que pausa. Tengo muchos ahora. Así que déjame simplemente buscar, pausa, colina pero flip book. Déjame pasarlo por aquí. Y en última instancia lo que estamos tratando de hacer es estamos tratando de ir a esa pausa, escalar, flip book, comprobando si la pausa está configurada en verdadera o tuerca. Entonces si la pausa se establece en verdadera, queremos tomar este sprite y decir Stop. Aquí, el flip book. Cuando se mantiene el ratón sobre él, dice detener la reproducción de libros. Por lo que queremos detener la animación. Entonces cuando la pausa es cierta, queremos detener la animación. Una de las pausas es falsa, lo que significa que queremos reproducir la animación. Podemos decir empezar o realmente jugar. Entonces se llama juego. Entonces vamos a tocar la animación. Y ahora volvamos a codificar esa lógica. Por lo que ahora tenemos listo ese evento. Entonces cuando estamos subiendo y el eje z cuando estamos presionando, cuando estamos presionando hacia arriba y hacia abajo significa que no es igual a 0, por lo que en realidad queremos moverlo si eso es cierto. Entonces vamos a conectarlo aquí. Si eso es cierto, queremos reproducir la animación, lo que significa que podemos llamar a este evento Pausa, subir, flip book, pausa, subir, flip book. Este de aquí. Por lo que podemos poner esto en falso. Entonces porque configurarlo en falso, que significa que no queremos hacer una pausa, solo queremos configurarlo aquí para pausarla. Así que cuando esto se establece en false, se va a desenvolver notificar aquí están la función Honorlock. Y cuando se pone en falso, va a reproducir la animación. Ahora no quiero reproducir la animación constantemente, solo quiero reproducirla siempre que no esté jugando ya. Entonces lo que puedes hacer es tomar este brillante y luego puedes decir flip book. Y ahora podemos ver que tenemos, vamos a ver, tenemos como revertir está jugando, éste está jugando. Queremos comprobar si ya está jugando. Y digamos, digamos nueces. Entonces, whoops, no éste. No es B, que es éste no booleano. Entonces ahora lo que estamos diciendo aquí, vamos a escribir un fin booleano también. Entonces ahora lo que estamos diciendo, si el jugador está presionando hacia arriba y hacia abajo, por lo que el eje z no es igual a 0 y la animación no se está reproduciendo ya. Entonces adelante y toca la animación porque realmente no estamos interesados en seguir el spam. Juega a esta animación una. Ya estamos tocando la animación. Entonces cuando no estás jugando ya la animación, así que cuando la animación no se está reproduciendo y los jugadores realmente presionando arriba y abajo, queremos seguir adelante y reproducir la animación. Así que déjame simplemente seguir adelante esto. Estamos corriendo en problemas con el espacio, así que solo organizando las cosas un poco aquí. De acuerdo, entonces lo siguiente que queremos comprobar, queremos decir ahora, es el jugador de pie quieto, es el jugador de pie quieto, lo que significa que el eje z es igual a 0 porque el jugador no está presionando hacia arriba y hacia abajo. Entonces si esto es igual a 0 de nuevo, y si la animación ya se está reproduciendo, entonces queremos detener la animación. Entonces y booleano de nuevo, conectarlos juntos y hacer una nueva rama. Y toma aquí lo falso. Entonces estamos comprobando, es el eje z igual o no igual a 0, lo que significa que el jugador se está moviendo. Si es falso porque el jugador en realidad no se está moviendo, va a bajar aquí y comprobar, el jugador no se mueve? Si eso es cierto. Al igual que también va a comprobar si la animación ya se está reproduciendo. Si eso es cierto, entonces adelante y pausa la animación de reproducción. Voy a mover estos de nuevo hacia abajo. Y así. Ahora vamos a reproducir la animación o pausar la animación si ya se está reproduciendo. Pero nos quedamos quietos. Queremos realmente pausar porque no queremos reproducir la animación mientras nos quedamos quietos. Y como la cosa cuando todo es falso, queremos simplemente ajustar nuestra ubicación. Así que pongamos eso aquí abajo. Y así cuando nos estamos mudando aquí, si nos estamos moviendo, pero la animación ya está tocando. Vayamos aquí abajo. Va a ser falso, va a ser falso. Y entonces sólo estamos ajustando la ubicación. Por lo que inicialmente se está enfocando en reproducir nuestra animación o posar nuestra animación, y luego va a ajustar nuestra ubicación. De acuerdo, así que creo que realmente no necesitamos más aquí. Entonces veamos si todo está fijo. Permítanme hacer click en play como servidor y déjame saltar aquí. Se puede ver que no estoy jugando. Si me muevo arriba y abajo, está jugando. Ok. Parece que todo está correcto ahora. Impresionante. Así que déjame ahora ir como los clientes y abrirla aquí. Eso también está funcionando. Ahora veamos si aún tenemos ese cubo o tal vez tengamos que arreglarlo. Entonces déjame moverlo aquí. Ahora todavía tenemos esa caja, así que necesito echar un vistazo a dónde salió mal para arreglar ese bug porque a veces aparece y a veces no lo hace, así que tenemos algún bug. Y creo que si sólo vamos aquí y movemos la base de jugadores, solo pongámosla rápidamente aquí. Entonces si tengo al jugador parado aquí y voy a la base del jugador, y los desconecto, y los desconecto, muévete a derecha e izquierda. A lo mejor algo va mal porque también estamos estableciendo animaciones aquí. Así que déjame hacer click en play. Y si juego como servidor, en realidad no el servidor, el cliente, mientras tengo el bono de servicio. Al saltar click sobre arriba. Se puede ver la animación completa obviamente no está actualizando porque he desconectado ese evento. Pero está jugando correctamente. Parece que no lo hacemos, nunca tenemos un problema en la escalera. Entonces hay alguna decodificación inicialmente es correcta todo el código, solo hay estas actualizaciones que suceden a pesar que le dijimos que solo queremos jugar esto cuando no estamos subiendo. Entonces veré qué puedo hacer al respecto. Entonces creo que la mejor manera de arreglar este error es si vamos, por lo que es jugar esta animación, pero a veces pasa por esto y jugando sexualmente la función on-rampa. Por lo que podemos tratar de ir a la, recuerda que hicimos ese estado de movimiento aquí, este movimiento se guarda, en realidad se está ejecutando esa función de estado de movimientos desenvueltos. Entonces yendo a la función de estado de movimiento aquí antes de que pueda cambiar, también tiene que comprobar si estamos subiendo o no. Así que tomemos ser nuestro cliente. Se agrupa aquí y hagamos una rama. Y ahora va a decir, vamos a escribir aquí un booleano nuez. Entonces si no estamos subiendo, se le permite hacer todos estos movimientos. No obstante, si estamos subiendo, no hagas nada. Entonces algo como esto aquí. Así que ahora vamos a componer salvar y orar para que todo sea correcto. Entonces intentemos saltar ahora y está funcionando. Intentemos de nuevo un par de veces para asegurarnos de que esté funcionando. De acuerdo, entonces ahora eso arregla el problema. Ahora está funcionando y si soy el servidor, y se pueden ver, así que ahora estoy saltando como el servidor, se puede ver que funciona también. Por lo que tanto el cliente como el servidor se pueden ver. Y de nuevo, solo, sólo para asegurarse de que no esté molestando. Entonces aquí en el jugador, solo quería revisar mi colisión en la escalera. Entonces como sprites, no estoy generando ningún evento de superposición, así que eso realmente no importa. Nosotros, los eventos de superposición vienen principalmente de la cápsula. Por lo que pinchando sobre la cápsula, mirando hacia abajo a los Presets de Colisión aquí. Por lo que los poemas se están ignorando y la línea siendo jugadores se superponen entre sí. Entonces en realidad yo también voy a cambiar éste. Ignorarse unos a otros. Por lo que los jugadores en las letras también se ignorarán entre sí. Y siempre se puede cambiar si es necesario, pero eso es lo que podemos hacer por ahora. De acuerdo, así que ahora todo está funcionando y se puede ver la cámara en este momento. puede ver que está molestando. Y esto es porque sólo hay que tener cuidado de no colocarlo dentro de esta caja de colisión o puede hacerla más pequeña. Voy a colocarlo afuera porque ya estamos en la superposición. Ahora, vamos a hacer click en Play. Juega como el jugador y el cliente para asegurarte de que el juego esté funcionando. Por lo que tenemos al cliente aquí y tenemos al jugador aquí. Entonces el jugador responde ahora el servidor, lugar, este tipo de aquí, el lugar del personaje, Tsarina aquí. Y nos estamos moviendo por ahí. Y esto se ve bien. Ahora como el servidor. Eso también se ve bien, y no pueden bloquearse entre sí. Ok. Entonces todo se ve correcto y no puedo pasar el botón Arriba aquí. Tanto el jugador como el cliente pueden abarcar el botón Arriba. Ok, así que todo está funcionando correctamente. Y vamos a tratar de jugar ahora clientes de S2, a veces hay que probarlo como dos clientes para ver si eso también está funcionando correctamente. Entonces jugando, Serena y Luke, caminando por aquí, saltando en la letra de que las cosas están funcionando. El cliente y el servidor. Así que al hacer clic en spam aquí arriba no es spam. Pero eso es bueno. Todo está funcionando y el cliente, la cámara está funcionando. puede ver que está ajustando la ubicación de él. Así como eso. Entonces todo está funcionando correctamente ahora. Y por supuesto, si nos encontramos con alguna caja en el futuro, estaremos arreglando esos. Pero por ahora, parece que todo está funcionando y en realidad no hay bichos aquí. Entonces lo siguiente que podemos hacer es que podamos trabajar en la salud y el daño. Y esto va a ser realmente interesante porque ahora nos podemos dañar de los enemigos. Podemos aplicarles daños y será muy divertido. Así que pasemos a la siguiente sección. 65. EXTRA: limpia tu código: Así que quería añadir este video extra porque creo que es muy importante que limpiemos el proyecto y creo que se está poniendo un poco desordenado. Así que sigamos adelante y limpiemos parte del proyecto. Lo primero que podemos hacer es entrar aquí en la base de jugadores. Y aquí hemos terminado nuestro sistema climático y así sucesivamente. Entonces tenemos algunos eventos aquí que podemos limpiar. Por lo que aquí a partir del movimiento hacia arriba y hacia abajo, puedes hacer doble clic en estos pines aquí para hacer un nodo rerutado. Y por lo general hago esto para que parezca más magro para que podamos hacer click aquí y hacerlo aquí abajo. Y en lugar de tener dos de ellos, porque esto viene inicialmente, viniendo de lo mismo. Simplemente puedo arrastrar de éste y conectarme aquí y puedo eliminar éste aquí. Y por algunas razones bombearlo no me dejará borrarlo. Déjame cerrarlo y abrirlo nuevo y eliminarlo. Por lo que ahora funciona. De acuerdo, así que voy a bajar esto. Así que intenta todo lo posible para limpiar todo esto aquí arriba. Y puedo mover esto todo el camino aquí. Si lo desea, puede hacer dos de ellos. Puedes hacer uno aquí y uno aquí y conectarlo así si quieres, si crees que esto se ve más limpio, creo que esto se ve bien ahora, tal vez muévelo hacia arriba. No, creo que esto es bueno. Por aquí. Podemos mover este moco así. Podemos subir esto así aquí. Y esta parte del código. Esto es como Esto se ve bien. Podemos moverlo un poco hacia arriba, tal vez más atrás, algo como esto. Y creo que esto se ve bien hasta ahora. Entonces aquí abajo tenemos el cálculo del eje z. Y lo voy a mover por debajo de esto porque pertenecen juntos. Sólo voy a moverla aquí arriba. Entonces tenemos el código de puede subir. Voy a mover todo esto aquí abajo para que puedan escalar es casi limpia o en realidad es, en realidad está completamente limpio así que podemos simplemente arrastrar esto más cerca. Esta es la lata trepar, pero creo que pueden escalar. Esto debería venir como número dos porque este es uno de los códigos iniciales también. Voy a bajar esto. Y voy a tomar esta parte del código que aparece debajo de aquí, solo asegúrate de que no choquen por aquí a un lado. Entonces tenemos podemos subir aquí también. Este es en realidad el servidor, por lo que en realidad hay que mover esto un poco hacia abajo, pero puede mover esto, puede subir por encima de él. Entonces empieza aquí y baja al servidor. Y luego tenemos el está subiendo y tenemos la pausa del libro flip y posando el flip book viene de aquí arriba. A lo mejor puedo colocar esto aquí arriba, o puedo hacer espacio y simplemente colocarlos uno al lado del otro por aquí. Me gusta armar las cosas que no estén demasiado extendidas, pero creo que estas están demasiado cerca el uno del otro. Así que voy a hacerlo, voy a bajar esto un poco. Esto es, este de aquí arriba es el código principal. Y tenemos algunos eventos aquí abajo. Entonces esto es ajustar la ubicación, que está sucediendo por aquí. Entonces ajustando la ubicación, puedo de nuevo simplemente ponerlo de lado aquí solo para que se vea más limpio. Y puedo seleccionar todo esto. Voy a moverla un poco hacia abajo otra vez, así. De acuerdo, Así que tenemos el set está subiendo y podemos subir por esta subida siendo, voy a simplemente en realidad sólo podemos dejarlo estar aquí, solo moviéndola más cerca para que no esté demasiado lejos. Lo mismo con éste. Y lo que podemos hacer con este código y simplemente moverlo un poco más cerca así. Podemos llevarla todo aquí. Y luego podemos hacer click en, ver. Vamos a llamarlo subir. Subir siendo tal vez no lo has llamado algo mejor o tal vez mecánico de escalada o toda una línea de texto. También puedes hacer, recuerda que también podemos hacer entrar comentarios, por lo que no tienes que hacerlo solo por aquí, no puedes también. Hágalo aquí, dales colores si quieres, si haces tus propias reglas. A veces lo que hago por mis juegos, si viene del servidor, hago un comentario y luego se leerá este comentario. Entonces todos los comentarios rojos dentro de mi juego, sé que este es el servidor, así que algo puede hacer. Y si es específicamente para el cliente, tal vez me guste el rosa en lugar de rojo. que puedas intentar hacer tus propias reglas y hacer todo organizado aquí. Voy a hacer esto encajar aquí. Por lo que ahora hemos declinado ser mecánico, tenemos el salto. Éste, voy a limpiar un poquito más. Entonces moviendo esto más cerca. Así que en un principio sólo muy, muy importante, intentó hacer que tu código sea mucho más magro. Ahora haciendo click en éste, ocultando la conexión porque realmente no lo necesito. Y voy a mover todo esto, pero más lejos. Entonces aquí hay más espacio. ¿ De acuerdo? Algo como esto. Y ahora lo que podemos hacer es simplemente mover los unos debajo del otro. De acuerdo, así que ahora tenemos esto, y en realidad éste está un poco desordenado. Así que tomemos aquí este alfiler y moverlo de esta manera. En lugar de tener tantos, puedo simplemente hacer doble clic aquí, y puedo conectarlo aquí por aquí, y conectar éste de aquí abajo. Para que pueda eliminar éste. Y ahora tenemos los conectados a los tres. Entonces un poco más limpio que antes de éste podemos arrastrar un poco hacia atrás para que podamos ver la línea. Creo que todo lo demás se ve bien. Para que podamos mover esto, el frente así, y podemos mover esto un poco más lejos para que no estén chocando. De acuerdo, así que creo que esto está buscando notas. Y recuerda cuando limpias todo por aquí, recuerda también revisar tus funciones para asegurarte de que todo se vea bien. Creo que como básicamente todo se ve bien aquí. Podemos moverlo un poco más lejos para que no estén chocando así. O bien puedes hacer doble clic en éste y hacerlo así aquí. ¿ De acuerdo? Ahora, puedo alejarme esto, y aquí puedes hacer lo mismo. Para que pueda mover esto un poco más lejos. Y éste más lejos. Incluso puedes simplemente hacer doble clic en éste, moverlo hacia abajo así, y hacer clic en q. Dos. Se unieron juntos, algo así. Algo como esto. Quiero decir, va a ser mucho más limpio. A lo mejor solo puedes alejar todo esto a excepción de éste así, eso se verá un poco más limpio, pero eso se ve bien hasta ahora. ¿ De acuerdo? Entonces cuando hayas limpiado todo, así que trata de revisar todo, trata de comentar todo muy importante cuando vuelvas como tres meses después, no tienes ni idea de lo que todo esto es si no has cometido ninguna de ellas. Entonces recuerda limpiar el código, intenta comentar todo y asegúrate entender lo que ha pasado aquí, lo que has codificado. Lo segundo es que puedes limpiar tus variables. Entonces, lo que puedes hacer aquí, por ejemplo, la subida estando aquí. Lo que puedes hacer aquí a la derecha, puedes agregarles una categoría. Por lo que sólo puedo llamar a esta categoría escalada. Y se puede ver que lo agrega automáticamente a una categoría. Y puede hacer eso por todos los demás seres cliente. Entonces éste puede escalar a Bob. Puedo seleccionar la categoría ahora y seleccionar línea siendo. Y automáticamente los reunirá aquí arriba. Subirán siendo ubicación también está escalando. El pausa subió y el cheque subió también. Entonces ambos, los voy a cambiar a escalar. Ahora tenemos puede subir también está disminuyendo. Y entonces tenemos el objeto escalador es también la escalada. Y tenemos alguna otra cosa aquí. Tenemos el estado del movimiento. Este, por ejemplo, se puede llamar a movimientos de un jugador. Y tenemos la ubicación de la capa. Entonces éste tal vez lo llame propiedades del jugador, algo así o ubicación. Por lo que la ubicación actual del jugador. También podemos cambiar las propiedades del jugador. Actualizar cámara del reproductor. Por lo que esta podemos llamar a la cámara de diseño. Entonces todo sobre las cámaras enchufables aquí y la información de la planta. A lo mejor podemos cambiarlo para jugar propiedades también. Engendramiento de capas y ubicación para reproducir un propiedades también. Y la cámara del jugador, podemos cambiar a la cámara y tenemos el eje z. Este es el movimiento. Entonces tal vez solo puedas cambiarlo por el movimiento del jugador. Por lo que ahora puedes ver que has organizado todos esos y cuando los minimizas, ves lo limpio que es esto. Cuando tienes un juego grande, muy, muy importante para limpiar todo tu código. Entonces ya sabes lo que está pasando. Vale, así que ahorremos intenté hacer eso con todos tus planos. Y lo siguiente que podemos hacer es aquí afuera. Lo que podemos hacer aquí en el outliner, se pueden agrupar cosas. Entonces, por ejemplo, tenemos aquí los cerdos. Puedo seleccionar todos ellos y puedo crear una nueva carpeta. Y puedo llamarlos enemigos. Y trato de encontrar todos mis caracoles. Entonces desde este caracol hasta este caracol, puedo sostener Shift y dar click en éste, arrástrelos a la carpeta enemigos. Y ahora tenemos a todos los enemigos que puedes ver aquí. ¿ De acuerdo? Y ahora tenemos la, tenemos la cuerda aquí. Tal vez puedas agregarlo a una carpeta llamada entornos. Y no creo que lo deletreé correctamente, así. Y tenemos éste. Este es también el medio ambiente, por lo que voy a moverlo dentro de aquí. Tenemos al jugador empezar con la malla de navegación. A lo mejor se le puede llamar volúmenes. Y este es el volumen de malla de navegación. Post-procesamiento, en realidad puedo hacer una nueva carpeta llamada post process. De acuerdo, para que podamos mover esta redistribución también dentro de los volúmenes y el jugador comience, solo podemos dejar estar aquí afuera. No tenemos que ponerlo dentro de una carpeta. Por lo que ahora se puede ver que éste está organizado también. Si quieres ir al siguiente nivel, incluso puedes cambiar el nombre de las cosas. Entonces, por ejemplo, puede cambiar el nombre de esos. Pero creo que está bien por ahora. De acuerdo, así que lo último que puedes hacer también, puedes ir a las Interfaces de Blueprint. Por ejemplo aquí. Recuerda esos. También puedes dar una categoría. Entonces por ejemplo, puedes subir, puedes volver a darle una categoría al igual que las variables, y todas estarán en una categoría. Tan importante hacer eso por tus propios proyectos. Limpia todo tu código. Y solo quería hacer este video extra solo para limpiarlo un poco. Y ahora creo que es mucho más limpio trabajar con ellos. Y sí, eso fue todo por este video. Entonces te veré en la siguiente. 66. Preparación de los libros de Flipbooks: Hola y bienvenidos a esta sección. Ahora es el momento de trabajar en la salud y el daño, tanto para el jugador como para el enemigo. Por lo que tenemos mucho que hacer aquí en esta sección. Así que empecemos. En primer lugar, aquí en los materiales del curso he subido para ustedes algunas, alguna sorpresa o texturas que necesitamos preparar primero. Entonces yendo al personaje, tengo éste llamado La muerte. Así que pasemos a los activos aquí y vayamos a los personajes. Sólo voy a subirlo por aquí porque esto es lo mismo tanto para serina como para mirar, solo lo hemos subido aquí. Haga clic derecho sobre él, aplique textura de papel 2D. Sabemos que todas estas cosas ahora van a mirar, tenemos esos efectos de paso. Entonces voy a buscar en texturas, y quiero que también importes ese efecto paso. Lo mismo con Tsarina aquí. Puedo ver que ya lo he subido para Luke, y vamos a tratar de subirlo ahora para Serena. Por lo que este efecto de un paso subido para Tsarina aquí y aplicar papel a la configuración. Y antes de convertirlos en sprites, quiero que vayas, volvamos aquí. Ir a los enemigos. Y dentro de aquí, tomemos los golpes del cerdo y escogemos la muerte. Y vamos a ir a los enemigos ahora y a las texturas. Y vamos a subir el cerdo, él y la muerte. Y también los golpes de caracol y deuda de caracol. Por lo que estos dos también suben esos. Y para todos los que he subido, nuevo, aplicar papel a la configuración. Y quiero que hagas flip books de todos estos. Por lo que la muerte HIT o ambos de esos. Y la muerte marina aquí. Y también Luke apuñalamiento, éste llamado se ve pestaña anserinus paso. Entonces voy a saltarme eso en el video. Ya sabemos qué hacer aquí. Por eso quiero que creas sprites de esos y voltear libros. Por lo que el mayor 180 por 180 para los personajes y para los enemigos. Cuando extraes los sprites, la cuadrícula es de 90 por 90. De acuerdo, así que aquí he terminado los libros de tirón. Entonces por la muerte porcina, he dicho los marcos por segundo, dos por ahora, no estoy seguro de los cuatro aquí. Tal vez tenga que ser seis o más lento, así que tendremos que probar eso en el juego más adelante. Y para la cabeza de cerdo, recuerda fijar que uno menos fotogramas por segundo a uno. Creo que esto afectará el código más adelante, así que póngalo en uno. Y para las cabezas de caracol o la muerte de caracol, he dicho que de uno a ocho fotogramas por segundo para este golpe de caracol. Lo he fijado en un fotograma por segundo. También muy importante hacer eso aquí. Y por la profundidad aquí y los personajes la han fijado en ocho fotogramas segundos. Entonces esta es la animación de la muerte. Y para Lucas, el apuñalamiento es a través de marcos por segundo. Y lo mismo aquí para Serena es apuñalar son dos fotogramas por segundo. De acuerdo, Así que ahora tenemos todos estos flip books listos. En realidad, antes de terminar este video, también aplicarlos a la estructura. Así que pasemos a nuestros planos en las estructuras y abramos la información del jugador. Ahora, ya puedes ver aquí no tenemos una animación de ataque, así que vamos a hacer click en Agregar variable. Y digamos animación de ataque. Voy a arrastrar éste hasta aquí. A lo mejor quiero arrastrarlo justo después del salto aquí, realmente no importa, pero solo soy yo escribiendo aquí, libro flip book de papel. Aquí es un libro de papel. Ahora ahorrando. Y hagamos lo mismo aquí por la información animal. Entonces el animal ahora tenemos el ídolo y nos movemos, pero también tenemos la animación Hit. Tenemos la animación de muerte. En realidad tengo eso para el jugador también. Así que permítanme primero cambiar eso en un libro de papel. De nuevo aquí y aquí. Así. De acuerdo, así que ahora he escondido sin muerte en realidad sumar eso para el jugador también mientras somos ediciones. Así que agreguemos la animación de la muerte. Déjame simplemente moverlo aquí por encima del efecto sonoro. Y recuerda que es un libro flip book de papel. De acuerdo, creo que tenemos todo aquí, así que vamos a salvar todo. Vayamos con el jugador. Vaya a Luke y haga clic en abrir editor de blueprint completo, haga clic en los valores predeterminados de clase. Y aquí en los valores predeterminados de clase, vamos a encontrar la información del jugador aquí. Y se puede ver que realmente no pueden agregarlos aquí aunque los agregamos, recuerda, hay que ir a la base de jugadores, click en compilar, dar click en Guardar, y hay que hacer click en compilar dentro de aquí. Debido a que ha agregado la estructura dentro de aquí, las variables dentro de aquí, tiene que compilar aquí. Lo mismo con el enemigo. Antes de que podamos sumar los de caracol y cerdo, hay que ir al enemigo y Compile y Save. Y ahora podemos verlos. Para una mirada, ahora puedes hacer click en los valores predeterminados de clase y puedes ver que tenemos la animación de ataque. Y solo busquemos paso. Entonces Lucas, paso, más profundidad. Podemos tomar esta llamada muerte de FB. Esta escalera de animación. Realmente no teníamos nada. Esto fue sólo para pruebas. Y si quieres de nuevo, te dije que puedes, puedes ir a esa página web llamada arces. Estoy aquí y creo un personaje y trato de usar tu personaje o simplemente hacer. Ya ves aquí, tienes algunas animaciones que puedes hacer. Y solo puedes seleccionar la animación de escalera y puedes ver cómo se ve. O simplemente puedes poner la animación de cuerda aquí si quieres. Hagamos eso en realidad. Entonces no se ve raro. Creo que se llama subida. De acuerdo, así que vamos ahora a Serena, yendo a los jugadores, Tsarina, no aquí. Capas Tsarina y abriendo el plano completo de que es un ataque NDA. Nuevamente, busca paso, selecciona Salinas, Serena's, y la carta. Busquemos a los escalados. Aquí. Agrega para la animación de muerte, solo busca la muerte y selecciona ésta. Por lo que ahora tenemos todo seleccionado. Ahora hagamos lo mismo por los enemigos. Entonces vamos al enemigo. Vamos a escoger primero abierto editor de blueprint completo en los valores predeterminados de clase. Encontremos a éste llamado info animal. Y aquí en los hits, podemos buscar golpes de cerdo y la muerte. Podemos buscar muerte porcina. Haz lo mismo ahora por el caracol. Abre el editor completo del blueprint y dentro de la información animal, agreguemos los hits del caracol, y agreguemos la deuda de Caracol. Por lo que ahora tenemos todo agregado aquí en la estructura. Entonces con estas cosas agregadas ahora, vamos a repasar y hacer los jugadores atacando entrada. 67. Cómo agregar la entrada de ataque: Ahora vamos a seguir adelante y sumar los insumos de ataque. Entonces primero, vamos a Configuración del proyecto. Y dentro de entrada aquí, vamos ahora sólo tenemos el salto hasta ahora. Por lo que haciendo clic en este plus y agregando uno nuevo llamado ataque. Y voy a hacer click aquí y hacer clic en mi control izquierdo en el teclado. Ahora voy a usar el control de elevación como mi botón de ataque, pero esto es sólo un curso, por lo que puedes elegir tu propio botón si quieres. Creo en Maple Story, fue o bien este o el botón Alt. Entonces voy a elegir el botón de menos control en mi teclado. Ciérrala hacia abajo, entrando en planos y dentro del jugador y una base de N jugador. Entonces hagamos este movimiento atacante o lógica aquí en la base de jugadores. Entonces lo que he hecho aquí, acabo, del video anterior, acabo de seleccionar todos mis nodos y hacer clic en C para crear un comentario. Y acabo de llamar a este movimiento y he cambiado el tamaño de la fuente a setenta. Sólo tengo todos mis movimientos. La cosa que hemos codificado hasta ahora dentro de aquí. Y así podemos ahorrar algo de espacio. Y ahora podemos hacer el ataque aquí abajo. Entonces aquí abajo, lo que quiero que hagas es que quiero hacer clic derecho y decir ataque, sea que lo llames dentro de la configuración de tu proyecto. Selecciónelo aquí. Y ahora para el ataque, queremos que pase por el servidor porque de nuevo, esto es multijugador y queremos asegurarnos de que el cliente no esté engañando. Y entonces lo que voy a hacer es realmente crear un aquí y las Interfaces de Blueprint y la base del jugador. Aquí. Demos clic en Agregar, y hagamos una nueva función llamada ataque. Y hagamos sólo una nueva variable aquí. Aquí llamado B está atacando. Entonces solo estamos comprobando si el jugador está atacando. Ahora puedes ver aquí a veces está molestando, está atacando. Cuando lo escribo aquí y haga clic en Entrar, voy a eliminarlo. No sé si hace eso a veces sin razón. Entonces voy a eliminar esto aquí, borrarlo, y hacer una nueva función. Ahora puedo ver si hago click aquí y hago click en Agregar. De repente funciona. No sé por qué hace eso. A veces. Vamos a renombrar para atacar de nuevo. Por aquí. Ahora podemos hacer, podemos llamarlo ahora diciendo ataque y seleccionado aquí el ataque de evento. ¿De acuerdo? Por lo que queremos que esto pase por el servidor. Entonces vamos a hacer un nuevo evento personalizado llamado ataque de servidor. Y éste también va a tener ese booleano llamado B está atacando. Llamemos, en realidad vamos a ejecutarlo a través del servidor el primer año y llamemos a ese evento del servidor aquí arriba. Así. Vamos a conectarlo. Y ahora aquí arriba podemos llamar a ese ataque desde la base final del jugador. ¿De acuerdo? Y ahora vamos a establecer esto para que sea verdad. Entonces cada vez que hagas clic en el botón de ataque, vas a establecer que el booleano atacante sea cierto. Va a pasar por el servidor y el servidor. Puedes hacer clic con el botón derecho aquí, promocionar esto a una variable, llamarla B está atacando. Y ahora el servidor va a establecer esta variable para que sea verdad. Y obviamente quiero replicarlo a los clientes para que puedan ver mi cambio. ¿ De acuerdo? Entonces lo que queremos hacer aquí es que no queremos que el jugador esté atacando. Si ya estás atacando, eso no tendría ningún sentido celdas podrás atacar spam todo el tiempo. Entonces lo que queremos hacer es tomar este booleano y hacer una sucursal. Y en realidad hagamos una muesca aquí, así que NO Boolean. Ahora lo que estamos diciendo es que si el jugador no está atacando, así que si esto es falso, el jugador no está atacando. Podemos seguir adelante y atacar. Pero si ya estamos atacando, realmente no queremos atacar spam encima de él. Por lo que sólo ataca cuando no estás atacando ya. De acuerdo, entonces va a pasar por el servidor y va a establecer la variable. Ahora lo que queremos hacer es jugar y atacar la animación. Y recuerda, hace mucho, mucho tiempo hicimos que este movimiento se declarara aquí donde cambiamos los movimientos. Así que agreguemos aquí un nuevo movimiento. Agregamos uno a la estructura. Así que en realidad vamos a ir a la enumeración ahora, porque aquí en la enumeración, si lo saco de nuevo, sólo tenemos estos ahora. Pero en la estructura de juego aquí, tenemos esta animación de ataque que agregamos en el video anterior. Entonces ahora vamos a añadir esa opción aquí en nuestra enumeración, que también creamos hace mucho tiempo. Aquí en las enumeraciones, en el movimiento Estados. Hagamos clic en agregar enumeración y agregar el ataque. Ahora para esta etiqueta deja, puedes arrastrarla hacia arriba si quieres. Sólo voy a dejar que sea aquí abajo. Y ahora podemos ver que el oxígeno está disponible. Si no lo puedes ver, recuerda hacer click sobre esta flecha y aparecerá. Ahora vamos a copiar pegue este set flip book, y déjeme conectarlo al ataque. Y ahora de nuevo, recuerda que no puedes entrar aquí y seleccionar paso uno de las animaciones de puñalada porque como queremos que sea dinámico para todos los personajes, tienen su costumbre animaciones. Tenemos que encontrarlo aquí desde la estructura que agregamos. Por lo que al hacer clic en la estructura, se puede ver, no se puede ver ningún alfiler. Y esto sucede cuando haces clic en Ocultar pines desconectados. Pero puedes hacer click en la marca de verificación aquí. Entonces la animación de ataque. Y ahora puedo dar click sobre esta flecha y se puede ver que aparece. Ahora puedo arrastrar esta animación de ataque e iniciar sesión en ésta de aquí abajo. De acuerdo, así que eso está arreglado. Ahora vamos a compilar y ahorrar. Lo que podemos hacer ahora es volver al Gráfico de Eventos. Y aquí queremos jugar o atacar animación porque recuerden, solo se puede decir movimientos establecidos Estados. Esto es lo que hemos estado usando hasta ahora. Y aquí hay que prestar atención porque ahora se puede ver tenemos algo llamado estado de movimientos establecidos, y la base enemiga también. Esto es lo que el enemigo, esto es para el jugador. Entonces presta atención a lo que estás seleccionando. Éste, queremos usar ese desde el jugador. Quiere reproducir la animación de ataque cada vez que el jugador ataca. Y ahora, antes de que hagamos algo aquí arriba, recuerda la derecha en movimiento. No queremos movernos de derecha e izquierda uno al que el jugador está atacando. Así que voy a tomar mi a está atacando booleano aquí y decir nueces. Entonces lo que voy a decir aquí es si el jugador no está subiendo. Entonces hagamos un Y booleano y el jugador no está atacando. Por lo que si el jugador no está subiendo y los jugadores no atacan, se puede seguir adelante y moverse a derecha e izquierda. Pero si el jugador está atacando, no queremos movernos a derecha e izquierda. Déjame simplemente arrastrar esto a un lado así que en realidad tengo un poco más de espacio para trabajar así aquí. Ok. Ahora vamos a compilar y ahorrar. Y ahora se puede ver que hay un pequeño error y no voy a contártelo ahora mismo. Voy a explicar en un poco. Así que vamos a hacer clic en Jugar ahora. Recuerda antes de hacer clic en play, recuerda configurarlo en play como servidores de escucha. Entonces aquí, obras de teatro escuchadas. Demos clic en Play. Voy a atacar. Se puede ver que está funcionando. Muy bien, está bien. Está atacando. No hemos puesto que el ataque sea falso, así que va a atacar para siempre. Entonces esto es lo que puede el servidor ahora en el cliente? De nuevo, voy a hacer click en el control. Pero se puede ver sexualmente no trabajar. No puedo ver mi animación. Recuerda, esto tiene, este es un cambio visual y tiene que pasar por un rep notificar. momento estás ejecutando este evento a través del servidor. Entonces el cliente no tiene idea de lo que estás haciendo porque en el momento en que acudes al servidor, el cliente no puede ver toda esta información a menos que se le replique. Esta información que el cliente puede ver porque en realidad estás replicando. Pero éste sólo corriendo a través de una función normal. Y realmente no va al cliente y lo estás ejecutando a través del servidor para que el cliente en realidad no pueda ver todo esto que estás escribiendo aquí a menos que se replique. Entonces lo que voy a hacer es cambiar éste en lugar de replicar a un representante notifique porque este es un cambio visual. Así que vamos a cambiarlo a Eric notificar en su lugar. Por lo que podemos notificar al cliente sobre éste. Aquí y el está atacando. Lo que voy a decir es tomar de nuevo este booleano, dicen marcas. Entonces si estás atacando, quiero jugar a este movimiento estado atacando la animación. Volvamos y asegurémonos de que todo esté correcto. Entonces esto es sí, así que vamos a intentarlo ahora. Haga clic en Jugar. Ahora como servidor de nuevo, haga clic en el control. Esto debería funcionar. Ahora si vas al cliente, hago clic en el control. Ahora, se puede ver que también está atacando. El servidor también puede ver que el cliente está atacando. Entonces recuerda, esto es muy importante en el multijugador. Tienes que pasar por un representante notificar si es un cambio visual. Y si lo juegas directamente en el servidor, el cliente, el cliente no puede ver todas las cosas que estás haciendo aquí a menos que realmente lo estés replicando a los clientes. 68. Para cada bucle: Entonces la cosa es que ahora queremos aplicar daño a todos los enemigos que golpeamos. Y para ello, vamos a usar algo llamado a para cada bucle. Entonces lo que aún no hemos usado bucles, y no creo que te lo haya explicado todavía. Entonces este es solo un video corto que explica qué son los bucles. Entonces empecemos aquí. Aquí abajo dijimos antes vamos a atacar y se va al servidor. Ahora, toda la lógica va a estar dentro del servidor porque queremos asegurarnos de que el cliente no esté engañando. Así que hagamos eso dentro de aquí. Pero lo vamos a hacer, es que vamos a usar una función llamada conseguir actores superpuestos. Entonces vamos a golpear algo y vamos a conseguir todos los actores superpuestos, así que todos los actores a los que estamos golpeando. Y para éste, vamos a hacer un por cada bucle. Esta es la que vamos a usar. Y conectemos esa. Entonces, ¿qué actores se van a solapar? Vamos a echar un vistazo a los enemigos porque estos son los que queremos atacar. Así que consigan a todos los actores superpuestos, consigan a todos los enemigos superpuestos. Y por cada uno de esos enemigos, así que ahora se va a llevar a cada enemigo. Entonces digamos que en mi nivel aquí, tenía cinco enemigos apilándose uno encima del otro así. Y hice clic en mi botón de ataque y en realidad golpeé todos estos cinco. Entonces, ¿qué va a hacer ahora? El solapamiento es de cinco. Para que puedas ver a los cinco enemigos. Y ahora por cada enemigo, ¿Qué quieres hacer? Y lo que queremos hacer, se aplicó daño a cada enemigo. Esto es lo que es el cuerpo del bucle. Ahora, vas a hacer una acción por cada enemigo que hayas golpeado. Lo que queremos hacer es simplemente aplicar daños. Ahora, quiero asegurarme de que este código no se ejecute siempre que no golpee nada. Si no golpeas a ningún enemigo, realmente no queremos ejecutar este código. Entonces vamos a decir que es, vamos a tomar éste y decir longitud. Entonces comprobando la longitud. Y voy a tomar esto y decir no igual. Por lo que podemos hacer eso ya sea escribiendo no igual o diciendo un signo de exclamación e igual. Esto es impresionante en matemáticas, lo que significa que no es igual. Entonces si esto, la longitud de los actores superpuestos no es igual a 0, lo que significa que en realidad he golpeado algo. Entonces puedes seguir adelante y ejecutar este código. No obstante, si la longitud es 0, entonces no hagas nada porque realmente no queremos ejecutar este código si no hemos golpeado nada. Esto es muy simple a para cada bucle, va a echar un vistazo a todos los actores superpuestos. Así que tal vez golpeamos a tres enemigos. Y por cada uno de estos tres enemigos, queremos aplicar daños. Y lo haremos en la próxima lección. 69. Jugador que aplica el daño: Ahora entrémonos nuevamente en el plano del jugador y veamos cómo el jugador puede aplicar daño. Entonces aquí dentro de la base del reproductor, esto es lo que hicimos en el último video. Entonces haciendo el ataque aquí. Y por cierto, si no lo has visto antes, puedes ver con qué hemos estado trabajando hasta ahora. Las variables, son como circulares aquí en el pin aquí. Pero éste es un cuadrado y tiene un montón de pequeñas plazas dentro de ella. Y esto se llama una matriz. Y lo puedes ver aquí cuando creas una nueva variable. Por ejemplo, acabo de llamar a todo esto al azar. Se puede ver cuando hace clic en el Tipo aquí, el contenedor variable aquí, en realidad podemos cambiar el tipo de una sola a una matriz. Entonces, ¿cuál es la diferencia entre éste y éste? Entonces, hasta ahora lo que hemos estado haciendo, digamos, por ejemplo, jugadores conectados. Por ejemplo, tomemos a los jugadores conectados y cambiémoslo aquí a base de jugadores bp. Entonces digamos que lo que queríamos hacer con éste es almacenarlos todos en una variable. Así que no puedes simplemente tomar esto aquí y ponerlo aquí. Al igual que cuando un jugador se conecta, se establece esta variable. Esta variable solo puede contener una información. Entonces, por ejemplo, esta variable es si el jugador está atacando o no. Y déjame ver si tenemos otras variables aquí. Esta variable contiene el estado de movimiento en este momento. Entonces, cuando lo pongas a caer, establecerá que el estado de movimiento caiga. Por lo que no se puede tener información múltiple al mismo tiempo dentro de estas variables. No obstante, puedes hacer eso cuando lo cambies en una matriz. Entonces para almacenar jugadores conectados, todos los jugadores conectados en una variable. Así que no sólo un jugador, en realidad hay que cambiarlo en una matriz. Y si haces clic en Cambiar tipo de variable, puedes ver que se vuelven como este cuadrado. Y lo que es, ahora es la matriz que puedes, puedes imaginarla como una caja grande. Y te lo dije antes, puedes imaginar esta variable normal como una caja con alguna información en ella. Éste, lo puedes imaginar como una caja grande con pequeñas cajas de información en ella. Por lo que ahora puedo almacenar todos los jugadores aquí, todas las variables. Y lo que puedo hacer aquí es que puedo tomar esto y decir consigue. Y en realidad puedo conseguir a uno de los jugadores y hacer algo con él. Entonces una matriz es solo una caja grande que contiene, por ejemplo, todos los jugadores conectados. Tal vez contenga todos los pons, mientras que si es sólo una circular, por lo que sólo una sola variable normal, puede contener, solo contiene una información. Pero si tienes una matriz, puede contener información múltiple. Entonces, por ejemplo, todos los jugadores que están conectados al servidor. Entonces aquí, los actores superpuestos, contiene a todos los actores que se han superpuesto. Y digamos que me apegé a esos. Y estos son cinco enemigos. Ahora, con estos cinco enemigos, ahora los puedo descomponer aquí en mi bucle. Ahora tengo a todos los enemigos aquí. Y ahora lo que queremos hacer con nuestro bucle es que queremos aplicar daño a cada enemigo que he golpeado. Entonces si la longitud no es 0, lo que significa que hemos pegado a alguien, queremos cuidar y decir Aplicar daño. Así es como le haces daño a algo. Usa esta función aquí, aplica daños. Ahora tenemos que especificar a qué se quiere aplicar el daño. Entonces, ¿quién es el actor dañado? Ese es el enemigo, y el enemigo está aquí. Recuerda, te llevaste a todos los actores superpuestos que son la base enemiga, por lo que los enemigos. Y por cada enemigo, quieres aplicarles daño. De acuerdo, Entonces, ¿cuál es el daño que quieres aplicar? Y en realidad tenemos que especificar qué daño hace el personaje. Así que volvamos a la información del jugador, nuestra estructura aquí, información del jugador, y agreguemos una nueva variable llamada daño base. Quizás más adelante podamos mejorar ese daño. Entonces a éste se le llama daño base, y podemos moverlo arriba aquí. Realmente no importa, pero sólo me gusta estructurar las cosas de esa manera. Entonces por el daño base, volvamos a la base del jugador Compile y Save. En los valores predeterminados de clase En realidad se puede simplemente no en la clase por defecto, solo puede hacer clic en él aquí. Si lo encontramos aquí en las propiedades del jugador info del jugador, esta es la estructura y pinchando aquí. Entonces por defecto, solo quiero que el daño base sea tal vez algo así como cinco. Así que haciendo cinco daños cada vez que golpeas algo. Entonces ahora que tenemos ese set y tomemos este aquí y vamos a romperlo. Y ahora podemos usar este daño base y conectarlo a esto aquí. Ahora, más adelante si quieres hacer mejoras para un juego, y probablemente lo haremos por nuestro juego. Y no realmente en el curso base, probablemente voy a estar agregando un bonus secciones para desarrollar cada vez más y más en este juego hasta que se convierta en un enorme. Pero tal vez ya lo he grabado. Así que echa un vistazo a mi sección de bonos en el momento en que estás viendo este video. Por lo que aquí estamos aplicando el daño base. No obstante, más adelante si queremos sumar mejoras y más adelante queremos aumentar ese daño. Simplemente puedes hacer una nueva variable. Llámalo dañado, multiplicador y Compilar y Guardar como predeterminado. Ahora vamos a cambiarlo a realmente a un flotador, y no lo cambiemos a un ArrayList, solo guárdelo en una sola variable. Vamos a arrastrarlo. Y por defecto, recuerde configurarlo en uno. Entonces el multiplicador dañado es solo uno, lo que equivale al daño base. Ahora, vamos a decir, ¿esto se multiplica por el multiplicador? Y luego lo conectamos aquí. Ahora, más adelante, si hacemos actualizaciones, sólo podemos aumentar este multiplicador, por ejemplo dos. Por lo que va a decir que el daño base por dos veces, que luego aplica más daño. Pero por ahora solo hagamos uno aquí. Voy a mover esto un poco de peso para mantenerme más organizado. Ahora el instigador de eventos, si se sostiene el ratón sobre él, dice el controlador que fue responsable de causar este daño. Y este es el jugador. Entonces estamos dentro de un jugador y para conseguir el controlador del jugador, solo puedes decir Get Controller. Y get controller es una función que dice devuelve controlador para este actor. Entonces el controlador del jugador, puedes conseguirlo de esta manera. Para el tipo de daño aquí, solo puedes cambiarlo a tipo de daño. Todo, al igual que el daño más cerca que realmente no necesitamos en este momento. Muy bien, entonces así es como se aplica el daño. Y si guardamos todo aquí, ahora en la base enemiga, lo que va a pasar es si voy al enemigo ahora, aquí en la base enemiga, realmente no hemos hecho mucho dentro de aquí. Pero aquí se puede decir evento, cualquier daño, y ese es un evento que aún no hemos usado. Cualquier daño sólo va a recibir cualquier daño que haya ocurrido a ese punto y podemos hacer algo con él, por ejemplo, podemos restar de la salud de ese enemigo. Ahora antes de terminar esto, permítanme realmente hacer algo con las colisiones también porque esto es si voy a la vista aquí, en realidad déjame ir a uno de los enemigos. Así lo son el caracol. Abra el editor de Blueprint. Creo que este cuadro de hit es demasiado grande y cuando el jugador salta sobre el enemigo, el jugador será golpeado cuando entras en esta superposición. Sólo quiero que se les peguen cada vez que estés muy cerca de ese caracol. Entonces creo que éste es muy enorme. Entonces lo que podemos hacer aquí es solo sumar otra colisión que sea responsable de dañar al jugador. Y vamos a Agregar aquí y busquemos colisión. En realidad no es una lesión esférica. Vamos a elegir ese. Creo que eso es mejor en este caso. Y cambiemos el nombre a éste por colisión. Y quiero que lo hagas en realidad, vamos a añadirlo no aquí, estoy en el caracol, ese es mi error. Volvamos a la base del jugador y agregarla aquí. Entonces colisión, esfera de colisión y lo llaman colisión porque lo queremos en todos los enemigos, no sólo el caracol. Ahora volvamos al caracol y ahora puedes hacerlo más pequeño para que se ajuste a ese caracol. Caracol, sólo podemos hacer este radio de esfera más pequeño. También puedes arrastrarlo hacia abajo. Y tal vez hagamos 20. Entonces puedo ver que esto es 20. Y si también se puede ver también desde la vista correcta. Recuerda que hablamos de las vistas ortográficas en la intro, la vista correcta. Y puedes cambiar esto del wireframe a modo oblicuo y puedes ver el caracol. Por lo que también puede ajustarlo aquí en este punto de vista, eso a veces es mucho mejor. Pero 20 creo que es un buen cuadro de golpe. Volvamos a la perspectiva. Ahora lo que queremos hacer es solo tomar las colisiones para todos esos. Entonces vamos a compilar y ahorrar. Volvamos a la base enemiga. Por lo que aquí en la cápsula, quiero bajar y dar click en este preset de colisión para comprobar si todas las colisiones con las que estamos trabajando son correctas. Entonces creo que éste está bien. Realmente no tenemos que hacer nada aquí. Por lo que haciendo clic en la colisión ahora y haciendo clic en este preajuste de colisión. Entonces éste, al igual que antes, recuerda en una lección anterior, tuvimos ese problema con los caracoles tocando, como si estuvieran caminando cerca de la rampa. Y eso se debió en realidad a que el mundo estático aquí se solapan y en realidad no quiero que se burlan. Voy a primero, se puede caracterizar paso encima de ella. No, no puedes. Y hagamos costumbre aquí. Y luego vamos a ignorar el mundo estático. Entonces el patrón no va o los caracoles no van a chocar dentro de él. Al hacer clic en el sprite, asegurándose de que no esté generando ningún efecto de superposición. Y creo que esto se hace aquí. Así que volvamos a la base de jugadores. Ahora para la base del jugador, vamos a sumar una colisión donde se pueda detectar, el atacante. Entonces hagamos aquí una nueva colisión, y la voy a adjuntar al sprite para que veas por qué lo estoy adjuntando. Entonces primero, sólo voy a añadir uno aquí. Colisión, digamos la caja de colisión. Y voy a ir a la vista correcta, modo lead. Por lo que ahora puedo ver donde lo estoy agregando en realidad no en la base del jugador. Vamos, hagámoslos en el espacio pleural porque todos los jugadores son iguales. Entonces no tendría sentido hacerlo en Luke y luego Serena. Así que hagamos el tamaño dentro de aquí. El motivo por el que hicimos el tamaño interior del caracol es porque todos los enemigos son diferentes. Pero para los jugadores, todos son iguales. Así que hagamos el tamaño aquí en la base del jugador. Y lo que quiero hacer aquí, hagamos primero la x. Y creo que algo así como 20. Y para la y, no puedo verlo aquí. Tal vez como 20 o 25, realmente no importa. Vamos a hacer que sea 20. Y para la Z aquí, ¿cuánto arriba y abajo? Creo que el 30 es un buen número. Así que intentemos 30. Y vamos a moverlo un poco más cerca del personaje. ¿ Y si los enemigos están dentro de esta colisión? Eres capaz de hacer daños. Ahora si en realidad, antes de que hagamos eso, vayamos a la colisión y veamos si todo está correcto. Ok. Entonces todo es correcto excepto por una cosa. Entonces aquí, de nuevo, puede jugar o pisar encima de esto. No, no puedes. Generará eventos de superposición. Y ahora déjame configurar esto a costumbre porque necesito agregar algo aquí. Ahora se puede ver antes y la base enemiga. Ahora si hace clic en esta colisión que hicimos, se puede ver que el tipo de objeto es dinámico mundial. Ahora el problema es que si tienes esta dinámica mundial que se superponga en este momento por esta caja de colisión, como si el caracol camine cerca ti y luego se superpone con esta caja, este caracol hará daño a tu personaje y eso realmente no tiene sentido. Por qué mi, mi, quiero que el enemigo me entre aquí en esta cápsula antes de que pueda hacer daño. No realmente cuando se está superponiendo mi rango de ataque, eso no tendría ningún sentido. Por lo que aquí se puede ver el final de una base. Este es un tipo de objeto de dinámica mundial. Así que en realidad voy al jugador aquí por esta colisión de ataque, y voy a ponerla para ignorar la dinámica mundial. Entonces en realidad no va a chocar conmigo aquí. Sólo quiero que dañe cada vez que está bloqueando mi cápsula. Y se puede ver mi cápsula tiene el mundo dinámico dos cuadras, por lo que voy a ser golpeado por ese enemigo. Ahora haciendo clic aquí, vamos a cambiar el nombre de la misma. Vamos a llamarlo colisión de etiquetas. Vamos a compilar y guardar y déjame hacer click en Play y en realidad puedo mostrarte algo genial para que podamos aprender de esto también. Ahora podemos ver si quieres ver algo. Entonces si quieres, si quieres ver la colisión porque estás depurando, puedes hacer click sobre esa colisión y podrás eliminar esta llamada Juego Oculto. Juego oculto, quita eso, da clic en Jugar. Y ahora se puede ver esa caja de colisión aquí frente a usted y su juego. Y se puede ver cuando giro este lado, las colisiones en realidad detrás de mí. Por lo que necesitamos la colisión para seguirme a cada lado. Y es por eso que es importante. Si quieres eso, para incluirlo aquí en el sprite. Por lo que en realidad está apegado al sprite. Entonces es un niño. Y puedes hacer clic en Play y va a rotar con este brillante. Por lo que ahora puede ver ahora que en realidad está siguiendo correctamente. Así que cosa muy cool para aprender de esto. Voy a dejar que esto no se esconda en los juegos para que en realidad podamos ver lo que está pasando. Con eso. Creo que ya no tengo. Así que permítanme revisar esta cápsula aquí para el jugador solo para estar seguro de si esta cosa es correcta. Por lo que en este momento se puede ver cápsula está puesta a ignorar es el hueso que es el enemigo. En realidad voy a poner solapamiento porque queremos que nos dañen el brazo. Entonces no tiene sentido ignorar el hueso. Eso es correcto ahora y para los sprites, esta parte no va a generar ningún evento de superposición así. Entonces digamos donde todo, creo que todo es correcto. Por lo que ahora en la base de jugadores, estamos aplicando daño a cada enemigo que estamos golpeando. El problema en este momento, que arreglaremos en la siguiente lección es que si ataco, va a atacar para siempre. Así que repasemos en la siguiente lección y arreglemos esto. 70. Detener la animación de ataques: Así que de vuelta aquí en este código, hasta ahora hemos establecido el está atacando para que sea verdad. Y si está atacando es cierto aquí en la función desenvolver, va a establecer ese movimiento atacante. Ahora queremos hacer algo cuando el atacante sea falso. Y lo que queremos que hagas es que quisiéramos copiar pegado esto. Ahora puedes hacer esto, solo póngalo a inactivo para que ya no estamos atacando. Y tenemos que en algún momento establecer esto para que sea falso porque hasta ahora acabamos de configurar para que sea verdad aquí arriba. Y esto ahora es cierto, pero no hemos especificado en ningún lugar nuestro código cuando será falso. Así que en realidad hagamos esto. Entonces aquí digamos antes de hacer algo con los enemigos. Entonces digamos que sí, si yo aquí, si me superpongo, si mi longitud es 0, si no golpeo a ningún enemigo, solo quiero dejar de atacar porque no le pegué a nadie. Entonces voy a tomar esto y ponerle esto a falso. No obstante, si solo haces esto, va a hacer esto al mismo tiempo que estás atacando. que puedas ver que voy a hacer click ataque y en realidad al mismo tiempo estoy atacando, va a detener mi animación. Así que en lugar de hacer esto como al instante y déjame simplemente tocarlo de nuevo, en realidad, no necesito golpear a nadie. Así que al hacer click aquí, se puede ver hago clic en Cola, pero no pasa nada porque al instante voy de establecer un verdadero a falso. Tienes que esperar un poco antes de que lo pongas en falso porque tienes que esperar a que juegue la animación atacante. Y puedes hacer esto de una manera muy inteligente. Puedes tomar el sprite aquí y decir flip book. Ahora puedo conseguir la longitud de este libro flip y dice obtener la longitud del libro flip en segundos. Puedes obtener cuánto tiempo está jugando este libro flip book. En realidad se puede retrasar. Recuerda que usamos ese nodo de retardo. Entonces conectemos el retraso a esto. Por lo que retrasó el código por tiempo que esta animación va a tomar, pasando por eso. Y después de que se complete, vamos a repasarlo y ponerlo en falso. Por lo que ahora si hago click en jugar y tú vas a ese personaje y me deja no si alguien aquí. Entonces si me pego ahora, se puede ver que está funcionando. Entonces eso es correcto. Ahora puedo golpear y se detiene mi animación después de tocar sexualmente. Para que puedas volver a hacer esta animación lenta y más rápida yendo a los activos dos personajes a Luke, por ejemplo. Si aumentas esta animación apuñalada, por supuesto que va a detener esa animación mucho más rápido. Por lo que ahora está controlado por los fotogramas por segundo. Entonces ahora que tenemos el ataque hecho, recuerda aquí, cuando hayas terminado de atacar a los enemigos, porque ahora si juego y golpeo enemigos, puedes ver que está jugando para siempre porque no he especificado cuando voy a parar si en realidad golpeo a enemigos, porque éste es justo cuando no golpeas a ningún enemigo. Cuando golpee a enemigos, de nuevo, voy a hacer lo mismo. Así que sólo voy a arrastrar esto aquí cuando este bucle esté terminado. Entonces cuando hayas aplicado daño a todos los enemigos, voy a detener mi ataque aquí. Y esto sucederá muy, muy rápido. Por lo que sólo parecerá que no le pegaste nada. Porque como el código de blueprint se está ejecutando tan rápido, es una locura. Así que ahora si no escuchamos nada o si completas tu ataque, vas a dejar de atacar. Así que veamos ahora aquí, si le pego a alguien, se puede ver que ahora está parando la animación después de que golpee a los enemigos. O incluso si no escucho a nadie, se va a parar. 71. Recibir daños al enemigo: Muy bien, entonces ahora que hemos codificado mucha de la animación tecnológica y ahora estamos aplicando daños. En realidad vamos al enemigo aquí, la base enemiga. Aquí queremos llamar a este, este evento llamó algún daño. Y queremos aplicar daños al enemigo. Entonces lo que queremos hacer es aquí, queremos en realidad primero ir a la estructura y sumar salud para el, para el enemigo. Creo que aún no lo hicimos. Entonces vamos a planos y estructuras y en la información animal. Y aquí vamos a agregar una nueva variable, llama a ésta salud. Y para éste, vamos a dar click sobre flotador. Y por la salud, sólo voy a arrastrar éste en la parte superior. Vale, así que guardemos esto y volvamos a la base enemiga. Ahora, compilar y guardar. Ahora para esta estructura, puedes arrastrarla y puedes romperla. Y ahora se puede ver tenemos esta variable de salud y por defecto, la salud del caracol, no sé, podemos ponerla a 25 o 15. Hagámoslo a 15. En realidad, nuestro daño de jugador es de cinco en este momento, por lo que tres hits matarán al caracol. Entonces vamos a los valores predeterminados de clase y aquí y la información animal. Entonces para este caracol específicamente, tiene 15 de salud. Y tal vez para el cerdo. Si bajamos al cerdo, cerdo aquí, este cerdo, vamos a poner a los cerdos salud quizá 230. Entonces es el doble de la fuerza del enemigo o del caracol. Y también para éste, en realidad sólo estoy cambiando un poco la colisión. Por éste como hicimos con el caracol. A lo mejor sólo disminuirlo como 25. Podemos hacer eso más tarde. Al igual que podemos comprobar y ver si eso es demasiado grande y demasiado pequeño. Así que ahora volvamos a la base enemiga. Ahora la salud es o bien 30 si es un cerdo o son 15 si es un caracol. Pero ahora va a hacer eso dinámicamente. Por lo que el daño que aplicamos aquí antes y la base del jugador, el daño al daño base que aplicamos es igual al dañado que sale de aquí, y el jugador hace cinco en daño. Entonces lo que podemos ver, lo que podemos decir es esta salud que es 15 para el caracol en este momento, restar eso, como restar el daño, que es cinco. Por lo que ahora la salud es de diez, porque 15 menos cinco es diez. Ahora, esta es la salud actualizada. Esta es la diez salud que queda del caracol. Y ahora te voy a enseñar algo nuevo, una nueva cosa cool que realidad no muchos saben para empezar, son muchos realmente hacen un error pesar de que hay avanzado a los planos, es como se establece, como cómo se establecen variables dentro de la estructura dinámicamente. Porque en este momento tienes todas estas variables y eso es genial. Las has puesto aquí en tu estructura. Pero, ¿cómo cambias realmente el valor? Así que ahora, déjame quitarlos. Por lo que ahora la salud ahora mismo aquí es 15. ¿ Cómo lo cambias a diez dinámicamente aquí a través del juego? Haz eso arrastrando desde esta estructura. Y luego escribes sets. Y aquí en la parte inferior se dice establecer miembros en información animal en la estructura. Entonces ahora tiene que gustar qué, ¿qué miembro quieres establecer? Y a la derecha, si haces click aquí, de nuevo, puedes ver todos los alfileres y quiero poner la salud, esto es lo que me interesa establecer. Por lo que quiero actualizar esa salud en esta estructura a esta nueva salud que es diez ahora después de aplicar el daño. Entonces voy a conectarlo aquí. Y ahora lo estás, necesitas volver a establecer esa variable porque puedes ver que esto es como un cuadrado girado, lo que significa que esto es solo una variable temporal. Hay que volver a configurarlo, y no es como el pasador circular. Entonces eso significa que necesito tomar mi información animal y volver a configurar esta información animal. Ahora, toda esta otra información aquí, la animación ociosa se mueve, el golpe y la muerte. Va a ponerlo como lo mismo. Lo único que va a cambiar es la salud. Y como esto se está ejecutando a través del servidor, en realidad quiero replicar esto para asegurarme de que mi cliente también pueda ver esta edición porque este cualquier daño que pueda ver aquí. Dice sólo autoridad, este evento solo se dispara en el servidor. Entonces recuerda replicar esa información de nuevo al cliente también. Y esto es en realidad todo lo que parece. Realmente no necesitamos hacer más aquí para estructurarlo un poco más. Tal vez pueda simplemente arrastrarlos un poco de camino y simplemente ponerlo aquí en realidad. Así que trata de estar lo más estructurado posible. Da click en este pin, tal vez estructurarlo así, y voy a acercar todo, así así. Da click en q. bien, entonces ahora tenemos esto, y si quieres ver si esto está funcionando o no, en realidad, necesitamos probarlo también para ver si está funcionando. Ahora puedo imprimir aquí. Una cadena de impresión. Puedo imprimir la cantidad de salud. Para que puedas, tampoco, puedes hacerlo desde aquí, para que puedas arrastrar esto e imprimirlo. También puedes ver si tu estructura está realmente actualizada. Para que podamos romper esto de nuevo. Y ahora podemos imprimir esa nueva salud que usted puso por aquí en esto. Entonces vamos a compilar y ahorrar. Así que ahora cada vez que va a ser golpeado, te va a decir el daño o el más saludable. Entonces por ejemplo, voy a este caracol, voy a hacer click en caderas. Y se puede ver aquí arriba dice diez de salud que quedan. Y si no sé si este es el mismo caracol, ahora le quedan cinco de salud. Ahora si golpeo a otro enemigo, tiene diez de ayuda levantar. Entonces es correcto ahora, le quedan diez de salud si aún no lo he escuchado y si la vuelvo a golpear, tiene cinco. Si vuelvo a pegarlo, tiene 0. Por lo que ahora realmente está funcionando correctamente. El problema es ahora, si lo golpeo, dices, verás que dice menos cinco, menos diez. Entonces se mantiene, sigue yendo en el menos. Y tenemos que arreglar eso. Entonces lo que tienes que hacer aquí es cuando estás mintiendo aquí restando, necesitas usar algo llamado pinza. Abrazadera. Y vamos a seleccionar éste llamado float, porque estamos trabajando con carrozas. Entonces vamos a pinchar el valor que nunca pueda ir por debajo de 0. Entonces, ¿qué es, cuál es el valor? El valor es éste que queremos sujetar. ¿ De acuerdo? ¿ Cuál es el mínimo? No queremos ir por debajo de 0. Por lo que el mínimo es 0. Y el máximo es solo la cantidad que este enemigo tiene en salud. Sólo voy a arrastrar esto y ponerlo a esto como el máximo. Por lo que sea que dijéramos desde el principio, entonces vamos a poner esa salud aquí. Entonces en lugar de ir aquí directamente a aquí, va a pasar por un cliente, se asegura de que no esté por debajo de 0. Y entonces vamos a aplicar o editar esa salud aquí. De acuerdo, así que algo como esto. Y vamos a compilar conmigo, haga doble clic en este pin para que sea un poco más organizado, Algo así. De acuerdo, Compile y Save, y ahora vamos a hacer clic en play y probarlo. Así que ahora si le pego a alguien, así que si le pego eso y en realidad le pegue a éste aquí, 10500, Se puede ver ahora no puede ir por debajo de 0. Sé que siempre podemos hacer morir este caracol cada vez que pego 0. Entonces déjame probarlo con estos cerdos para que podamos ver 25. Y ahora se puede ver que imprime muchos números y esto es porque en realidad estoy golpeando a múltiples enemigos. Esto está funcionando ahora. Esto tiene 2015, este otro tiene 20. Para que puedas ver que estoy golpeando a todos los enemigos y está funcionando cuando me estoy superponiendo con múltiples enemigos. Nuevamente puede ir por debajo de 0. Entonces esto está funcionando perfectamente ahora. Solo para comprobar si la base del jugador también necesita sujeción. Realmente no necesitamos sujetar nada aquí. El único, lo único que necesitamos para escalar la salud empresarial, y probablemente tengamos que hacer eso también para el jugador en el enemigo daña al jugador, que tiene más adelante. Entonces ahora esto está funcionando. Voy a eliminar este código aquí. Y este es el, básicamente el ****. Por lo que se puede ver que en realidad no es demasiado complejo. Sólo estamos tomando la salud, restándole el daño, y luego poniéndolo dentro de esta estructura. 72. Animación de golpe enemigo: Ahora es el momento de hacer al enemigo golpeó la animación. Entonces, hasta ahora solo golpeamos a los enemigos y no están jugando una animación. Entonces tenemos que hacer eso ahora. Ahora para las animaciones, tenemos esta en realidad creamos mucho antes porque creamos la tarea, en realidad se encuentra ubicación aleatoria. Y aquí usamos éste donde pusimos el estado de movimiento a moverse. Entonces éste aquí y la base enemiga, en realidad podemos cambiarlo porque realmente no tenemos sólo ahora el movimiento y el ocioso. También tenemos el efecto hit. Y vamos a convertirlo justo como el jugador, el jugador que tenemos éste, estado de movimientos inmaduros. De hecho, cambiémoslo a un estado de movimiento también. Creo que esto es más como que nos va a servir mucho mejor que un booleano. Entonces la forma en que hacemos esto de nuevo, vamos, solo usemos el aquí y la enumeración. Solo utilicemos este. Realmente no tenemos que hacer uno nuevo. Entonces dentro de aquí, porque el jugador también tendrá una animación exitosa, en realidad, no vamos a usar eso para el jugador aquí. Sólo vamos a hacer un efecto, pero puedes simplemente o puedes hacer una nueva enumeración para el enemigo. En realidad solo voy a usar este porque en su mayoría estamos usando lo mismo. Voy a sumar estos hits. Y en realidad también voy a agregar la muerte, pero no vamos a codificar eso en este momento, pero solo lo estoy agregando por ahora. Y lo que queremos hacer ahora, ahora volvamos a la base enemiga. Entonces en el enemigo, base enemiga, ahorremos todo y agreguemos aquí ese estado de movimiento. Por lo que lo llaman estado del movimiento. Vamos a cambiarlo para comer o enumeración, que se llama estado de movimiento E seleccionado aquí. Y ahora vamos a arrastrarlo. Y esto es lo que queremos poner aquí en lugar de se está moviendo. Y ahora necesitamos en lugar de un booleano, vamos a eliminarlo. Necesitamos aquí una enumeración llamada estado del movimiento. Entonces lo mismo. Y cambiemos el nombre por estado de movimiento. Vamos a conectarlo aquí. Whoops, no lo golpeé así. Y ahora de nuevo, recuerda que esto es un rep notifica, por lo que necesitamos convertirlo en un rep notifique. Y por aquí, desconectemos esto sosteniendo Alt y haciendo clic. Ahora éste es de la Interfaz de Blueprint, por lo que necesitamos cambiar el booleano aquí. Podemos simplemente hacer click sobre él y eliminarlo. Así que vayamos a la Interfaz Blueprint aquí, y esto es para el enemigo. Y aquí se establecen movimientos de estado, voy a eliminarlo aquí y hacer uno nuevo llamado Seleccionar el estado de los movimientos de enumeración y llamarlo movimiento Estados. Ahora de nuevo, se va a chocar por alguna razón. A veces es un poco molesto que esto brote. En ocasiones se puede cerrar el motor y las tuercas. Y en realidad a veces puedes simplemente eliminar esto aquí. Sólo voy a borrarlo. Sí. Ahora, haga clic en Agregar. Veamos si eso funciona ahora. Eso funciona ahora, no sé por qué hace eso. A veces, digamos establecer movimiento, fechas, Compile y Save. Volvamos a la base de jugadores, en realidad no a la base del jugador, la base enemiga aquí. Entonces en lugar de un aquí, el movimiento, vamos a compilar y guardar para asegurarnos de que todo esté correcto. Vamos a conectarlo ahora. De acuerdo, entonces establece los datos de movimientos correctos. Ahora estamos pasando por esto, está pasando por el servidor, y ahora va a llamar a esta función OnReceive. Entonces tomemos este estado en movimiento y digamos que switch tiene autoridad. Entonces al igual que lo que hemos estado haciendo hasta ahora, que tiene autoridad. Entonces si lo eres, vamos a derribarlos para que realmente no tengamos todos esos. El caso es que sólo tenemos a los ociosos. Así que tomemos esto brillante aquí y digamos Set flip book. Ahora sólo tenemos el ídolo y déjame copiar pegarlo un par de veces. Aquí. Sólo tenemos tres cosas. Tenemos el ocioso, lo tenemos, están corriendo, así que en movimiento. Y tenemos el efecto hit. Estaremos teniendo la profundidad más adelante. Entonces para el running, solo voy a usar la carrera bien. Entonces, o usar la carrera izquierda o derecha, Eso no importa. Voy a usar la carrera aquí mismo. Para la cabeza. Voy a usar esta. Entonces vamos a establecer estas animaciones. Tomemos nuestra información animal, lo rompamos aquí. Así que romper. Y tomémoslo aquí. Ahora por el inactivo, voy a enchufarlo aquí. Y para la mudanza, voy a enchufarlo aquí. Y para la animación de hits, enchufando aquí por la muerte, esperaremos con eso también. Posteriormente, haga clic en él, oculte los pines no conectados, arrástrelo hacia atrás y compilar y guardar. Y ahora lo tenemos todo, correcto. Ahora asegúrate de que si te has olvidado hacer eso, asegúrate de entrar en cada enemigo y asegúrate de que en los valores predeterminados de clase hayas establecido todas estas animaciones aquí, lo contrario no funcionará. ¿ De acuerdo? Ahora volvamos a la base. Y aquí, ahora en lugar de se está moviendo, en realidad, vamos a abrir su, en realidad tenemos que cambiar algo aquí. Entonces en la base enemiga, ve a tu enemigo ahora. Y dentro de aquí. Y definió tareas aleatorias. Recuerda que estableciste este estado de movimiento a moverse y no en movimiento. Pero en este momento, en realidad ya no es un booleano. Es el estado del movimiento. Por lo que voy a mantener el control y haga clic aquí para eliminar esto. Y éste vamos a cambiar a r1, ¿verdad? Recuerda escuchar a la base enemiga. Es el derecho de carrera que estamos utilizando para el movimiento en el árbol de comportamiento en esta tarea que nos vamos a mover aquí. Recuerda en el árbol de comportamiento también tenía éste donde pusimos el movimiento booleano para ser falso. Entonces aquí, en lugar de ser falso, puedes configurarlo a inactivo y puedes ver que ya está arreglado por sí mismo. Así que volvamos al árbol de comportamiento. Ahora voy a cambiar el nombre de esto en lugar de establecer movimiento Boolean. Déjame simplemente cambiarle el nombre, volver a mis tareas y renombrar esto para establecer el estado de movimientos, porque ya no es realmente un booleano. Es agradable mantenerse organizado así. Ahora, todo está correcto. Ahora volvamos a la base enemiga. Por lo que ahora hemos cambiado todo en un estado de movimiento. Aquí quiero jugar la animación Hit tan pronto como reciba daño como enemigo. Así que voy a arrastrar este poquito de camino así. Voy a decir que establece estados de movimiento. Voy a llamar a éste desde el enemigo. Recuerda que no es del jugador, es del enemigo. Entonces seleccionándolo aquí y conectándolo y conectándolo aquí. Y voy a tocar mi, mi efecto de golpe así. ¿ De acuerdo? Por lo que haciendo click en play solo para probarlo y dando click en mi jugador. Y creo que no puedo probarlo ahora mismo. Entonces si hago clic en hit, se puede ver que está golpeando y todo es como bicho. Pero a veces detiene la animación porque en realidad todavía está dentro de tu árbol de comportamiento. Pero se puede ver que está funcionando. Así que vamos a probarlo para el jugador, vamos por el cliente. Entonces aquí para el cliente, se puede ver el cambio que el jugador hizo del servidor. Entonces para el cliente, funciona también. Si miro el servidor, puedo ver ese cambio hecho desde la Kline. Déjame solo para asegurarme de que no tenga ningún bicho, cámbielo para jugar como clientes. Por lo que ambos son clientes. Este es un Klein, esto es un cliente. Y permítanme seleccionar a este jugador, omega más pequeño. Siempre es agradable si tienes dos pantallas porque puedes poner un cliente en una pantalla y la otra aquí. Porque realmente no me gusta no puedo hacer eso aquí por este curso. Tengo que tener todo en una sola pantalla. Por lo que al hacer click en éste aquí estoy golpeando se pueden ver los cambios aplicándolo pueden ambos clientes puedan ver el cambio. Ok. Entonces eso es correcto. Todo está funcionando. No tenemos ninguna caja. Déjame probarlo por el cerdo de aquí. Y se puede ver que el cerdo también está trabajando para el cerdo. El problema es que se están moviendo ahora mismo. Así que hagamos eso muy, muy rápido y en realidad podemos hacer una solución rápida. Entonces aquí, cuando atacas y cuando te golpean, tomemos este componente de movimiento y digamos Modo de movimiento Set, igual que lo que hicimos con nuestra escalera. Así establece el modo de movimiento. Recuerda por nuestra carta la pusimos a volar. Pero para éste, simplemente pongámoslo a ninguno porque realmente no queremos movernos en absoluto. Vamos a compilar y ahorrar. Y aquí como este cliente, déjame subir a los cerdos. Es mucho más fácil ver aquí golpeando a ese enemigo. Y ya se puede ver cuando lo golpeé, ya no se mueve. Ok. Agradable. Y la razón por la que se está moviendo de repente es porque sigue corriendo nuestro árbol de comportamiento. Y en este momento se ha puesto el modo de movimiento a ninguno, así que está atascado aquí. Entonces esto está funcionando correctamente y tenemos que hacer un poco más de código para que se vea más suave. Por lo que ahora que la animación está funcionando, vamos a acercar eso. Lo siguiente es que queremos detener el árbol de comportamiento cada vez que la cabeza del enemigo porque no queremos estar caminando. 73. Detener el árbol de comportamiento: De acuerdo, así que para evitar que el árbol de comportamiento juegue. Entonces esto es, recuerda que este es el árbol de comportamiento. Está tocando toda la animación todavía cada vez que te golpean. Pero queremos detener esta animación. El motivo por el que hago eso es después golpeemos al enemigo en Maple Story, el enemigo te va a perseguir todo el tiempo. Entonces cuando haga clic aquí en el juego y le pego a este caracol aquí, este caracol me va a perseguir. No va a ir por este camino y no va a ir por aquí. En realidad va a buscar al jugador y va a encontrarme y perseguirme. Esto es lo que estamos tratando de hacer. Antes de hacer eso, detengamos el árbol de comportamiento para que ya no queremos correr esto cada vez que los enemigos golpeen. Aquí. Antes de hacer eso, tomemos el sprite y queremos detener la lógica cada vez que haya terminado esta animación de Hit. Así que de nuevo, al igual que antes con la animación de ataque, para la animación Hit, podemos tomar el sprite y decir flip book. Podemos tomar la longitud. Entonces, ¿cuánto tiempo está jugando este libro flip book? Podemos hacer un nodo de retardo. Retrasarlo con el tiempo que sea esta animación de Hit. Y después de eso, voy a tomar este componente de movimiento y voy a decir detener el movimiento de inmediato. Así que deja de hacer todo lo que estás haciendo así. Y luego después de eso, se quiere detener el árbol de comportamiento. Por lo que en este momento éste sólo está deteniendo el movimiento del enemigo, pero también se quiere detener por completo el árbol de comportamiento. Y esto se hace consiguiendo el controlador del enemigo. Así que recuerda en multijugador solo puedes decir get controller, porque en este momento estamos dentro del enemigo. Entonces estamos consiguiendo el controlador para este enemigo. Hemos golpeado. Y entonces vamos a decir consigue NME ref. Recuerda que hicimos conseguir ref enemigo hace un tiempo. Si no te acuerdas, intenta entrar en la interfaz y echa un vistazo a esta base enemiga. Este es el enemigo del ref que hiciste, que oyes también hizo una autoreferencia. Para que puedas referenciar al enemigo aquí. Con este controlador que tienes. Ahora puedes arrastrar de esto y quieres conseguir, ahora tienes, tienes el controlador, lo que quieres especificar, al igual que antes dijimos get enemigo ref. Bueno, este controlador, estás hablando específicamente de este controlador de IA. Por lo que tenemos que especificar que estamos hablando específicamente de este controlador de IA. Entonces para hacer esto, ahora, recuerda que solo podría decir elenco también, porque casting te estás refiriendo a un plano como este. Pero para el controlador de IA, lo es, es un gran azul, blueprint, al igual que la base del jugador y así sucesivamente. Entonces voy a crear su propia interfaz. Así que haga clic derecho aquí. Y en los planos, recuerda aquí puedes crear una Interfaz de Blueprint. Llamemos a éste. Llamémoslo controlador de IA. Entonces en lugar de controlador de jugador es ahora controlador AI. Y aquí digamos obtener controlador o en realidad llamémoslo get ai. Prólogo ref. Para éste, hagamos una salida, y la salida es AIC enemigo. Esto es lo que llamamos al controlador API. Llamémoslo controlador de IA. Y ahora tenemos esa variable. Ahora recuerda entrar en el, en el enemigo aquí y en el controlador de IA. Y recuerda ir a la Configuración de Clase y Agregar ese controlador AI Blueprint Interface. Aquí, Compile Guardar. Ahora se puede ver la función. Y aquí vamos a hacer la autoreferencia. Así que al igual que lo que hemos estado haciendo hasta ahora, nada nuevo. Ahora que tenemos esto agregado. Ahora podemos hacer una referencia a ese controlador de IA sin costar. Entonces si voy a la base enemiga, ahora puedo decir get aae, controle nuestra referencia. Bien, ahora, como referencia del controlador de aire para detener un árbol de comportamiento, lo único que hay que hacer es tomar de esto y tomar el componente cerebral de esa ai. Así que conseguir el componente cerebral y decir, Detener la lógica. Ahora va a detener el árbol de comportamiento. ¿ Cuál es la razón? Sólo voy a decir golpes para la cabeza del enemigo. Realmente no importa para nosotros aquí. Entonces la cabeza del enemigo y va a detener a ese controlador de IA. De acuerdo, así que cuando hago clic en Jugar ahora y voy al jugador y le pego a ese enemigo. Va a golpear a ese enemigo y se puede ver que se detiene por completo. Nunca se va a mover porque en realidad he detenido el árbol de comportamiento. Ahora puedes hacer que se mueva después, después de que lo golpeemos. Entonces no es un completamente estático. Simplemente puedes copiar esto, ese modo de movimiento. Voy a volver aquí y pegarlo. Ahora va a ir de ninguna otra vez a caminar. Así que ahora vamos a caminar de nuevo después de que te hayan golpeado. Y recuerda que fijamos este retraso. Entonces, por mucho tiempo que sea tu animación para la animación de encabezado, vas a retrasar. Recuerda, un error fácil que puedo imaginar es aquí y los activos enemigos. Entonces, por ejemplo, para el efecto de golpe de caracol. Recuerda de nuevo, dije antes esto era muy importante cambiar los fotogramas por segundo para este efecto de calor, aunque sea un fotograma. Porque si lo vas a fijar a 15, como por defecto, este retraso aquí va a ser muy, muy pequeño, por lo que ni siquiera vamos a notar esta animación aquí. Entonces enviándolo a uno, que significa 1 segundo. Entonces es un fotograma por segundo. Y va a esperar 1 segundo, y luego va a jugar eso. De acuerdo, así que poniéndola a caminar ahora podemos jugar. Ahora cada vez que lo vayas a golpear, se va a reproducir la animación de la cabeza y luego va a cambiar a ellos modo de caminar. Pero en este momento está en el modo de caminar, pero realmente no hemos especificado que en realidad debería volver a correr. Entonces hagamos eso antes de que terminemos este video. Y recuerda, podemos simplemente usar la carga de movimiento establecido o los estados no motivos más bien. Y aquí en la base enemiga, conjunto, estado de movimientos. Y vamos a configurarlo para que funcione bien, porque queremos estar corriendo de nuevo. De acuerdo, así que debería ser para este video. Así que vamos a jugar y ver si está funcionando. Por lo que ahora tengo al enemigo y va a ir en la carga de marcha. Ahora va a quedar atascado ahora mismo porque no le hemos dicho a dónde caminar. Y esto es algo con lo que vamos a trabajar en la siguiente lección, donde le decimos al enemigo que en realidad vas a perseguir la capa. 74. Perseguir al jugador enemigo: Por lo que ahora queremos que el enemigo persiga al jugador. Entonces cuando el enemigo está siendo golpeado por el jugador, va a repasar y perseguir a ese jugador que lo golpeó. Así que en primer lugar, guardemos todo. Permítanme realmente cerrar todo esto abajo porque se está haciendo un poco demasiado. Empecemos desde el principio aquí. Entonces aquí en el enemigo, quiero que abras ese controlador enemigo. Y aquí en los componentes pinchando aquí y escribir de detección. Para que puedan ver tenemos algo llamado a la detección. Entonces va a sentir a nuestro jugador. Esto suena como, esto suena como un Skynet. Ahora se pone un poco espeluznante. Entonces tenemos los pons detectando y va a sentir los puntos. Entonces el jugador, y lo único que voy a cambiar aquí, se puede ver lo que puede hacer. Por ejemplo, puede escuchar ruidos. Entonces, si estás haciendo como un juego escabullido como Metal Gear Solid, puedes tener esta cálida detección al sol, envía ruidos cuando golpeas a la pared y así sucesivamente. tan bonitas geniales. Pero lo único que vamos a cambiar aquí en el ángulo de visión periférica, lo voy a poner en 180 para que pueda parecer 360. Vamos a compilar y ahorrar. Eso es lo único que teníamos que hacer. Ahora vamos a cerrarlo. Abramos la base enemiga. Entonces aquí en la base enemiga, cuando el, cuando el enemigo se está dañando. Todo esto lo hicimos en las lecciones anteriores. Por lo que ahora el, el punto se está moviendo de nuevo. Entonces lo que queremos hacer ahora es que queremos perseguir al jugador. Entonces cuando empieces a moverte, quieres perseguir al jugador. Lo que vamos a usar se llama ai mover a éste. Ai se mudó a. Entonces se va a pasar al jugador. Ahora te va a decir aquí el punto, quién se está moviendo. Es solo uno mismo, es el enemigo. Entonces voy a arrastrar de esto y decir yo mismo. Ese es el estanque. De acuerdo, ¿a qué se está moviendo? Se va a mover al jugador. Pero en realidad no tenemos una referencia para el jugador aquí. Aquí se puede ver instigado por, y esto es lo que estaba haciendo el daño, y este es el controlador. Entonces este es en realidad el controlador del jugador. Podemos usarlo en coche desde aquí. Y haga clic con el botón derecho en esto y decir promueve una variable. Voy a llamarlo controlador de jugador, conectado aquí. Y recuerda replicar esa información para que el cliente también pueda ver esto. Por lo que ahora tenemos la línea de control de placa. Ahora podemos sacar el estanque de eso. Entonces tomando el controlador del jugador, quedándose, consiga controlado. Esto es lo que puedes hacer en multijugador. Por lo que tienes el controlador y puedes conseguir eso controlado encendido desde ese controlador de jugador. Por lo que ahora tenemos al jugador, y ahora se puede ver conseguir localización de actor. Por lo que ahora tenemos la ubicación del jugador y va a perseguir hacia ese destino. Por lo que se va hacia la ubicación del jugador. Vale, ¿a quién persigue? ¿ Quién es el objetivo? El objetivo es el jugador. Entonces es simplemente éste. Este es el Peón Jugador. Entonces sólo vamos a conectarlo aquí. ¿ Y cómo es el radio aceptable? Cuando llegue a ese radio, se va a parar porque has logrado perseguir al jugador. Sólo voy a bajarlo un poco, tal vez dos unidades. Así que sólo un poco más bajo que antes. De acuerdo, voy a mover esto por aquí. Y sólo para organizar las cosas un poco más, tal vez éste esté aquí arriba y haga doble clic en eso para que sea más visible, algo como esto. De acuerdo, Así que muy, muy, muy, muy fácil de entender nodo. Entonces va, por lo que este estanque va hacia el destino de los jugadores, ubicación. Y está persiguiendo a este jugador aquí. De acuerdo, así que voy a tener éxito, tenemos que hacer algo. Entonces, ¿qué debería pasar cada vez que llegues al jugador? Y esto es algo que estaremos mejorando más adelante. Así que en realidad no en este momento. Así que intentemos probarlo. Así que veamos aquí, vamos a jugar. Y ahora podemos ver si golpeo, por ejemplo, este enemigo y puedo correr. Ya se puede ver que en realidad me llegó. Y si vuelvo a hacer eso, permítanme realmente quitar muchos de estos enemigos porque ahora que estamos trabajando con el enemigo, lo verán. Whoops, elimino todo el asunto. Lo verás mucho más claro lo que realmente estoy trabajando con un solo enemigo. Entonces voy a eliminar a todos estos enemigos y voy a agregarlos más adelante. Así que tal vez sólo necesito uno recogido aquí solo para probar esto, ambos fuera. Y puedo hacer click en Play. Ahora, vamos a probarlo. Por ejemplo, en este grande lo voy a golpear ahora. Y me va a perseguir para siempre hasta que me llegue. Así que cosas muy cool. Ahora se va a mover hacia mí y cuando se mueva hacia mí se va a quedar quieto para realmente dañarme. Ahora no hace nada más porque no le hemos dicho éxito lo que debería hacer cada vez que me llegue. Ahora podría tal vez simplemente arrastrarme de esto y simplemente seguir looping para siempre y tal vez me va a dar un error. Tratemos de jugar aquí. Tan infructuoso, sólo puede seguir degustándome. Entonces si le pego aquí a este caracol y me persigue y me pega. Y si me voy ahora, puedes ver que me persigue para siempre ahora. Ahora es mi mascota. No es mi enemigo. Tengo un caracol como mascota. Puedo tener el cerdo como lo he tenido también. Se va, me van a seguir para siempre ahora. ¿ De acuerdo? Al igual que puedes imaginar esto, también puedes hacer un sistema de mascotas donde solo tienes que seguir al jugador. Para que puedas ver todas estas herramientas que son útiles para conocer estas herramientas para que podamos usarlas de la manera que quieras. De acuerdo, cosas bastante geniales. Voy a eliminar esto. Ahora lo que quiero hacer aquí, quiero realmente hacer eso en la siguiente lección donde mejoramos cómo el enemigo está caminando alrededor de él cuando llegan al jugador. 75. Cómo mejorar el enemigo perseguir al jugador: Muy bien, así que quiero mejorar un poco ese código. Así que cada vez que se mueve al jugador, no quiero seguir moviéndome a ese jugador y seguir persiguiendo al jugador. Quiero que el movimiento se sienta un poco aleatorio, aunque no lo sea. Lo que quiero que hagas aquí en caso de éxito, quiero usar algo llamado herramienta Move. Y seleccionemos éste llamado se mueve a la ubicación o actor. De acuerdo, entonces ahora se mueve al jugador, y siempre que llegue al jugador va a ejecutar esta función llamada mover a ubicación o actor. Y voy a usar esta , dislocación aquí. Entonces vamos a desglosar esta ubicación. Minuto break, Hagamos un vector. Y eso nos permite ver los X, Y, y Z. Y aquí ahora, aquí en el controlador, lo necesita, necesita los controladores de IA, como se puede ver cuando sostiene el mouse sobre él. Por lo que no podemos decir obtener controlador y agregarlo aquí. No va a aceptarlo. Necesita específicamente el controlador de IA. Voy a decir controlador de IA. Y se puede ver que tenemos éste llamado get controlador AI. ¿ Y quién es el actor controlado? Recuerda que estamos dentro de base enemiga por lo que solo podemos decir yo así. Entonces, ¿cuál es la ubicación aquí? ¿ A quién me estoy moviendo también? Ahora para la meta, realmente no necesitamos conectarnos a nada porque dice mudarse a ubicación o actor. Y sólo voy a usar la ubicación. ¿ Cuál es la ubicación que nos estamos moviendo también. Pero quiero hacer es aquí, en realidad puedo mostrarte. Entonces si el jugador está aquí parado, así que déjame simplemente tomar Tsarina por ejemplo, para que podamos visualizarlo mucho mejor. Entonces Serena está parado aquí. Entonces cuando el enemigo llegue al jugador, quiero que el enemigo mueva 100 o algo así como esas unidades a esa dirección. Y entonces el enemigo volverá a ese jugador. Y cuando vuelvas a llegar a ese jugador, quiero mover 100 a esa dirección. Entonces sigue moviéndose así. Porque en este momento sólo se mueve al jugador y simplemente se pegó así. Pero quiero que se mueva por el jugador todo el tiempo así aquí, por lo que sigue persiguiendo al jugador, pero tiene un poco más de movimiento que solo estar atascado aquí en el jugador. Entonces si volvemos a la base enemiga aquí, así que lo que voy a revisar cuando necesito revisar primero, si es como este enemigo viene de este lado, hay que moverte a este lado. No obstante, si el enemigo viene de este lado, debes moverte a este lado. Por lo que tengo que comprobar de qué lado viene el enemigo. Por lo que necesito tomar primero al jugador. Necesito saber dónde está el jugador. Podemos hacer eso aquí. Llévate esto otra vez. En realidad, voy a copiar pegar ese código aquí. Entonces estamos consiguiendo el control del jugador sobre conseguir los puntos de control. Entonces el jugador, y estamos consiguiendo la ubicación del jugador. Voy a romper eso porque lo único que me interesa es este pivote rojo, lo que significa el eje x. Por lo que sólo me interesa el eje x. No me importa la Z ni la y aquí. Así que volvamos aquí. Sólo me interesa el eje x. Ahora tengo la ubicación del jugador. También necesitaré la ubicación del enemigo. Y sólo puedo decir conseguir ubicación de actor porque ya estamos dentro del enemigo, por lo que el propio objetivo. Y déjame romper eso también. Rompe ese vector para que pueda ver la X, Y, y Z. así que voy a preguntar, es esta x, así que son los jugadores, x. ¿ Es esto menor que la ubicación de este enemigo? ¿ Y lo que eso significa es el enemigo, el enemigo parado aquí? Se va a preguntar, recuerda, aquí, si le echas un vistazo a la x, si voy a esa dirección, va a estar alrededor de 0. Entonces se va a meter en el menos aquí. Si voy por esta dirección, se puede ver que está bajando. Así que estoy, estoy preguntando en este momento, ¿es la ubicación del jugador, la ubicación x? ¿ Es menos que los enemigos? Y en este momento lo es, porque momento el jugador de pie aquí, el enemigo parado aquí, esta X, se puede ver la x aquí para el jugador es menor que el para el enemigo. Significa que el enemigo realmente viene de esta dirección, si eso es cierto. Entonces, ¿qué debería pasar si el átomo viene de esta dirección? Y eso es algo que tenemos que especificar aquí en este momento. Por lo que aquí podemos hacer una sucursal. Y alejémoslo un poco aquí. Para que podamos hacer una sucursal y ver si eso es cierto. Queremos, como, si eso es cierto, queremos mover también a este enemigo. Al igual que menos quinientas, quinientas menos 100 unidades. Porque recuerda cuando llegues al jugador y si decimos mover la ubicación, eres menos 100, lo que significa que vas a menos 100 en la X, lo que significa que el personaje realmente va a, o el jugador del enemigo se está moviendo 100 a esa ubicación porque estás mintiendo aquí. Entonces esto es lo que estamos tratando de hacer. Por lo que estamos diciendo aquí, estamos diciendo entonces toma eso es cierto, luego toma a los enemigos x ubicación y restar 100 de eso. Y ahora esta es la nueva ubicación x. Y y Z, realmente no estamos interesados en ellos, así que sólo vamos a enchufarlos como están. Entonces ahora lo que estamos diciendo es que son los jugadores son, ahora, ¿es la ubicación x del jugador? ¿ Es menos que los enemigos? Significa que el enemigo aquí parado y el jugador de pie aquí. Si sí eso es cierto, entonces adelante y mueve ese enemigo menos cualquiera que sea la x actualmente, que está aquí, menos 100 unidades. Esa es nuestra nueva ubicación objetivo, lo que significa que tus nuevas ubicaciones de objetivos por aquí. Entonces el enemigo se va a mover de aquí a aquí. ¿ De acuerdo? Así que cosa muy, muy fácil de hacer aquí. Y la otra cosa es, si es falsa, necesitamos tomar esto y decir, entonces vas a mover 100 más 100 unidades. Porque recuerda, si es falso, significa el enemigo parado aquí. Eso significa que cuando llegues al jugador, quieres que tu nuevo objetivo sea más 100 y x porque quieres moverlo de esta manera. Más 100 lo hace 800 y algo por aquí, ¿de acuerdo? Entonces si estás parado al revés quieres más 100. Entonces ese es tu nuevo objetivo aquí. Así que si acabo de arrastrar estos aquí, así que la x, y, y z, realmente no nos importa. Es sólo la x que estamos ajustando. Y ese será nuestro nuevo objetivo. Pero en lugar de copiar pegar este código, ahora, si te ves haciendo esto, como puedes verte, solo copie el código de pegar y se ven 100% igual excepto por un valor. En realidad puedes mejorar tu código un poco. Puedes hacer algo llamado una carga Select. Entonces, lo que puedes hacer aquí es en lugar de hacer esta rama y hacer así, puedes ver que este es el mismo código y en realidad es mala práctica de codificación porque solo estás copiando el código de pegar, que es casi lo mismo. Por lo que puede hacer esto un poco mejor. Entonces en lugar de aquí, puedes hacerlo, déjame desconectar esto. Y aquí en cambio, ahora ya o bien estamos sumando o restando 100 de esto. Podemos derivar de esto y decir select y usar éste llamado Select Load. Y ahora este booleano, vamos a conectarlo aquí en su lugar. Por lo que ahora va a decir que es la ubicación del jugador, esta x ubicación menos que la ubicación del enemigo. Si eso es cierto, de nuevo, si eso es cierto, tenemos que restar. Entonces en lugar de simplemente hacer estos, en realidad podemos decir menos, voy a decir uno menos 125. Creo que probé con ese número. Creo que esa es la mejor. Y si no es cierto, que significa que el enemigo está aquí parado, queremos sumar 125. Para que puedan ver aquí realmente no necesitamos hacer todo este pegado de copia. Ahora lo va a hacer automáticamente para nosotros así que no necesitamos copiar, pegar el mismo código. Se va a seleccionar, Toma, echar un vistazo a esto si es verdadero o falso. Y va a hacer ese número, como si fuera a menos o más ese número. Y realmente no podemos sumar, como no podemos simplemente conectarlo directamente aquí porque va a configurarlo a estos números. Lo que tenemos que hacer es tomar este valor x y necesitamos sumar ese número encima de él. Por lo que aquí tenemos que sumar ese número. Entonces, por ejemplo, digamos que la x es actualmente 600 para el enemigo. Entonces va, si eso es cierto aquí, va a decir 600 más menos, lo que significa apenas menos 600 menos 125. Y va a establecer eso como la nueva ubicación x. Si el enemigo aquí, si esto llega a falso, entonces esto fue cierto y esto fue falso. Dice 600 más 127, entonces se va a trasladar a esta ubicación. De acuerdo, así que hacer eso es mucho mejor que copiar código de pegar. Así que cuando te ves copie el código pegando, probablemente haya una mejor manera de hacerlo. De nuevo, eres bienvenido a ir a mi Discordia. Estoy dispuesto a ayudarte con todas estas cosas. Es agradable tener todas estas cosas buenas, buenas prácticas para cuando estás codificando. Para que no te guste, así que es bueno mantenerte limpio así. Muy bien, por lo que en realidad podemos quitar esta sucursal. En realidad ya no lo necesitamos. Así que en realidad vamos a probarlo. Por lo que ahora en realidad tenemos que hacer algo porque cuando te mudas a esa ubicación, tenemos que repetir el movimiento aquí y moverte terminado. Arrastremos este bolígrafo y solo repitamos eso. Me mudé aquí. Voy a hacer doble clic en este pin para hacer redireccionar nodos. En realidad hacer que se vea un poco más limpio para que no sea confuso mirar algo como esto. Ahora vamos a compilar y ahorrar, y juguemos y veamos qué pasa si hemos olvidado algo. De nuevo, voy a eso aquí. Y permítanme realmente eliminar a ese jugador, el jugador de aquí, jugar de nuevo. Entonces como Luke va a golpear ese clavo. Se va a mover hacia mí. Cuando llegue a mí, se va a trasladar 125 a esa ubicación cuando vuelva a llegar a mí, 125. Se puede ver que este es el movimiento que agregamos y esto es phi, arrástralo de nuevo aquí. Entonces cuando llegue a mí, se va a mover cualquiera menos 125 a que las etiquetas de ubicación X actuales son más 125. Se va a trasladar a esa ubicación cuando termine la película, va a repetir ese movimiento, lo que significa que cuando esté de pie, por ejemplo, si vuelvo al juego, cuando parado aquí, va a luego perseguirme otra vez. Y luego cuando me llegue de nuevo, va a repetir ese código de nuevo. Entonces va en ese movimiento circular todo el tiempo. Y creo que eso es un poco más suave hacer el movimiento así porque ahora cuando me aleje, nuevo, me va a perseguir. Entonces todo está funcionando correctamente. Persígueme ahora cuando me llegue, va a ir 125 a esa dirección. 125 a esa dirección. 125 a esa dirección en sigue yendo y va a perseguirme de nuevo si me alejo. Por lo tanto movimiento muy fresco y podemos probar eso con el cerdo aquí. Se puede ver que el cerdo se mueve como la animación de ataque de cerdo. En realidad está funcionando bien. Ok. Entonces me va a perseguir ahora. Y siguen enfrentándome y ahora van 125 en esa dirección. Y hay como si hubiera un pequeño insecto con ese, tal vez necesitemos arreglar aquí la colisión de rampa. Probablemente sea una colisión con la estática aquí. Entonces, lo que puedes hacer aquí en la base, puedes hacer click en la colisión, realidad puede simplemente ignorar todo excepto por el Po1 y el cliente siendo jugadores. Así que simplemente moverlos de la superposición porque realmente no necesitamos solaparnos con nada aquí para esta colisión aquí. Y por esta cápsula. Realmente no podemos hacer esto porque ahora va, van a caer del suelo. Probablemente. Se puede ver que no hay enemigos porque están cayendo por el suelo. Por lo que hay que tener eso en la cápsula. Entonces haciendo clic en la obra ahora, veamos, este es el caracol, el cerdo aquí. De acuerdo, y vamos a mover esa ubicación. Uy, no lo golpeé. Vale, creo que está funcionando ahora, así que ahora no están molestando aquí en la rampa. De acuerdo, tan genial. Ahora tenemos un movimiento de IA muy simple, muy simple. Y se ve muy bien, se ve al azar también, pesar de que es un código muy, muy simple. Por lo que se ve al azar también, aunque no esté relacionado con el azar. Así que cosas muy chulas que hemos hecho aquí. Y sí, eso fue todo por este video. Espero que te hayas divertido. Me divertí creando esto y pasemos a la siguiente. 76. Enemigo para aplicar el daño: De acuerdo, entonces ahora estamos listos para que el Enemigo haga el daño, porque hasta ahora es en realidad sólo el jugador que hace este daño aquí. Por lo que sólo el jugador está haciendo el daño. Necesitamos que el enemigo le haga daño también al jugador. Y para hacer ese daño, realmente no queremos codificarlo aquí en ningún daño porque queremos que el enemigo aplique el daño a pesar de que no estén siendo golpeados por nadie. Entonces si el jugador está caminando hacia el enemigo, aunque el jugador no los haya golpeado, aún pueden hacer daño. Así que vamos a hacer aquí un evento separado llamado Empezar daño aplicado. Y en realidad vamos a querer hacer eso de inmediato cada vez que aparezcan en el nivel. De acuerdo, Así que volvamos a las interfaces y en la base enemiga, déjame hacer aquí una nueva función que lo iniciará todo. Y llamémoslo inicia el daño aplicado. Y solo hagamos un booleano donde decimos el daño aplicado y esto puede ser verdadero o falso. Sí, eso es todo por ahora. Entonces vamos a compilar, ahorrar, y volver a la base enemiga. Y lo que podemos decir aquí es que podemos hacer clic derecho y podemos decir start, aplicar daños, y podemos llamar a ese evento aquí. Ahora éste, de nuevo va a pasar por el servidor para asegurarse de que no sea que el cliente no esté engañando. Por lo que el servidor inicia aplicar daños. Normalmente solo los llamo el mismo nombre que los eventos normales y ejecuto en el servidor. Confiable. Y ahora este booleano aquí, tenemos que añadirlo obviamente de nuevo, se les aplique el daño. Ahora podemos decir, podemos, podemos escribir aquí una rama y decir si esto es verdadero o falso. Y con eso, queremos hacer algo. Por lo que queremos empezar a aplicar el daño siempre que sea cierto y es falso, ya no queremos aplicar el daño. ¿ Y cuándo lo ponemos a verdadero o falso? Así que permítanme realmente simplemente ejecutar esa función del servidor aquí primero, arranque daño ligero aquí y conectado. Entonces, ¿cuándo queremos aplicar los daños? Queremos aplicar el daño siempre que el jugador esté chocando con el enemigo. Entonces cuando el jugador, si vuelvo al enemigo, si vuelvo a un caracol, cuando el enemigo está chocando con esta pequeña caja de colisión aquí, queremos empezar a aplicar daño al jugador. Antes de eso, realmente no queremos aplicar ningún dañado. Recuerda, estamos optimizando nuestro código, por lo que no queremos aplicar el daño 24-siete, solo quiero aplicar daño siempre que el jugador esté interactuando con el enemigo. Voy a la base enemiga aquí y voy a la ventanilla, haciendo clic en esta colisión, bajando hacia abajo y luego haciendo clic en n-componente comenzar a solaparse. Entonces en principio componente de un laboratorio, lo que hemos estado haciendo igual que antes, queremos ejecutarlo a través del switch tiene autoridad para asegurarse de que es el servidor el que está ejecutando este evento. Y de nuevo, quiero hacer una nueva esta vez final solapamiento podamos hacer eso al mismo tiempo también. Voy a comprobar si lo que se está superponiendo con él es el jugador. Así que de nuevo, actor ha etiquetado capa. Lo sabemos, sabemos que el jugador tiene el jugador tecnológico y podemos hacer un brunch ahora. No creo que lo haya explicado todavía, pero también se puede hacer una sucursal si acaba de sostener, mantenga B en su teclado y luego haga clic, realidad puede hacer sucursales también. Atajo tan genial que puedes hacer. Entonces si la etiqueta es jugador aquí para este actor, vamos a aplicar daños y simplemente, sólo nos interesa dirigir este evento aquí. Por lo que empieza a mentir daños aquí en la base enemiga. Y vamos a poner esto en verdad. Ahora cuando terminemos solapamiento, donde solo quieres copiar pega todo este código y queremos dejar de aplicar el daño. De acuerdo, así es como lo optimizas. Ahora por el daño aplicado, lo que quiero hacer es que quiero aplicar continuamente el daño. Te voy a mostrar por qué en realidad no te están mostrando por qué en realidad puedo simplemente explicarlo muy rápido. Entonces si el jugador es por solo tomar el jugador, no el caracol. Entonces si el jugador está parado dentro de este enemigo aquí, bajo jugador, estoy caminando por ahí, estoy caminando hacia el enemigo. Estoy siendo golpeado. Estoy perdiendo la salud. Pero si me quedo a salvo dentro de esta esfera y nunca termino superponiéndome con ella. A pesar de que estoy parado por como diez segundos, no voy a aplicar daños porque al final y empiezo a solaparse, vas a aplicar daños. Pero recuerda, esto es, este evento solo se ejecuta una vez porque esto solo se ejecuta cada vez que empiezas a solaparse. Y esto se va a ejecutar una vez porque esta voluntad, este evento se ejecutará una vez. Y es entonces cuando comienzas a solapar al enemigo. Pero queremos agregar continuamente daño a ese jugador si no te estás alejando de este enemigo. Como tal vez te da un daño cada dos segundos si solo estás parado dentro de este enemigo. Queremos comprobar todo el tiempo si el jugador está realmente de pie aquí y queremos aplicar daños. Entonces aquí estamos, ya estamos comprobando si el jugador está parado en esta casilla aquí porque estamos empezando a aplicar daño cada vez que el jugador está dentro de esta colisión y nosotros dejen de aplicar daños aquí. Recuerda, de nuevo, tal vez ya lo adivinaste cuando quieres aplicar daños de forma continua, por lo que la palabra continuamente, tienes que usar un temporizador. Entonces igual que lo que hicimos antes. Así que establece temporizador por evento aquí. Vamos a conducir desde aquí y hacerlo eventos personalizados. Llamemos a este daño aplicado. Tenemos estos eventos personalizados y queremos aplicar algunos daños. El daño que queremos aplicar. En realidad hagamos looping y voy a revisar cada 0.12 era. Por lo que esto significa que estás aplicando daños diez veces por segundo. Y esto tendrá sentido después, como vamos a reducir esto. Pero lo que queremos hacer, vamos a moverla aquí abajo. Lo que queremos hacer es de nuevo, conseguir actores superpuestos. Por lo que nos interesa conseguir toda la base de jugadores. Por lo que conseguir a todos los jugadores superpuestos, queremos aplicarles daño a todos ellos. Y vamos a arrastrar de esto y decir por cada uno. Este método, si ya lo hemos hecho desde el jugador hasta los enemigos, ahora está en la dirección opuesta. Ahora son los enemigos que aplican daño a los jugadores. Solo asegúrate de tener la base de jugadores seleccionada aquí y no base enemiga ni algo más. Entonces, para cada uno de estos jugadores, ¿ qué queremos hacer? ¿ Ahora? También puedes comprobar la longitud si es igual a 0, pero eso realmente no tiene ningún sentido porque ya estás tipo de verificando si los jugadores de pie aquí o no. Entonces para cada uno de estos jugadores que están parados dentro de la caja de colisión. Nuevamente, queremos conducir desde esto y decir Aplicar daños. Ahora, ¿ a quién quiero aplicar daños? El actor dañado? Es el jugador. Entonces es sólo este tipo de aquí. Y tenemos que especificar cuánto daño se mezcla cada enemigo. Entonces tenemos que volver a la estructura en la información animal. Y aquí tenemos que sumar una nueva variable llamada daño. Permítanme simplemente arrastrarlo arriba de aquí, debajo de la salud, y déjame cambiarlo por un flotador. Guarda aquí y la base enemiga ahora podemos compilar y ahorrar. Por lo que ahora podemos ir a los enemigos. Entonces en el cerdo aquí, podemos poner un daño. Así que vamos a hacer clic en los valores predeterminados de clase, ir a información animal. Y así este daño, por ejemplo, los cerdos están haciendo 15 daños. O tal vez, quizá digamos 20 daños en realidad para los cerdos y aquí por los caracoles. Si volvemos a los ajustes de clase para los caracoles, tal vez lo hagan, digamos que hacen diez daños. Vamos a compilar y ahorrar. De acuerdo, Así que ahora hacen diez dañados, el cerdo está haciendo 20 daños, así que duplica el daño. Y aquí lo que podemos hacer es tomar la información animal, romperlo, y tomar ese daño añadido aquí. Y ahora es dinámico. Entonces, sea cual sea el enemigo que sea, van a hacer su cantidad de daño. De acuerdo, entonces, ¿cuál es el controlador que es responsable de este daño? Entonces estamos dentro de la base enemiga, por lo que sólo necesitamos el controlador de este enemigo. De nuevo, se puede arrastrar y decir consigue controlador. Y eso es todo por la lista de tipos de daños cambia a tipo de daño aquí. Y eso son todas las cosas que necesitamos aquí. Por lo que ahora en realidad estamos aplicando daño a ese jugador. Ahora, más adelante, vamos a añadir un modo dios para que el jugador no esté siendo dañado diez veces segundo porque esto es esencialmente lo que está sucediendo en este momento. El jugador se está dañando diez veces por segundo. Pero vamos a agregar el modo Dios más adelante. Por lo que hay un periodo de tiempo que el jugador no será dañado. Pero por ahora, esto es todo lo que teníamos que hacer. Y pasemos a la siguiente lección. 77. Jugador que recibe daños: Muy bien, entonces ahora tenemos que codificar al jugador recibe el daño por parte del enemigo. Así que ahora volvamos a la base de jugadores, y vamos a la Gráfica de Eventos. En realidad voy a arrastrar el gráfico de eventos por aquí y hacer clic derecho y decir cerrar pestañas a la derecha. Entonces sólo tenemos eso abierto ahora. Por lo que ahora sólo tenemos hecho el ataque, y ahora en realidad tenemos que hacer cualquier daño dentro de aquí. Vamos a hacer clic derecho y hacer cualquier daño. Ahora tenemos este evento. Entonces al igual que en el enemigo Aquí, en cualquier daño, necesitamos restar la salud del jugador. Y en realidad no estoy seguro si hicimos eso. No recuerdo. Así que vamos a ir a la estructura y en lugar de información del jugador, y no lo hemos hecho. Entonces en la información del jugador, es necesario agregar una nueva variable llamada Salud. Éste puedes tomar, puedes convertirlo en un flotador, moverlo hacia arriba. Voy a moverla a la cima. En realidad, guardar aquí y la base de jugadores tienes que compilar y guardar como predeterminado para los jugadores. Sólo voy a hacer click aquí, todos tienen la misma salud. Así que sólo voy a poner un valor predeterminado para todos ellos. Por ejemplo, por la salud, vamos a hacer algo así como 70. No lo sé, es sólo un número aleatorio. Por lo que sólo 70. Compilemos y ahorremos ahora. Y para la información dividida, ahora podemos tomarla y romperla otra vez. Y lo que queremos hacer, sólo voy a esconderlo todo y solo mostrar la salud. Esto es lo único que me interesa en este momento. Por lo que voy a tomar la salud del jugador, restar, restar, restarle el daño. Entonces, por ejemplo, este caracol va a hacer diez daños. Entonces va a decir aquí, lo que sea que se lo pusimos. Por lo que 17 menos diez va a ser 60 aquí. Entonces esta es la nueva salud, al igual que antes, tenemos que poner la salud por aquí. Entonces arrastrando desde esta estructura, necesitamos escribir conjunto, seleccionar miembros de conjunto. Lo que queremos actualizar dentro de esta estructura, necesitamos actualizar las variables de salud. Voy a seleccionarlo aquí a la derecha, ponerlo aquí. Entonces este es el nuevo valor. Y al igual que antes, antes de volver a hacer esto, vamos a sujetar este valor para que nunca vaya por debajo de 0. Vamos a hacer clic derecho y digamos subir y seleccionar esta llamada cargas de pinza. Entonces el valor mínimo es 0. En realidad déjame conectarme con el valor de aquí arriba. El valor mínimo es 0. Y el valor máximo. Ahora no puedes simplemente entrar aquí y conectar esto porque ahora mismo realmente va a hacerlo. Entonces, lo que puedes hacer por este máximo, de nuevo, puedes arrastrar de esta salud y conectarte aquí. Entonces esta es la máxima salud. Entonces puedes conectarlo dentro de aquí y solo conectarlos. Voy a arrastrar esto hacia abajo en realidad déjame moverlo un poco hacia adelante y arrastrar esto hacia abajo así. Por lo que va a sujetar el valor y hacer todo lo posible para que sea lo más limpio posible. A veces es un poco difícil en realidad, y algo como esto. ¿ De acuerdo? Entonces algo como esto. Estamos sujetando el valor ahora, asegurándonos de que no vaya por debajo de 0. Y de nuevo, hay que poner aquí en la estructura externa, que volver a establecer esa estructura de información del jugador y replicarla. Por lo que el cliente también lo puede ver solo para estar seguro de que la información no está molestando. Y ahora el jugador está recibiendo este daño. Así que de nuevo, puedes imprimirlo en la pantalla porque no tenemos UI en este momento, lo haremos más adelante. Pero puedes romper esta estructura y sumar la salud aquí para que podamos mostrar esta nueva salud. Puedes imprimirlo en la pantalla y puedes ver si está funcionando. Entonces voy a jugar a este jugador, voy a caminar hacia el enemigo. Se puede ver que me está dañando y me va a dañar diez veces por segundo. Recuerda que tenemos ese temporizador sobre el enemigo diciendo aplicar daño de los 0.1 segundos. Entonces diez veces por segundo. Se puede ver que nunca va por debajo de 0, así que eso es correcto. Siempre se detiene cada vez que ya no choco. Pero se puede ver que en realidad tal vez tengamos un pequeño problema aquí porque cuando choca con mi colisión de ataque, en realidad me está aplicando daño. Y no quiero hacer eso. Sólo quiero aplicar daños a mi personaje, así que tenemos que arreglar eso. De acuerdo, así que he jugado por ahí con las colisiones y sólo para ahorrarte un poco de tiempo. Por lo que aquí en la base del jugador, en la cápsula intentó hacer tus colisiones como mías. Entonces sólo para explicarlo un poco para que podamos entenderlo también. Entonces estamos generando eventos de superposición. Aquí. Lo único que esta cápsula es cuatro, así que esta es la cápsula del jugador. Solo queremos aplicar daños al jugador. Y recuerda cuando vayas al enemigo y haz click en esa caja de colisión, esta es la caja que necesita aplicarnos daños. También puedes ver este cuadro si haces clic en él y haces clic en ocultar en juego y lo quitas para que lo veas en juego. Por lo que si haces click en Jugar ahora, podrás ver esa caja alrededor del enemigo y esta es la caja que nos va a aplicar daños. Entonces esta caja aquí, recuerda, esta caja, si vas a la colisión, es una dinámica mundial. Entonces esto es lo más importante con lo que necesitamos solapar. No es ****, por lo que la cápsula es ****. Pero esta es una dinámica mundial. Entonces yendo a una base de jugadores, necesitamos bloquear el mundo. Dinámico. Bloqueo, lo que significa que quiero gustar interactuar con él. No significa, no significa que ignoremos esto, ignoramos esto ignorar sobre un bloque es que realmente quiero hacer un evento a partir de él. Entonces vamos a bloquear la dinámica mundial, lo que significa que vamos a interactuar con ella, así como el mundo estático, porque lo estático es, son estos azulejos en el suelo y si quitas eso, vas a caer por el suelo. Todo lo demás que en realidad podemos ignorar, tan distraído, así que no tenemos vehículos, cuerpos de física, otros poemas. Realmente no necesitamos interactuar con otros pons aquí en este momento. Creo que los frutos secos. Porque en realidad el daño viene de esta dinámica mundial. En realidad no la cápsula de los enemigos. Fue la cápsula de los enemigos entonces, correcto, necesitamos no ignorar el estanque. Pero ahora mismo viene de esta colisión, que es una dinámica mundial. Entonces es por eso que estoy ignorando todo y sólo mantengo estos dos encendidos. Ahora para este brillante, no estamos generando ningún evento de superposición. Así que saltemos éste. Por el ataque. Es una dinámica mundial y lo estamos ignorando todo porque lo único que estamos usando esta caja de ataque es hacer daño al enemigo. Y queremos hacer daños cada vez que esta caja de aquí esté interactuando con esta pequeña colisión. Y recuerda de nuevo, esta es una dinámica mundial. Por lo que queremos interactuar como cuando nos superponemos con la dinámica mundial, queremos aplicar daños, que es el enemigo aquí. El enemigo es la colisión. Entonces eso tiene sentido. Vamos a ir al enemigo ahora. Entonces la cápsula de los enemigos, estamos bloqueando todo, pero nos estamos superponiendo con los pons y el cliente siendo capas. Y vamos a la colisión. Aquí. Todo es dinámico. En realidad estamos ignorando todo excepto ****. Porque la forma en que el enemigo **** está haciendo el daño es caminando hacia el jugador. Y en realidad no está entrando en esta caja de ataque aquí. Está entrando en nuestra cápsula y nuestra cápsula está sobre. Y es por eso que necesito aquí en el enemigo para solaparme con la respuesta de colisión de peones. Por lo que muy importante echar un vistazo a todas las colisiones. ¿ Qué tipo de objeto son? Si era peón, entonces tuve que entrar aquí y solaparme con peón. Y si lo fuera, digamos que era colina siendo jugador y yo quería hacer daño, entonces tuve que seguir adelante y solaparme con jugador de escalada. Trató de echar un vistazo a eso, intentó jugar alrededor y ver cómo funciona. Así que vamos a salvar todo. Ahora. Demos clic en Play. Vamos a jugar a este jugador. Si estás interactuando con mi caja aquí, no estoy recibiendo ningún daño. Eso es bueno para ti. Interactúa conmigo. Estoy recibiendo daños porque está interactuando con mi cápsula aquí. Y aquí. Si yo, ahora, se puede ver si vuelvo a sólo mi ataque, ataque colisión, no está aplicando daño a menos que en realidad esté entrando en mí. Entonces eso es trabajar como se pretendía. Ahora bien, este código para el jugador que recibe el daño también está funcionando. Así que en realidad eliminemos esto por ahora. Entonces ahora que lo hemos hecho, realmente no queremos aplicar daños todo el tiempo. Así que vamos a crear algún tipo de modo dios en la siguiente lección. 78. Modo de Dios del jugador: De acuerdo, así que vamos a añadir un modo dios para el jugador. Vamos a entrar en la base de jugadores ahora. Hagamos una nueva variable llamada modo Dios. Así que sé el modo Dios, y es sólo un booleano que podemos usar aquí. Tenemos este booleano llamado modo Dios, y queremos establecer este modo de Dios cada vez que estamos ganando daño aquí. Así que justo antes de realmente calcular todo esto, solo quería tomar mi variable Modo Dios y quiero ponerlo a verdad, porque ahora estamos en modo Dios. No queremos que nos dañen así. Y recuerda replicar esto al cliente también. Para que puedas ver que estás dentro del estado del modo dios. Entonces para el modo dios aquí, tenemos que ponerlo en verdadero, pero tenemos que ponerlo en falso en algún momento. Y hay que poner algún tipo de duración. Así que en realidad hagamos una nueva variable llamada tiempo de modo guardia. Y cambiémoslo por un flotador. Vamos a compilar y ahorrar. Para la guía, hora de China. Voy a ponerlo en 1.5 segundos para que el enemigo no pueda dañarme durante los próximos 1.5 segundos. Voy a tomar esto y decir retraso como este. Y sólo voy a fijar un retraso después de calcular mi salud. Y entonces aquí voy a poner mi Modo Dios para que sea falso. De acuerdo, así que ahora estamos sentados a verdad cuando obtenemos daño y después de 1.5 segundos lo estamos poniendo en falso. De acuerdo, así que aquí, volvamos al enemigo ahora. Y aquí en realidad hay que comprobarlo como booleano. Porque ahora solo estamos aplicando daños diez veces por segundo. Pero en cambio, vas aquí. Estás haciendo una, consigue actores superpuestos y estás ganando a todos los jugadores. Ahora para cada uno de este jugador, hay que comprobar si el jugador está en modo Dios. Entonces tomando esto y diciendo, en primer lugar, obviamente hay que especificar comunicarse con este jugador, base de jugadores. Entonces tenemos que decir Get layer REF, la que llevamos haciendo hace mucho tiempo. Vamos a conectarlo como en realidad déjame desconectar esto por ahora para que podamos ver lo que estamos haciendo. Así que ahora estamos haciendo tomando esto y diciendo el modo Dios. Entonces estamos obteniendo esta variable Mode Dios. Y sólo cuando el modo dios no es cierto, podemos hacer daño. Por lo que podemos decir nueces, booleano. Entonces si el modo Dios es falso, si no estamos en el modo Dios, hagamos una rama. Si no estamos en modo Dios, podemos seguir adelante y aplicar daños como este. No obstante, si estamos en el Modo Dios, no apliques daño, no hagas nada. Como esto, este es todo el código de modo Dios. Así que de nuevo, muy poderoso para usar booleanos como este. Y sí, así que ahora tenemos que conectar esto de nuevo. ¿ Quién es el actor dañado? Puede simplemente arrastrarlo aquí desde este jugador. No tienes que hacerlo desde aquí ahora. Simplemente puedes hacerlo desde aquí. Eso es un poco más limpio ahora. Ahora intentemos realmente probarlo y verlo. Y creo que hemos borrado nuestra cadena de impresión. Y permítanme, permítanme en realidad, sólo podemos imprimir una cuerda aquí. Así que imprime cadena y vamos a imprimirla aquí. En realidad. Vamos a romperlo primero. Tomemos la salud e imprimirla. Entonces justo antes del retraso, sólo voy a imprimir. Y entonces voy a tomar este retraso, volver a esta cadena de impresión, volviendo a ese retraso aquí. Así que sólo voy a imprimir este valor antes de retrasar. Veamos qué hace. Así que vamos a hacer clic en el juego. Yo entro al enemigo, estoy recibiendo daño a 60. Y sólo después de 1.5 segundos después del modo jardín, estoy siendo atacado de nuevo. Este código está funcionando ahora. Impresionante. Eliminemos esto y volvamos a conectarlo. De acuerdo, entonces ahora tenemos la funcionalidad God Mode agregada al juego. 79. Accede a un jugador VFX: Por lo que ahora tenemos que añadir un efecto de parpadeo para cuando el jugador sea golpeado. Entonces por aquí en la base de jugadores estamos dentro de aquí otra vez, tenemos que hacer algún tipo de efecto dañado para el efecto de parpadeo. Así que vayamos aquí y hagamos nuevos eventos. Ahora tenemos que hacerlo dentro de nuestra Interfaz de Blueprint, pero no estoy seguro con qué variables necesito trabajar en este momento. Así que hagámoslo como una variable personalizada o eventos personalizados y podemos simplemente cambiar esto a una Interfaz de Blueprint más adelante. Voy a llamarlo daño VFX, lo que significa efectos visuales. Y yo sólo soy como para este video, sólo vamos a hacer que el jugador parpadee cuando estés recibiendo daño por parte del enemigo. Y obviamente de nuevo, tenemos que ejecutar esto a través del servidor para asegurarnos de que el cliente esté haciendo lo que se les permite. Voy a ejecutarlo a través del servidor confiable y voy a llamar al servidor uno de aquí arriba llamado VFX dañado. De acuerdo, Y aquí abajo, ahora, este efecto de daño, hasta ahora hemos estado usando las variables de notificación de rep. Pero voy a recordar aquí para el salto. Entonces si subo por el salto, usamos un multicast. Y si no recuerdas, esto es hace mucho tiempo hemos usado esto. Un multicast está haciendo lo mismo que un rep notifique. Entonces mostrando toda esta información al cliente. Pero el multicast solo costará esta información a jugadores o jugadores ya conectados que estén cerca de ti. Por lo que es jugador parado muy lejos de ti no verá lo que está haciendo el multicast. Esto está bien de usar para un efecto de daño porque solo estás parpadeando durante dos segundos o donde sea, cuánto tiempo es. Y entonces ese efecto parpadeante va a desaparecer. Por lo que realmente no importa para los jugadores que están parados a diez kilómetros de distancia de ti o jugadores que aún no están conectados. Está bien que no vean este cambio porque es sólo un efecto parpadeante y volverás a la normalidad otra vez. Así que vamos, hagamos un evento personalizado y llamado VFX de daño multicast. Y ejecutemos esto en el servidor. Fiable, real, no en el servidor. Vamos a ejecutarlo en multicast. Confiable. Y el multicast lo vamos a ejecutar a través del servidor. Nuevamente, recuerde, un multicast, no puede ejecutarlo en ningún otro lugar excepto desde el servidor. Así que llamémoslo aquí MC dañó efectos V. No puedes, no puedes llamar a éste aquí arriba. Esto no funciona porque este no es el servidor. Este es tanto el servidor como el cliente. Entonces yendo aquí abajo, poniendo ese multicast aquí abajo corriendo a través del servidor. Ahora el multicast va a hacer eso, ese efecto parpadeante. Entonces para el efecto parpadeante, muy, muy simple. Empecemos a trabajar con él. Tomemos este sprite. Y cuando se quiere hacer es aquí en el sprite, queremos cambiar este color. Si haces clic en el color para el sprite, quieres cambiar este alfa, lo que hace que tu personaje sea transparente. Si cancelo aquí, si hago clic en uno de mis personajes. Por lo que si hago click en Tsarina y voy a viewports, aquí, hago click en, sobre ella, y hago click en el color sprite. Y luego bajé el volumen. Se puede ver aquí el jugador está recibiendo en realidad no el volumen, el Alpha, lo siento, mi mal. El alfabeto aquí se puede ver que el jugador se vuelve invisible. El problema es en este momento el jugador va de totalmente visible a volverse completamente invisible. Entonces no hay in-between y necesitamos eso. Y lo que lo está causando es por este material enmascarado, desiluminado, un material sprite. En realidad tenemos que cambiar esto. Así que intentemos cambiarlo aquí también. Por lo que puedo mostrarte cuando haces clic en él, no puedes ver nada. Y esto es porque hay que hacer click aquí en esta configuración. Y luego tienes que hacer clic en Mostrar contenido del desarrollador, mostrar contenido del motor y mostrar contenido de inicio de sesión. Por lo que al hacer clic en Mostrar de los tres, se pueden ver aparecer estas carpetas. Realmente no necesitamos usarlos. Pero ahora si vas a Serena y colorea aquí, puedes ver ahora puedes ver muchos más materiales si tienes razón, sin luz. Porque estamos trabajando con lote de píxeles, por lo que sólo nos interesa sin luz. Usa este llamado translucidez, o material de sprite translúcido no iluminado en lugar de máscaras. Elegir ese. Ya puedes ver cuando hago click en este color brillante y bajo mi alfa, habrá un valor intermedio, por lo que no va directamente invisible a lo visible. En realidad hay un nivel intermedio aquí, y podemos hacer que ese efecto de parpadeo subiendo y bajando como éste, el jugador se daña. Vale, volvamos a ponerlo a uno y déjame hacer clic en esa flecha para volver a la predeterminada. Sólo quiero volver a mi máscara porque esta es la predeterminada. Vamos a cambiar esto a través del código. Entonces volviendo a mi jugador aquí. Entonces primero tenemos que cambiar el material. Entonces yendo aquí, viendo el material establecido, seleccionándolo aquí. Ahora. Especificar qué material es. Ahora no queremos, de nuevo, cambiarlo directamente por aquí. Recuerda, estamos en el multicast y me gusta o no me gusta tengo que llevar todas mis variables al evento muy básico aquí. Entonces este material, puedes arrastrarlo y ponerlo aquí. Puedes seguir agregándolo a tus eventos. Y este es el evento principal que lo va a ejecutar, que está por aquí. Porque cada vez que ganes algún daño aquí, vamos a llamar a nuestro daño los efectos. Y lo vas a ejecutar aquí. Y aquí es donde seleccionas el material. Y queremos seleccionar el que se llama translucencia. Y bajar en la parte inferior, material sprite translúcido sin iluminación. Asegúrate de que el desiluminado. De acuerdo, así que ahora hemos cambiado nuestro material, vale, ¿qué ahora? Ahora queremos cambiar el Alfa, pero queremos hacer un efecto parpadeante. Y esto se hace a través de un temporizador. Podemos volver a usar un temporizador para hacer esto. Por lo que establece el temporizador por eventos. Haz uno aquí. Y va a bucle un par de veces. Y cuánto tiempo, ¿cuánto tiempo va a bucle? Y encontré una buena manera de hacerlo para que podamos tomar el modo dios aquí. Recuerda que el modo Dios es 1.52. Entonces si pones aquí, sólo va a hacer ese efecto parpadeante cada 1.5 segundos. Y creo que es, necesito hacerlo mucho más rapido. Por lo que necesito dividir este número. Encontré el camino, como el mejor número es 16. Entonces va a hacer esto como dividir esto por 16, lo que significa 1.5 dividido por 16, y eso es 0.09. Entonces es como escribir 0.09 aquí. Es casi como escribir 0.1, lo que significa diez veces por segundo. De acuerdo, así que va a parpadear mucho aquí, para que puedas hacerlo de esa manera. Así que cada vez que cambies tu temporizador de Modo Dios, va a cambiar en consecuencia. Para que podamos hacerlo aquí. Así que ahora es una especie de dinámica. Así que voy a poner mi material aquí abajo en su lugar. Entonces, en lugar de hacerlo aquí arriba, voy a arrastrar este material conjunto. Me siento desconectado de aquí. Voy a dejar que se conecte aquí arriba así y necesito hacer un evento. Así que arrastra hacia abajo de aquí y di daños. Hagamos primero un evento personalizado, el daño afecta bucle. Y ahora podemos conectar nuestro material. Entonces primero queremos que nuestro material sea translúcido. Entonces queremos tomar este brillante y establecer el color, color establecido en color Sprite, ¿se llama aquí? Y ahora queremos poner este color brillante también. Ahora, realmente no podemos cambiarlo aquí de nuevo, recuerda que tienes que pasarlo a través. Así que arrastra desde aquí, ponlo dentro de este evento. Y ahora, en vez de decir nuevo color, sólo voy a decir color. Y de nuevo, arrástrelos a través estos eventos hasta que aterrice aquí donde se puede cambiar. Vale, entonces por el color, sólo voy a hacer click aquí. Y voy a cambiar el Alfa. Esto es lo que me interesa a 0.5. Entonces es la mitad de ver-through. Por lo que nuestro personaje jugador será medio ver-through. De acuerdo, entonces estamos cambiando el color y el material. Por lo que ahora el jugador está medio transparente y luego queremos retrasarlo. Entonces voy a poner un nodo de retardo y quiero eliminar. Déjame llevar de nuevo este temporizador de Modo Dios. Quería retrasarlo, digamos dividido por 16 de nuevo aquí. Y en realidad quiero dividirlo por 16. Estos no pueden ser los mismos. Quiero dividir esto por ocho. Es como escribir aquí. Por ejemplo, quieres ejecutar esto cada segundo y quieres retrasar esto por 0.5 segundos. Y luego quieres copiar pega este código porque ahora estás ver-through. Pero quiero volver a mi modo normal porque recuerda que estamos haciendo un efecto de parpadeo. Entonces yendo a mi modo transparente y luego voy a volver a la normalidad. Y sólo quiero la mitad del tiempo de lo que hay ahí arriba. Así que en realidad cambiemos esto a ocho. Por lo que va a decir 1.5 año dividido por ocho. Y aquí por el retraso, voy a hacerlo mucho más rápido. Por lo dividido por 16. Para que puedas probar tu camino a través de esto y ver qué funciona para ti si quieres que parpadee más rápido. Obviamente, hay que aumentar estos números. Si quieres parpadear más lento, tienes que reducir estos números. Entonces vamos a retrasarlo por 16 aquí, o el tiempo de Modo Dios dividido por 16. Y luego vamos a poner los materiales a lo que eran antes. Sólo voy a copiar pegue esto y ahora sólo podemos poner el material por aquí. No tenemos que pasar por todas estas cosas, creo que no. Así que vamos a probar eso. Entonces si acabas de escribir sin luz, tienes al igual que éste llamado enmascarado en Let's bright material. Esta es la predeterminada. Y el nuevo color. Aquí en el rojo hay uno, verde, uno, azul. Esto significa que es de color blanco y el alfa es uno también. Entonces todos, todo aquí es uno. Y déjame compilar y ahorrar. Así que ahora vamos a ver si tenemos todo y no conseguimos nada. Entonces intentémoslo. Tratemos de jugar el juego. Y si entro en el enemigo, se puede ver que en realidad estoy teniendo ese efecto de parpadeo. Hay un pequeño error. En realidad me estoy oscureciendo. No voy a ir como mis propios colores, así que voy a hacer click aquí. Y esto se debe a que esto no es blanco aquí. Entonces 111, ahora es blanco porque si no es blanco, aquí sexualmente oscuro y si es oscuro, tu personaje se volverá oscuro y no podrás ver tus píxeles. Entonces yendo 1.5110 y alpha. Ahora vamos a intentarlo de nuevo. Y puedes ver ahora puedes ver los píxeles cuando estás parpadeando, así así. De acuerdo, así que ahora es en realidad correcto. Y en algún momento realmente queremos detener ese efecto de parpadeo. Entonces lo que queremos hacer es aquí, queremos detenerlo después de que termine el tiempo del Modo Dios. Entonces después de estos 1.5 segundos, no estamos en nuestro tiempo de modo intestino yano estamos en nuestro tiempo de modo intestinoy queremos detenerlo. Así que hagamos un nuevo temporizador para eso y digamos establecer un temporizador por eventos. Y para éste, solo voy a arrastrar de este evento, hacer un evento personalizado. Llamémoslo detener el daño, los efectos. Y éste es muy sencillo. Sólo va a gustar después de 1.5 segundos. Entonces conecta el dios más tiempo a este temporizador. Entonces después de este Modo Dios, se acabó el tiempo, vamos a tomar este mango. Entonces permítanme hacer clic aquí, promover esto a una variable. Y llamémoslo daña el manejo de los efectos. Y conectemos a aquellos así. Por lo que ahora tenemos una variable de esto. Ahora, después de que se acabe el tiempo del Modo Dios, vamos a tomar este temporizador, que es éste de aquí. Vamos a tomarlo y decir claro e invalidar el tiempo o por Handel, lo que significa eliminar este trozo, este temporizador. Entonces después de que termine el modo dios, vamos a detener este código aquí. Y obviamente no queremos bucle esto. Esto sólo va a correr una vez. De acuerdo, así que vamos a compilar y ahorrar. Así que vamos a probarlo. Demos clic en Play y déjame encontrarme con el enemigo. Voy a parpadear. Y después de que acabaron los tiempos de la madrina, ya no parpadeo. Y si vuelvo a entrar al enemigo, va a parpadear. Voy a volver otra vez. Permítanme en realidad, este es el cliente. Déjame volver a la obra como servidor escuchado. Quiero jugarlo como el servidor y clientes. Voy a minimizarlo solo para asegurarme que no he comprado nada. Siempre agradable probar las cosas en multijugador. Entonces como el jugador ahora, como cliente, estoy parpadeando y está funcionando como servidor. Estoy parpadeando trabajando en ambos. De acuerdo, así que está funcionando bien. Y de nuevo, puedes cambiar al cliente, asegurarte de que todo esté funcionando. Sólo estoy echando un vistazo a los dos aquí. Entonces Serena y Luke, si entro en ella, estoy parpadeando. De acuerdo, entonces funciona. Impresionante. Por lo que ahora funciona el código. Siempre puedes intentar organizar esto un poco, así que te aconsejaría que lo hicieras. Permítanme sólo estos más cerca juntos. Pero éste podemos arrastrarlo hasta aquí para que no sea demasiado confuso. Y con este sprite, rápido aquí, puede importarle nodo redireccionado así como aquí. Se puede hacer un nodo redirigido como este. Y para éste también puedes hacer una nota reescrita. Algo como esto aquí. Por lo que se ve un poco más organizado. Este de hecho puedo simplemente tirar aquí abajo. Y este sprite, también puedes hacer una nota reencaminada. Así que siempre agradable estar organizado. No puedo decir lo suficiente porque en algún momento tu proyecto será muy grande y esto será muy difícil de leer. Entonces algo como esto. Ahora tienes todo eso terminado. De acuerdo, Así que ahora este es el efecto de daño. Y ahora por este efecto de daño, ahora puedes, ahora, por los efectos de daño V, puedes convertirlo en un, un Evento de Interfaz de Blueprint. Pero en realidad esperemos con eso en la próxima lección porque vamos a sumar un impulso. Así que pasemos a la siguiente lección. 80. Pulsa el impulso del jugador: Muy bien, así que como última cosa para el daño aquí, creo que necesitamos sumar un impulso al daño. Entonces cuando el jugador golpea al enemigo, cuando entro en el enemigo, lugar de solo parpadear, también quiero empujar a mi personaje, por lo que da ese impulso. Así que hagamos eso. La forma en que haces esto es tomando el movimiento del personaje y dices impulso establecido y en realidad no establecer impulso. Déjame solo buscar, creo que se llama añadir impulso aquí, añadir impulso. Y se quiere agregar ese impulso aquí. Así que permítanme arrastrar esto hacia atrás y añadir aquí el impulso. Así como esto. Así que ahora para este anuncio, para este impulso de nuevo, tenemos que arrastrarlo a través de estos, estos eventos aquí, igual que antes. Y ahora puedes poner el impulso. Ahora hay que recordar revisar este cambio de velocidad aquí. Y vamos a compilar y ahorrar. Y ahora hemos sumado algún impulso ahora, pero este impulso, puedes probarlo. Por ejemplo, escribo 500 en la z y se puede ver qué pasa. Puedes intentar hacer click en Play, siempre agradable probarlo. Así que lo que sea que estés haciendo, pruébalo. Ya se puede ver cuando golpeo al enemigo, estoy siendo empujado hacia arriba en la z por 500. Así, estoy agregando impulso. ¿ De acuerdo? Ahora podemos hacer algo divertido aquí por el impulso. Ahora, voy a usar el mismo método que lo que he estado usando antes. Así que déjame ver dónde realmente usé ese método. Podría ser la base enemiga aquí. Por aquí. En realidad, hemos comprobado dónde se encuentra el enemigo en comparación con el jugador. Y estamos moviendo a ese enemigo. En realidad quiero hacer lo mismo. Entonces para el jugador, como si vienes por aquí, quiero empujar a mi jugador hacia atrás. Si voy por aquí, quiero empujar a mi jugador hacia atrás de esta manera. Entonces dependiendo de qué lado del enemigo estés golpeando al enemigo o al enemigo que te golpee. Quieres ser empujado hacia atrás hacia ese lado. Entonces al igual que la base de la ONU, vamos a usar este mismo método. Entonces voy a volver a mi base de jugadores aquí. Y la forma en que podemos hacer esto es que en realidad voy a mover esto un poco hacia abajo, así que tengo más espacio aquí. Voy a conseguir ahora la ubicación del jugador. Así que consiga la ubicación real. Recuerda que estamos dentro del jugador en este momento. Entonces consigue ubicación real con una autoreferencia y los objetivos. Voy a romperlo porque sólo nos interesa el valor x, porque el valor x es esto aquí. Sólo nos interesaba eso. Ahora necesito la ubicación para mi, para mi enemigo y podemos conseguirlo desde aquí. Por lo que no hemos hecho esto hasta ahora. que podamos hacerlo desde aquí instigado por, recuerda que estamos recibiendo daño del enemigo para que podamos conseguir el controlador para el enemigo. Por lo que puedo hacer clic derecho aquí, promocionar esto a un controlador o variable y llamarlo controlador enemigo. Vamos a conectarlo ahora. Y puedo hacer click aquí y replicarlo solo para asegurarme de que los clientes puedan ver el valor de esta variable. Y ahora tenemos al controlador enemigo. Para que podamos tomar este controlador y C se controla ****. Por lo que ahora tenemos el peón del enemigo. Y podemos decir conseguir ubicación de actor. Por lo que ahora tenemos la ubicación del enemigo. Y quiero romperlo de nuevo porque sólo me interesa el eje x. Ahora voy a preguntarme aquí, ¿es esta x para el jugador? Es menos de lo que es para el enemigo? Bueno, eso significa otra vez, es si mis enemigos de pie aquí, y si mi jugador está parado aquí, básicamente estoy preguntando los jugadores x valor menor que los enemigos. Y en este caso, es falso porque mi personaje, si en realidad puedo pegarlo y no golpear el, ahora no puedo darle aquí. Entonces déjame encontrarlo aquí. Serena. Así. Ahora para el jugador va a ser falso en este momento porque los enemigos x es en realidad más bajo que mi jugador. Aquí en el jugador, ahora mismo estamos preguntando, es mi jugador más bajo que mi enemigo? ¿ Cuál es falso? Así que volvamos aquí desde el impulso antes de hacer nada, vamos a conducir desde aquí y digamos make vector. Al igual que antes. En lugar de copiar pegar nuestro código, si volvemos al conjunto base enemigo de peine frente a nuestro código, solo podemos usar este selecto float. Así que arrastra desde aquí y di Seleccionar cargas. Ahora lo que puedes hacer es aquí y la interfaz que ves aquí, hicimos el plus aquí porque queríamos la ubicación más lo que nos estábamos mudando. En este caso, solo estás aplicando una fuerza como si estuvieras aplicando un impulso, por ejemplo, 500. Entonces realmente no nos importan los valores para la x e y y z Solo queremos que sea estático. Entonces aquí por la z, vamos a añadir algo así como 300. Por lo que estábamos ganando un impulso de 300 hacia arriba. Para la x, realmente no vamos a tomar esto y decir más esto y así sucesivamente. Porque éste es solo el impulso estético, por ejemplo, algo así como 300. Es, por ejemplo, 300 o menos 300 dependiendo de la dirección de la que vengo. Por lo que ahora tenemos que determinar, voy a conectarlo aquí. Tenemos que determinar qué dirección es cuál. Entonces digamos aquí, estoy parado aquí. Veamos, vamos a estar aquí parados como el jugador. Ahora estoy preguntando, ¿mi valor x es menor que los enemigos? Voy a echar un vistazo click a este jugador. Se puede ver que es el 615. Da click en este enemigo es 710. Entonces en este momento, sí, mi x para el jugador es menor que los enemigos. Entonces en realidad va a ser cierto en este caso cuando entras. Entonces es verdad ahora. Así que estoy caminando hasta el enemigo. En realidad quiero que me empujen hacia atrás. Y ahora mi retroceso es en realidad apenas menos 300 porque puedo ver empujar al jugador hacia atrás va en el menos. Va a bajar este número. Entonces aquí voy a escribir menos 300. Y obviamente si estás del otro lado, así que se va a poner falso, es decir, ahora necesito hacer esto aquí. Falso significado aquí. Ahora vas hacia el enemigo. Estás llegando a ir empujado lejos y empujando al jugador lejos. Esto, este lado de aquí va a decir más 300, lo que significa que vas a ser empujado lejos de esta manera aquí. Entonces aquí no tiene sentido. Digamos Uno, 100. Y ahora va a aplicar ya sea menos 300 o 300 en el impulso. ¿ De acuerdo? Así que sólo organicemos esto un poco mejor, así. De acuerdo, entonces ahora tenemos este código aplicado y creo que no nos perdemos nada ahora. Así que hagamos clic en Play y veamos qué pasa. Ahora soy el jugador. Estoy caminando hacia el enemigo. Voy a ser empujado por este lado. Eso es correcto. Ahora, voy a ir de este otro lado aquí. Eso es correcto. Voy a ser empujado por este lado. Si voy de este lado, de este lado, voy a ser empujado por este lado aquí. Así que ahora estoy siendo empujado la dirección correcta ahora. ¿De acuerdo? Por lo que ahora podemos hacer, a veces puedes hacer cosas divertidas como puedes ver aquí. Se puede añadir un, un impulso. El enemigo te empuja lejos mientras saltas. Entonces tenemos mucha fuerza. Si lo desea, puede bajar la fuerza de valor z a 150 quizá, veamos cómo se ve eso. A lo mejor es demasiado en la z. puedo hacer algo como esto. O puedes simplemente, creo que fue gracioso. Tal vez sea algo así como 250 en lugar de 300 o arreglar algo como esto. Lo ves a veces como cuando ya tienes velocidad, puedes ser empujado lejos. Si lo desea, puede establecer su propia velocidad a 0 antes de que se dañe. Esto solucionará el problema, pero creo que esto es, esto está bien aquí. Ahora puedes ver aquí esto, este cerdo de aquí. Si lo golpeo y voy aquí, a veces broca aquí en la rampa. Y esto es porque al igual que tratar de ver el video anterior donde arreglamos el caracol para que no ladrara por aquí. Realmente no lo hicimos por el cerdo porque el cerdo es, se puede ver que es dólares ahora. Y realmente no lo arreglamos para el cerdo, sólo para el caracol porque en realidad el cerdo está corriendo hasta aquí. Pero puedes simplemente, al igual antes cuando lo arreglamos en el video anterior, creo en la sección uno, son el enemigo. Cuando hicimos al enemigo, solo se puede aumentar la esfera, esfera colisión y luego tirar hacia abajo al enemigo. Y eso solucionará el problema. De acuerdo, entonces ahora tenemos este efecto de empuje. Estoy parpadeando efecto cada vez que nos estamos dañando. Por lo que ahora estamos listos, como tenemos todo el efecto de daño hecho. Permítanme simplemente organizar esto aquí. Permítanme sacar esto por aquí. Por lo que ahora que tenemos todo esto terminado, realidad podemos empezar a trabajar en la muerte de los jugadores. Y después de eso, creo que podemos hacer la interfaz de usuario. Así que permítanme simplemente arrastrar esto más cerca, se asegura de que también se organice la base enemiga. Y creo que todo se ve bien. Si lo desea, puede comentar todo. Y de nuevo, puedes organizar todas estas cosas aquí dentro de categorías. Y creo que todo se ve bien. Podemos bajar esto así, hacer que se vea un poco mejor. No lo sé, algo como esto. Y sí, eso fue todo por este video. Y guardemos todo y pasemos a la siguiente. 81. Muerte del jugador: Trabajemos ahora en la muerte de los jugadores. Entonces, hasta ahora hemos estado haciendo el efecto de calor y cuando entramos en el enemigo, estamos recibiendo golpes y perdiendo salud. Pero hasta ahora no hemos trabajado en la muerte. Entonces esto es lo que tenemos hasta ahora. Ahora dejemos el juego y empecemos con las muertes. Entonces tenemos muchas cosas que hacer aquí. Así que vayamos primero a la base de jugadores. Y dentro de aquí queremos hacer un nuevo evento personalizado. Y este es el daño V efectos. En realidad lo voy a comentar para que no nos confundamos aquí. Y sólo voy a llamarlo dañar los efectos. Entonces tenemos el daño aquí. Aquí es donde queremos codificar. Lo principal. Entonces déjame mover este efecto de daño hacia abajo. Y este es el ataque. Voy a comentar eso también. Caer ese saco. Ok. Entonces aquí por esto, cualquier daño. Déjame echar un vistazo aquí. Entonces aquí estamos calculando la salud y estamos estableciendo la nueva salud. Y lo que queremos hacer aquí, queremos comprobar si la salud es 0 porque queremos llamar al evento de muerte siempre que sea 0. Así que primero hagamos el evento de muerte. ¿ En qué debería consistir? Así que déjame mover esto aquí abajo. Hagamos un nuevo evento llamado y solo podemos convertirlo en una costumbre. En realidad, sólo va a contener un booleano, así que ya lo sabemos. Así que vamos a la base del reproductor de interfaz aquí. Y llamémoslo muerte. Y podemos sumar una entrada de un booleano llamado B está muerto. Entonces el jugador está muerto. Y aquí podemos llamar a ese evento llamado muerto o muerte, no, no muerto. Y aquí lo que podemos hacer es que podemos llamar a un evento personalizado llamado en realidad lo que descubrí. Así que cosas muy cool. Si haces clic con el botón derecho, en lugar de escribir personalizado, puedes escribir puntos T y en tus puntos T correctos, obtienes automáticamente estos eventos personalizados. Así que muy, muy rápido atajo aquí para hacer los eventos personalizados y vamos a convertirlo en las muertes del servidor. Entonces pasando por el servidor, haz que se ejecute en el servidor confiable. Y vamos a ejecutar el desde el servidor de aquí arriba. Y entonces tenemos que hacer que el booleano b esté muerto. Y pasémoslo por aquí. Ahora lo que podemos hacer aquí, podemos hacer clic derecho y promocionar a una variable. Y podemos llamarlo ser. Es eso, bien, entonces éste, lo que quiero hacer, quiero, así que cuando nos atropellan el enemigo y tenemos 0 salud, queremos establecer nuestra animación de muerte. Y por cierto, he cambiado así, hasta ahora en el video. Te dije antes que necesitábamos extraer nuestra animación de muerte. Pero me di cuenta de que en realidad era mejor hacer esta animación de muerte en un solo fotograma. Así que si estás viendo esto, probablemente solo tengas un marco. Entonces vamos, déjame borrar todo esto aquí. Y déjame solo importar esta animación de muerte cerebral aquí que tienes en tus materiales de curso. Y permítanme aplicar la textura de papel 2D y crear un sprite, llamarlo S muerte, y hacer un libro flip rápido de ese llamado muerte o muerto. Vamos a llamarlo muerte en lugar de deuda. Y los marcos por segundo sólo van a ser uno. No creo que importe para éste. Vamos a cerrarlo ahora tenemos eso. Voy a ir rápido aquí a Luke y Serena y al jugador de planos. Voy a sumar los de aquí abajo y la animación de muerte, solo para asegurarme, también asegúrate de que los hayas agregado aquí cuando abras los valores predeterminados completos de clase de editor de blueprint. Y justo lo que hemos estado haciendo hasta ahora. Por lo que aquí abajo en la información del jugador. Y voy a sumar mi animación de muerte nuevo aquí para Serena. De acuerdo, entonces tenemos esto agregado ahora, compilar y guardar todo. Por lo que queremos jugar esto, este flip book aquí cada vez que estamos muertos. Entonces volviendo a la base de jugadores, ahora, siempre que esto sea, así que de nuevo, estamos haciendo un cambio visual, estableciendo un flip book. Por lo que tenemos que pasar por un rep notifique, ya que este es el servidor y esta roca notifique, lo único que va a hacer. Primero tomemos esto está muerto y asegurarnos de que sea verdad. Entonces cuando es cierto, cuando estás muerto, queremos llamar al estado de los movimientos establecidos, o al jugador que el movimiento se declara a la muerte. De acuerdo, para que llamemos a la muerte y sólo para asegurarnos de que tengamos ese set. Entonces yendo a los movimientos de disturbios estados y aquí que no hemos dicho eso hasta ahora, voy a copiar pegar este flip book. Y conectemos aquí la muerte. Y si no has editado, en, editarlo todavía, recuerda aquí en el, este es un estados de movimientos de enumeración, y este es el que hicimos antes. Entonces si quieres editar, si no has editado antes, puedes ir al estado del movimiento de enumeraciones, y puedes agregar muerte aquí, y aparecerá en la lista aquí. Muy bien, así que para la animación, hagamos click aquí y tenemos una animación de muerte para la, para la estructura. Y vamos a hacer clic en él para que aparezca. Y podemos arrastrar de ella y sumado. Si no aparece, recuerda que también tienes una, una flecha aquí. Puedes hacer clic arriba y abajo. A veces se esconden. Si no los necesitas, realidad puedes hacer clic en Ocultar alfileres desconectados y los esconderás un poco más limpios. Puedes hacer esto un poco más limpio. Se ve un poco desordenado en este momento, algo como esto. Ok, compuestos ahorrados ahora tenemos eso agregado. Volvamos a la Gráfica de Eventos. Entonces cada vez que el jugador está muerto, así que siempre que esto se ponga en verdad, va a jugar nuestra animación de muerte solo para asegurarnos de que el jugador no pueda moverse. Voy a tomar el Componente de Movimiento de Personajes y decir detener el movimiento de inmediato. Solo quería asegurarme de que el personaje no se esté moviendo, así así. De acuerdo, así que ahora eso está conectado, también vamos a asegurarnos de que el jugador no pueda moverse siempre que esté muerto. Entonces yendo al Gráfico de Eventos, voy primero a mi, éste se mueve a la derecha y a la izquierda, tomando esto está muerto. Y de nuevo, al igual que antes de escribir un NO booleano. Y a partir de aquí, simplemente haciendo click en este Agregar pin, entonces puedes añadir más de ellos. Ahora en realidad se puede conectar esto también. Así que siempre que el jugador, si el jugador está subiendo, no se puede mover a izquierda y derecha. Cuando el jugador está atacando, obviamente no se puede mover a izquierda y derecha. Y además cuando estás muerto, no puedes moverte a izquierda y derecha es que tenemos que agregarlo a cosas que no queremos que el jugador use. Entonces por ejemplo aquí también aglutinando arriba y abajo. Y podemos decir y aquí y booleano aquí. Y podemos sumar estos atacando y conectarlo aquí en su lugar. Por lo que necesitamos estructurar esto un poco. Ahora se está poniendo un poco desordenado, pero eso está bien. Siempre podemos limpiarlo pronto. Déjame copiar pegar. Esto también está muerto, y podemos editar para el salto. Entonces aquí por el salto, no puedes saltar si estás muerto. Y lo último es el ataque. Entonces el ataque está aquí abajo. No puedes atacar si estás muerto. ¿ De acuerdo? Así como eso. Sólo para asegurarnos de que no tengamos bichos. Por lo que comprobamos con los booleanos así. Vale, entonces ahora no puedes atacar, vale, así que tenemos esto muerto y qué debería pasar cada vez que estés muerto? Hagámoslo más tarde. Entonces, ¿cuándo queremos llamar a este evento aquí? Queremos llamarlo siempre que la salud sea 0. Entonces el cualquier daño aquí, el jugador se está dañando. Y estamos recalculando la salud aquí. Por lo que ahora tenemos aquí la salud actualizada. Entonces tomemos esto y digamos descanso. Y ahora tenemos esta salud. Y puedo decir iguales, esto es igual a 0. ¿ Qué debería pasar? Voy a dar a conocer los otros alfileres. Entonces, lo que debería pasar cada vez que la salud sea 0, podemos hacer una sucursal aquí. Entonces cuando la salud es 0, queremos llamar a nuestro evento de muerte. Entonces escribiendo la muerte, llamando a esto ese evento aquí y fijándolo para que sea verdad. De acuerdo, así que ahora esto es cierto. Siempre que sea falso, queremos hacer otra cosa, lo que significa que no estamos muertos, nos acaba de golpear. Por lo que en realidad voy a quitar esto de aquí porque probablemente necesitamos agregarlo aquí. No queremos dar, no queremos quitar el Modo Dios y también tenemos este retraso antes comprobar si el jugador está muerto o no. Porque recuerda, si haces esto, así, entonces vas a retrasar el código. Entonces estás calculando la salud, vas a retrasar el código. Y si estás muerto, en realidad vas a morir después de este retraso, que no tiene sentido porque ya estás muerto, pero hay retrasos en tu muerte y no tiene sentido. Así que en realidad veamos, haga clic en Control X para cortarlo y pegarlo aquí en su lugar. Sólo estamos calculando la salud así. Y ahora aquí abajo podemos hacer este código aquí. Si tu salud no es igual a 0, vamos a retrasarla aquí y quitar el modo dios. O si ya estás muerto. Entonces si la salud es 0, entonces vamos directamente al evento de muerte. Y todavía queremos mantener el Modo Dios para que sea verdad aquí. Porque cuando estás muerto, no queremos que el enemigo te golpee. Así que sigo manteniendo el modo dios encendido. De acuerdo, así que veamos aquí abajo. Entonces la profundidad se va a relacionar. Jugamos en realidad el juego y veamos qué pasa. Así que déjame hacer click en Play. Y ahora podemos colocar este personaje, te estás dañando. En realidad déjame bajar la salud de mi personaje para poder probar esto y no tengo que ser golpeado muchas veces. Así que déjame revisar para qué puse el daño. Recuerda en el enemigo, para el caracol y el cerdo, has añadido daños. Y déjame revisar cuál fue el daño. El daño para el caracol aquí en la información animal. El daño fue de diez y fueron 20, creo, para el cerdo. Así que déjame poner mi salud por el jugador. Aquí en la información del jugador. Déjame ponerlo a 20. Así que me da un golpe por el cerdo, pero me dan dos golpes del caracol. Por lo que haciendo click en Play para que pueda probar eso rápidamente. Ahora podemos ver. Yo morí. Y en realidad mi, mi tumba aquí parpadea cuando estoy muerto. No me gusta eso, así que está parpadeando aquí. Y en realidad no me gusta eso. Entonces tenemos que reestructurar eso mató un poquito. Porque cuando nos dañamos aquí en el, cualquier daño, esta es la base enemiga. Aquí en la base del jugador. Estamos recibiendo un impulso y estamos consiguiendo ese efecto parpadeante. En realidad quiero hacerlo cada vez que no estoy muerto. Porque cuando estoy muerto, no quiero parpadear. No quiero que mi tumba parpadee. Entonces en realidad tenemos que separarlo porque en realidad me gustó el impulso aquí. Me gusta el impulso, pero no me gusta parpadear. Entonces tenemos que separarlo. Entonces separemos este efecto. Entonces aquí en los efectos de daño, voy a hacer un evento personalizado, y éste va a ser un impulso. Entonces en realidad voy a convertir esos en Interfaces de Blueprint. Entonces voy a ir a la interfaz y la base del jugador aquí. Hagamos uno ahora llamado impulso de daño. Y el otro que teníamos. Así que volvamos. El otro se daña vía efectos y toma el color y el material como entradas. Así que permítanme hacer uno nuevo llamado dañar los efectos. Bien, entonces el impulso toma un vector. Entonces aquí abajo, vector, y sólo voy a llamarlo el impulso. Y el otro, el daño vía efectos toma un color. Y puedes ver aquí, si haces click en el color, puedes ver qué tipo de variable es. El material es interfaz material y éste es un color lineal. Para que puedas volver a la interfaz y elegir aquí material. Y se llamaba el material. No creo que haya algo llamado interfaz material. En realidad fue una interfaz material, por lo que tenemos que seleccionar esta seleccionada aquí. Y el otro era un color lineal aquí, y éste es un color lineal. De acuerdo, así que solo llamamos a este color. Y ahora va a ser, nuevo, voy a eliminar esto, Compile y Save, va a buck otra vez, y tengo que eliminarlo tal vez. Así que vamos a llamarlo color de capa en su lugar. Y éste, material del jugador. De acuerdo, entonces compilar y guardar. Y ahora volvamos a llamarlo aquí. Llámalo daño, los efectos aquí. Y el material entra aquí, la alerta lineal entra aquí y el impulso se ha separado. Por lo que voy a hacer clic en el servidor uno y eliminarlos pulso, se lo eliminará de aquí. Y este multicast, voy a quitar también el impulso porque no lo queremos aquí. Voy a quitar ese impulso de aquí y solo pegarlo aquí arriba. En cambio. Voy a hacer un nuevo evento que recuerde que acabamos de hacer el impulso de daño. Por lo que voy a llamar a este evento de impulso de daño. Nuevamente, correrlo a través del servidor como Harvey daño impulso. Y éste tendrá aquí este vector. Sólo voy a enchufarlo así y conectarlo aquí arriba llamado el servidor-1. Y vamos a correr por el servidor primero aquí abajo. Y llamemos al daño del servidor en las encuestas. De acuerdo, entonces ahora están conectados. Ahora los hemos separado. Y permítanme volver a conectar este multicast antes de olvidar éste, en realidad, éste, lo estoy haciendo mal aquí. Tenemos que agregar un multicast. Así que de nuevo, a un multicast, el impulso de daño. Y de nuevo necesitamos un vector aquí abajo. Y vamos a ejecutarlo a través de un multicast y confiable. Y tenemos que ejecutar el multicast aquí a través de este servidor. Entonces éste. De acuerdo, entonces ahora tenemos esa edición. Voy a hacer un poco más de espacio. Por lo que tenemos espacio para ese evento. Así como esto. Y ahora veamos si nos falta algo. Y creo que esto se ve bien hasta ahora podemos acercar esto un poco más, no tiene sentido tenerlo tan lejos. Así. Muy bien, entonces ahora tenemos el impulso dañado separado. Entonces, lo que podemos hacer aquí arriba, ahora, te va a dar un error porque realmente no tenemos un impulso aquí. Así que bajemos y echemos un vistazo. Entonces hemos dañado el impulso, el impulso, los efectos, ¿de acuerdo? Éste está dando un error. Vamos a eliminarlo. No sé por qué no está eliminando el impulso. Así que busquemos daños. Impulso. Quiero que mi impulso esté aquí. Por mi impulso, quiero que esté aquí. Entonces esto es correcto. Vamos a enchufarlo. Pero quiero mi color y no estar aquí, pero quiero tocar mi color cada vez que no estoy muerto. Entonces no quiero el efecto parpadeante. No quiero tocar mi efecto parpadeante aquí arriba cuando esté muerto. Así que juguemos el efecto parpadeante aquí en su lugar. Y se le llamaba daños efectos UV aquí. Y para el daño vía efectos de nuevo, hay que seleccionar un material, o bien eliminarlos aquí. Así que de nuevo, haz clic en Configuración, muestra el contenido del desarrollador, muestra el contenido del motor y muestra el contenido del plug-in. Y ahora se puede seleccionar el material y se llamaba Sharon, escluso y C son translúcidos y bajar y encontrarlo aquí translúcido, material sprite sin luz y cambia el color del jugador a 1.5110 en el alfa. Rápido, vale, así que ahora lo tenemos como antes. Y si voy a bajar y echar un vistazo aquí, por lo que el material se fija a lo que dijimos y luego lo vamos a volver a poner de nuevo a la mezquita sin luz, que era nuestro color normal. De acuerdo, Así que eso se ve bien. Ahora, en realidad probemos y veamos si esto es bueno ahora. Así que vamos a jugar. Ahora nos están golpeando. Eso es lindo. No me gustan los efectos parpadeantes, así que eso es lindo ahora. Y lo voy a probar como el servidor también. Entonces Platón como servidor de escucha. Y sólo para asegurarme. De acuerdo, entonces ahora somos un tubo y eso se ve muy bien. Entonces eso es todo lo que teníamos que hacer por la muerte del jugador. Y el siguiente, vamos a crear el menú I, en realidad podamos tener alguna interfaz de usuario y actualizar nuestra salud. 82. Cómo crear la interfaz de usuario principal: Ahora diseñemos la interfaz de usuario principal para el juego. Entonces, hasta ahora no tenemos una interfaz de usuario en el juego. Entonces vamos a la interfaz de usuario. Y aquí vamos a hacer clic derecho e ir a Interfaz de usuario y crear un Blueprint Widget. Y selecciona éste, widget, widget de usuario. Y llamemos a este WB hizo. Entonces esta es la interfaz de usuario principal. Haga doble clic en él aquí. Primero, de nuevo, tenemos que buscar Canvas y necesitamos agregar un Canvas antes de hacer nada dentro de aquí, lo que quiero crear en este momento es quiero crear nuestra Barra de Salud aquí abajo. Entonces el principal resultado que estamos buscando es realmente hacer esto aquí. Por lo que siempre es agradable visualizar y saber lo que estás haciendo antes de hacerlo. Entonces cuando miro esto, tenemos una superposición porque tenemos barras de salud encima de un fondo. Esto significa que tenemos una superposición y luego tenemos dos barras. Por lo que el Health Bar y el bar de experiencias uno encima del otro. Y puedo decirme a mí mismo, esta es una caja vertical. Recuerda que usamos la caja vertical y esto porque se están alineando verticalmente. Y sí, probemos dos. Tratemos de empezar aquí. Entonces primero necesitamos una superposición porque necesitamos un fondo con barra de salud encima de ella. Entonces cuando agregaste sube aquí, déjame simplemente, puedes rediseñar aquí el punto de anclaje. Recuerda hacer eso. Entonces en la superposición, pon el punto de anclaje a abajo aquí, porque aquí es donde lo queremos. Y déjame arrastrarlo por ahora, por aquí abajo en alguna parte. Por lo que aquí queremos sumar primero el fondo y el fondo es sólo una imagen. Entonces busca un editor de imágenes encima de la superposición. Da click en esa imagen y vamos a cambiar esta imagen a realmente se puede ver me dan muchas cosas raras y esto es porque hemos habilitado todas las de la lección anterior. Así que esconde el contenido del plug-in show, ocultar el contenido del motor de show y ocultar el contenido de show developer. Volvamos aquí y pinchemos sobre estas imágenes para que podamos ver las nuestras únicas. Y seleccionemos el botón llamado, Cuadrado Negro plano. Éste. Aquí puedes llenar todo el asunto, así que una línea horizontal y verticalmente. Entonces llena todo el asunto. Voy a duplicarlo. Control D para duplicar, o podemos hacer clic derecho y pulsar Duplicar y seleccionando esta imagen. Ahora, ahora quiero cambiar éste a los pisos cuadrados azules de botón. Y quiero hacer el y a cinco, en realidad sólo cinco, se puede ver nada cambiado. Y esto es porque tenemos esta alineación vertical seleccionada. Voy a seleccionar esta alineación superior. Así que sólo estoy decorando mis antecedentes. Puedo eliminar todas las líneas discontinuas haciendo clic aquí arriba. Así que sólo estoy decorando un poco. Voy a hacer click en Control D en la imagen aquí arriba. Y lo voy a alinear en la parte inferior. Así que ahora tengo este diseño impresionante. Y lo que queremos hacer ahora es tener suerte. Si le doy un vistazo a esto antes. Necesitamos ahora una caja vertical donde tengamos estas dos barras de progreso una encima de la otra. Así que permítanme buscar un cuadro vertical, agréguelo a la superposición aquí. Ahora, busquemos barra de progreso. Entonces barra de progreso aquí, puedes arrastrarla a la caja vertical. Y lo que puedes hacer ahora es que puedes, ahora puedes ver, no se puede ver mucho porque hay que agregarlo en realidad. Entonces en el estilo para la barra de progreso y pienso por el cuadro vertical, permítanme realmente alinearlo aquí en el centro primero, este es el bichos verticales Haciendo clic en la barra de progreso. Voy a cambiar la imagen de fondo. Déjame cambiarlo a éste, cuadrado negro, plano oscuro, por lo que es un poco más oscuro que este color aquí. Entonces lo que quiero hacer es en realidad quiero alinear mi caja vertical aquí todo el camino horizontalmente. Entonces mi barra de progreso está alineando todo el camino. Y lo que quiero que hagas ahora es ir aquí a la derecha y a la izquierda. Entonces aquí a la derecha. Entonces lo estoy empujando desde la derecha, lo estoy empujando. Entonces no está aquí en los bordes. Voy a empalmarlo con tal vez 203030, y a la izquierda 30 también. Y podemos intentar sumar, Volvamos aquí por la barra de progreso. Vayamos a la imagen de factura y a la imagen de la carpa para fiestas. Y agreguemos uno rojo para la salud. Por lo que esta llave roja 14 también, una roja. Por lo que ahora se puede ver que es mucho más grande. Y si aumentas este porcentaje, puedes ver aquí este porcentaje está llenando, pero realmente no se lee como lo que elegimos. Y esto es porque hay que bajar por la barra de progreso y el Color de Relleno y Opacidad por alguna razón no tengo idea de por qué es azul. Para que puedas hacerlo. Aquí, si acabas de escribir 111 o simplemente puedes aumentar y disminuir estos deslizadores, solo hazlo blanco aquí. Y si es de color blanco, puedes ver el color de tu botón verdadero o el color de la barra de progreso aparecerá. Entonces esta es la barra de progreso. Muy cool. Y en este momento se está alineando con mucho aquí. Tan caja vertical, estamos alineando aquí. Y para la barra de progreso, creo que esto es bueno por ahora. Siempre podemos cambiar el tamaño si es demasiado grande después. Entonces, hasta ahora se ve bien. No obstante, en realidad estamos necesitando una superposición porque recuerda, tenemos el texto en la parte superior de la barra aquí, así que en realidad necesitamos un texto aquí, así que en realidad necesitaba primero una superposición. Así que arrastremos una superposición dentro de esta caja vertical y pongamos esta barra de progreso en la superposición. Por lo que también podemos añadir texto encima de él aquí y la superposición. Por lo que tenemos barra de progreso y un texto encima de ella. En el texto, voy a alinearlo en el medio. Y llamémoslo al 100%. Entonces, por ejemplo, esta es la salud. Voy a cambiar el texto a, probemos semi negrita. Semi audaz, en realidad audaz, tal vez Source Sans Pro Bold. Y creo que en realidad vayamos con el negro. Negro. Y ésta de la talla, voy a reducirla a 14. Texto tan muy pequeño aquí. Voy a darle un esbozo. Entonces aquí en la configuración de contorno, así que voy a ponerlo a uno. Por lo que tiene un esquema. Si lo desea, también puede agregar sombras. Entonces primero aquí en el color de la sombra, hay que ir al Alfa. Y si escribes una, las sombras aparecen completamente. Y si escribes 0, déjame subir tu 0.35. Significa treinta y cinco por ciento sombra. Y voy a mover la sombra offset dos a dos por lo que está un poco más lejos. Puedes ver si agregas más, va a ir un poco más lejos del texto. Entonces el 22 es bueno para mí. De acuerdo, entonces lo que puedes hacer ahora, siempre puedes disminuir el tamaño disminuyendo este y aquí. Creo que es demasiado grande. Entonces disminuyendo la y. Así que algo como esto, tal vez como 42. Sí, creo que eso es bueno para ti también. También voy a copiar pegue eso aquí arriba. Y ahora se ve bien. Entonces esta es nuestra Barra de Salud. Ahora, lo que podemos hacer es compilar y guardar, y podemos duplicarlo. Por lo que podemos hacer clic en la superposición. Podemos hacer clic en Control D. Ahora lo duplicamos. Y permítanme añadir un espaciador entre estos dos espaciadores entre las superposiciones. Y este espaciador es tal vez diez y el y Así que hay un poco de espacio entre ellos. A lo mejor 1515 es bueno. Entonces este es el bar experimentado. Entonces en lugar de rojo, cambiémoslo a amarillo o verde. Ese suele ser el estándar para la experiencia. Y cambiémoslo aquí atrás bajo la Barra de Salud, era 42. Así que déjame copiar eso y pegarlo aquí por 24242, así. Y para el experimentado bar. Y tal vez va a decir algo así como 23 experiencia que tienes de 150 que se necesita para subir de nivel. Entonces algo así. Por lo que ahora tenemos esa interfaz de usuario dijo. Y de nuevo, recuerda hacer clic en la superposición, cambia tu ancla a aquí abajo. Y puedes intentar ajustar esta posición en la x e y. voy a habilitar las líneas discontinuas que en realidad pueda ver dónde está colocada. No sé, algo como esto realmente no importa por ahora. Vamos a compilar y ahorrar para la respuesta. Queremos hacer algo como esto donde dice que te han matado y luego dice por lo que te han matado. Y luego presionas bien para responder. Así que de nuevo, necesitamos una superposición para poner algo de texto encima de él. Y necesitamos un botón con una superposición porque tenemos un botón y texto encima de él. Así que volvamos aquí y agreguemos primero una superposición. Buscando superposición, voy a minimizar esto aquí. Voy a añadirlo al lienzo. Esta superposición se va a colocar en el medio aquí, medio, aquí arriba arriba. Y voy a escribir 0 y el puesto. Y se puede ver que alinea no en el medio lo que alinea aquí en esta esquina. Para que puedas ajustar esta alineación aquí puedo ver que es 0.5 si quieres alinearla perfectamente en el medio. Y tal vez por la posición y, puedo decir 100s, así que está aquí abajo. Entonces ahora lo que puedes hacer aquí en la superposición, de nuevo, puedes agregar una imagen en la superposición. Puedes llenarlo horizontal y verticalmente y añadir este plano cuadrado negro. Y de nuevo, puede hacer clic en Control D para copiarlo aquí abajo. Y luego puedes cambiarlo a éste y alinearlo verticalmente. Puedes alinearlo en la parte superior. Y voy a cambiar el tamaño a cinco. Aquí. Nuevamente, estamos haciendo ese diseño. Haga clic en Control D y alinearlo a la parte inferior ahora. Por lo que tenemos este de nuevo. Y voy a quitar estas líneas discontinuas. Lo que puedes hacer ahora es que puedas agregar texto encima de él, y está dentro de un cuadro vertical. Entonces agregando una caja vertical a la superposición. Y ahora podemos sumar dos textos. Por lo que este texto. Y el segundo, el primero va a decir, te han matado. Entonces va a decir por qué, por ejemplo caracol. Y el otro va a decir, presiona OK para responder así. El primer texto aquí arriba, voy a cambiar la fuente a semi negrita aquí. Y el tamaño va a ser 12. Y entonces lo voy a alinear aquí con el medio en realidad, en lo mismo con éste, voy a alinearlo al medio. Y para este segundo, voy a cambiar la fuente a negrita. Voy a cambiar el tamaño a 18. El primero, quiero añadir una sombra también. Así que voy a bajar aquí y por la sombra ahora, si quieres hacer lo mismo por ambos, puedes seleccionar uno, sostener Control, seleccionar el siguiente, y solo puedes hacer la misma edición para ambos. Entonces aquí en el color de la sombra y el Alpha 0.35. Y para el desplazamiento de la sombra, voy a decir a dos. Entonces es un poco más lo que puedes ver hay un sutil efecto de sombra ahora en ambos textos. Ahora se puede ver que no están realmente en el medio, pesar de que los alinea a la mitad aquí. Y esto es porque, recuerda que están dentro de una caja vertical. Entonces la caja vertical necesita estar en el medio también. Al hacer clic aquí arriba y poner esa caja vertical en el medio arreglará el problema. Ahora podemos hacer esto un poco más grande para no tener este espacio condensado contexto. Así que sólo trata de redimensionarlo como quieras. Eso depende de ti. Realmente no importa. Algo como esto. A lo mejor se ve bien. Y déjame simplemente redimensionarlo así. Y ahora se puede añadir un espaciador entre estos dos. Creo que están demasiado cerca. Entonces permítanme añadir un espaciador entre estos dos textos. Y el espaciador se puede hacer o algo así como cinco. Entonces hay un poco de espacio entre ellos. Entonces ahora lo que necesitamos, en realidad, necesitamos este botón aquí. Para que puedan ver necesitamos este botón ok. Este botón ok está en realidad en una, necesitamos agregar una caja vertical porque tenemos este año y verticalmente tenemos un botón. Por lo que en realidad necesitábamos poner toda la superposición en una caja vertical. Entonces caja vertical ponla aquí abajo y puedes arrastrar esta superposición en ella. Simplemente asegúrate de que esta caja vertical, no la hayas colocado en esta superposición. Este error puede suceder. Simplemente minimice esto y asegúrate de tenerlos aquí donde deberían estar. Arrastremos esta caja vertical ahora. Ahora tenemos una caja vertical. Podemos hacer los anclajes más adelante. Vamos a añadir aquí en la caja vertical, tenemos esta superposición. Agreguemos otra superposición Con el botón y el texto. Así que busquemos el botón aquí, y busquemos texto. Aquí. Tenemos el botón y el texto para el botón. Añadamos un botón azul, por lo que éste se llama Blue Square flat. Y de nuevo puede hacer clic con el botón derecho en la tecla Mayús mientras mantiene pulsada con el botón derecho Copiar y mantener presionada Mayús mientras hace clic con O simplemente puedes hacer clic derecho y hacer clic en copiar y puedes ver el enlace aquí también. Yo seré Pegar. Voy a hacer lo mismo aquí. Cambia esta caja redondeada por una caja en su lugar. A la derecha, mantenga pulsada la tecla Mayús, haga clic con el botón derecho en CoBie , mantenga presionada Mayús Y para este margen, 0.5. Y estoy escribiendo 0.5 para que pueda azulejo correctamente. Por lo que voy a hacer clic derecho en esto aquí, copiar pega este margen. Y para este color tinte, para el normal, lo voy a mover hasta el blanco para que no haya tinte. Y para el Harvard, voy a ponerlo un poco aquí. Y para el pecho, voy a ponerlo un poco más oscuro que el que flotaba. Esta es una deprimida. Ahora, creo que esto es bueno. De acuerdo, Así que tenemos esto y para la iluminación, así que para el botón, en realidad esta superposición, toda la superposición, es, es alinear correctamente que en este momento. Entonces yendo a este botón, alineándolo aquí, llenándolo horizontalmente. Y qué tipos de pellets verticalmente, eso está bien. Para este texto, vamos a alinearlo en el medio. Va a cambiar esta fuente a negrita, y cambiando el tamaño a 14. Y voy a añadir otra vez una sombra, 0.35 y poner la sombra después de 222. Entonces tenemos la misma consistencia, el mismo diseño, y solo podemos escribir bien aquí. Por lo que tiene que haber un espacio entre el botón. Entonces hagamos un espaciador. Vamos a añadir un espaciador entre el, estas dos superposiciones. Podemos hacer tal vez como 20 o 15. Creo que 15 es bueno. Ahora se puede ver que el botón es grande y esto es porque hay que hacer click en el cuadro vertical. Ahora, recuerda que lo hiciste para llenar. Entonces aquí lo hiciste sentir en realidad también. Ya ves aquí lo hicimos sentir horizontal y verticalmente, que significa que si hacemos clic en el cuadro vertical y lo redimensionamos, debería redimensionarlo. Pero ese no es realmente el caso en este momento. Y esto es porque tenemos que hacer click en llenar aquí. Entonces en este momento está configurado para auto. En realidad tenemos que configurarlo para llenarlo, así que va a llenar todo el espacio. Me gustaría hacer mi dinámica de UI así para que pueda simplemente, en lugar de folk, en lugar de hacer el re-dimensionamiento aquí en las imágenes, me gusta simplemente llenarlo para que pueda hacer clic en el elemento padre del padre y puedo simplemente redimensionarlo como quiera, y será mucho más fácil para ti. ¿ De acuerdo? Esto como en realidad esto también es bueno, como avanzado porque más adelante cuando tengas multijugador y nombres y así sucesivamente, pueden ser más largos que tu interfaz de usuario. Entonces esto se estirará automáticamente, mucho tiempo que sea el nombre, y así sucesivamente. Entonces esto es en realidad muy, muy buena práctica. Así que déjame sólo algo como esto. Y creo, sí, creo que hay buena. Así que vamos ahora una línea está correctamente Click en el cuadro vertical. Se puede ver que el ancla está por aquí. Da click en el ancla, poniéndolo en la parte superior media, y escribiendo 00 en la posición. De nuevo, voy a alinear aquí 0.5 y escribir 100 y la y Por lo que lo empuja aquí abajo. Entonces así es como se ve hasta ahora. Vamos a compilar y ahorrar. Por lo que ahora hemos creado la interfaz de usuario y creo que se ve bien. Vamos a guardar todo, compilar y podemos agregar más cosas si necesitamos más cosas. Pero por ahora, creo que esto es bueno. Pasemos al siguiente video. 83. Cómo agregar la interfaz de usuario principal al Viewport: Ahora agreguemos la interfaz de usuario al controlador del reproductor. Y recuerda, la interfaz de usuario es del lado del cliente ella, y lo hacemos en el controlador. Entonces dentro del controlador del jugador, hacemos toda la interfaz de usuario. Y es del lado del cliente, lo que significa que solo eres tú como jugador. Solo verás tu propia interfaz de usuario. Otro jugador recibe sus propios ojos nuevos. Entonces no es que no estés compartiendo lo eres, solo estás mirando a la tuya. Esto es lo que el lado del cliente significa como ejecutarse en cliente propietario, solo se ejecuta en tu PC, en tu, en tu pantalla. Y no tiene sentido compartir. Una interfaz de usuario realmente no tiene sentido. Sólo se puede ver su propia salud. Y si quieres que otros vean su salud, siempre puedes compartir esa información si es necesario. Entonces ahora, aquí y el controlador del jugador, lo que hicimos antes es inicializar widget, lo que significa aquí en la selección de personajes. Entonces cada vez que hacemos clic en play, aparece la selección de personajes. Quieren hacer ahora también. No como que no queremos agregar el menú I a la ventanera directamente porque tenemos la pantalla de selección de caracteres. Pero lo que queremos hacer es agregar la interfaz de usuario principal después de la pantalla de selección de personajes. Pero queremos inicializar el widget también. Así que primero tomemos este de nuevo, crear widgets. Y de nuevo, lo hacemos en el cliente corriendo en poseer cliente. Aquí, vamos a seleccionar el menú que acababa de hacer como compuesto guardar. Y vamos a hacer clic derecho promovido a una variable, llamémoslo WB made. Eso es todo lo que teníamos que hacer aquí. No queremos agregarlo a la viewport porque si lo haces, en realidad va a agregar también la interfaz de usuario principal a la viewport. puede ver que agregó la interfaz de usuario principal. Realmente no queremos hacer eso. Entonces vamos a quitar eso. Y si no agregas a la viewport, puedes ver que lo editas como variable, pero no le has dicho al motor que realmente lo quieres en la ventosa. Y no lo queremos bajo el puerto de vista en este momento. Pero lo queremos hacer es cada vez que haga clic en o seleccione uno de los personajes, va a agregar la interfaz de usuario principal a la ventagráfica. Entonces lo que podemos hacer es que podamos cerrar esto. Recuerda aquí en la pantalla de selección de personajes en el gráfico, diseñamos estos dos eventos al hacer clic en uno de los personajes. Así que en realidad lo hagamos aquí. Vamos, ya tenemos el controlador del jugador. Por lo que sólo podemos llamar a este WB main que acabamos de hacer. Y aquí puedes buscar x y nuestra búsqueda a la que puedes escribir en este momento estamos eliminando la pantalla de selección cuando seleccionamos el personaje, pero queremos añadir esto también a la viewport. Por lo que queremos sumar nuestro personaje, nuestra interfaz de usuario principal. Voy a copiar pegue esto aquí abajo. Por lo que ahora si seleccionamos a Luke o Serena, vamos a sumar esto a las ventanillas. Sólo voy a hacer esto flips, hacer que esto se vea un poco mejor. Algo así. De acuerdo, entonces ahora lo vamos a sumar. Así que cada vez que hago clic en play, seleccionaré bucle por ejemplo. Ya puedes ver ahora tengo mi IU en la pantalla. Nuevamente, realmente no quiero que esto sea, estar disponible siempre que acabo porque este es el mensaje de la muerte o responda mensaje. Entonces lo que podemos hacer es ir a la interfaz de usuario principal. Podemos seleccionarlo aquí, seleccionar este padre , el cuadro vertical. Se puede ver que este es el uno. Y lo que queremos hacer con éste es aquí, aquí abajo y la visibilidad. Cambiemos la visibilidad a oculta. No queremos verlo enseguida. Entonces vamos a esconderlo así como esta barra de progreso. Por lo que la salud está al 100% para empezar. Por lo que en realidad estoy aumentando el porcentaje de impago a 100. Y experimentaron uno está en la parte inferior, como 0 experiencia cuando empiezas. En cuanto al número esto es del 100 por ciento para empezar, y para éste, es 0 de algo. Todavía no lo sé, así que no agreguemos nada aquí. Ahora cuando haces clic en Play, ahora puedes ver que es correcto. Ahora no muestra ese mensaje aquí arriba. Y podemos ver nuestra salud y nuestra experiencia aquí. Voy a redimensionar esto un poco. Creo que esto es demasiado grande. Algo como esto. Mi TOC está disparando. Realmente no tengo TOC, pero tal vez tengo algo como esto. Creo que es mucho mejor. Luciendo bien. Podemos mover esto un poco aquí abajo en el y Algo como esto. Está bien, se ve perfecto. Ahora tenemos la salud y la experiencia se ve interesante. Y luego tenemos la muerte. De todos modos, en realidad quiero que aparezca cada vez que morimos. Y vamos a estar haciendo eso cuando estemos trabajando con el jugador responda. Entonces esto es lo que tenemos hasta ahora. Y lo siguiente que podemos hacer es actualizar esta barra de salud. Es muy fácil porque ya teníamos esa lógica. Así que pasemos al siguiente video. 84. Cómo actualizar la barra de salud: Entonces para actualizar la Barra de Salud, volvamos a la interfaz de usuario y vayamos a la interfaz de usuario principal. Esta es la Barra de Salud vamos a estar actualizando aquí para que la barra de progreso lo haga más fácil. Entonces aquí en el gráfico a codificar, se puede ver todos estos tiene nombres de basura. Así que vamos a cambiar el nombre de esta barra de progreso a Praga. Normalmente lo llamo como barra de progreso. Y luego salud. Entonces sabemos que es la barra de progreso para la salud. Y éste, voy a cambiar el nombre a TXT por texto y el de salud. Vamos a cambiarlo a la experiencia de Praga. Vamos a usar eso más tarde, no en este momento. Y esta llamada experiencia TXT, Compile y Save para este botón aquí arriba. También cambiemos el nombre mientras estamos botón de edición. Y justo, bien, este de aquí arriba, también queremos cambiar más adelante porque vamos a cambiar el nombre. Voy a llamarlo TXT. Muerto por, llamémoslo muerto por compuestos. Guardar. Ahora puedes ver aquí para este texto también queremos configurarlo, pero si haces click en esta barra de progreso, por ejemplo, y vas a la gráfica, puedes ver la barra de progreso es una variable aquí. Pero también queremos cambiar este texto aquí. Pero si hace clic en el gráfico, no hay texto. Y esto se debe a que los textos por defecto no son variables y hay que llevar esta aquí arriba llamada variable S, y luego aparecerá aquí en el gráfico. No obstante, hay muchas imágenes. Las imágenes son variables por defecto, pero a veces hay que limpiar tu proyecto para que tengas que hacer click en esta imagen, por ejemplo, y eliminarla como variable porque realmente no necesitas para modificar esto en el juego. También para el fondo aquí, puedo quitarlo si quieres, puedes limpiar eso también. Entonces eliminar ese fondo es una variable. Simplemente quiten todos los de aquí. Esta Compila y Guardar. Y puedes ver que tu proyecto es mucho más limpio si solo tienes las variables con las que estarás trabajando. Así que déjame borrar estos eventos predeterminados y hagamos uno llamado, hagamos un evento personalizado, y llamémoslo update health. Entonces, lo que suelo hacer por la interfaz de usuario, nunca creo interfaces de blueprint. Quiero decir, puedes, solo puedes entrar y crear uno para ello. Pero realmente no tiene sentido porque normalmente no tienes muchos eventos. Y tendrás que hacer muchas interfaces. Al igual que tienes que hacer uno para cada interfaz de usuario. Y no quiero hacer eso, así que normalmente solo hago eventos personalizados para ellos. Entonces aquí por la actualización de salud, lo que queremos hacer, queremos tomar la barra de progreso para la salud y decir porcentaje establecido. Esto es lo que queremos actualizar. Y se puede ver cómo se llama. Si haces clic en la barra de progreso y vas aquí abajo, puedes ver que se llama por ciento. Entonces si solo buscas, busca por ciento, si no sabes cómo se llama, verás éste aquí. Por lo que queremos establecer el porcentaje, pero también queremos actualizar este texto llamado salud, también llamado SetText. Por lo que queremos establecer este texto también. Entonces para este porcentaje, solo lo voy a ejecutar a través este evento y podemos llamarlo de nuevo otro lugar. Déjame llamarlo por ciento en lugar de presencial para estos textos, sólo va a ser un porcentaje de lo que esté pasando por esto. Y verás a qué me refiero más adelante. Pero por ahora, sólo arrastremos de aquí y digamos presente. Y para el flotador tienes algo llamado como por ciento. Entonces va a convertir esto como un porcentaje para el texto. Y luego podemos conectarlo aquí. Por lo que se va a mostrar como porcentaje aquí. Ahora siempre podemos intentar probar y ver si esto está funcionando correctamente. Por lo que ahora que tenemos esta venta compuesta, así que recuerda que manejamos la interfaz de usuario dentro del controlador del jugador. Así que déjame volver al controlador del jugador blueprints. Y dentro de aquí. Entonces en última instancia queremos llamarlo aquí desde la base del jugador, porque la base del jugador, estamos comprobando como estamos calculando la salud aquí por aquí. Y en realidad queremos mostrar eso, como actualizar la interfaz de usuario desde aquí. Va a ir de la base del jugador al controlador del jugador y a éste al final. Así que vamos a crear el que está en el controlador del jugador ahora. Entonces en este momento en el controlador del jugador, estamos inicializando widgets. Tenemos este personaje y tenemos al jugador desove. Así que ahora aquí abajo, hagamos otro. Y llamémoslo. Hagamos uno personalizado y podemos convertirlo en una Interfaz de Blueprint. Y un poco, solo quería ver qué podemos hacer aquí. Entonces hazlo en tu cliente a los ojos, actualiza, actualiza, barra de salud, y vamos a llamar a ese evento. Entonces tomando aquí en la principal del WB, recuerda, el evento aquí está dentro de la interfaz de usuario principal. Por lo que ya tenemos una variable en nuestro controlador de jugador. Acabamos de llegar hasta aquí. Acabamos de hacer esa variable. Por lo que ahora podemos usar esta variable y podemos llamar a este evento llamado actualización de salud. Llamémoslo decir que la salud. Y ahora lo puedes encontrar aquí. A continuación queremos hacer es solo ir y tomar este porcentaje en ella. Y esto es lo que necesitamos. Al igual que, en realidad vamos a cambiar este en un cliente propietario corriendo y confiable. Entonces ahora lo que tenemos que hacer es que queremos ese evento personalizado aquí arriba. Hagámoslo en una Interfaz de Blueprint. Volvamos a las interfaces, al controlador del reproductor. Y aquí, ¿cómo lo llamamos? Actualizar barra de salud. Y llamémoslo aquí, actualiza barra de salud. Agreguemos aquí un flotador y lo llamemos por ciento. Yo creo que se llamó presente y vamos a llamarlo aquí ahora, digamos Update Health Bar. Y podemos llamar a esta interfaz eventos. Y ahora lo que podemos hacer es llamar a este cliente lado uno, actualizar barra de salud. Y pasemos por esto. Por lo que ahora éste necesitamos llamar a través de la base de jugadores. Entonces llamémoslo aquí. Entonces para actualizar la salud, ahora en realidad regresemos con la base de jugadores está aquí. Entonces estamos restando y estamos calculando. Tenemos que hacerlo aquí. Por lo que en realidad necesitamos alejar esto un poco más lejos. Y ahora necesitamos el controlador del jugador. Y déjame ver lo que hemos hecho aquí. Teníamos al controlador enemigo. No tenemos el controlador del jugador, por lo que en realidad podemos hacer una referencia a eso, digamos obtener controlador, porque ya estamos dentro del jugador para que podamos conseguir el controlador como esto y luego decir obtiene control de capa nuestra referencia porque queremos usar este controlador de reproductor aquí. ¿ Dónde está? Este? Específicamente, nos estamos refiriendo a esa PC Maple Story. Y desde aquí vamos a llamar a esa actualización de salud actualización Health Bar, creo que fue llamado y es un mensaje. Así que recuerda el mensaje aquí porque es una función Blueprint Interface aquí que hicimos. Por lo que es un mensaje al hacer clic en él, Compilar y Guardar. Entonces ahora necesitamos tapar algo dentro de este porcentaje y para éste, así que el presente, recuerda, no puedes dejarme simplemente romper esto aquí. En realidad, no tenemos que hacer eso todo el tiempo. Sólo podemos usar este. Permítanme desconectar esto por ahora. Por lo que ahora usando esta salud, no podemos simplemente conectarlo al porcentaje. Porque para la interfaz de usuario, si echas un vistazo a la barra de progreso, para la interfaz de usuario, tu barra de progreso realmente va de, veamos aquí. Está pasando de uno a 0, así que no va al 100%, va a 0 a uno. Entonces si tienes un porcentaje dividido por 100 para llegar a ese número. De lo contrario si solo enchufes al 100%, siempre va a ser 100 así porque entonces el número máximo es en realidad uno y el mínimo es 0. Entonces 0 a uno. Recuerda no de 0 a 100. Así que volvamos a la base de jugadores. Y entonces lo que necesito hacer, hagamos un nuevo evento llamado max health porque necesitamos tomar un porcentaje y para hacer un por ciento, necesitamos saber de qué era antes. Hagamos una variable máxima de salud. Y en lugar de hacerlo aquí abajo, realidad solo puedes hacerlo en la información del jugador. Así que vamos a las estructuras como información de jugador y solo hagamos una nueva variable de salud. Llamémoslo salud máxima. Y digamos a veces como en los RPGs, puedes actualizar esta salud máxima. Y esta salud es igual que solo estamos usando esta salud para modificarla todo el tiempo. Pero esto hace que la salud siempre permanezca al máximo y se puede actualizar con actualizaciones más adelante. Por lo que tenemos la salud máxima y vamos en realidad ir al compuesto base del jugador ahorrar. Y en la base de jugadores hay que establecer lo que es esa salud máxima. Así que vamos a ponerlo a 20. Max salud es de 20. Vámonos ahora. Déjame solo compilar todo. Volvamos a la base de jugadores. Por lo que ahora tenemos la salud máxima como porcentaje. Tienes que tomar esta salud quedando y dividirla, dividirla por la salud máxima. Ahora obtendrás ese número porcentual que puedes enchufar aquí. Y ahora que tienes esta actualización de salud en porcentaje, ahora esto va a pasar por el controlador del jugador. Por lo que estás llamando a esto desde el control de placa de su salud va a ir al controlador del jugador, va a pasar por los clientes. Porque recuerda, UI es del lado del cliente ella, por lo que va a pasar por el cliente y va a actualizar la salud que está aquí. Y también está usando ese número que tienes. Por ejemplo, cuando estés en número máximo de salud estará aquí a 1 y la barra de progreso aquí 1 cuando acabas de hacer como porcentaje, creo que lo multiplica por un 100. Entonces lo pone aquí en el texto. Pero en realidad tenemos que probarlo y ver si está funcionando correctamente. Ahora como porcentaje. Y ahora puedes conectarlos y preguntar, es, ¿está aquí esta salud? ¿ Es igual a 0? Entonces digamos de nuevo igual a 0. Podemos simplemente borrar aquí y conectar esto en su lugar. Simplemente puedes continuar lo que hiciste antes. Ahora vas a actualizar la barra de progreso, guardar todo. Y antes de continuar, creo que eso fue todo. En realidad solo intentemos ver si funciona. Entonces está a los 100 y éste va a uno me pegó. Entonces estoy en realidad, podemos ver que tenemos un error aquí. Pero intentemos arreglar esto más tarde. Entonces vamos a ver en realidad por qué fue causado eso. Éste. Se puede ver que me pega y me quedan 50 porque me pega por 50. Y cuando tengo 0, soy esta tumba y no pasa nada. Entonces esto realmente está funcionando perfectamente. Y si aumento mi salud, así que digamos que vamos a la información del jugador y aumentamos las colinas máximas para decir 50. Y también empezamos con 50. Así que vamos a jugar ahora. Y ahora se puede ver que está funcionando a la perfección. Y si voy a aquí, me va a dañar mucho más. Y luego me va a matar. Entonces ahora esto está funcionando perfectamente. El porcentaje de barra es correcta y el porcentaje aquí, el texto aquí también es correcto. Para ese error bajo letra, en realidad necesito arreglar esto. Entonces cuando saltas, alguna razón no está agarrando. Puedo ver que se está atascando aquí. Y déjame sólo tratar de saltar en la escalera con este cerdo de aquí. Entonces está funcionando si no me estoy moviendo, pero se está molestando. Si salto de un costado, lo cual es muy raro, tal vez tenga algo que ver con las colisiones que agregamos. Así que permítanme en realidad, déjame ver aquí. Así que cuando en lo profundo aquí, déjame ir a la colina siendo arriba y abajo. Entonces estamos haciendo algo de escalada y estamos, tenemos esta función de desenvolver llamada isClient siendo. Cuánto realmente acaba de imprimir una cadena aquí para ver si esto, como si nos estamos perdiendo a través de las colisiones que tenemos. Entonces ahora va a decir Hola. Sí, se puede ver que dice mucho a veces. En realidad no son cuatro veces si solo hago esto por diez segundos. Para que pueda explicarlo. Se puede ver aquí, vamos a saltar sobre ella. En realidad es un dice dos veces, una del servidor y otra del cliente. Y obviamente tenemos otro del servidor. Entonces es en realidad hace tres veces aquí. Tenemos colisión múltiple, como si no se supone que haga esto tres veces. Por lo que este código solo es necesario ejecutarse una vez. Entonces hay algo con las colisiones que necesitamos ajustar, que está provocando este problema porque sólo necesitamos chocar con él una vez. Así que permítanme hacer click en esta cápsula para el jugador y echar un vistazo. Y estamos ignorando todo excepto por dinámico y estático. Y permítanme llevar esta colisión de ataque. A lo mejor se dijo que la colisión de ataque, estamos ignorando todo a excepción de la dinámica mundial. Y déjame echar un vistazo a la escalera. Así que déjame volver a los planos a la línea siendo ciega estar basado, echando un vistazo a la caja de colisión para éste , Aquí está superponiendo todo. Y este componente de render se establece en ninguna colisión. Entonces esto no tiene colisión. Entonces el jugador, solo para asegurarse de que el sprite no tenga colisión también. En realidad sí tiene colisión pero no hay eventos de superposición. Así que permítanme tratar por esta caja de colisión. Déjame ir a disfrazarme y hacer como podemos ignorar la dinámica del mundo y vamos a tratar de hacer click en Play y ver qué pasa. Ahora se puede ver que en realidad está funcionando. Así que probemos eso un par de veces solo para asegurarnos que eso no se bloquee de repente. Déjame jugar como cliente. Así que déjame sacar al cliente aquí y asegurarme de que esté funcionando también. Eso está funcionando. Es ajustar nuestra ubicación. Ok. Entonces todo está funcionando. Y el problema fue que tenemos tuvimos dos colisiones alineadas con él. Entonces para la colisión, fue la que chocaba con ella. Porque recordar que la colisión de ataque es una dinámica mundial y la colisión de escalera está configurada para superponerse con la dinámica mundial. Entonces tenemos que ignorar la dinámica mundial, lo que significa que necesitamos ignorar esta colisión de ataque. Y esto ya no lo arruinará. Entonces esta fue la solución aquí, un fijo muy simple. Por lo que sólo póngalo a cliente y elimine esto. Entonces ignora este bien dinámico y esto solucionará el problema. Entonces con eso, hemos corregido ese problema y también actualizamos la interfaz de usuario de Health Bar. Vamos a la siguiente y actualicemos el impuesto de defunción. 85. Cómo actualizar el texto de muerte: Ahora volvamos a bajar a la interfaz de usuario e ir a la principal. Aquí queremos actualizar este texto. Entonces dice que te han matado y dice caracol. Por lo que tenemos que actualizar este texto aquí. Por lo que vuelve a hacer click en este texto, recuerda configurarlo en variables para que podamos editarlo y entrar en el gráfico aquí. Y voy a llamar a éste, hacer un evento personalizado y llamarlo mostrar mensaje de muerte. Y también podemos mirar como podemos mostrar el mensaje y también podemos actualizar esos textos. Entonces tomando ese texto, primero, necesitamos mostrar ese mensaje. Recuerda que está oculto por defecto. Tomemos lo que queremos hacer. Creo que necesitamos convertirlo en una variable también. Queremos que se muestre esta caja vertical. Recuerda que lo pusimos a oculto. Entonces necesitamos, cambiemos el nombre de la misma. Entonces VB por caja vertical y déjame llamarlo responder. Responder o mensaje de muerte. Llamémoslo mensaje de muerte. Y pongámoslo en una variable para que pueda verla en código. Entonces yendo a aquí y tomando esto, ahora lo que podemos decir es establecer la visibilidad. Y ahora lo que podemos hacer es ponerlo visible. Y vamos a conectarlo. Por lo que ahora es visible. Y lo siguiente que queremos hacer es mostrar este texto aquí. Entonces SetText realmente cambió el texto que al igual que lo hicimos aquí arriba con éste. No obstante, con éste, ahora te voy a enseñar algo nuevo. Entonces tienes algo dinámico. Entonces va a decir que te han matado los caracoles. Así que sólo voy a copiar pegue este texto y colocarlo aquí. Entonces yo iba, te han matado. Te han matado el caracol. No obstante, este caracol, a veces es un cerdo, a veces es un nuevo enemigo que has añadido a tu juego, por lo que no es necesariamente un caracol. Entonces cuando tienes textos dinámicos como este que necesitan cambiar durante el juego, tienes que arrastrar aquí y usar algo llamado texto de formato. Usa esto en su lugar. Si tienes algún texto dinámico que no es estático todo el tiempo, voy a volver a pegar mi texto aquí. Lo que quieres ser dinámico. Entonces este texto es estático. Todo esto, lo único que quiero cambiar es este caracol aquí. A veces es un cerdo o a veces es otro enemigo al que has añadido. Entonces para hacer esto, hay que escribir estos paréntesis rizados. Estos dos paréntesis rizados. Y en el medio, solo puedes escribir lo que quieras. Presiona Enter, y podrás ver que tienes una variable aquí que puedes conectarla. Ahora. Puedes escribir lo que quieras dentro de aquí. Por ejemplo, aquí lo que estamos tratando de hacer es poner el nombre del enemigo. Así que sólo voy a llamarlo cualquier nombre. Se puede ver que cambia en consecuencia. Para que puedas escribir cualquier cosa dentro de paréntesis rizado. Este es el texto dinámico que necesitamos cambiar. Este texto va a ser el nombre del enemigo y realmente no hemos especificado ningún nombre enemigo antes. Entonces volvamos a la estructura. Recuerda que tenemos este animal, información animal, muy útil. Podemos tener info de los animales. Así que déjame simplemente llamar a éste en realidad no caracol, déjame llamarlo nombre. Entonces tenemos el nombre del enemigo aquí. Y permítanme cambiar esto a una cuerda. Los compuestos ahorran y déjame ponerlo aquí arriba en la parte superior. Ahora cuando vuelvas a hacer esto, recuerda que puedes ir al enemigo, base enemiga, Compile y Save. Ahora lo puedes ver en todos los enemigos. Entonces ir al caracol, por ejemplo, en la clase impagos. Ahora tenemos esta variable de cadena de nombre aquí. Y solo puedes llamar a este caracol. Y vamos al cerdo aquí y pongámosle el nombre. Vamos a llamarlo pick. Incluso puedes darle un nombre como lo puedes llamar victor o lo que quieras hacer. Pero recuerda, esto es para todos los cerdos. Entonces todos se van a llamar Víctor. Entonces llamemos a este cerdo. Y hagamos eso. Vale, entonces ahora tenemos el nombre aquí y es una cuerda. Así que vamos a hacer clic aquí y decir cadena. Y llamemos a este nombre enemigo, tangente en una cuerda. Y ahora podemos conectarlo aquí abajo. Y ya puedes ver que puedes conducir una variable a través de esto a este formato de texto. Entonces ahora que tenemos esto, recuerda que esta es la interfaz de usuario, así que tenemos que ir al controlador del jugador y luego llamarlo aquí. Pero para que tu código sea un poco mejor, puedes ir a, volvamos a la principal aquí. Al igual que este mensaje de muerte de pantalla va a aparecer siempre que tu salud sea 0. Recuerda que ya estás revisando la salud aquí en la actualización de salud. Así que en realidad puedes hacerlo más fácil para ti mismo en lugar de simplemente hacer otro evento aquí y el controlador del jugador diciendo actualizaciones, mensaje de muerte o algo por el estilo. Ya estás revisando la salud. Entonces ya lo sabes dentro de aquí, siempre que sea 0 y cada vez que sea 0, va a mostrar ese mensaje de muerte. Esto es lo que necesitas. Por lo que aquí en el porcentaje sólo podemos decir es igual a 0. Y podemos hacer una sucursal después de esto. Y si es 0, vas a llamar a éste llamado Mostrar mensaje de muerte. Por lo que sólo podemos decir mostrar ese mensaje. Y ahora lo tienes. No obstante, hay que conducir esto nuevo a través de todos estos eventos. Entonces voy a arrastrar este nombre enemigo viaja por aquí. Ahora va a los controladores de jugador por aquí, el cliente. Y aquí hay que pasar por éste, pero no se puede hacer eso porque se trata una función de interfaz de blueprint llamada Update Health Bar. Voy a volver al controlador de interfaz llamado Update Health Bar. Y agreguemos aquí una cadena llamada nombre enemigo, Compile y Save enemigo o el controlador del jugador. Ahora podemos conectarlos. Y recuerda ahora que está todo el camino en la base de jugadores. Así que volvamos al jugador, base del jugador. Ahora, lo puedes ver en la base del jugador. Bajemos al código. Y lo puedes ver aquí ahora cuando actualizamos la salud. Entonces en realidad tendré que darle el nombre también. Por lo que haciendo click por aquí, recuerda que lo agregamos. Entonces éste es en realidad la información del jugador. Lo agregamos a la información enemiga o información animal. Entonces para la información animal, este de aquí tenemos que llamarlo. Entonces hagamos eso en el jugador. Entonces, ¿cómo llamamos a esto? Recuerda, se almacena en la base enemiga, planos base. ¿ Tenemos algo que podamos hacer para llamar al plano base enemiga ya que este jugador conectado es en realidad uno viejo que necesito eliminar. Entonces, ¿tenemos algo de lo que podamos llamar al enemigo ****? Y sí, lo tenemos, recuerda que tenemos el controlador enemigo. Esta es la que definimos aquí. Siempre que obtenemos, como cuando recibimos daño, esto es del enemigo. Por lo que ya tenemos el controlador del enemigo y podemos ver que se controla, y así es como conseguimos la base enemiga. Porque ahora podemos decir consigue referencia enemiga como esta. Y a partir de aquí podemos decir información animal. Ahora podemos conseguirlo aquí. Y ahora podemos romperlo y podemos conseguir el nombre tan simple como eso. Por lo que pinchando aquí este nombre, así. Entonces tenemos que incluir esto en nuestro código. Para que podamos ver aquí, podemos incluirlo aquí. Así que permítanme mover todo eso así. Déjame solo incluirlo aquí abajo, sólo podemos limpiarlo un poco. Está un poco mal ahora mismo. Y podemos tapar el nombre dentro de aquí. Entonces, ¿qué está funcionando realmente correctamente? Ojalá podamos probar eso fuera de curso antes de que lo creamos. Así que ahora vamos sólo estoy tratando de organizar estos un poco mejor. Algo así. También puedes acercar a los más cerca así. Y haz doble clic aquí para hacer un nodo ferroviario, que se vea un poco mejor. Como esto aquí. Y puedes incluso, para éste, incluso puedes hacer doble clic aquí y hacerlo en su lugar. Entonces algo como esto, se ve un poco más limpio. Sí, esto se ve bien. Por lo que ahora podemos compilar y ahorrar. Así que ahora estamos poniendo el nombre. Va a pasar por el controlador del jugador. Aquí. Va a pasar, va a pasar por el evento de cara ciega, va a pasar por la salud de actualización, que luego va a pasar por aquí. Todo el camino hasta este fin va a pasar por aquí y poner este nombre enemigo. Y va a ser dinámico porque ya has definido en el caracol cuál es el nombre del caracol y en el cerdo, cuál es el nombre del cerdo. Por lo que ahora debería funcionar. Pero sin embargo, no podemos probar esto en este momento. En realidad, la economía que ya la pusimos para mostrar es solo la respuesta que aún no hemos definido. Así que déjame golpear al pagador para poder morir más rápido. Ahora lo puedes ver dice, has sido asesinada por Cerdo. Presiona Ok, para responder. Y luego puedes hacer click en ok, tenemos un pequeño bicho. Se puede ver el botón no se puede presionar encima de este bien, texto y solo se presione aquí. Así que vamos a arreglar eso. Y quiero hacer esto un poco más grande. Es un poco demasiado pequeño. Así que volvamos al menú. Voy con el diseñador. Quieres hacer esto un poco más grande, que puedas hacer clic en la imagen, ésta, y hacer el tamaño un poco más grande y hacer que esa caja vertical sea más grande para que el botón se haga más grande. Algo así. Ahora lo que podemos hacer es por esto, vale, aquí, recuerda la cosa como cuando salen bichos y bloquea tu botón aquí y no hay conjuntos de bloques. Tienes que bajar aquí a la visibilidad de este texto y configurarlo a ninguno solo auto comprobable. Y esto significa que no puedes golpear esto con el ratón. Por lo que tu ratón ignorará esto. Y de esta manera solo puedes enfocarte en el botón. Entonces recuerda hacer eso con elementos que están bloqueando o botones. Por ejemplo, si estás haciendo una, una tienda dentro del juego o algo así y tienes iconos, tienes que hacer eso por los iconos. Por lo que ahora se puede ver puedo hacer click en el botón a pesar de que estoy en el texto. Sólo voy a decir el nombre aquí. Por lo que ahora todo está funcionando correctamente. Lo siguiente que queremos hacer es cuando hagas click en esto, vale, vamos a responder a jugar. 86. Respawn del jugador: Trabajemos ahora en la respuesta para el jugador. Así que volvamos a los planos y a jugador, base de jugadores. Entonces dentro de aquí hemos codificado todo esto, cualquier daño hasta ahora. Y hemos puesto la muerte a los jugadores dondequiera que muera el jugador, pero nunca hemos precisado cuándo ya no estarás muerto. Y queremos estar muertos cada vez que simplemente haga clic en ese botón Okay dentro de la interfaz de usuario principal. Así que en realidad hagamos eso primero. Ahora vamos primero a la interfaz de usuario principal aquí. Y dentro de aquí al hacer clic en este botón, por lo que haciendo clic en el botón aquí y bajando al botón. Y luego se pueden ver todos estos eventos tan sin hacer clic cada vez que haga clic en el botón, haga clic en este plus para realizar ese evento. Así que cada vez que haces clic en este botón ok, ¿qué debería pasar? Sólo quería que mi muerte fuera falsa. Ahora como práctica, ahora que estamos tan lejos en este curso, intente hacer esto usted mismo. Intenta establecer una, intentó comunicarse con este blueprint y tratar de configurarlo a falso usted mismo. Si quieres, si fracasas aquí, siempre puedes seguir conmigo. Y ahora lo hagamos juntos. Puedes pausar el video si quieres hacerlo tú mismo. Entonces lo que queremos hacer ahora es que queremos comunicarnos con la base de jugadores. Queremos conseguir el, los pons de alguna manera. En UI, recuerda que esto es del lado del cliente, por lo que cada punto, cada jugador conectado tiene esta interfaz de usuario. Así que puedo simplemente hacer clic derecho y decir, Get Owning capa pewn. Así que Get Owning Player, consigue el controlador del jugador, consigue poseer jugador peón obtiene el control de peones en ****. Golpear poseer plataforma. Y se puede ver que dice consigue el Peón Jugador asociado a esta interfaz de usuario. Y desde aquí solo podemos decir Get Player Reference. Y lo que podemos hacer ahora es que podemos llamar a esta muerte aquí porque esto se hace dentro de la base del jugador bp. Por lo que sólo podemos llamar a esto eventos de muerte. Y es un mensaje porque es una función de Interfaz Blueprint. Y sólo podemos ponerlo en falso. Y recuerda, tenemos que configurar ese mensaje de muerte vuelva a ocultarse porque otra cosa se va a mostrar en la pantalla. Así que establece la visibilidad a escondida, así. Uy, así. De acuerdo, entonces ahora eso está arreglado. De acuerdo, entonces ahora hemos dicho que la muerte es falsa. Así que volvamos a la base de jugadores. Tengo No estoy seguro de lo que hicimos aquí en realidad. Sí, sólo nos gusta No hicimos mucho. Sólo fijamos que esto sea falso y verdadero. Es que aquí para verdad, como cuando estás muerto, va a mostrar eso para voltear libro a ti. Entonces, lo que queremos hacer aquí, déjame simplemente hacer una sucursal. Entonces, ¿qué debe hacer cuando ya no eres eso? Entonces cuando estás respondiendo. Entonces en primer lugar, quiero volver a poner mi salud a 100 porque ahora mismo es 0. Entonces me voy a llevar mi aquí en las Propiedades, mi estructura. Nuevamente. Quiero poner mi bolsa de salud, así que ponga miembros aquí y selecciónelo , seleccione la salud. Ahora queremos establecer la salud. ¿ A qué quieres configurarlo? Quieres fijarlo a la máxima salud. Entonces voy a romperlo ahora. Recuerda que hicimos una variable máxima de salud. Por lo que ahora solo queremos conectarnos que haga salud dentro de aquí. Déjame esconder estos otros alfileres. De acuerdo, entonces ahora estamos poniendo la salud a la salud máxima y estamos de vuelta a plena salud de nuevo. Entonces vamos a conectarlo. Entonces vamos a conectarlo a lo falso porque si ya no estás muerto, esto es lo que significan los pliegues. Aquí. Tenemos que recordar, tenemos que volver a poner la información del jugador aquí así. Por lo que ahora tenemos el completo revés en salud. Lo siguiente que tenemos que hacer, necesitamos actualizar la interfaz de usuario porque a pesar de que estamos configurando esta variable, recuerda, igual que antes hay que actualizar la barra de progreso. Por lo que muestra que estás en 100 de salud. Nuevamente, lo que podemos hacer por esto, podemos copiar, pegar esto aquí. Así que consigue el controlador, consigue el controlador del jugador. Entonces estos dos aquí o puedo simplemente escribirlo si quieres. Por lo que estamos consiguiendo el controlador del jugador aquí. Y lo que puedes hacer aquí es lo que el controlador del reproductor, nuevo, puedes llamar a actualizaciones barra de salud. Aquí como el mensaje. Creo que fue el mensaje aquí. Sí, eso fue correcto. ¿ Y en realidad lo llamé como mensaje? Sí, lo hice aquí. Sólo quiero ver si cometí un error aquí arriba. Entonces ahora es correcto. Y para el porcentaje, de nuevo, se puede tomar la salud dividida por la salud máxima. Así que de nuevo, al igual que antes, toma esto, romperlo y toma esta salud y divídala por la máxima salud, igual que antes. Entonces mismo código aquí. Y luego puedes conectarlo al porcentaje. En cuanto a los eliminados, realmente no lo necesitamos. Al igual que no vas a mostrar esta interfaz de usuario cuando estás vivo y no estás muerto. Entonces realmente no importa lo que diga porque está oculto de todos modos. Entonces realmente no voy a hacer esto aquí. Tan bien, así que ahora hemos actualizado la interfaz de usuario. ¿ Qué sigue? Lo siguiente es que hay que responder. Entonces, ¿dónde está respondiendo? Y recordemos, como hace algún tiempo hicimos éste, creo que al inicio del curso, establecer ubicación de desove jugador y lo pusimos a ese jugador arranca. Así que vamos a utilizar este conjunto de ubicaciones de desove del jugador. Entonces vamos a desovar ahí. Voy abajo, está aquí. Hagamos establecer ubicación de desove del jugador como éste. Y la razón, como si te confundes, a veces escuchas el desove del jugador del set. Déjame mostrarte. Entonces aquí, podrías haber seleccionado mensaje y ninguno mensaje. Y esta es una función de Interfaz Blueprint. Y tal vez te preguntes ¿por qué no seleccionaste este mensaje aquí? ¿ Por qué seleccionaste éste? No hay como si fueras así es el blueprint en el que lo estamos codificando. Y si la función Blueprint Interface, si en realidad se hace dentro de la base del jugador. Entonces si voy a esto, las interfaces y la base del jugador aquí, se puede ver que ya lo hicimos dentro de aquí set player engendra ubicación. Cuando lo estás llamando dentro del plano en el que lo hiciste, realmente no tienes que seleccionar mensaje. El mensaje es sólo para la comunicación. Y habrías seleccionado mensaje si lo estuvieras llamando desde el controlador del jugador desde algún otro lugar, habrías seleccionado mensaje. Pero si lo estás llamando dentro de sí mismo, entonces solo voy a seleccionar éste sin el mensaje. De acuerdo, Así que ahora estás desova al jugador. Y recuerda que todavía estamos teniendo el modo dios. Nunca eliminamos aquí el modo dios. El modo dios solo está siendo removido cuando no estás muriendo, sino cuando estás muerto. Nunca pongas esto a falso. Así que permítanme copiar pegue este código aquí que el retraso, ahora después de la demora aquí. Entonces la razón por la que estoy dando al jugador en retraso, así que estamos respondiendo y en realidad estás teniendo el modo Dios mientras estás respondiendo porque no quiero recibir daño de inmediato cuando respondo. Por lo que le estoy dando al jugador la oportunidad responder y no recibido daños. Y creo que eso fue. No estoy seguro si olvidé algo. Permítanme en realidad simplemente haga clic en Play. Veamos qué pasa. Entonces cuando estemos muriendo, déjame realmente ir al cerdo. Aquí morimos más rápido. Estamos muertos y dice que han sido asesinados por la prensa del cerdo. Ok. Cuando presiono Okay, puedes ver que respondo. Y déjame morir de nuevo para ver si esto está molestado o no. Está funcionando correctamente. Ahora de nuevo, se puede ver que estos están molestando. Puedes volver a intentar reescalar y bajar de escala, primer nivel las casillas de colisión. Estos son los que a veces los hacen bichos aquí en las rampas. Por lo que ahora cuando hago clic OK, se puede ver que puedo responder. En realidad quiero que mi jugador parpadee cuando respondo porque quiero saber que estoy en mi modo Dios cuando respondo. Así que permítanme tomar este efecto parpadeante, que hicimos aquí, y lo agregamos aquí, en realidad dañar vía efectos. Déjame copiar una copia de ella aquí y déjame pegarla justo después, justo antes. En realidad, justo después de responder, sólo puedo hacerlo aquí. Entonces cuando respondo, toco ese efecto. Y luego elimino ese modo de Dios después de ese efecto. Permítanme hacer click en play. Y cuando muero, hago clic en OK. Se puede ver que tengo este Efecto de Modo Dios. Y entonces respondo, creo que este es un pequeño efecto. En realidad voy a ocultar estas cajas de colisión. De nuevo, realmente ya no los necesitamos , no lo creo. Entonces permítanme hacer click sobre este ataque colisión y esconderlo en juego. Y entra aquí en la base enemiga y da click en esta colisión y también esconderlo en juego, compilar y guardar todo. Por lo que ahora que todo está funcionando, puedes intentar probar el juego y ver si todo está funcionando como debería. Siempre podemos llevarnos a este cliente. Entonces antes de terminar, en realidad quiero escribir con ambos. Aquí, mira si tanto el cliente el servidor pueden ver qué está pasando. Por lo que se puede ver que el servidor puede realmente ver que el cliente murió. Y como servidor ahora, es un poco difícil tenerlos a ambos en una sola pantalla. Por lo que ahora ambos murieron. Y si hago clic bien como responde el cliente, está bien, y si hago clic en Aceptar, es el servidor, yo respondo también y estoy parpadeando correctamente. Cuando ataque, esto funciona cuando compruebo aquí, está funcionando cuando desperté la escalera. Está funcionando para ambos. Ok. Así que déjame probarlo como cliente ahora. Juega como cliente para asegurarte de que todo esté funcionando antes seguir seleccionando Tsarina aquí en este cliente. Y en el segundo cliente, voy a seleccionar a Luke. Y déjame entrar a este enemigo. Aquí. Estoy muerto. Voy a caminar aquí. También estoy hecho. Ok. Por lo que parece que todo está funcionando ahora. Y caminando hacia arriba. También funciona la carta. De acuerdo, así que no hay libros en este momento, así que eso es genial. Todo está funcionando como debería. Por lo que estamos listos para seguir adelante y de hecho trabajemos en el enemigo ahora para que podamos matar al enemigo. 87. Corrección de errores existentes: Seguimos, tenemos un par de libros que necesitamos arreglar. Y los he escrito todos aquí. Entonces como estaba probando el juego y encontré los siete dólares y creo que deberíamos arreglarlos antes de continuar. Entonces el primero es un insecto de muerte durante el ataque. Entonces si voy por aquí y juego el juego, y entré a los enemigos, así que permítanme simplemente perder mi salud aquí. Ahora, si ataco justo antes de morir, puedes ver que desove así. Y esto se supone que es una tumba. Y si quieres, puedes intentar arreglarlo tú mismo. Tratar de pensar dónde podría estar esto? ¿Gusta? ¿ Qué es esto dando vueltas antes? Porque cuando atacamos y cuando morimos al mismo tiempo, volvemos a este estado ocioso. Así que trata de pensar, si quieres por ti mismo donde este bicho podría estar sucediendo. Y puedes usar un nodo de cadena de impresión para intentar depurar tu código. Siempre es agradable usar un nodo de cadena de impresión. Hagamos clic en Ok, y dejemos esto. Así que para arreglar este error ahora, vamos al código de ataque porque esencialmente está sucediendo cuando estamos atacando. Por lo que estamos estableciendo que el ataque sea cierto cuando estamos atacando. Y luego después de algún tiempo, así que morimos entre aquí, así que atacamos y morimos. Y recuerda que tenemos esto aquí. Este es el ataque está completo. Estamos retrasando el código con esta animación y después del código lo estamos configurando en false. Entonces cuando está atacando se establece en falso, es poner a nuestro personaje en el estado ocioso, por lo que en realidad está sucediendo aquí. La única forma en que comprobamos la profundidad es aquí arriba para que no podamos atacar mientras estamos muertos. Pero, ¿y si ya atacamos? Entonces, ¿y si ya estamos aquí y luego morimos? Eso no se está revisando en este momento. Así que estamos terminando aquí y estamos terminando estando en el estado ocioso. Por lo que podemos tratar de tomar este año está muerto, este booleano y tratar de comprobar aquí también. Ya sea puedes consultar aquí o puedes consultar aquí. Entonces atacar tiene que ser falso. Así que en realidad lo hagamos aquí. Creo que esta es la mejor manera. Entonces aquí está atacando. Si se establece en false, entonces comprobarás nuestro uso. ¿ Estás muerto? En realidad, hagamos notar que porque eso es mejor leer, creo, por mí mismo. Entonces si no estás muerto, nuevo, solo puedes seguir adelante e ídolo. No obstante, ahora, si estás muerto, copiemos esto y te pongamos en los estados de muerte. Así como eso y eso debería solucionar el problema. Entonces si jugamos ahora y pierdo la salud, ataco mientras tanto. Whoops, yo no morí. Lo tomo mientras tanto. Ya se puede ver que ha solucionado el problema. Y si hago clic en OK, responderé. De acuerdo, así que ese fue el primer libro que hemos arreglado aquí. Entonces esto es fijo. El siguiente es que los animales se están atascando en la rampa. Y si acabo de copiar pegar un par de animales y lo hemos visto antes antes ahí. Otras lecciones y solo quiero solucionar ese problema. Entonces si acabo de copiar pegar muchos enemigos, y ojalá esto lo haga muy rápido. Ahora podemos ver aquí, este cerdo de aquí está atascado en la rampa. El cerdo acaba de correr hacia la habitación. Y el caracol hace esto a veces. Entonces el caracol, se puede ver el caracol eliminar aquí. Por lo que a veces se les bombea. Permítanme realmente arreglar esto antes de continuar, sólo me estoy molestando un poco por ese error. Así que vamos a ir a los enemigos. Y la cosa es que en realidad encontramos una solución antes, así que sólo tenemos que hacer lo mismo. Y la solución fue, si sólo voy a caracol, por ejemplo, podemos empezar con éste. El choque aquí son en realidad esta cápsula. Aquí está lo que lo está haciendo. Entonces si aumentamos el tamaño de esta cápsula, evitará el bicho. Por lo que encontré que 35 por 35 de longitud, aumentar esta cápsula a 35 como mínimo se solucionará el problema. Y recuerda que tienes que arrastrar el caracol. El caracol estará flotando así. Entonces arrastrando por el caracol, tal vez algo como esto. Tal vez eso sea demasiado bajo. Tal vez, tal vez eso es un poco demasiado bajo. Creo. Menos, menos 25 tal vez. De acuerdo, así que algo como esto. Ahora el caracol está aquí arriba y te darás cuenta de que el caracol viejo ya no le vale si solo lo dejas correr por algún tiempo ahora. Y hagamos lo mismo con los cerdos. Entonces yendo al cerdo aquí. Y voy a hacer click en la cápsula aquí y aumentar el tamaño a 35 por 35. También derriba un poco más a este cerdo. Y déjame tratar de ver cómo se ve eso. Está corriendo en el suelo. Se ve bien. Y ahora si lo dejamos jugar por algún tiempo, ya no va a chocar. Entonces si se van a ir los cerdos. Por lo que esta rampa, se puede ver que están funcionando muy bien. Entonces esto debe ser arreglado ahora, este es el fijo para ello. Entonces aumentando la cápsula y luego arrastrando hacia abajo este cerdo. Por lo que parecen que siguen corriendo en el suelo. Entonces eso es soluciona el segundo problema que tenemos aquí. El tercero es que los enemigos no detectan la colisión de ataque. Hemos tenido algunos problemas con esto antes, pero no lo miré muy en serio hasta ahora. Pueden ver si ataco por tecnología aquí, se puede ver que no están detectando mi ataque. Y sólo están detectando mi ataque si me acerco muy. Entonces si estoy parado dentro del enemigo, en realidad me están detectando. Pero si estoy un poco lejos del enemigo, en realidad no están siendo atacados. De acuerdo, así que tenemos que arreglar esto. Así que hice todo lo posible para usar esta colisión, colisión de ataque SR. Pero como esta colisión aquí tiene el código donde realmente volvemos a la interfaz, déjame cerrar el caracol y el cerdo. Y si voy a colisión aquí, recuerda que hicimos este código donde aplicamos daños. Y así esta colisión siempre aplicará daños. Entonces como hacerlo de la mejor manera en realidad requerirá que hagamos otra llamada la caja de la cabeza donde golpeamos al enemigo. Así que sólo creemos una nueva colisión. Y vamos a crear una región esférica con ésta, llamémosla caja de golpe. Por lo que sólo vamos a usarlo como una caja de éxito. Sólo voy a arrastrarlo de esta colisión aquí a esta cápsula. Entonces lo primero es ir aquí a la cápsula. Así que revisemos nuestras colisiones solo para asegurarnos ahora que tenemos esta casilla de golpe. Entonces las colisiones para esta cápsula, lo único que queremos con esta cápsula, y se puede ver aquí la razón por la que estoy, estoy creando este hit box y no estoy usando esta cápsula porque recuerda esta cápsula, en realidad aumentamos el tamaño aquí. Este es el tamaño de la cápsula y creo que los hits, cuadro de golpe es demasiado grande, como podemos usar esta cápsula para golpear al enemigo. Pero creo que este golpe de dólares es demasiado grande y no me gusta. Por lo que se puede ver si hago clic en él y hago clic oculto en juego, si lo elimino, se puede ver cuán grande es ese cuadro de golpe. Y creo que esto es demasiado grande, como como una cabeza pavos por un caracol. Por lo que no voy a usar ese cuadro de golpe y podemos disminuir el tamaño de lo contrario habrá atascado dentro de la rampa. Así que déjame esconderlo de nuevo aquí en la cápsula de interfaz. En realidad estaba dentro del caracol aquí, la cápsula, y sólo voy a esconderlo en el juego otra vez. Bien, bienvenidos de nuevo a la base enemiga. Entonces, lo que queremos hacer esta cápsula, primero vamos a ignorar todo. Lo que no quieres ignorar es el mundo estático y el mundo dinámico. Y esto es sólo para no hacer caer el punto por el suelo porque el suelo, estas colisiones niño tierra aquí abajo, son mundo estático. Y si acabas de quitar eso, en realidad caerás al suelo. Y como solo estoy usando esto para colisión esta cápsula aquí, voy a eliminar, generar eventos de superposición. No lo estoy usando para eventos de superposición, así que solo lo estoy usando para bloquear estos pozos estáticos y dinámicos para que no caiga por el suelo. Así que esencialmente no estamos realmente usando esta cápsula para cualquier evento de superposición. Bajemos a los pavos de calor. Entonces esta caja de cabeza voy a hacer click en No, ¿Puede el personaje dar un paso adelante? Voy a hacer clic en No. Y estoy configurando esto para costar. Whoops, no ninguna colisión. Voy a hacer clic en Control Z y personalizado aquí. Y voy a ignorar todo excepto la dinámica mundial. Y recuerda aquí en el jugador, por lo que atacan coalición que tenemos. Si baja y miras el tipo de objeto, vale la pena dinámico. Y es por eso que estoy, me estoy solapando con dinámico porque quiero solaparme con mi colisión de ataque. Esto se fija a la dinámica mundial. ¿ De acuerdo? Entonces esto es lo que estoy superponiendo listas. Entonces ahora esto es correcto y déjame bajar al sprite, asegúrate de que no genere ningún evento de superposición. Y yo voy a la colisión aquí. Entonces esto es lo que está dañando nuestro estanque, que es nuestro jugador. Y en realidad voy a cambiar esto en lugar de la dinámica mundial. Voy a cambiar esto a un **** porque esencialmente no estamos usando esta potente cápsula aquí. Por lo que puedo igual de bien simplemente cambiar esto a un punto. Entonces esta es básicamente nuestra colisión Po1 aquí. Vale, así que recordemos eso. Recordemos que lo pusimos para empeñar aquí. Así que déjame ir ahora a la base de jugadores. Y aquí en el componente de la cápsula, solo asegúrate de que vuelvas a ignorar todo. Lo único es el mundo estático y la dinámica mundial con la que te estás superponiendo. Y recuerda, acabamos de cambiar este, esta colisión que nos estará dañando a ****. Por lo que en realidad necesitamos solaparnos con él en otro lugar no obtendrá ningún daño de ella. Entonces, nos estamos solapando con él. Y para el sprite, no va a generar ningún evento de superposición. Y para esta colisión de ataque, sólo va a superponerse con la dinámica del mundo. Y volvamos a ver si eso es correcto. Entonces se superpone con la dinámica mundial. Y esta es nuestra caja de éxito y nuestra caja de cabeza está puesta a la dinámica mundial. Entonces eso es correcto. Ahora se superponen unos a otros porque esto es lo dinámico, esto es lo dinámico. Y ambos se superponen con la dinámica mundial, lo que significa que se están superponiendo entre sí. Por lo que esta colisión debería ser totalmente correcta ahora. Por lo que ahora vamos a hacer clic en play en realidad antes de que hagamos eso, se puede hacer click sobre este ataque colisión. Y puedes quitar escondidos en juegos para que lo veas. Y también puede ir al enemigo, haga clic en el cuadro de la cabeza. Y puedes intentar eliminar un juego oculto. Y vamos también al cerdo y ajustemos esa caja escondida. Y para esta caja de cabeza, sólo voy a hacerlo, hagamos tal vez lo mismo este tamaño de colisión aquí, así que 25. Y de nuevo, puedes mantener pulsada Mayús y hacer clic derecho con el ratón para copiarlo y pegarlo aquí. Y entonces voy a poner la ubicación igual aquí. Así que haga clic derecho. Puedes copiarlo aquí, pegarlo aquí, y ahora la colisión está aquí. Entonces esta es la caja de la cabeza. Hagamos lo mismo por el caracol. Así que déjame ir a la ventanilla, haga clic en el cuadro de cabeza en realidad la colisión copia esto, pegarlo en el cuadro de la cabeza. Copia esto aquí arriba, Esa es la ubicación, y pegarla en la caja de la cabeza. Hagamos clic en Jugar ahora. Y ahora se puede ver estas son las casillas de cabeza ahora que es mucho mejor que antes. Por lo que ahora se puede ver que me estoy dañando así. De acuerdo, Así que eso es lindo. Déjame intentarlo de nuevo. Se puede ver que en realidad me estoy dañando aquí. Como a pesar de que estoy en esta colisión, eso es en realidad otro bicho, así que no se engañen aquí. Así que déjame en realidad justo, se puede ver aquí, en realidad no me estoy dañando en este momento. Si me quedo dentro de mi caja de ataque así, se puede ver que está funcionando para que no choque. No obstante, hay un pequeño, hay otro bicho. Y si ataco ahora, se puede ver que estoy golpeando a mis enemigos. De acuerdo, entonces está funcionando completamente ahora. Ahora hay otro bicho. Se puede ver si me daña. Ahora, en realidad me estoy dañando en mi religión de ataque, lo cual no se supone que suceda. Esto, por alguna razón, esto sólo ocurre cuando me daña. Se puede ver. Pero si acabo de restablecer el juego, este es en realidad nuestro próximo bloque. Entonces si acabo de reiniciar el juego y solo me muevo por aquí, se puede ver que no me estoy dañando. Necesito quitar a algunos de los enemigos. En realidad, tengo demasiados. Así que déjame simplemente borrar muchas de ellas ahora. Es un poco, es un poco difícil de mostrar con todos estos centímetros. Así que déjame poner aquí un caracol en su lugar. Algo como esto. Y permítanme hacer click en Jugar ahora. Por lo que ahora si estoy parado sobre caracol, se puede ver que no me estoy dañando en mi caja de colisión de ataque. No obstante, cada vez que nos dañamos, ahora de repente nos estamos dañando. Otro ataque, caja de colisión. Hay un pequeño bicho. Todo un cambio repentino. Y esta es en realidad nuestra próxima. Entonces aquí, el cuadro de alcance de ataque enemigo. Por lo que de repente nos ataca en nuestra colisión de ataque. Así que pasé media hora tratando de echar un vistazo a lo que podría ser. Y pensé que tal vez eran las cajas de colisión. Y eso en realidad no era cierto como las cajas de colisión, son correctas. No tiene sentido que sea un bicho ahí. Y en realidad este es un pequeño, pequeño, tonto error de mi lado. A lo mejor ya lo recuerdas mientras haces los videos. Podría haberlo olvidado, pero puedes intentar arreglarlo tú mismo si quieres. Pero de repente, como cuando nos atacan, de repente estamos recibiendo en el sexo en nuestra caja de colisión. Y la razón de esto es que si vas al enemigo, acude al Gráfico de Eventos. Recuerda que hicimos estos hechos de colisión. Entonces cuando nuestro jugador choca con el enemigo, estamos aplicando daño. Entonces esto está sucediendo correctamente ahora, como desde el principio. Así que cada vez que entramos en el enemigo, y eso no significa para nuestra caja de colisión, pero no entraremos en el enemigo con nuestra cápsula. De repente estamos aplicando daños a éste también. Esto se debe a que nunca hemos dicho cuándo dejar de aplicar daños porque tenemos esta superposición final. Pero eso realmente no hace que sea correcto. Pero aquí arriba, recuerda que hicimos esto empezar a aplicar dañado. Esto es lo que se está ejecutando. Entonces esto se establece en verdad. Y si es cierto, va a aplicar daños. Pero cuando lo configuramos en false, nunca hemos especificado qué hacer aquí cuando se establece en false, por lo que sigue aplicando daños todo el tiempo. En realidad tenemos que decirle que deje de aplicar daños. Así que déjame hacer eso. Y eso es sólo un pequeño error de mi parte. Creo que acabo hablar en ese video y no me di cuenta. Permítanme promover esto a una variable, este temporizador promovido y llamarlo aplicar daños, manejar. De acuerdo, así que tomemos este mango y digamos claro e invaliden el temporizador Por mango. Por lo que ahora va a detener este temporizador cada vez que configuramos esto en false. Por lo que cada vez que vamos a dejar el componente, los componentes de colisión lo van a poner falso y ya no va a aplicar daños. Por lo que tenemos que chocar con él de nuevo para aplicar el daño. Así que intentemos hacer click en Jugar ahora. Y ahora. Esto funciona correctamente como antes. Pero si me daña y me paro frente a él, se puede ver que sigue funcionando. Y esto es porque tiene que volver a entrar en mi cápsula antes de que pueda hacer daño. De acuerdo, así que esto está funcionando ahora como se supone que debe. Este fue el siguiente insecto aquí. Esto es fijo. El siguiente es que el jugador no puede ser dañado en la cuerda. Entonces si estoy de pie sobre el ícono de la cuerda se ha dañado, y este es un error muy fácil de arreglar. Entonces si sólo vas a la base enemiga y vas a la colisión aquí, como el enemigo está chocando con el ****, pero también quieres chocar con el cliente siendo jugador. Recuerda, hemos hecho ese personalizado. Entonces esto sólo está arreglado. Entonces esa fue una solución muy rápida. De acuerdo, así que la otra cosa es, ahora, déjame agregar más enemigos alrededor de los golpes para que podamos ver el buck mucho más rápido. Así que déjame hacer click en Play. Vale, entonces si estoy aquí parado, puedes ver cuál es el problema. Me estoy dañando así. Pero en realidad quiero empujar aquí a mi jugador de la cuerda. Entonces si sólo voy a mi capa, capa base y tenemos esto algún daño, así que estamos recibiendo daño, pero quiero que mi jugador deje de estar en la cuerda. Entonces lo que voy a hacer aquí en la escalada, voy a tomar esta es escalar. Recuerda que inventamos aquí en nuestro código de escalada, hicimos que uno llamado es ser colina cada vez que estás subiendo. Entonces si puedo encontrarlo en realidad. Ahora, éste, lo hicimos aquí abajo. Así es escalar aquí, es escalar. Hicimos que un conjunto es escalar. Entonces, realmente usemos ese de aquí abajo. Entonces solo preguntando el código, si recibes algún daño. ¿ Estás subiendo siendo ya si lo eres, queremos hacer otra cosa. Si no lo eres, sigamos adelante y solo hagamos lo que hicimos antes. Entonces si ya estás subiendo, déjame llevar esto es escalar y ponerlo falso porque ya no quiero escalar. Y luego volvamos y hagamos lo que sea para tratar de ver qué hace eso. Así que déjame ir en esta cuerda de pie aquí. Y ya puedes ver que está funcionando correctamente. Hay un pequeño bicho ahora nos gusta cuando nos movemos, es como pausar nuestros libros flip para que las animaciones no estén jugando. Y recuerda, en el ser cliente, si vuelves a tu código, tenías algo aquí. Usamos llamado pausa, subida, flip book. Y usamos esta pausa cada vez que no nos movemos en la cuerda, estamos posando el libro flip para que no parezca que estés subiendo mientras estás parado. Entonces tenemos que hacer eso también. Entonces déjame bajar aquí y simplemente seguir aquí. En lugar de sólo hacer esto, vamos a hacer, puede subir de nuevo. Excelente en éste. Puede escalar aquí. Tomemos este también. Así conjunto puede subir para ser falso. Set está subiendo para ser falso y establecido. Veamos la pausa una aquí. Pausa, sube, flip book para ser falso. Por lo que tanto la lata trepar es escalar y pausa de encuadernación flip book se establece en falso. Así que déjame mover el código, algo como esto. Entonces estamos haciendo esto, en un principio sólo estamos quitando el mecánico de escalada. Y estamos, creo que estamos bien para irnos ahora. Así que tratemos de bajar la cuerda. Y se puede ver que está funcionando correctamente ahora y puedo volver a saltar sobre la cuerda. Y si hago eso, quédate aquí y te daña. Si este caracol me pega. Entonces cuando me daña aquí, puedes ver que sigue funcionando. De acuerdo, Así que ese error está arreglado ahora, la muerte y el daño. Y en realidad hay un pequeño libro aún, como si estuvieras parado sobre la cuerda. Ya puedes ver, me veo así. Si realmente muero en la cuerda. Y esto está sucediendo esencialmente porque si volvemos aquí y vamos a ISClient siendo en realidad la función desenvolver es escalar si puedo encontrarla aquí. Entonces lo es, cuando está subiendo es falso. Se lo va a poner a esto aquí. Déjame esconderme. Este año. Se va a poner nuestro libro de salto flip aquí. Pero no queremos hacer eso. Queremos jugar a la muerte. Tratemos de tomar esto. Boolean está muerto aquí. Vamos a comprobar si ya estás muerto aquí, en realidad voy a decir no eso porque eso es mejor leer. Así que vamos, conectemos los por ahora. Y ahora estamos diciendo, ¿estás subiendo? Sí, lo soy. ¿ No eres así si estás siendo golpeado por un enemigo y te estás cayendo de la cuerda, entonces esto será falso. Ya no estás escalando. Vale, ya no vamos a jugar a Bing. Entonces vas a revisar, ¿estás muerto? Si no estás muerto, vale. Vamos a seguir adelante y simplemente hacer lo mismo que antes, donde te caes. No obstante, si estás muerto. Así que déjame arrastrar esto aquí. Si eres eso, déjame simplemente golpear esto. Si eres eso ahora, tomemos esto aquí, el modo de movimiento establecido. Y lo voy a poner a caminar en vez de volver a caer al colisión, tenemos que volver a esta colisión de peones porque antes éramos el jugador escalador, tenemos que volver al peón canal de colisión aquí. Y en lugar de configurar el flip book para saltar la animación, solo podemos decir el modo movimiento. Y que los modos de movimiento establecen estados de movimientos para el jugador aquí en la base int jugador, establece el modo de movimiento para ser muertes. Entonces ahora estamos muertos porque esto va a ser falso, lo que significa que si no estás muerto, vale, vas a hacer lo mismo. No obstante, si eres que vas a hacer esto aquí abajo donde estableces el modo Caminando o el modo de movimiento a caminar, y entonces lo vas a poner a la muerte aquí. Así que juguemos este código. Permítanme en realidad sólo engendrar un poco más enemigos sólo para que podamos probarlo más rápido. Y ahora nos vamos a dañar un poco aquí. Y ahora en la cuerda, se puede ver que en realidad soy una tumba. Ahora, esto está funcionando correctamente y si hago clic en Okay, y puedo andar por ahí, puedo hacer lo mismo que yo estaba haciendo antes. Estoy siendo empujado fuera de la escalera. Si estoy parado en ella. Quiero decir, solo puedes hacer que tu juego no sea empujado por la carta. Eso depende de ti. También puedes acaban de recibir daños bajo carta. Bueno, creo que se ve mucho mejor si sólo empujas fuera de la carta y se obtiene esta tumba cada vez que mueres. Entonces esto está funcionando correctamente ahora. Entonces ese fue el sexto. Y el séptimo es Responder Ok, el botón es enfocado. Lo que quiero decir con eso es si hago clic bien aquí arriba , y luego me muero. Y esto es algo en la interfaz de usuario. Así fy, dy y haga clic en el espacio en mi teclado o Enter. Se puede ver que estoy haciendo clic en el botón. Entonces si hago clic en el espacio y si no quieres hacer eso, no quiero hacer eso por este juego. que puedas ir a la interfaz de usuario, ve al menú principal. Ahora, en ese menú principal, el menú I. Y aquí para este botón, si haces clic en él, hay algo llamado es enfocable y dice a veces el botón solo debe ser clicable con el ratón y nunca teclado focalizable. Y esto es lo que está pasando. Entonces si hago clic en él con mi mouse, y luego más adelante podemos simplemente hacer click con el teclado como espacio para hacer click. Ok. Puedes guardarlo si lo quieres, pero lo voy a quitar, lo que significa que sólo puedo hacer clic en esto con mi mouse. No puedo hacer clic en Entrar en mi teclado o un espacio. Y a veces es molesto como si tienes un sistema de inventario, solo quieres hacer click en las pestañas con ratón y no con tu inter y espacio. A lo mejor estás tratando de saltar en el juego. Y no puedes saltar porque esto se está enfocando y está haciendo clic, está bien, en lugar de saltar y así sucesivamente. Entonces se va a hacer un poco de un lío. Pero en este caso está bien tenerlo como focalizable cuando estás muerto. Por lo que sólo puede hacer clic en el espacio para responder. Pero creo que lo voy a quitar. Y también solo te estoy enseñando acerca de esta interacción aquí para que podamos eliminar esto es enfocable y vamos a compilar y guardar, y eso fue todo. Entonces si solo hacemos clic, en realidad vamos a reproducirlo como el servidor escuchado también. No hemos hecho eso sólo para asegurarme de que estoy en la carta de la escalera y hago esto. Eso se ve correcto. Y si solo tomo al cliente y veamos qué está pasando. Permítanme minimizar esto un poco para que haya espacio. De acuerdo, entonces ahora somos el cliente y el cliente también siendo empujado lejos. El servidor puede ver eso. De acuerdo, entonces está funcionando correctamente. Y déjame ver si muero aquí. Y yo sí. De acuerdo, Así que eso está funcionando correctamente. Ahora, hagamos click en Okay, y cerremos eso hacia abajo. Por lo que todos los errores están arreglados y se puede ver que no toma demasiado tiempo arreglar estos errores, pero siempre es agradable probar su juego. Si quieres depurar, usa el nodo de cadena de impresión, intenté ver si es tu colisión, intentaste comprobar con Booleanos. Entonces, por ejemplo, si los jugadores que no queremos hacer una determinada acción. Entonces hay algunas cosas que puedes comprobar. Y ahora puedo cerrar esto abajo. Hemos arreglado todos los bugs. Vamos a guardar todo, y pasemos a la siguiente lección. 88. Eliminar la persecución del jugador al morir: Ahora hagamos que el enemigo deje de perseguir al jugador cada vez que el jugador sea eso. Así que vamos a nuestra carpeta Blueprints y al enemigo y al interior de la base enemiga. Entonces dentro de aquí tenemos esta lógica donde los enemigos persiguiendo al jugador, pero el enemigo sigue persiguiendo al jugador cada vez que los enemigos que son los jugadores que tenemos que hacerlo tal que el enemigo deja de gustos persiguiendo al jugador cada vez que los jugadores que. Entonces hagamos eso aquí. Tenemos esta lógica Viendo que la IA se mueve, así que nos estamos moviendo hacia el personaje y lo que el enemigo llega al jugador aquí en el éxito. En lugar de simplemente ir a pasar directamente, intentemos comprobar si el jugador está muerto o no, porque ya tenemos eso. Por lo que esto será fácil. Permítanme mover todo esto a un lado para que podamos escribir algún código aquí. Lo que quiero hacer es solo comprobar si el jugador es eso, recuerda que ya tenemos ese controlador de jugador. Y podemos decir que consigue peón controlado. Aquí necesitamos una referencia a la base del jugador. Por lo que decir consigue referencia de jugador. Así que al igual que lo que hemos estado haciendo antes. Y vamos a conectarlo aquí. Y aquí quiero usar este llamado es eso, que lo hicimos. Así que consigue ese booleano. Y vamos a escribir otro booleano solo para que sea mejor para la legibilidad. Y tomemos esto y digamos rama. Por lo que ahora estamos preguntando si el jugador no está muerto, entonces adelante y haz lo que hiciste antes. Entonces yendo a esa nueva ubicación. No obstante, si el jugador está muerto, queremos hacer otra cosa. Ahora déjame arrastrar este código un poco más cerca. Ahora que tenemos este código aquí. Tal vez algo como esto. De acuerdo, déjame acercar esto ahora. De acuerdo, así que tenemos este código aquí. Y ahora podemos decir si el jugador está muerto, así que no muerto es falso, significa que el jugador está muerto. Solo queremos recordar antes de hacer esto con la lógica de trozo, así que detuvimos su árbol de comportamiento. Ahora sólo podemos hacer lo contrario. Por lo que sólo podemos empezar con la lógica. Por lo que sólo puede copiar pegue esto si desea simplemente copiar pegarlo aquí. Y vamos a conectarlo. Por lo que queremos empezar la lógica. Nuevamente. Queremos arrancar el árbol de comportamiento. Y ahora va a ir y volver a recorrer todo el asunto. Así que intentemos hacer click en Play y ver si funciona. Vamos a jugar aquí como el servidor. Así que voy a golpear algo aquí. Voy a ser golpeado. Entonces en este momento estos me están persiguiendo. Y en realidad voy a leer todos estos dos. Ahora muero. Y vamos a ver si van. puede ver que en realidad no están persiguiendo a muchos más. Todos estos que pegué se fueron por su propio camino. Por lo que en realidad está funcionando correctamente ahora. Por lo que ahora hemos dejado de perseguir al jugador. Siempre que el, los jugadores que tan fallidos, estamos comprobando si el jugador está muerto o no. Y si el jugador no está muerto, entonces vamos a bucle ese evento aquí que hicimos antes. No obstante, si los jugadores que solo vamos a ejecutar de nuevo el árbol de comportamiento, que está aquí, lo que significa que vamos a correr que encuentren ubicación aleatoria y lo que hagamos antes, antes de golpear al enemigo . 89. Muerte y repetición enemiga: Entonces aquí dentro de la base íntima, trabajemos ahora en la muerte enemiga. Por lo que ahora hemos terminado la muerte del jugador, pero ahora necesitamos la muerte enemiga. Así que al igual que el jugador, sigamos adelante y hagamos aquí un nuevo, nuevo evento. Y en realidad solo lo hagamos dentro de la Interfaz de Blueprint. Entonces yendo a las interfaces en la base enemiga, y agreguemos una nueva función llamada muerte. Y de nuevo, necesitamos un booleano igual que antes, y llamémoslo B está muerto. Y eso es molestar otra vez. Voy a borrarlo. No sé por qué sucede tan frecuentemente en este momento. Digamos que b está muerto. Y llamémoslo muerte. Al igual que el jugador. Volvamos ahora a la interfaz. Y aquí vamos a hacer clic derecho y decir muerte y llamar a ese evento. Entonces necesitamos de nuevo un evento personalizado, que se ejecuta a través de los servidores y asegurarnos de que el cliente no esté engañando. Y vamos a ejecutarlo a través del servidor y confiable. Y ahora podemos ejecutar el servidor uno aquí arriba , así que la muerte del servidor. Y agreguemos aquí un booleano para que podamos conectarlos. Llámalo es, D está muerto, así como esto. Y ahora podemos hacer algo aquí abajo. Entonces permítanme promover esto a una variable. B está muerto. Y ya puedo pensar que necesitamos cambiar esto a un naufragio notificar porque necesitamos tocar la animación de muerte para el, para el enemigo y rep notificar. Recuerda que vamos a notificar a todos los clientes sobre el cambio visual. Entonces todos los clientes pueden ver la animación para el enemigo cuando está muriendo. Entonces esto es lo que necesitamos en este momento. Entonces aquí arriba, ahora vamos a sumar antes de que hagamos nada aquí, en realidad subamos aquí y veamos cuando el enemigo dice. Y voy a esconder aquí los alfileres no conectados para que se vea más limpio. Entonces aquí estamos calculando la salud y la estamos configurando aquí, así que está por aquí. Estamos retrasando la animación, estamos deteniendo el movimiento. Entonces estamos parando la lógica. Y en realidad lo hagamos aquí. Por lo que quiero hacerlo justo después de este retraso. Entonces cuando golpeemos al enemigo, se va a retrasar. Va a terminar de tocar esa animación de Hit antes de que muera. A menos que una copia, como copiar esto y volver a conectar esto aquí y déjame colocarlo aquí después de que esta lógica superior realmente no tiene sentido. No hace la diferencia. Quiero decir, no hace la diferencia. Pero creo que es más limpio detener el movimiento, detuvo toda lógica de inmediato antes de este retraso. A veces, como no tiene sentido organizar tus notas para que entren en el orden correcto. Y ahora va a retrasar esta animación y justo antes de empezar a caminar, pero porque tal vez estoy muerto, así que no quiero empezar a trabajar de inmediato. Entonces aquí hay una buena posición para comprobar si el enemigo está muerto o no. Entonces antes de empezar a caminar, comprueba si el enemigo está muerto o no porque no tiene sentido empezar a caminar si estás muerto. Así que permítanme seleccionar todo esto y moverlo aquí a un costado así que tengo algo de espacio para trabajar. Ahora, tomemos la información animal. O en realidad podemos simplemente tomarlo de aquí y decir break. Y entonces podemos tomar la salud y decir igual. Y vamos a arrastrarlo todo el camino aquí y esconder los pines no conectados. Sólo puedo hacer doble clic para hacer un nodo redireccionado y hacerlo mucho más limpio. De acuerdo, entonces ahora podemos decir aquí, así que si la salud es igual a 0, queremos jugar los eventos de muerte. Si no es 0, vamos a seguir adelante y hacer lo que hicimos antes. Entonces aquí, siempre que sea 0 y los jugadores muertos, juguemos aquí el evento de la muerte. Y la base enemiga está muerta está puesta a verdad. Y también tenemos que tomar la caja de la cabeza y la colisión e deshabilitar esas colisiones solo para asegurarnos de que no podamos golpear a un enemigo muerto. Entonces tomando esto y diciendo solapamiento, y puedes darte cuenta de que estás aquí abajo, tenemos algo que se llama eventos de superposición degenerados establecidos. Y lo que estamos tratando de hacer es si haces clic en este cuadro de hit, y si vas por aquí, solo estamos tratando de deshabilitar este, generar eventos de superposición porque si fue deshabilitado éste, no podemos generar ningún evento de superposición y por lo tanto ya no podemos golpear al enemigo. Así que pongamos esto en falso. Permítanme simplemente copiar pegue este uno más y conecte éste. Por lo que tenemos la caja de la cabeza y la colisión se puso en falso para que no podamos pegarlos. Y después de eso, necesitamos, necesitamos tener un tiempo de respuesta o un retraso antes de volver a engendrar al enemigo. Así que déjame simplemente hacer una nueva variable aquí llamada responder timer. Y vamos a flotar. Y tomemos ese temporizador de respuesta y digamos retraso. Ahora vamos a retrasar con ese temporizador de respuesta. Y por ahora, vamos a ponerlo a cinco segundos. Entonces vamos a compilar y ahorrar. Y por defecto, vamos a escribir cinco segundos así. Entonces después de cinco segundos, el enemigo va a responder. Si quieres. También puedes agregarlo a la estructura. Así que todos, cada enemigo. Tendrá su propio temporizador de respuesta. Se puede hacer eso también. Sólo voy a ponerlo aquí, no demasiado importante en este momento. Así que sólo cinco segundos para todos los enemigos. No obstante, si quieres hacerlo más dinámico, puedes agregarlo aquí a la estructura. Y para cada enemigo puedes tener un temporizador de respuesta separado. Ahora lo que vamos a retrasar el código con cualquier cantidad de segundos voy a mover esto aquí abajo, en realidad así. De acuerdo, entonces después de retrasarlo con alguna cantidad de segundos aquí, tenemos que volver a poner la salud a 100 o lo que fuera antes. Porque ahora mismo sigue siendo 0. En realidad necesitamos definir cuál es la máxima salud para el enemigo. Entonces necesito volver a la estructura, información animal. Y al igual que lo que hicimos por el jugador, agreguemos una nueva variable llamada max health. Y vamos a añadirlo aquí abajo esta salud y cambios a un flotador. Esta salud es algo que cambiamos durante el juego todo el tiempo, pero ésta va a permanecer estática. Así que vamos a salvar todo. Déjame ir a cualquier base Compile y Save. Y déjame volver a los enemigos. Entonces primero el cerdo aquí. Para el cerdo, me voy a poner aquí en los valores predeterminados de la clase de información animal. Vamos a establecer la salud máxima a algo así como 30. Así que empezando así como éste. Y volvamos al caracol aquí. Y para el caracol, empecemos con 15 como la máxima salud, igual que éste. Vamos a compilar y ahorrar. Y ahora volvamos a la base enemiga. Y aquí podemos volver a tomar la información animal. Podemos decir sets. Recuerda que estamos configurando la variable, así que estamos estableciendo este valor de Salud. ¿ Con qué lo están restableciendo? Lo estamos configurando con lo máximo más saludable. Así que arrastremos aquí y ahorremos break. Tomemos la salud máxima y lo conectemos a la salud y ocultemos los pines no conectados. Entonces lo que esencialmente estamos haciendo es que estamos tomando el valor máximo de salud que escribimos aquí en cerdo, caracol. Y solo estamos devolviendo a este valor de salud a la salud máxima porque ahora el enemigo ha reaccionado y solo queremos que tenga ese valor Max para la salud. ¿De acuerdo? Algo como esto aquí. Y después de establecer la salud, recordemos tomar esta información animal y ponerla aquí a la estructura como esta. Y entonces queremos precisar dónde queremos engendrar al enemigo. Así que en realidad hagamos eso aquí abajo. Hagamos aquí una nueva variable llamada responder. Y hagámoslo en realidad a través de la Interfaz de Blueprint. Entonces vamos aquí y hagamos una nueva función llamada respuesta. Vamos a compilar y ahorrar. Volvamos a la base enemiga. Llámalo aquí, responde. Vamos, hagamos que pase por servidor responda como por supuesto, llamando a su servidor así, y luego ejecutándolo a través del servidor y confiable. Y vamos a correr la respuesta aquí arriba. Lo que queremos hacer con el responder, recuerda aquí en nuestro árbol de comportamiento en ubicación aleatoria definida, realidad solo queremos hacer lo mismo. Por lo que solo queremos encontrar una ubicación aleatoria. Por lo que en realidad puede, incluso puede copiar pegar en realidad, vamos a escribirlo de nuevo solo para la práctica. Así que consigamos actor de clase, consigamos actor de clase. Solo queremos conseguir nuestra navegación Bound Mesh, nav, nav mesh, volumen de rebote, éste de aquí. Ahora queremos conseguir los límites de los actores para que podamos ver cuán grande es la malla de navegación. Y a partir de eso, vamos a romperlo lágrimas porque sólo nos interesa el eje x. Recuerda, estamos haciendo un juego 2D, por lo que sólo nos interesa el tamaño aquí en el eje x. No me importa la Z ni la y Así que no lo haremos. Solo queremos usar este valor x aquí. Lo que queremos hacer aquí, queremos decir conseguir punto aleatorio alcanzable en radio. Esto es lo que queremos usar. Recuerda, hay otros, así que consigue punto aleatorio en radio navegable. No obstante, quiero usar éste en radio alcanzable, porque si los enemigos de aquí arriba, el enemigo está aquí arriba. El caso es que si lo tienes configurado para punto alcanzable aquí en radio, se desova. Seguirá desovando aquí arriba en la plataforma, por lo que no le gusta aleatoriamente esto. Si tienes algunos enemigos aquí arriba, no desovan al azar aquí abajo. Por lo que quiero mantenerlos aquí arriba. Y es por eso que estoy usando alcanzable aquí. De acuerdo, Así que más radio, vamos a conectar esta x porque ahora tenemos los límites de esta malla de navegación aquí, y este es nuestro radio. Y el origen es justo donde murió el actor. Así que consigamos la ubicación del actor. El enemigo aquí, consigue la ubicación del enemigo, ese es el origen en el que vas a buscar. Esencialmente, hagamos una nueva variable. Lo que queremos hacer aquí es hacer una columna vectorial llamada ubicación de desove. Y este vector vamos a establecer a un rep notifique porque estamos tratando de hacer un cambio visual. Estamos tratando de engendrar al enemigo. Y en el interior de esta costilla notificar ubicación de desove. Sólo vamos a decir establecer la ubicación del actor. Esto es lo que estamos tratando de hacer. Tratando de establecer la ubicación de los actores a un punto aleatorio en la malla de navegación. Así que estamos tratando de engendrarlo aquí. El lugar de la actriz y establecer la ubicación real es un cambio visual porque estás cambiando la ubicación de la actriz. Y es por eso que lo ponemos dentro de una costilla notificar. Volvamos ahora al Gráfico de Eventos. Y en lugar de aquí, esto es lo que estamos tratando de establecer. Estamos tratando de establecer esta variable a la ubicación aleatoria. Pero de nuevo, recuerda, sólo me interesa el valor x. Permítanme realmente arrastrar esto aquí. Por lo que tengo más espacio. Sólo estamos tratando de, como sólo nos interesa el valor x aquí. Así que rompa aquí y déjame hacer el vector aquí. Por lo que estoy separando los valores para que pueda cambiarlos y no los enchufé directamente aquí. Para la x, me interesa dx, por lo que simplemente normalmente sólo tapón el acento porque esto es lo que queremos. Y para la y, quiero mantener a los actores y. entonces la ubicación real. Voy a romperlo. Y me interesa sólo mantener a los actores, como los enemigos y ubicación para ser constantes. No quiero cambiarlo aquí arriba. Y en cuanto a la ubicación z, podemos volver a usar esto, pero podemos usar esta ubicación de hueso z. Y lo que quiero hacer, sólo voy a decir plus, y vamos a tratar de decir más 20. Y permítanme explicar por qué hago eso. Para la ubicación z. Recuerda que la z está aquí arriba, esta es la ubicación z. Solo digo 20 porque a veces puede haber una posibilidad de donde los enemigos se aten aquí y se quede atascado en el suelo. Solo digo más 20 cada vez que encuentres una nueva ubicación. Por lo que va a decir más una t n va a empujar a ese enemigo hasta aquí. Y va a engendrar al enemigo aquí. Y entonces va a dejar caer aquí al enemigo. Porque recuerda, los enemigos tienen gravedad por lo que no se van a quedar aquí arriba. A veces. Sólo estoy tratando de evitar el tema donde están desovando dentro de nuestra malla de colisión. Y digo más 20. Entonces este de aquí arriba. Y son como, no creo que lo notes. Al igual que los notamos cuando engendran aquí porque tiene una gravedad y caerá aquí abajo. Y si te darás cuenta, solo disminuye este número a algo más bajo. Si lo haces algo muy alto, te darás cuenta porque caerá del cielo. Entonces creo que 20, no se notará. Así como esto. Y ahora vamos a conectarlo desde aquí hasta aquí. Déjame empujar esto un poco hacia abajo. Así que ahora estamos configurando la ubicación aleatoria, y realmente vamos a usarla aquí arriba. Entonces después de poner las caderas a 100, queremos llamar a la respuesta, es que vamos a responderla. Va a encontrar una ubicación aleatoria para el enemigo y va a responderlo. Entonces, recuerda que paramos como cuando estás muerto, detuviste la lógica aquí. Por lo que tenemos que empezar de nuevo su árbol de comportamiento. Por lo que puedo de nuevo simplemente copiar pegue esto aquí y conectado y decir comienza la lógica. Así que ahora estamos empezando con la lógica de nuevo, estás manejando el árbol de comportamiento. Recuerda volver a habilitar aquí las colisiones, por lo que no están deshabilitadas. Nuevamente. Vamos a conectarlos así. Entonces, ahora esencialmente, ¿qué va a pasar? En realidad vamos a tirar de la real completa Todavía no. Vayamos a la muerte aquí porque no hemos hecho nada. Y lo único por ahora es simplemente ir a esta función de desenvolver para los muertos. Y lo que queremos hacer es en realidad tomemos esto y verificemos si los jugadores que no lo son. Entonces si el jugador está muerto, solo queremos tocar la animación de la muerte. Entonces tomemos esto y tenemos éste llamado estados de movimiento set. En realidad establecido. Veamos, Dijiste movimientos estados. Éste para el enemigo. Dichos movimientos afirman, y elegamos la muerte solo para comprobar si realmente la hemos logrado. Entonces yendo a lo inmaduro para el movimiento Estados, en realidad no lo hemos enganchado. Por lo que muy importante comprobar si tu código está realmente conectado. Así que vamos a copiar pegue este libro flip. Conectemos los sprites al objetivo. Vamos a conectar esta muerte aquí. Y ahora para la animación de la muerte, tomemos esta estructura y vamos a golpear este pin aquí llamado animación de la muerte. Lo hicimos hace un tiempo y vamos a conectarlo. Ahora, aquí abajo, déjame esconder pines desconectados así. Ahora está conectado. Y permítanme revisar aquí por el cerdo, si hemos puesto la animación de la muerte, así que tenemos aquí y la animación de muerte para este caracol. Vamos a comprobarlo en los valores predeterminados de clase. Y hemos dicho aquí la animación de la muerte. Ahora voy a comprobar la velocidad de la animación. Entonces yendo a los enemigos. Y éste va por el tiempo. En realidad, voy a elegir tres fotogramas por segundo. Entonces 1 segundo, tocaremos toda esta animación. Y en cuanto al caracol, vamos a comprobarlo aquí. Por lo que ocho fotogramas por segundo. Sí, creo que está bien. Siempre podemos cambiarlo si es necesario. Volvamos a la base íntima y vayamos a la función desenvolver para los muertos. Entonces vamos a tocar la animación de la muerte y eso es todo por ahora. Así que vamos a hacer clic en el juego y esperamos que todo funcione. Voy a pegarla ahora. Y en realidad déjame revisar mi daño de mis golpes porque no quiero hacer esto para siempre. Entonces vamos a Veamos dónde lo hicimos. Lo hicimos en lugar de planos y el jugador, base del jugador. Y luego vamos a la información de este jugador aquí. Y por el daño base. Por lo que la salud para el caracol es de 15. En realidad voy a poner diez como mi daño base. Entonces le pegué al caracol dos veces y morirá. Entonces golpeando al caracol, a los otros caracoles y a todos esos. Y se puede ver que ahora se está muriendo. Solo tenemos que pausar esta animación para que no se reproduzca para siempre. Y se puede ver que en realidad engendra por aquí. De acuerdo, así que no creo que necesitemos, como, no necesitamos pausar esta animación de muerte. Puedes hacerlo si quieres, igual que lo que publicamos con la animación de cuerda para el jugador. Pero creo que vamos a hacer una animación de desvanecimiento y el fade lo hará desaparecer. Por lo que en realidad no importa si la animación, si los enemigos aquí es post o no. Pero puedes ver aquí están desovando, yo sé de en el suelo, así que tenemos que arreglar eso. O es porque el modo de caminar necesita ser establecido. Así que en realidad nos gusta ahora mismo, creo que está bien. Trabajemos en el desvanecimiento. Porque con el desvanecimiento, podríamos estar usando eso para establecer el modo Caminando y tuercas dentro de la animación de la muerte porque se puede ver que está funcionando, pero es porque puedes ver aquí, si vuelvo a la base enemiga y por dentro de aquí, vamos a la Gráfica de Eventos. Y recuerda que dijimos el modo de movimientos a ninguno, y nunca lo hemos puesto a caminar de nuevo. Entonces es por eso que hay atascados como si realmente no estuvieran atrapados en el suelo. Creo que es porque no nos gusta que no hayamos dicho esto a caminar. Y puedes hacer esto ahora mismo dentro de la animación de la muerte o del evento de muerte aquí. Pero creo que vamos a hacer un efecto de desvanecimiento. Y con eso configuraremos el modo Caminando. Así que pasemos a la siguiente. 90. Desvanecimiento de Respawn enemigo: Muy bien, así que aquí en la base, hagamos ahora un efecto de desvanecimiento para cuando el enemigo dados. Déjame ver si podemos estructurar esto mejor. Ahora tenemos la animación de muerte aquí, tenemos la animación de respuesta de desova. Solo puedes intentar hacer la animación de fade aquí. Voy a volver a mi Interfaz Blueprint y hacer una nueva función llamada, llamémosla actor fade. Y vamos a hacer un booleano y simplemente llamarlo ser fade. Entonces sólo para ver si debe desvanecerse o no. Volvamos aquí y desplázate ese evento llamado atrofiado. Y hagamos eventos de un servidor. Entonces eventos personalizados pasando por el servidor llamado atrofiado. Y vamos a ejecutarlo a través de un servidor confiable. Y vamos a ejecutar el evento del servidor aquí arriba, actor fade, y hagamos un nuevo booleano. Entonces todas las mismas cosas que hemos estado haciendo hasta ahora. Ahora vamos a conectarlo. De acuerdo, así que ahora tenemos este actor fade. Vamos a promover esto a una variable. Y no sé si necesitamos convertirlo en un rep notifique por ahora. Dejemos que sea así por ahora. Entonces lo que estamos tratando de hacer es que estamos tratando alimentar al enemigo cuando muere. Así que por aquí y la muerte enemiga, en realidad sólo estoy desvanecerse aquí antes de que yo, en realidad, después de poner esto en falso, sólo podemos alimentar al enemigo antes del temporizador de respuesta. Así que no me quite, pero mueva esto aquí y llame al actor fade event aquí. Así Actor se desvanecen. Y pongámoslo a verdad. De acuerdo, entonces, ¿qué debería pasar cuando el desvanecimiento es cierto? ¿ Qué es cierto? Lo que necesito hacer es llamar a una línea TEM. Entonces recuerda que hicimos una línea de tiempo antes. Hagámoslo ahora de nuevo. Así que pinchando aquí, y llamemos a este actor líder. Y juguémoslo desde los inicios. Entonces, lo que tenemos que hacer aquí, el objetivo de esta línea de tiempo es desvanecer el color para el enemigo. Y recuerda hacer el efecto de desvanecimiento, hay que ir a ese enemigo. Y de nuevo establece este material en un material translúcido, sin iluminación porque no se puede desvanecerse este color directamente como desaparece de repente. No te puede gustar que no haya un paso intermedio. Es sólo aparece y desaparece así. Por lo que tenemos que ponerlo a translúcido otra vez, igual que el jugador que hicimos con el efecto parpadeante. Entonces vamos a la base enemiga aquí. Y en realidad, hagamos eso de aquí adentro está muerto. Entonces hagamos eso antes de desvanecernos. Entonces cuando el jugador está muerto, vamos a está muerto. Y aquí podemos tomar este brillante y decir material Set. Y pongámoslo a lo que se llama material de sprite translúcido, translúcido, sin iluminación. Así que ahora estamos sentados atrás y vamos a configurarlo. Recuerda volver a ponerlo aquí siempre que el jugador ya no sea eso. Entonces al material sprite enmascarado, enmascarado sin iluminación. De acuerdo, entonces ahora le dijimos el material a esto y podemos alimentar al jugador o desvanecerse al enemigo. Vamos a bajar a la línea de tiempo aquí. De acuerdo, entonces estamos tratando de establecer unos colores lineales. Así que déjame hacer una nueva variable y llamarla actor fade color. Y hagamos aquí la nueva variable en un color lineal. Y tomémoslo y pongámoslo. Entonces esto es lo que estamos tratando de establecer. Lo estoy convirtiendo en un naufragio. Notificar. Porque recuerda que esto es un cambio visual. Estamos cambiando el, el alfa del jugador, lo que significa que lo estamos haciendo opaco. Entonces yendo aquí y configurándolo a una retina phi. Y lo que estamos tratando de hacer aquí en la función unwrap es que estamos tratando de tomar este sprite y decir sets. Creo que primero se llamaba color Sprite. Sí, es de color brillante. Esto es lo que estamos tratando de establecer aquí. Y tomemos a este actor color falso y conectado. Entonces vamos a establecer el color y lo vamos a configurar con tiempo porque lo estamos actualizando constantemente a través de esta línea de tiempo. Y lo que estamos tratando de hacer es, vamos a usar una nota de bucle. Entonces intentó usar un nodo de bucle. Y buscando bucle, puedes encontrar éste como podemos usar éste, pero creo que mejor idea, como puedes romper esto. Puedes ver, tomar esto y tienes razón, hacer, hacer color lineal. De esta manera. Puedes cambiar el alfa aquí a través de un flotador. Y en realidad puede simplemente usar un nodo de bucle porque se trata de un flotador. No obstante, una mejor manera de hacerlo. En realidad hay un bucle para un color lineal específicamente. Por lo que puede usar eso en su lugar. Y puedes recorrer colores lineales. En lugar de hacer esto aquí, permítanme borrar esto. Y aquí por el bucle solo puedes conectarlo así. Y para el primer color, así que empezamos con ser solo nosotros mismos. Entonces aquí 1111, todo siendo fijado a uno. Esto hará que sólo los píxeles como si acabemos de tener nuestro personaje sin ningún color. Y el segundo. Sólo quería volver a hacer 1111, pero para el Alfa, por lo que la opacidad que queremos establecer a 0, en realidad 0, así que va a desaparecer. Va a ir de 0 a uno. Al igual que éste es 0 y luego va a uno. Entonces se va a desvanecer de 0 a uno. Y queremos hacerlo sin problemas. Entonces en lugar de solo escribir uno aquí, si sólo hacemos eso sin nada más, va a hacerlo, en realidad va a desaparecer sólo cuando iniciemos el juego. Pero queremos ir, queremos ir de 0 a uno sin problemas. Y es por eso que usamos una línea de tiempo. Entonces haciendo doble clic en la línea de tiempo, voy a hacer una nueva pista de flotación aquí. Vamos a llamarlo fade alpha. Aquí, vamos a hacer clic derecho y hacer dos. En realidad déjame hacer tres puntos aquí y verás por qué. Entonces en el momento 0, quiero que el valor sea 0. Hagamos realmente la longitud de este 1 segundo. Entonces en su momento, así que el último punto aquí, así que primero es 00, el último punto en el momento uno, quiero que sea uno. Y éste en el momento de 0.75, quiero que sea 0 quieto. Así que no quiero desvanecerse al enemigo de inmediato. Quiero desvanecerlo unos 0.75 segundos. Entonces se va a reproducir un poco la animación, y luego se va a desvanecer la animación. Así es como puedes hacerlo también. Entonces no tienes que hacerlo así donde solo se desvanece con el tiempo. Sólo voy a ser infiel así hasta que empiece a desvanecerse rápidamente aquí al final de la animación. Así que vayamos aquí y conectemos el alfa ahora. Y ahora tenemos esta línea de tiempo suave que va a desvanecerse nuestra animación. Y ahora lo que podemos hacer es subir aquí a nuestro código después de la muerte. En realidad, ahora en realidad ya lo hicimos aquí. Entonces Actor se desvanece, déjame tratar de tocarlo y ver qué pasa. Si lo toco ahora. Y mato a algunos enemigos. Se pueden ver que se desvanecen y realmente no importa. Al igual que nuestra animación sigue en bucle como antes, pero realmente no la vemos porque estamos encajando al enemigo. Entonces si trato de matar a éste ahora, se puede ver que toca la animación y luego se desvanece después de eso. Qué es bastante guay. Y permítanme en realidad, antes de hacer cualquier otra cosa, déjame quitar mis colisiones aquí. No quiero verlos más. Entonces yendo al cerdo, creo que acabamos hacer clic en uno de esos por lo que la caja de la cabeza debe estar escondida en el juego. En realidad, creo que se hace a través de la base enemiga. Entonces aquí escondido en juego. Solo quería pegarme cajas de la cabeza así y vamos a vender. Así golpean u ocultan los jugadores atacan colisión escondida en el juego. De acuerdo, entonces ahora tenemos esta animación de desvanecimiento, pero recuerda que tenemos dos desfavorecidos en algún momento. Voy a ir sin fases de inmediato cuando encuentre mi ubicación de desove. Entonces justo antes de empezar la lógica, empecemos el proceso de desarrollo. Entonces Actor se desvanece, voy a llamar al mismo evento. Y en lugar de tener esto marcado como antes, ahora lo tenemos sin marcar. Y esto significa que se va a desplegar. La forma en que hacemos esto es aquí. ¿ Cuál es la línea de tiempo? El cronograma está aquí. En lugar de jugar desde el principio, hagamos realmente una rama aquí. Entonces tomemos esto y hagamos una sucursal y conectados. Entonces si es cierto, si nos estamos desvaneciendo, va a jugar desde el principio como lo hicimos antes. No obstante, si ya no te estás desvaneciendo, por lo que va a ser falso. En realidad quiero jugar a este revés desde el final. Y va a pasar de esto invisible a visible. Entonces en realidad se va a desvanecer en mi personaje. Esto lo estaba haciendo esencialmente si lo estás configurando en desmarcado y lo agregas aquí, el que no está marcado, que es el falso para revertir desde el extremo. Recuerda en realidad quiero hacerlo aquí. Entonces el modo de caminar, recuerda que no hemos establecido el, el modo de movimiento. Entonces si vuelvo aquí en el, cualquier daño, establecemos el modo de movimiento a ninguno. Voy a copiar esto. Voy a bajar aquí, pegarlo. Y en lugar de ponerlo a ninguno, en realidad voy a ponerlo a caminar de nuevo. De lo contrario se va a quedar atascado y nunca, nunca se moverá. Entonces ahora tenemos el modo de trabajo, así que estoy tratando de ver lo que nos falta. Así que en realidad, hay algo que nos falta. Lo que nos falta es que nunca especificamos cuando el personaje ya no está muerto. Entonces aquí nos fijamos que eso sea cierto. Y recuerda que tenemos que ponerlo en falso porque aquí está adentro, está muerto. Nos fijamos aquí en defecto, volvemos a configurar el material para enmascarar. Entonces tenemos que hacer esto, y creo que voy a hacer esto. Entonces, en lugar de hacerlo aquí, así que no puedes, no puedes entrar aquí y decir esto. Porque recuerda que estás, estás tocando un, un actor fade, que es una línea de tiempo. Y en realidad te vas a poner, como si configuraras esto aquí, la muerte, te vas a poner. Este material a enmascarado sin iluminación, lo que no le da a esta línea de tiempo la oportunidad de cambiar el color de invisible a visible. Porque recuerda cuando tienes el material como predeterminado para enmascarar hendiduras, no puedes tener esa transición suave con la decoloración del enemigo. Entonces si haces esto aquí arriba, va a hacer esto al instante justo después de que el actor se desvanezca. Y va a cambiar el material para enmascarar sin luz, lo que no da la línea al azar como el tiempo suficiente para hacer esto aquí a esta transición de, de como el desvanecimiento en efecto. Así que en realidad lo hagamos aquí en la línea de tiempo. Entonces cuando la línea de tiempo termina al desvanecerse, entonces podemos poner esta muerte en falsa. Y no queremos hacer eso todo el tiempo porque recuerda, a pesar de que el campo está establecido verdadero y lo estás jugando aquí, va a jugar esto a falso porque realmente no necesitamos hacer eso cada vez que te estés desvaneciendo, lo que ha hecho aquí, no queremos ponerlo en falso, como la muerte porque también tenemos un temporizador de respuesta y sus necesidades para ir algún tiempo. Voy a hacer un booleano aquí. Éste, de nuevo, el feed. Y hagamos un booleano. En realidad es una especie de alimento que no es realmente explicativo. Permítanme cambiarlo a después de fade en su lugar. Permítanme configurar este para replicarlo porque recuerda que se está ejecutando en el servidor, por lo que el cliente necesita saber sobre esto. Y déjame llevar a este actor fade, establecer una rama y vamos a conectarlo aquí. Entonces cuando el enemigo se está desvaneciendo, no vamos a hacer nada. Pero cuando el enemigo ya no se está desvaneciendo, lo que significa que estás por aquí. Entonces vamos a ejecutar este código, ejecutar esta línea de tiempo, y la línea de tiempo termina. Vamos a decir, sí, el actor no se está desvaneciendo. Se puso a falso. Entonces en realidad vamos a poner esto en falso también. Por lo que ahora podemos hacerlo de esta manera en lugar de ahí arriba. Muy bien, así que ahora vamos a compilar y guardar, y ojalá hayamos arreglado todo. Y vamos a hacer clic en el juego y vamos a matar a algunos enemigos. Entonces tenemos muchos enemigos muriendo. Y veamos si responden correctamente. Por lo que ahora éste responde a éste, responde. Estos responden. Vale, entonces parece que todo funciona correctamente. Y si solo les pego una vez, van a hacerlo y se puede ver que en realidad hay un pequeño error. Creo que a éste no le gustó que no haya eventos de superposición generados con éste. Entonces el problema aquí con el tema superpuesto es que olvidé ponerlos a veras. Entonces los pusimos a falsos aquí, pero al final, olvidé ponerlos a veras. Por lo que necesitamos generar eventos de superposición. Entonces vamos a compilar y ahorrar. Volvamos a jugar el juego. Y vamos a intentarlo de nuevo. Así que vamos a golpearlos ahora. Van a morir. Obviamente, necesitamos algunos efectos de sonido muy pronto. Y se puede ver que están respondiendo correctamente. 91. Colocación del nivel enemigo: Esta lección es un poco diferente. No lo hacemos, no vamos a codificar nada. Y ahora sólo vamos a colocar a los enemigos alrededor del nivel. Y se puede hacer esto con el código. Por lo que solo puedes hacer un evento de desove y simplemente engendrar a todos los enemigos automáticamente cuando te uniste al juego y lo configuras como ubicaciones aleatorias. Pero creo que si puedes hacer algo sin código, entonces te sugiero que lo hagas sin código porque recuerda, codificando, vas a usar algún recuerdo del juego. Y por qué vas a hacer eso cuando solo puedes venir aquí y simplemente colocarlos gratis. Esto está muy optimizado. No tienes que escribir código. Así que siempre que puedas evitar escribir todo este código, intenta evitar bucles. Intenta evitar escribir ese código. Entonces si pudiéramos, por ejemplo, evitar escribir este código, nunca lo habría escrito. Pero como ya nos gusta, ya que necesitamos escribir esto, para que funcione, tenemos que escribirlo. Pero para los eventos de desove, como en lugar de hacer un código de desove para los enemigos, si solo puedes entrar aquí como si encaja para tu juego. Por supuesto, algunos juegos necesitan código de desove para que funcione. Pero para este caso, hemos reemplazado a los enemigos. Ya que hemos colocado a los enemigos, en realidad podemos simplemente tomar y simplemente colocarlos por ahí donde queramos. Y eso es todo. Entonces realmente no necesitamos codificar nada aquí para la base enemiga. Entonces, si vuelvo, lo que hicimos con la base enemiga aquí para la respuesta es que básicamente estamos escondiendo al enemigo y luego mostrarnos ayudando al enemigo. Nuevamente. Realmente no estamos eliminando al enemigo permanentemente del juego. No obstante, recuerda, en tu juego, si estás haciendo algo personalizado y no seguir completamente este curso, si quieres destruir al actor, como eliminarlo por completo del nivel. Porque si solo lo alimentas así, si lo desvaneces, estás locos. Al igual que el actor básicamente sigue ahí. Si sólo voy aquí al enemigo y pongo la caja de la cabeza a no escondida en juego. Y en realidad se puede ver como si juego el juego ahora, le pego aquí a este enemigo y a un dado. Se puede ver la caja de colisión sigue escuchando que el enemigo sigue aquí. Sólo está en desvanecido. Entonces esto está bien hacer en esta situación porque tenemos como una cantidad especificada de enemigos. Por ejemplo, solo necesito cuatro caracoles y mi nivel. Así que solo lo desvanezco y lo respondo en algún otro lugar. No obstante, si solo quieres destruirlo por completo desde el nivel y nunca tener esto ****. Porque si tienes un estanque desove todavía, seguirá ejecutando este código de blueprint y no será optimizado si sigues desovando enemigos y nunca los eliminas del nivel. Entonces si quieres quitarlo por completo, puedes usar este diciendo Destroy Actor. Destruir actores va a eliminarlo por completo del juego y se puede tratar de ver qué hace. Así que si acabo de matar esto aquí y se va a desvanecer en algún lugar, déjame matar un poco más y matar a éste también. Así que ya puedes ver que en realidad son como si estuvieran respondiendo en otro lugar y después del código de respuesta, están siendo destruidos. Por lo que ahora se eliminan completamente del juego. Esto está optimizado porque entonces no se ejecuta todo este código para ese enemigo en el juego. No obstante, para este juego, solo tengo cuatro enemigos todo el tiempo. Y acabo de desvanecerlo y responderlo en otro lugar. Entonces me quedo con estos cuatro enemigos. Nunca he desovar cinco enemigos ni seis o siete enemigos. Entonces si haces eso, recuerda destruir al actor. Si no, si solo estás haciendo esto, solo puedes responderlo en otro lugar y el nivel. Por lo que ahora podemos evitar escribir código para la respuesta aquí para que solo podamos reemplazarlos. Entonces lo que voy a empezar a hacer aquí es solo poner esto en uno. Y a veces ves enemigos recortando entre sí. Y esto es porque tienen, todos ellos tienen uno en el y Así que a veces simplemente se meten el uno al otro. Se recortan así. Se puede ver que hay algún recorte sucediendo. Y esto se debe a que tienen el mismo valor y. Entonces, lo que puedes hacer aquí manualmente, tomará algún tiempo, pero solo puedes escribir, por ejemplo, uno para éste, el segundo, voy a escribir 1.1. Y para el tercero, voy a escribir 1.2. Por lo que nunca se van a recortar el uno al otro. Ya puedes ver que están uno frente al otro. Nunca van a enganchar. Y solo puedes hacer eso. Entonces mantén presionado Alt y arrastra para copiar, y éste es 1.3. Y arrastre de nuevo 1 para este 1.51. Entonces algo como esto, y puedes colocarlo aquí arriba, arrástralo de nuevo, 1.6. Así que sólo voy a tener a estos enemigos. Y aquí arriba por los cerdos, voy a sumar unos cerdos aquí arriba. Entonces 0 y la y. para la y, en realidad voy a empezar con uno de nuevo porque el jugador en realidad no es el jugador. Estas fichas están a 0, así que no quiero que estén detrás de los azulejos. Es por eso que empecé uno. Y vamos a arrastrarlo de nuevo y decir 1.1. Y a veces como si 1.1 no es suficiente, solo se puede decir 1.1.15 o algo así. Entonces 1.2 para esto, 1.31, para éste, siempre podemos comprobar si están recortando, podemos aumentar este tamaño entre ellos. Y para el jugador, el jugador empieza a las dos, por lo que el jugador siempre está delante de los enemigos. Demos clic en Play. Y vamos a comprobarlo y sólo tratemos de ver si hay recorte. Permítanme realmente ir a la base enemiga y desactivar ese juego de colisión o caja de golpe extremo oculto aquí. Para que pueda verlos con más claridad. Por lo que ahora puedes echarles un vistazo y ver si alguna vez están recortando algún día, pasar el uno al otro. Y a veces cuando cortan, solo puedes aumentar esos números de separación. Simplemente puedes aumentar el valor y. Creo que se ve bien, se ve bien. De nuevo, puedes aumentar la separación y la y si quieres. Pero esta es una más, esta es una forma más optimizada de hacerlo. Si puedes salir con la suya con algo al no programar, en realidad puedes hacer eso y será más optimizado. Pero a veces hay que escribir código y realmente no se puede evitar. Por lo que ahora que hemos colocado a todos los enemigos en el nivel, vamos a salvar todo y pasemos a la siguiente lección. 92. Hit, Death & Respawn SFX: Hemos llegado al final y es casi hora del sistema de nivelación. Y antes de que hagamos eso, en realidad agreguemos algunos efectos de sonido y hagamos algo interesante aquí. Creo que suena mucho mejor si cuando agregas algunos efectos de sonido. Vamos al audio. Y los he incluido para ti dentro de los materiales del curso y los tenemos aquí. Sólo usamos el salto hasta ahora. Por lo que sólo tienes que seleccionar todos ellos ahora, excepto el salto. Y déjame arrastrarlos a mi carpeta de audio aquí. Y luego tenemos todos esos. Vamos a hacer clic en archivo y guardar todo. Ahora lo que puedes hacer es que puedas subir este nivel click derecho y puedes crear una bola de sonido. Es sonido taco subiendo de nivel. Y lo vamos a usar más tarde. Puedes hacer click en play para escuchar cómo suena. Sólo algunas historias, efectos de sonido. Y para este ataque, puedes hacer clic derecho y crear alguna Q, llamarlo ataque y hacer lo mismo con los golpes de ataque, llamarlo ataque, golpes. Haga clic con el botón derecho para el de la muerte y cree una taca de sonido y llámalo cola de sonido, profundidad. El salto ya estamos hechos. Entonces yendo y subiendo de nivel. Hicimos este para recoger la muerte, sonido de taco, escoger la muerte. Y hagamos eso también por la muerte del caracol. Sonido cue Deuda de caracol. Y tenemos una respuesta, éste responde, sonido cue, responde. Y veamos si nos falta algo. Entonces tenemos el texto muerte ahora, lo tenemos todo ahora. Por lo que también puedes hacerlo por la música. Tenemos algo de música llamada sonido cue music, en realidad acaba de llamarse Tennessee, lo voy a llamar génesis. Esta es la música. ¿ De acuerdo? Y no voy a conectarlo ahora mismo porque creo que va a ser molesto cuando estemos depurando el juego y seguimos tocando la música. Así que voy a mantener este fuera por ahora. Entonces el primero que podemos hacer es cuando estamos atacando con el jugador. Entonces vamos al jugador y vayamos a la base del jugador. Y así para el atacante, estamos haciendo esto aquí. Entonces tenemos el ataque. Estamos pasando por el servidor y recordamos los efectos de sonido. Tienen que pasar ya sea por el cliente. Entonces si quieres que unos efectos de sonido solo sean escuchados por ti, quieres que te guste llamar a un evento personalizado y ejecutarlo a través del cliente. No obstante, si quieres que el efecto sonoro sea escuchado por todos los que te rodean, tienes que hacerlo. En realidad, me olvido de usar mi atajo aquí para este evento personalizado. Atajo muy rápido. Si quieres hacer que el efecto sonoro sea escuchado por todos, tienes que ejecutarlo a través de un multicast. Multicast si todo el mundo debe escucharlo, alineado, sólo si debe escucharlo. Creo que todos los clientes deberían escuchar estos sonidos, así que déjame simplemente hacer eso. Así que déjame hacer un evento personalizado y llamarlo ataque MC. Y para éste vamos a decir tocar sonido en el lugar. Por lo que vamos a tocar el sonido en el lugar donde está atacando el jugador. Y voy a simplemente arrastrar estas variables en los eventos y llamarlo ataque S efectos para que suena, efectos de sonido y ubicación está bien. Y ahora vamos a tocarlo. Recuerde, Multicast solo se puede ejecutar a través del servidor. Para el ataque, tenemos dos sonidos diferentes. Tenemos 14. Aquí, veamos por el ataque. Y tenemos uno para el kit de ataque. Así que cada vez que pegues algo, así que vamos, hagámoslo por aquí. Así que aquí estamos comprobando por golpear realmente a cualquier enemigo. Y si lo estamos, vamos a jugar al hit. Así que por aquí, permítanme en realidad simplemente llamar a MC attack. Y empujemos este código un poco de forma como esta, y siempre se puede acercar más tarde. Ahí estaban tocando estos efectos de sonido y va a tocar este efecto hit. Lo que puedes hacer para que sea mejor en realidad mantener la consistencia de este juego, podemos ir a la estructura e información del jugador y simplemente agregar variables para información del jugador y simplemente agregar variables para los efectos de ataque y elegir sonido taco. Para el siguiente, solo puedes hacer un hit tecnológico efectos S. Entonces tenemos que atacar, atacar sonidos. Y en realidad hagámoslo aquí en la base de jugadores, en lugar de hacerlo por separado dentro de Luke y Serena, realidad solo lo hagamos aquí en la base del jugador porque solo tengo un sonido para todos los jugadores. Así que déjame ir a la información del jugador. Simplemente póngalos aquí en lugar de en cada personaje. Ahora solo busco un golpe de tecnología y ataque. Por lo que sólo todos los personajes tendrán el mismo efecto sonoro. Así que volvamos a la base de jugadores. Y aquí, ahora podemos tomar la información de nuestro jugador. Geniales niños, y dejemos simplemente esconder alfileres desconectados y simplemente mostrar mi ataque. En realidad un éxito tecnológico para éste. Y conectado aquí. Entonces, ¿cuál es la ubicación? La ubicación es solo la ubicación de este jugador. Por lo que obtenemos ubicación real y conectados. Y siempre que, en realidad, en lugar de hacer esto, creo que vamos a conseguir un bug porque esto se está ejecutando en el servidor y el cliente nunca podrá oír esto. Entonces el servidor cuando me pegue algo, lo voy a escuchar, pero creo que como cliente no van a escuchar nada. Vamos a intentarlo. En realidad, no está funcionando, así que en realidad podemos hacer esto. Pero si quieres, también puedes quizá a veces creo que es mucho más limpio solo guardar esto y en realidad solo pasarlo por aquí en su lugar. Pero en realidad sólo mantengámoslo así por ahora. Sólo Control Z. sólo voy a mantenerlo así. Déjame copiar pegarlo aquí. Si está funcionando, ¿por qué no? Arrastrémoslo aquí y conectémoslo. Y para éste, en realidad, ¿qué estoy tratando de hacer por este ataque? En realidad tenemos que pasar por el retraso aquí, así. De acuerdo, así que aquí abajo, vamos a tocar el efecto de sonido donde no golpeamos nada. Y aquí abajo, tomemos esta copia pegada aquí abajo. Y en cambio, podemos mostrar el ataque, ataca efectos y conseguir la ubicación de los actores aquí abajo una vez más, así así. Entonces ahora lo que podemos jugar y déjame simplemente jugarnos a los clientes, sólo para estar seguros. Jugando con nosotros a los clientes. Ahora están golpeando. Se puede ver. Y si no pego a sí, eso suena bien. Ok. Lo siguiente es que queremos el caracol y la profundidad del cerdo. Entonces vamos al enemigo y veamos dónde jugamos esto. Entonces nos han tenido esto algún daño corriendo a través del servidor. Entonces va a jugar este evento de muerte aquí, y en realidad vamos a añadirlo a eso. Entonces la muerte va a pasar por el servidor y desde el servidor queremos ejecutar un multicast. Así que déjame poner estos dos juntos, pero esto abajo y por aquí voy a hacer evento personalizado llamado MC death y ejecutarlo en multicast. Aquí. Nuevamente, toca sonido, ubicación M y simplemente llamarlo muerte enemiga, o simplemente muerte o sin efectos inmediatos. Entonces cosas así. El lugar. Y ahora para éste podemos llamar la muerte multicast. Y para esta muerte multicast, permítanme ahora realmente arrastrar todos estos, siempre tener aquí el problema espacial. Para éste, por la muerte enemiga, hagamos realmente lo mismo. Entonces para la estructura, podemos agregar una nueva variable llamada S Effects. Y hagámoslo en una pista sonora. Ahorra aquí. Y déjame ir a, ahora déjame ir primero a base enemiga, compilar y salvar, y luego ir al enemigo, al cerdo. Y luego tenemos que ir a los valores predeterminados de clase al infill animal y luego hay que seleccionar el efecto de sonido sordo. Permítanme buscar cerdo y seleccionar éste. Escoge eso, compilar. Vamos a un caracol. Y el caracol vamos a usar este caracol, la muerte. Déjame volver a la base enemiga. Ahora lo que podemos hacer es arrastrar esta información animal, romper Kids, esconder pines no conectados y puedo usar éste, la muerte como efectos conectados. ¿ Y dónde está la ubicación? Recuerda que estamos dentro de cualquier base, por lo que sólo podemos decir conseguir ubicación de actor porque es donde esté este enemigo, así. Ok, Así que dejemos que los compuestos ahorren cuando hacemos click en Play y veamos si funciona. Si muere. Sí, tocando el sonido de la misma. Entonces éste realmente estaba jugando un par de veces. Eso es gracioso. Es porque en realidad tenemos que hacerlo aquí como uno, el enemigo está realmente muerto. Eso fue gracioso. Estaba jugando varias veces. Para que podamos tomar esto y decir rama. Y sólo cuando el enemigo muere, queremos tocar el sonido, no cuando responde. Así que vamos a hacer clic en play e intentarlo de nuevo, solo para estar seguros de que funciona. Y en realidad hay un pequeño bicho mientras estoy probando esto. puede ver que en realidad funciona mi personaje aquí arriba. Tenemos que arreglar eso. Así que permítanme realmente sólo probar el sonido primero antes de arreglar algo. Así que déjame quedarme aquí arriba y jugar. Tienen un poco más de salud, así que tengo que intentarlo de nuevo. Bien, eso funciona también. Impresionante. Entonces el sonido funciona. Tenemos que arreglar ese tema de carta en un poco. Lo siguiente que queremos hacer es tocar el sonido de la muerte de los jugadores. Entonces yendo a la base del jugador, yendo a la, cualquier daño, y cuando el jugador muera, así que aquí en la muerte, cuando se pone a verdad. Así que volvamos a la muerte aquí abajo. Me puse a true, queremos tocar el multicast. Entonces vamos a tirar de esto aquí para hacer que más espacio llame a una muerte multicast eventos personalizados. Vamos a ejecutarlo a través del multicast confiable y luego reproducir sonido en la ubicación. Así que estamos haciendo lo mismo de nuevo. Es bueno que la práctica solo lo haga una y otra vez. Y de repente te verás a ti mismo y experto en esto. Entonces hagamos la muerte como efectos. Y para éste de nuevo, tenemos que ir a la estructura al reproductor a un nuevo sonido llamado efecto de sonido de muerte. Guardar. Y todos los jugadores tienen los mismos efectos de sonido. Sólo voy a hacer click en esto y el jugador, información del jugador. Y cambia esto aquí abajo a la muerte. Y éste. De acuerdo, así que yendo a éste, se establece la profundidad. Ahora, permítanme realmente sólo esconder los pines desconectados. Y por aquí llamémosles muerte multicast. Ahora lo estamos llamando aquí y ponemos este efecto de texto. Ahora tomemos la información del jugador y déjame hacer un poco más de espacio. Aquí podemos ver break y Haydn conectó pines y sólo podemos usar la muerte como efectos aquí. Y éste, podemos decir conseguir ubicación de actor. Y déjame realmente arrastrarlo hacia arriba. Hay más espacio con el que trabajar. Y arrastra todo esto hacia abajo. Así como eso. Así que ahora estamos tocando el efecto sonoro. Permítanme realmente morir y probarlo outs. Entonces si acabo de encontrarme con estas fotos aquí, puedes ver que tienes este efecto sonoro. Y también ahora necesitamos una respuesta de efectos de sonido. Así que déjame subir aquí y echar un vistazo al código. A lo mejor sólo necesitas ponerlo en la muerte falsa. Así que vamos a echar un vistazo al código. Entonces cuando estamos muriendo o no muriendo. Entonces esto ya no es eso. Y retocando esto, y veamos dónde realmente pusimos la muerte a ser falsa. No recuerdo realmente dónde lo hicimos. Así que tratemos de gustar lo que puedes hacer ahora para encontrar algo. Este es un buen ejemplo de enseñanza. Si me gusta ahora mismo, no recuerden donde realmente hice lo falso. Puedo hacer clic derecho y decir encontrar referencias. Y entonces puedo igual que esto es sólo encontrar referencias dentro de este blueprint, que creo que está bien porque creo que se usa dentro de aquí. Pero si lo desea, puede hacer click sobre esto. Encuentra en todos los planos. Eso realmente va a encontrar esta función usada en todos tus planos. Por lo que en realidad puede hacer eso para rastrear donde realmente volvió a utilizar el evento de muerte. Entonces aquí lo encontré en el Widget Blueprint en nuestra interfaz de usuario principal. Así que hacer doble clic en él aquí te llevaría al menú I. Y en realidad es aquí donde lo hicimos, donde hicimos clic, Ok, y decía que la muerte era falsa. Ahora hagámoslo por aquí entonces en la muerte. Así que volvamos a la base de jugadores. Y cuando la deuda es falsa, juguemos la muerte multicast donde es como si tuviera los efectos sonoros de respuesta. Entonces lo que podemos hacer aquí es justo en lugar de hacer que una nueva llamada multicast responda, solo podemos usar esta muerte. Así que voy a sacar esto un poco. Lo que podemos hacer aquí abajo se llama muerte multicast. Y ahora lo que podemos hacer es volver a la información del reproductor, hacer una nueva variable llamada efectos de sonido de respuesta. Y es un sonido que va a la base enemiga. Ahora, haciendo clic en la información del reproductor, estableciendo el efecto de sonido para responder y compilar y guardar. Ahora vamos a ir a la, vamos a ir a abajo aquí realmente tomar esta información del jugador, romperlo ya sea pin sin conexión. Por lo que voy a usar el responden. Y entonces solo podemos conectarlo aquí y volver a obtener ubicación de actor. Y ahora vamos a tocar el efecto sonoro respuesta. Entonces déjame probarlo, y creo que va a funcionar. Por lo que juega que Santa Fe. Y si hacemos clic en Ok. Y se puede ver que estoy teniendo esa respuesta y efecto. De acuerdo, Impresionante. Para que trabajar en el cliente y probablemente va a funcionar también en el servidor porque esto se ejecuta a través del servidor. Entonces estos fueron todos los efectos sonoros. Si lo desea, también puede seguir adelante y agregar la música aquí. Éste. Simplemente puedes jugar a éste y éste probablemente va a jugar al cliente de lado. No creo que debas tocar esto a través un multicast porque los jugadores están escuchando naturalmente los sonidos juntos como si no estuvieran compartiendo la misma banda sonora en el mismo segundo. Simplemente juega esto a través de los clientes y trata de practicar. A lo mejor sólo intenta entrar ahí y hacer esto usted mismo. Pero sólo voy a hacer esto probablemente al final de este curso porque es un poco molesto tocar la música todo el tiempo mientras estoy, mientras estoy hablando. Así que vamos a hacer clic en Archivar y Guardar todo. Y pasemos a la siguiente lección. 93. Cómo arreglar el error de muerte de la escalera: Ahora vamos a arreglar ese error de escalera que vimos en el video anterior. Entonces aquí en la parte superior. Así que cuando me dañen aquí arriba, me quedaré atascado dentro de, en realidad vamos a intentarlo de nuevo. Me quedaré atrapado aquí dentro de esta caja de colisión. Y esto es porque, así que permítanme realmente cerrar este juego y volver a la base de jugadores y jugadores. Y la razón de esto está aquí en nuestros seres ISClient. Entonces cuando nos fijamos está subiendo a falso, y es que no es cierto. Puedes ver aquí estamos cambiando el tipo de colisión a ****. Y recuerda antes hicimos este jugador de escalada con el fin de eludir esto, estas cajas de colisión aquí arriba. Y cuando lo cambiamos a es como tipo de colisión a ****, entonces en realidad nos estamos quedando atrapados en estas cajas de colisión. Entonces esto es lo que estamos tratando de hacer. Entonces tenemos que hacer algún poco re, o pequeña reprogramación aquí. Entonces haciendo clic en éste, déjame esconder este alfiler. De acuerdo, así que para empezar con esto, en realidad regresemos. Encontré la mejor solución para hacer esto es ir a los mapas de teselas y dentro de los mapas de teselas aquí. Entonces tenemos algo llamado perspicacia liderada a nivel nacional, minimizamos esto y vamos a la escalada y escalada basada. Entonces en el cliente que se está haciendo, hicimos algo llamado caja de colisión superior. Y aquí ponemos si puedes subir o no. Y se puede ver esa caja aquí. Esto es, no sé si se puede ver visualmente así son los bichos en realidad. El anterior de la letra. Esta es la que agregamos, lo que hace para que no puedas subir. Para que podamos abarcar el botón Arriba. Cuando estás en la escalera, si te acuerdas, puedes intentar ver el video de la carta si no te acuerdas, pero es uno que agregamos. Y en lugar de añadirlo aquí, permítanme realmente hacer otra cosa. Entonces en el mapa de mosaico que agregamos, por lo que este actor va a la viewport, en realidad hagamos una caja de colisión alrededor de esta plataforma es que estamos definiendo esta plataforma. Para ello, vamos a hacer clic aquí arriba y sumar y buscar colisión en una colisión de caja y llamémoslo negar, subir. Por lo que estamos negando al jugador presionando el botón Arriba, por lo que spam la escalera arriba. Y lo bueno de hacerlo aquí. Entonces aunque añadamos diez letras o diez cuerdas, esto va a funcionar para todas ellas porque es una caja que cubre todo aquí. La mejor manera de poner esto aquí es en realidad ahora vamos a la perspectiva y vamos a hacer clic en la vista correcta y luego ir al modo Lit aquí arriba. Y podrás ver esto mucho mejor. Y déjame simplemente alejar un poco. Vale, entonces esta caja de colisión aquí, la mejor manera de hacer esto es que solo tienes que cubrir esta plataforma para que puedas intentar ir con la x aquí, ¿verdad? Ciento doscientos trescientos ochenta. Y sólo se puede tratar de cubrir esta zona. Así que tal vez 375, sólo un poco más pequeño, algo como esto, o 73 AT solo para asegurarse de que en realidad es cubre el área aquí también. Y para la caja de colisión Y y Z, tal vez sean 35. Creo que ya está cubriendo mucho de ella. Y sólo trata de cubrir justo justo por encima de la hierba. No tienes que enloquecirte con eso. Por lo que voy a quitar el chasquido. Y al igual que la línea superior está justo por encima estas cajas de colisión aquí abajo en la hierba. Vale, entonces creo que eso lo cubre muy bien. Vamos a compilar y guardar, y vamos a bajar a esto y haga clic en esto en el componente comience a solaparse. Por lo que haga clic aquí y diga que el actor ha etiquetado. Y de nuevo, digamos que es el jugador. Dentro de aquí. Tenemos que volver a ejecutarlo a través de una autoridad. Entonces switch tiene autoridad, asegurándose de que sea el servidor que lo ejecuta. Hagamos una sucursal. Entonces ahora estamos preguntando, ¿es el jugador? Si lo es, tomemos esto y digamos consigue referencia de jugador. Y solo queremos llamar a éste de nuevo. Puede subir. Éste, recuerda elegir mensaje. Puede subir, por lo que no se puede subir, pero puede subir mensaje. Y siempre que estés chocando, recuerda, lo que sea que choques con esta caja acabamos de agregar aquí. No eres capaz de presionar el botón Arriba, como subir porque entonces de lo contrario puedes pasar la cuerda. Entonces tomándolo y poniéndolo a negativo. Entonces eso es correcto. Lo siguiente es hacer clic aquí y hacer clic en la superposición final. Y vamos a copiar pegar este código y conectarlos aquí. Entonces otros actores aquí abajo, otros actores aquí arriba también. Y pongámoslo a verdad. Por lo que ahora puedes subir cuando no estés dentro de esa caja. De acuerdo, así que ahora tenemos el código aquí. Entonces vamos a ciegos siendo base. Y en lugar de subir base, vamos a eliminar ahora el código aquí porque no lo necesitamos. Permítanme borrar en realidad esta caja por completo. Quitarlo. Te va a dar errores y eliminar todo esto también. Por lo que ahora movimos el código a aquí en su lugar. Esto es lo que va a configurarlo en su lugar. Entonces lo siguiente que podemos hacer es ir, vamos a la base de jugadores y echar un vistazo al cliente siendo código. Entonces el cliente siendo código estaba aquí arriba. Y dentro del código de escalada teníamos éste llamado set. Set puede subir. Esta es la que acabamos de mudarnos por aquí. Entonces lo que quiero hacer, en realidad déjame volver. ¿ Dónde está aquí? Lo que quiero hacer aquí es ahora preguntar como hacer rama aquí y escribir un NO booleano. Entonces si no puedes alinear, lo que significa que realmente estás chocando con esa caja aquí acabamos de agregar. Entonces si estás chocando con él y también preguntando si estás subiendo. Así que vamos a llegar es escalar. Y es aquí está escalando. Y escribir un Y booleano. Permítanme en realidad sólo hacerlo para que te lo pueda explicar mucho mejor. Entonces conectando esto aquí. Entonces, lo que quiero hacer aquí. Entonces si no puedes subir a Bob, lo que significa que estás chocando con esta caja aquí. Si sólo lo muevo para que en realidad pueda tenerlos a todos juntos. Entonces, si estás chocando con esta caja, significa que esto es falso, como no puedes escalar buck, lo que hace esto cierto aquí. Entonces si no puedes subir y tus seres cliente, así que aún estás en la escalera. Entonces estás bajo letra, pero también estás superponiendo esto, lo que significa que estás aquí arriba. Entonces queremos de nuevo recordar antes de que lo pusiéramos aquí en el ISClient ser también es para aglutinar jugador. Esto es lo que queremos. Porque cuando estás subiendo y empiezas a solapar esta caja, quieres desactivar las cajas de colisión aquí arriba para que puedas subir. Esto es lo que estamos tratando de hacer. Entonces déjame volver a la Gráfica de Eventos. Permítanme cerrar primero esto y para que sea más fácil para el yo, en realidad vamos a crear una enumeración. Entonces aquí, hagamos clic derecho ir a la enumeración de planos, y llamémoslo estado de colisión. Entonces para qué voy a usar esta enumeración llamada Estado de Colisión. Sólo voy a hacer una lista de dos ítems, misma colisión encendida y colisión fuera. Muy, muy simple, muy simple enumeración aquí. Así que sólo para escuchar recuerda, y la enumeración es sólo una lista de los artículos que quieras. Por este bien, solo queremos que la colisión entre y se apague. Esta es sólo la lista. Vamos a cerrarlo y en realidad volvamos a la base de jugadores aquí. Ahora recuerda, no podemos solo tomar esta cápsula. Whoops, solo podemos tomar esta cápsula y decir Establecer tipo de objeto de colisión y luego configurarlo a jugador escalador por ejemplo. No podemos hacer eso porque recuerda que estamos ejecutando esto a través del servidor para que el cliente tenga un bug. Entonces si hace clic en Jugar ahora y tratar de realmente tratar de ver si esto funciona. Así que jugando como cliente, puedo subir. Se puede ver que puedo escalar aquí, pero va a molestar a nuestro personaje. Y en lugar de hacerlo de esta manera, hay que ejecutarlo a través de un rep notifique solo para notificar a los clientes también por estos cambios. Entonces tomemos, guardemos todo primero y ahora podemos usar nuestra enumeración. Hagamos una nueva variable. Llamémoslo estados de colisión. También puedes llamarlo algo más si quieres. Pero sólo voy a llamarlo Estado de Colisión. Y estoy cambiando el tipo variable a estado de colisión E, como sea que lo llamemos aquí en la enumeración. Entonces E estado de colisión, esto es lo que lo llamamos aquí afuera. Así que ahora vamos a componer ahorrar. Y voy a hacer que esta replicación en un rep notifique y luego desenvuelva la función. Voy a tomar este estado de colisión y decir encender la enumeración. Entonces lo hemos hecho un par de veces ahora. Cuando la colisión está encendida, quiero que lleves mi cápsula y establece tipo de objeto de colisión para que sea estanque porque queremos chocar con todo como esto. Cuando mis colisiones de voy a copiar pega esto y ponerlo a subir siendo jugador. Entonces va a poner la colisión de plataforma, en realidad todas las colisiones del suelo. Por lo tanto enumeración muy simple, solo encendiendo y apagando la colisión. Ahora podemos usar esto muy útil. Para que podamos tomar este estado de colisión y ponerlo aquí también. Así que ahora pensemos que en realidad pensé que estábamos haciendo cuando no podemos subir, lo que significa que estamos chocando con esa caja de aquí arriba. Y estamos subiendo. Significa que queremos apagar la colisión porque estamos subiendo y queremos eludir esa plataforma. No obstante, si no estamos golpeando esa caja aquí o si no estamos subiendo, entonces queremos encender la colisión porque tal vez si no estamos subiendo, pesar de que estamos tocando esta caja, si no estamos subiendo, tal vez estamos parados encima de aquí y entonces no queremos apagar la colisión, lo contrario caerá por el suelo. Por lo que queremos encender la colisión si no estamos subiendo o si no estamos tocando. Esta caja de aquí arriba, significa que estamos aquí abajo y entonces realmente queremos que nuestro terreno esté encendido. Entonces esto es correcto. Ahora, otra cosa es, quiero decir, puedes intentar tocarla y ver qué pasa. Así que tocarlo aquí. Puedo subir aquí. Y si me golpean, se puede ver que todavía me estoy atascado. Y el problema está aquí en la función de desenvolver colombiana. Recuerda que teníamos todos estos. En realidad voy a eliminar todos ellos. Y voy a volver a conectar los pines como antes. Porque en realidad ya no los necesitamos. Y solo puedes acercar todos estos. De acuerdo, así que vamos a compilar y guardar, y vamos a tratar de jugar ahora. A ver si funciona. Ahora puedo ver, puedo escalar y estoy jugando como cliente en este momento. Para que pueda hacer esto. El otro bicho en este momento es que no puedo bajar. Estoy tratando de bajar, pero no puedo. Pero se puede ver que funcionó la muerte. Todo está funcionando. El problema en este momento es como si estuviera funcionando en este momento. Y si salto al suelo, puedo volver a caminar. Si salto aquí, puedo volver a caminar. El problema es que no puedo bajar. Entonces tenemos que arreglar esto. Por lo que tenemos que ir al Gráfico de Eventos. Y el problema está por aquí. Así que puede subir se establece para ser cierto cuando puedes subir y estás tratando de subir hacia abajo. Entonces esto es lo que, recuerda, hicimos este temporizador donde comprobamos si el jugador está tratando de bajar. Y sí, cuando subes, pero realmente no hemos apagado la colisión. Así que déjame copiar pegue esto aquí arriba. Entonces aquí en el temporizador. Así que cuando realmente empiezas a escalar, por lo que está de sujeción fijado a verdadero. Quiero apagar mi colisión. Y aquí arriba cuando cancelamos el ser ISClient. Así que cuando termines de escalar, en realidad puedo poner esto para que vuelva a estar encendido. Entonces configurándolo aquí también. Por lo que ahora todos los problemas deben solucionarse si lo hemos hecho correctamente. Así que intentemos de nuevo. Puedo escalar, puedo caminar, también puedo bajar. Todo está funcionando y si muero aquí arriba, sólo me empujan. Eso funciona también. Y si muero, eso funciona también. Entonces creo que es una forma más fácil manejar la colisión y tratemos de ser derribados aquí. Eso funciona también. Puedo aguantar y también puedo morir aquí arriba. Sí, eso funciona también. De acuerdo, Entonces esta es una manera fácil de hacerlo, solo hacer una enumeración con la colisión encendida y apagada y luego cambiarla a un rep notifique. Y así en la función de notificar, solo estás poniendo y apagando la colisión dependiendo de lo que lo estés configurando aquí. Y recuerda el encendido o el rep notificar variables. Sólo se puede establecer avisos a través de un servidor. Los eventos pueden afirmar que es suficiente. Porque recuerda, no puedes simplemente entrar aquí y configurarlo a través de éste. Tienes que estar en el servidor antes de poder establecer funciones no leídas. Entonces muy, muy importante y esto es lo que estamos haciendo para comprobar siempre si es el servidor por el que estás corriendo y si lo es, Eso es correcto. Sí. Eso fue todo por esto fijo. Y pasemos a la siguiente. 94. Agregar experiencia a las estructuras: Creemos ahora nuestro sistema de nivelación. Entonces primero, lo que necesitamos para la nivelación está aquí en la estructura y la información enemiga o información animal, tenemos que dar experiencia a los enemigos porque obviamente todos, cada enemigo va a dar algunos especie de experiencia y habrá diferentes el uno del otro. Entonces escribiendo experiencia aquí en la estructura y cambiándola a un entero. Como puedes, puedes ponerlo en un flotador. Pero la experiencia, yo quiero, realmente no tienes una coma, así que no tienes decimales. Y por lo tanto realmente no necesitamos un flotador. Entonces estos son números enteros. Y me gustaría si tienes un juego con algo dando, por ejemplo, 20.5 experimentado de lo que tendrías que ponerlo en un flotador. De lo contrario sólo voy con un entero porque estos son sólo números enteros que estoy haciendo. Y por la experiencia, en realidad voy a ponerlo justo debajo del daño. Entonces éste va a especificar cuánta experiencia va a dar todo animal. Entonces vamos ahora al enemigo aquí y luego nos basamos. Recordemos compilar y ahorrar como justo antes. Y vamos al cerdo y abramos el editor de planos completo. Y dentro de aquí por la experiencia para el cerdo, vamos, por ejemplo, conseguir, digamos 20 experiencia cada vez que matamos a un cerdo. Para el caracol, cada vez que matamos a un caracol, vamos a conseguir, por ejemplo, diez compuestos de experiencia. Guardar. Whoops. De acuerdo, Así que eso se hace por el animal, la estructura para los animales. Ahora vamos a entrar en el jugador. El jugador necesitará dos variables. Entonces primero necesitamos un nivel. Entonces, ¿cuál es tu nivel actualmente? Y pongamos eso en un entero. Estos son números enteros. Y hagamos también experiencia. Entonces, ¿cuánta experiencia tienes en este momento? Y esto también es un entero. Vamos a poner estos. pondré justo debajo del daño base aquí arriba. De acuerdo, así que vamos a salvar eso. Y lo último. Entonces en este momento, déjame realmente primero ir a la base del jugador y jugador y Compile y Save. Y aquí en las propiedades y la estructura de información del jugador, el nivel como predeterminado, vas a empezar con uno. Así que recuerda, no estás empezando por el nivel 0, estás empezando por el nivel uno. Así que recuerda escribir eso aquí como experiencia extranjera. Estaremos actualizando eso más tarde, así que no te preocupes por eso. Vamos a cerrarlo. Entonces lo último que hay que definir cuánta experiencia necesitas por nivel. Por lo que un poco tienes como necesitas una lista de qué experiencia se necesita para qué nivel. Entonces necesitamos eso para realmente hacer una nueva estructura. Vamos a hacer clic derecho y vamos a los planos y crear una nueva estructura. Y éste, lo voy a llamar info de nivel. Por lo que contiene información sobre qué experiencia necesitamos para cada nivel. Por lo que se necesita sólo dos variables. Necesitamos el nivel. Y esto va a ser un entero. Y a éste se le llama experiencia. Entonces, ¿cuánta experiencia se necesita? Y esto va a ser un entero también. Entonces a dos cosas muy básicas, ¿cuál es el nivel? Y en lugar de experiencia, solo podemos llamarlo experiencia requerida. Por lo que es más nivel explicativo y experiencia requerida para subir de nivel. Vamos a cerrarlo. para poder trabajar con esta estructura, en realidad tenemos que trabajar con tablas de datos. Mesas. Vamos a trabajar con los de la siguiente lección. Así que sigamos adelante. 95. Introducción a las tablas de datos: Ahora que tenemos esta estructura de información de nivel, empecemos a trabajar con tablas de datos y son tan útiles, verás que son agradables de usar y también son muy fáciles, no, no realmente un complejo concepto. Vamos a la carpeta, creamos una nueva carpeta, lo llamamos tablas de datos, y tenemos todas nuestras tablas de datos aquí. En este momento sólo vamos a tener uno, pero me gustaba estar estructurado. Y ahora puedes hacer clic derecho aquí y miscelánea. Y aquí puedes seleccionar Tabla de datos, ésta. Ahora te pide ¿ qué estructura debo hacer una tabla de datos? Y luego hay que especificar la estructura. Y el uno es este nivel info que hicimos clicando. De acuerdo, y llamémoslo d t para tablas de datos. Y también lo voy a llamar info de nivel. Y haz doble clic en él. Y aquí estamos dentro de un DataTable. Ahora necesitas un nuevo valor, por lo que tienes que hacer click en Agregar aquí. Ahora para agregar algún valor. Este valor te da una fila y luego puedes ver las, las variables que creaste dentro de la estructura de información de nivel. Entonces cada vez que añadas una nueva variable en tu estructura, estará aquí en esta tabla de datos. Entonces, lo que es esta tabla de datos, solo puedes imaginarla igual que un documento Excel Excel donde tienes, por ejemplo, el nivel y la experiencia que se requieren. Y luego solo haces más filas y las define. Para la primera en lugar de nueva fila, solo voy a renombrarla a una. Por lo que haciendo click en F2 para cambiar el nombre y dar click en uno, también podemos hacer clic derecho y dar click en Cambiar nombre. Eso depende de ti. Entonces aquí empezamos en el nivel uno, obviamente no 0. Por lo que aquí hay que escribir cuánta experiencia se requiere para subir de nivel hasta dos. Por lo que 50 experiencia para subir de nivel hasta dos. Y luego déjame añadir un nuevo valor y que la fila a la que sólo voy a llamar dos. Y esto es muy importante. En realidad vamos a usar esos, así que asegúrate de llamarlos 1234 y así sucesivamente. Entonces para éste, en el nivel dos, se necesita 75 experimentado el Love Lab. Y este voy a llamar a tres. En el nivel tres, necesitas 100 para subir de nivel, y solo hagamos cinco. Entonces a las cuatro, necesitas 125 y esto es para adecuado para necesitas ciento veinticinco. Y en el nivel cinco y nivel cinco, necesitas 150 para subir de nivel. Por lo que sólo podemos definir cuánta experiencia necesitas para subir de nivel. Y obviamente, aquí es donde entra el diseño de juegos. Tienes que equilibrar todos estos números. Así que ahora vamos a cerrarlo y esto fue todo para las tablas de datos. Para que puedas seguir adelante y guardar todo. Y pasemos a la siguiente lección. 96. Tablas de datos a través de Google Sheets: Entonces, lo bueno de las tablas de datos, realmente no tienes que hacer esto manualmente todo el tiempo, como crear todas estas filas. A veces tienes, por ejemplo, si, digamos que tienes artículos apenas en cuento divertido, el juego que lanzé en Steam. Entonces en cola de granja, tengo como todos los artículos que puedes comprar de la tienda, en realidad los tengo dentro de una tabla de datos. Y esto tomará tanto tiempo hacer porque si tienes como diez o 20 variables por cada ítem, va a llevar una eternidad. Y es por eso que usar Google Sheets es en realidad mucho más rápido y yo recomendaría eso. Entonces aquí en Google, como si haces una cuenta y entras aquí y vas a la unidad. Entonces aquí en el seco, solo puedes hacer clic derecho y hacer un nuevo Google Sheets. Y dentro de esta hoja de Google ahora, puedo echar un vistazo a mi tabla de datos. Así que si solo minimizas, si no recuerdas la estructura, solo regresas a la estructura, echa un vistazo a ella, y luego solo tienes que escribir los nombres aquí. Entonces por ejemplo, si vuelvo en mi hoja de Google, tienes que escribir el nombre exacto héroe, también con las mayúsculas. Entonces por ejemplo, puedo decir, vamos, por lo general empiezo con el número de fila y en realidad justo Aquí. Sólo intentemos eso. Entonces este número aquí, y en realidad voy a simplemente cambiar de estilo aquí solo para que se vea mucho mejor, sólo por mi propio bien. Y aquí arriba va a ser audaz. ¿ De acuerdo? Por lo que aquí arriba tenemos el primer nivel de dicho variable variable. Y el siguiente es decir que se requiere experiencia. Va a hacer esto más grande. Entonces algo como esto. Esta podría ser mi, mi hoja de Google. Ahora, esta es mi tabla de datos. Entonces en la fila en el número uno. Entonces tenemos nivel uno y esto realmente no importa. Yo sólo los hago como números de fila. Entonces en el nivel 23, y se puede ver que es mucho más rápido porque solo puedo arrastrar así. Así que ahora se pone todo eso. Y si eres nuevo en Google Sheets, puedes ver un tutorial en YouTube. Tomará dos minutos. Entonces seleccionando estos números, por ejemplo, puedo arrastrar hacia abajo y tener los enumerados automáticamente. Y la experiencia requerida, solo puedo decir, por ejemplo, empezamos con 50 y luego puedo decir 75. Y creo que puede hacerlo de forma automática. Déjame intentarlo. Puede hacer eso automáticamente también. Ve que estás agregando 25 encima de él y simplemente hace eso automáticamente. Se puede ver que esto es mucho más rápido que entrar e ingresar cada número por aquí abajo. Esto lo hace automáticamente para mí. Y hasta puedes hacer fórmulas en Excel para equilibrar tu juego para que no tengas que ingresar cada número manualmente. Pero obviamente tenemos que probar el juego para asegurarnos de que funcione. Ahora, digamos que esta hoja de Google estaba bien y buena. Y ahora lo que voy a hacer es dar click en Archivo, ir a descargar e ir a descargar como CSV, CSV muy importante. Pero ahora se va a descargar. Este es mi archivo descargado, así que ahora puedo renombrarlo. Y a lo que hay que cambiar es este mismo nombre que las tablas de datos. Entonces si voy a aquí, se llama DT level info. Así que solo asegúrate de tener exactamente el mismo nombre, información de nivel DT con las letras mayúsculas. Voy a arrastrarlo y soltarlo aquí en esta tabla de datos. Y en realidad, creo que necesito, en realidad no necesito hacerlo, pero si no lo tenías, así que puedes ver si haces doble clic en él, puedes ver que obtienes todas estas entradas. Muy, muy agradable. Lo hizo de forma automática y en realidad ahora puede usar esta información. Y puedo ver que es mucho más rápido de hacer. Ahora lo que dije antes, en realidad también podemos eliminarlo. Entonces si no tienes nada, si aún no lo lograste y tienes la estructura, déjame guardar todo primero. Entonces yendo a esas tablas de datos, en realidad puedes simplemente arrastrarlo aquí. Entonces te va a preguntar, estás importando esta tabla de datos, tipo de fila de tabla de datos. Entonces hay que seleccionar la información de nivel aquí, la de. Y sólo voy a decir ignorar campos extra. A veces sí tengo campos extra para calcular mi fórmula. Por lo que solo debería ignorar campos extra. Y los campos extra son igual que si solo mira tu, a tus variables aquí arriba. Si tienes algo, como si tienes otra variable que en realidad no existe en tu estructura, esto será ignorado. Entonces esto es lo que significa. E ignorar los campos que faltan. En realidad, no quiero, porque ¿y si nos falta algo? Y el campo Importar Clave es solo nuestros números aquí. Así que permítanme tratar de hacer eso. Entonces nuestro número aquí es mi clave de entrada, y verás para qué se usa esta clave más adelante. Entonces haciendo esto, y vamos a tratar de hacer esto. A lo mejor no puede, tal vez puede a veces en bichos fuera. Entonces vamos a aplicar y hacer doble clic. Ahora podemos ver que funciona. Por lo que ahora se pueden ver todas estas entradas. Y se ve impresionante. Así que ahora vamos a salvar todo. Y yo recomendaría usar Google Sheets cada vez que hagas un juego y haces un proyecto, es mucho más rápido de usar. Probablemente puedas optimizar estos números. Tal vez realmente no necesitas este nombre de fila y te puede gustar el campo clave de entrada. Simplemente puedes escribir este nivel aquí. Y puedes hacer eso solo para minimizar todas estas filas aquí. Pero ahora esto está funcionando. Pasemos a la siguiente. 97. Crea una biblioteca de funciones: Muy bien, entonces lo siguiente que tenemos que hacer para usar esta tabla de datos en nuestro código, necesitamos hacerlo a través de una biblioteca. Y esto es algo que no hemos aprendido antes, pero es muy fácil. No te preocupes. Vamos a hacer clic derecho ahora. Y hagamos una nueva carpeta y la voy a llamar bibliotecas. Esta es la última cosa nueva que vamos a aprender aquí. Así que vamos adentro de aquí y haga clic derecho. Y aquí en la pestaña blueprints, tienes algo llamado biblioteca de funciones. Entonces, hasta ahora hemos aprendido sobre las clases de planos. Hemos aprendido sobre las estructuras, hemos aprendido sobre las enumeraciones. Hemos aprendido sobre Blueprint Interfaces, y ahora vamos a hacer una biblioteca de funciones de blueprint. Para que puedan ver que hemos pasado por todos estos. Y ésta también es una biblioteca macro biblioteca. Tan muy similar. Pero vamos a preocuparnos por la biblioteca de funciones por ahora. Entonces vamos a hacer clic en él. Y sólo voy a llamarlo biblioteca de funciones, así así. Déjame entrar aquí y decir ahora la función que queremos hacer se llama obtiene información de nivel. Entonces estamos tratando de obtener esa información de nivel de esa tabla de datos aquí que estamos tratando de extraer. Entonces esto es lo que estamos haciendo en la biblioteca de funciones. Estamos tratando de extraer información de esta tabla de datos y podemos usarla en nuestro código. Entonces aquí, obtén información de nivel. Voy a hacerlo puro. Y recuerda cuando hacemos algo a puro, es como convertirlos en estas función verde. Entonces si voy a la base de jugadores sólo para que puedas ver un ejemplo, y si solo miro a tu alrededor, por ejemplo, esto consigue el control. La rotación es una función pura y esta, la azul, es una función insegura. Entonces la función pura, no tienes estos pines de ejecución porque realmente no los necesitas aquí. Recuerda, siempre que solo necesites obtener información, realmente no necesitas corrales de ejecución. Los pines de ejecución son solo para establecer información. Entonces, por ejemplo, estás configurando la entrada de movimiento, estás configurando la x es el valor z en este caso. Pero aquí solo estás consiguiendo, consigue la rotación de control. Obtener un vector es sólo obtener información. Realmente no es necesario establecer nueva información. Aquí, información a nivel de puerta que estoy recibiendo. Voy a ponerlo en puro. Y la entrada va a extraer de cualquier entrada clave que pongas aquí. Entonces la entrada clave es solo un número. Entonces voy a hacer un nuevo input y va a ser un entero. Y lo voy a llamar nivel. Entonces está tratando de ver. Lo que voy a hacer aquí es en la base de jugadores, va a echar un vistazo a la información del jugador, echar un vistazo a qué nivel eres. Y desde ese nivel, como se puede ver el número uno. A partir de ese nivel, te va a decir qué experiencia se requiere para subir de nivel hasta dos. Entonces esto es lo que estamos tratando de hacer. Entonces lo que este nivel y lo que necesitamos usar se llama Get Data Table. Obtener fila de tabla de datos. Estamos tratando de sacar una fila específica de este nivel. Entonces si somos nivel cuatro, va a ir a cuatro. Y entonces va a conseguir que una fila de mesa y utilizar esta información 125 en la experiencia requerida. Entonces intentemos hacer eso. No podemos simplemente conectarlo así, pero podemos decir dos cuerdas. Entonces lo estamos convirtiendo en una cadena primero, y luego puede hacerlo. Entonces primero convertirlo una cadena y luego convertirla a un nombre. Y luego entrando de aquí, conectémoslo. Y la tabla de datos de la que queremos extraer, sólo tenemos una. Entonces seleccionándolo aquí. Y luego vamos a conducir desde aquí y digamos que regresen. Y agregamos un nodo de retorno. Y esta es la información ahora esta es la tabla. Ahora sabe como si estamos en el nivel cuatro, nariz aquí afuera en la información de que somos nivel cuatro. Y necesitamos tanta experiencia para subir de nivel. Aquí. Vamos a llamarlo conjunto de información de nivel de superación de la información de nivel. ¿ De acuerdo? Y lo bueno de las bibliotecas que puedes en realidad, estas son funciones globales. Puedes llamarlos a cualquier lugar. Si acabo de ir en mi base de jugadores ahora y solo digo aún información de nivel, puedes verla. Está aquí desde la biblioteca de funciones, por lo que es una función global que puedes usar en cualquier lugar. Y podrías, podrías preguntarte, ¿por qué no solo codificamos todo o muchas cosas dentro de aquí? En realidad es caro hacer esto. He leído mucho al respecto. Y algunas personas en realidad un rezago sus juegos. Si tienes esta función biblioteca es muy pesada. Su juego está rezagado. Por lo que parece que esto es muy, muy pesado de usar si tienes demasiado, pero en casos como este donde realmente necesitamos usarlo. Y a veces como para lo que necesitas usar esto es solo tienes que pensar, hay una función que tengo que usar en 50 blueprints están en cinco planos todo el tiempo, entonces probablemente deberías ir en y hacerlo aquí, por ejemplo, conseguir la información de nivel, podemos usar eso en nuestro controlador de jugador, en nuestra interfaz de usuario, en nuestro controlador de jugador o no como controlar la base del jugador y la base enemiga y así on. Entonces podemos usarlo en muchos, muchos lugares y probablemente sea una buena idea hacerlo aquí en lugar de un blueprint específico. De acuerdo, para que puedas ver aquí solo puedo decir información a nivel de puertas, y ahora tenemos que enchufar algo aquí para que podamos enchufar esta información de jugador, por ejemplo, solo puedo mostrarte muy rápido. Entonces por ejemplo, podemos tomar a los jugadores nivel actual y podemos conectarlo aquí. Y ahora por ejemplo, si el jugador es de nivel tres, va a extraer esta fila número tres, y sabe que necesitas. Ahora puedes tomarlo desde aquí y romperlo y conoce tu nivel tres. Y necesitas aquí, necesitas 100 experimentados para subir de nivel. Así que método muy, muy cool para hacerlo en. Entonces tenemos, si solo lo explico muy rápido. Entonces hiciste una estructura aquí llamada info de nivel e hiciste estas variables. Y después de eso, acabamos de entrar en Google Sheets e hicimos esto aquí. Ahora puedes arrastrar esta información y soltarla en esta tabla de datos. Yo sólo aquí en el Navegador de Contenido. Y luego hay que seleccionar para qué estructura estas tablas de datos. Y lo hicimos. Por lo que sólo crea esto para nosotros. Entonces sigue adelante y vas a la biblioteca de funciones y crea ésta, obtienes fila de tabla de datos. Entonces seleccionas qué tabla de datos y cuál es el nombre de la fila? Su propio nombre son sólo números aquí. Al igual que si editas el nombre de la fila para hola por ejemplo, no sabrá como si eres un Nivel uno, no sabrá qué es esto porque tu nombre de fila es hola. No es un número, pero lo tenemos como números. Y va a saber que por ejemplo, si tu nivel tres, va a sacar esta información y esta información, realidad podemos llamarla aquí y usarla en cualquier lugar. Así que guardemos todo y pasemos a la siguiente. 98. Cómo agregar experiencia sobre la muerte enemiga: Hola y bienvenidos de vuelta. Por lo que ahora vamos a agregar experiencia cuando el animal muera. Y aquí estoy en la base de jugadores. Y primero tenemos que crear un evento llamado experiencia publicitaria porque queremos agregar experiencia al jugador. Por lo que queremos limpiar esto un poco más tarde, pero vamos a añadirlo aquí donde hay espacio. Vamos a seguir adelante y hacer un evento personalizado. Y hagamos eso a través la función Blueprint Interface. Entonces vamos a las interfaces, a la base del jugador, y hagamos una nueva función llamada add experience. Y aquí la entrada es justa, solo el entero porque es sólo la experiencia. Y llamémoslo experimentado para sumar. Vamos a compilar y ahorrar, y volvamos a la base de jugadores y guardemos todo aquí. Ahora vamos a hacer clic derecho y llamar a la experiencia publicitaria. Y éste, de nuevo, hagamos uno corriendo a través del servidor llamado experiencia publicitaria para asegurarnos de que el cliente no esté engañando. Hagámoslo a través del servidor siendo confiables. Y llamémoslo aquí arriba, experiencia de AD del servidor. Ahora de nuevo, necesitamos un entero llamado experiencia para agregar. Y vamos a conectarlos aquí arriba. De acuerdo, entonces tenemos este evento aquí y realmente no tenemos nada que ver con él en este momento. Pero la cosa es que cuando matas a un enemigo, tienes que enchufar la cantidad de experiencia que tienes que añadir para los enemigos hábiles o asesinados. Así que vamos a ir al enemigo ahora. Entonces dentro de la base enemiga y enemiga, dentro de aquí, encontremos donde matamos al enemigo. Entonces matamos al enemigo. Este es el cualquier daño. Y así que aquí estamos comprobando si la salud es 0. Y si es así, vamos a seguir adelante y ponerlo a la muerte. Entonces antes de que hagamos eso, entonces aquí es donde matamos al enemigo. Estamos seguros de que el nombre está muerto. Entonces aquí en realidad voy a llamar a mi anuncio para experimentar evento aquí y la base de jugadores. Entonces para conseguir el jugador, ya tenemos un controlador de jugador. Podemos decir que consigue peón controlado. Y entonces podemos decir Get layer reference porque estamos tratando de hacer referencia a la base del jugador. Y conectémoslo. Whoops, vamos a conectarlo. Así como esto. Puede que en realidad sólo tire aquí arriba en su lugar. De acuerdo, entonces tenemos esto ahora y ahora podemos arrastrar de esto y decir agregar experiencia. Y es un mensaje porque es de una función Blueprint Interface. ¿ Y cuánta experiencia quieres agregar? Recuerda, hicimos en la estructura animal, ya hicimos esto, para que podamos romperlo aquí. Vamos a esconderlo todo por ahora, y vamos a hacer click y hacer clic en esta experiencia porque ya configuramos cuánta experiencia cada regalo animal. Por lo que ahora solo queremos dar esa experiencia que el enemigo dará en un dado. Así que sólo moviéndola aquí. Y luego vamos a seguir con nuestro código. Voy a moverlo un poco hacia arriba, así como esto. De acuerdo, entonces ahora estamos agregando experiencia cuando el enemigo es asesinado y la experiencia va a pasar a la base de jugadores aquí. Y va a pasar por aquí. Por lo que ahora que tenemos esto creado, estamos listos para actualizar la experiencia para el jugador. 99. Actualización de la experiencia: De acuerdo, así que vamos ahora adelante y actualicemos la experiencia para el jugador. Por lo que ahora tenemos la experiencia, cuánto da el enemigo, y va a pasar por estos eventos de experiencia publicitaria. Ahora aquí en el servidor, ya estamos listos para actualizar esta información del jugador. Así que tomemos la información de este jugador y vamos a descomponerla. Ahora, vamos a esconderlo todo y solo tomemos esta experiencia que hicimos. Entonces esta es la cantidad de experiencia que tiene el jugador en este momento. Y obviamente se empieza con 0. Así que tomemos esta experiencia que has ganado y digamos plus y agréguala con la experiencia actual que tienes. Entonces si tienes 0 y el cerdo te da 20, ahora tendrás 20 porque los has sumado juntos y este es el nuevo valor. Así que pongámoslo aquí al nuevo valor para que se actualice. Entonces tomemos esta información. Digamos miembros establecidos, y vamos a conectarlo aquí arriba. Ahora lo que podemos hacer con esto es en realidad arrastrarlo hacia abajo así y llevarlo hacia arriba. Y ahora, qué, ¿qué quieres establecer? Queremos establecer la experiencia, y esta es la experiencia a la que queremos configurarla. Este es el número actualizado. Y luego recuerda tomar la información de este jugador y ponerla aquí. Por lo que ahora has actualizado cuánta experiencia tiene tu jugador a través de la estructura. Entonces esto es en realidad tan simple como esto. Ahora tienes la experiencia actualizada, como cuánta experiencia tienes. Y obviamente no se va a actualizar en la interfaz de usuario porque aún no hemos creado una interfaz de usuario. Pero puedes imprimir una cadena de nuevo y ver si esto es correcto. Para que puedas romper esto de nuevo y esconderlo todo, tomar la experiencia y siempre puedes imprimirla la pantalla para ver el nuevo valor para que puedas hacer click en play. Y aquí puedo golpear a los enemigos. El servidor va a decir diez ahora. Y si mato al segundo, va a decir 20 porque cada caracol da diez experiencias. Si 3040 porque acaba de matar también. Para que puedas ver que esto está funcionando perfectamente ahora. Por lo que ahora que las experiencias de lo incorrectamente, vamos a ver cómo podemos actualizar el nivel también. 100. Actualización del nivel: Ahora estamos listos para actualizar el nivel para el jugador. Por eso espero que estés totalmente despierto para esta lección. Hay algunas matemáticas que tenemos que hacer, realidad no demasiado complejas, pero sólo tenemos que estar completamente despiertos y saber lo que estamos haciendo. Por lo que ahora que hemos actualizado la cantidad de experiencia que tiene el jugador, ahora estamos listos para comprobar si el jugador ha superado esa experiencia necesaria para subir de nivel. Así que recuerda que hicimos este llamado obtiene información de nivel previamente. Y a partir de eso, podemos romper esto y podemos tratar ver si el jugador tiene esta experiencia requerida requerida. Y tenemos que especificar qué nivel es el jugador actualmente. Y podemos hacer esto haciendo clic aquí arriba, y vamos a hacer este nivel aquí. Entonces empezamos por el nivel uno como predeterminado y déjame simplemente arrastrarlo aquí y hacer esto aquí. Entonces tratando de ver como aquí nosotros, estamos escribiendo uno porque el jugador es el nivel uno y va a pasar por esta tabla de datos y sabe que necesitamos 50 experiencia. Por lo que esto va a decir 50 aquí en la experiencia requerida. Entonces lo que vamos a hacer es que vamos a tomar esto, y en realidad vamos a tomar esta experiencia primero. Tomemos esto aquí y digamos, ¿es mayor o igual? ¿ Es mayor o igual que la experiencia requerida? Y hagamos una rama aquí arriba. Y vamos a conectarlo. Entonces por ejemplo, mato a alguien y digamos que tengo 200 de experiencia y se requieren es tal vez sólo 150. Por lo que sólo estoy preguntando, es 200 mayor o igual que lo requerido con esto, que es doscientos ciento cincuenta. Es decir, tenemos que subir de nivel al jugador. Si no es así, no hacemos nada. Así que tal vez solo actualicemos la interfaz de usuario o lo que sea que estemos tratando de hacer. Voy a ocultar esto aquí. Entonces esto es lo que vamos a hacer. Entonces, si es cierto, vamos a nivelar al jugador. Es falso. No estamos haciendo nada excepto por tal vez actualizar la interfaz de usuario, que vamos a hacer más adelante. De acuerdo, entonces para nivelar al jugador, digamos que es cierto. Tienes más experiencia que su experiencia requerida. Entonces tienes que, tomemos esta información del jugador. Y primero tomemos esta experiencia. Entonces digamos que tenemos 200. Vamos a restarlo. Restarlo de la experiencia requerida. Entonces digamos que tienes 200 restados por 150, lo cual se requiere tal vez. Por lo que eso te da 50 izquierda con experiencia. Entonces primero tenemos que restar esa experiencia y después amar, amar al jugador. Así que vamos, intentemos hacer algunas notas redireccionadas para que se vea un poco mejor. Y en realidad en lugar de hacer esto desde aquí, sólo para hacerlo más limpio, no me gusta el aspecto de esto. Podemos simplemente empujar este poco más lejos y romper esto y decir la experiencia, porque ahora está actualizada. Así que toma la experiencia desde aquí. Y ahora podemos decir esto aquí. Esta experiencia restó a la experiencia necesaria. Y podemos llevarlo aquí y colocarlo abajo como aquí. Y en lugar de este nivel a partir de aquí, podemos simplemente ocultar esto de nuevo, sólo para que se vea mejor. En realidad podemos simplemente tomarlo de aquí solo para que no estén demasiado lejos el uno del otro. Y déjame conectarlo. Vale, entonces algo como esto, voy a arrastrar esto para que se vea un poco mejor. Arrastra esto puede estar abajo para que no choquen entre sí. Vale, algo como esto aquí. Entonces estamos preguntando, ¿es esta experiencia que tenemos en este momento, es más grande o igual que la experiencia requerida? Si eso es cierto, estamos tomando la experiencia y la estamos restando de la experiencia requerida. Así que tal vez 200 menos 1 quinto. Nos quedan 50 experimentados, por ejemplo. Y ahora tenemos que establecer la nueva experiencia. Por lo que vamos a tomar la información del divisor nuevo y decir miembros del set y queremos establecer la experiencia a este número 50, tal vez eso es lo que es el número. Y después tenemos que subir de nivel al jugador porque el jugador ha superado la cantidad requerida. Así que en realidad hagamos doble clic aquí y hagamos una nota de redireccionamiento para que eso se vea aún mejor. Algo como esto. De acuerdo, y aquí ya hemos actualizado la nueva experiencia y vamos a establecer primero la estructura. Ahora que hemos establecido la estructura, podemos descomponerla aquí abajo y podemos esconderlo todo. Y podríamos tomar el nivel y decir plus, plus, plus, plus, plus medios. Ya lo puedes ver. Agregue uno al valor especificado, luego configúrelo así. Esto significa que esto es lo mismo que hacer esto. Entonces sacándolo de aquí y di plus y escribiendo uno, y luego tomándolo y estableciendo este valor así. Esto es lo mismo. Así que solo sacando diciendo plus-plus para editarlo y configurarlo. Y entonces obviamente tenemos que actualizar nuestra estructura con este número. Ahora tenemos un nuevo nivel. Así que de nuevo, puedes arrastrarte de esto aquí y decir miembro del set. Y ahora queremos establecer aquí el nivel dos y el nuevo número, así así. Vale, y recuerda de nuevo establecer esta estructura así. Por lo que ahora hemos actualizado la experiencia, usted ha actualizado el nivel. Y lo que quiero hacer ahora, recuerda como puedes matar a muchos enemigos y tal vez hayas superado esa experiencia requerida tanto para el nivel dos como para el nivel tres. Entonces digamos que mataste a un enemigo que te dio tanta experiencia que nivelas sub de nivel dos en lugar de uno. Entonces tenemos que volver a revisar como está bien, como restaste esa experiencia, pero hay que revisar de nuevo, es esta nueva experiencia que tienes en tu bolsillo, Nuevamente, más alta que la requerida para el siguiente nivel. Porque tal vez necesitamos sumar dos niveles a la vez en lugar de uno si has cumplido con ese requisito. Entonces vamos a arrastrar de esto, y en realidad voy a arrastrar a esta rama de nuevo y hacer doble clic para hacer redireccionar notas solo para que lo sea. Luciendo mejor aquí. Algo así. Voy a arrastrarlo todo así. De acuerdo, entonces lo que estamos haciendo aquí es que estamos revisando de nuevo, es la, es la experiencia que tienes ahora mismo con esta experiencia actualizada. Al igual que a pesar de que va a tomar de ella y experiencia, recuerda que hemos actualizado nuestra experiencia. Por lo que esta experiencia ahora tendremos la actualizada. ¿ Es esto más alto que el requerido de nuevo para el siguiente nivel? Por lo que sigue comprobando si se requiere, como si tenemos mayor experiencia que la experiencia de habitación requerida, si no, va a ir a la falsa y no hacer nada. Entonces no va a sumar nada a nuestro nivel. Entonces esto es básicamente todo. Este es el código. Entonces tenemos como somos, estamos agregando la experiencia cuando matamos a un enemigo. Entonces estamos comprobando si estamos en la experiencia requerida para que ese nivel suba de nivel. Y va a tomar esa información de la tabla de datos debido a esta función de información de nivel que hicimos, Biblioteca de Funciones. Y entonces va a actualizar nuestra nueva experiencia porque estamos restando esa experiencia de requerido porque estamos subiendo de nivel. Entonces realmente no necesitamos toda esa experiencia. Y con esa nueva experiencia, ¿estamos de nuevo, cumpliendo la experiencia requerida para el siguiente nivel? Si no, sólo vamos a actualizar tal vez la interfaz de usuario o donde sea que vayamos a hacer aquí. Así que ahora que hemos terminado con este código, vamos en realidad seguir adelante y crear la nivelación o el nivel de interfaz de usuario. 101. Crea la interfaz de usuario de nivel: Para crear la preciosa URL, volvamos a nuestra carpeta UI dentro del principal Widget Blueprint que se crearon. Y vamos a sumar el nivel aquí ahora. Depende de ti donde lo agregas. Y esto es sólo un curso como tú puedes simplemente hacer el diseño que quieras. Pero aquí vamos en realidad sólo añadir un nivel que se muestra. Así que tomemos, quiero agregarlo justo al lado de esta interfaz de usuario. Por lo que en realidad tengo que añadir una caja horizontal, horizontal para que estén alineadas horizontalmente. Entonces voy a una caja horizontal. Y entonces voy a poner esta superposición en caja horizontal. Y voy a poner otra superposición en caja horizontal. Aquí es donde quiero diseñar mi nivel EY, simplemente arrastrando esta caja horizontal el camino y se ve así porque no se está llenando. Por lo que voy a hacer click en esta superposición y haciendo clic en llenar aquí, por lo que llena todo el asunto. Y con éste, esta es la pantalla de nivelación, nivelación. Y aquí quiero una imagen como fondo, igual que ésta. Voy con el mismo diseño. Teniendo esta imagen puesta en cuadrado negro plano y llenando todo este espacio, voy a poner allí un espacio entre estas dos superposiciones. Solo asegúrate de que cuando los minimices, el espaciador esté fuera de las superposiciones. Entonces aquí en el medio. Y esto es espaciado en la dirección x, así que tal vez algo así como diez. ¿ De acuerdo? Y aquí, déjame duplicar esta imagen y déjame seleccionar la azul ahora plana azul. Y de nuevo, basta con hacer clic en esta alineación en la parte superior y hacer el tamaño a cinco. Duplicar esto, hacer la alineación a abajo. Por lo que tenemos este mismo diseño que antes. Y ahora quiero agregar algún texto. Y el texto que quiero primero agregar un cuadro vertical porque quiero textos. Y el primero va a decir nivel. Entonces aquí va a decir nivel. Y el segundo en mi cuadro vertical, va a simplemente tener ese nivel mostrado. Entonces el nivel uno es el inicio. Y quiero poner eso en el medio y poner éste en el medio también. Y toda la caja vertical que quiero poner en el medio también. Ahora puedes seleccionar ambos textos para que podamos agregarlos juntos. Y para la font-familia, voy a seleccionar Bold. Para el tamaño. Sólo voy a dejar que sea 24. Y éste para la sombra, voy a poner la sombra offset 22 y cambiar el alfa a 0.35. Tenemos algún tipo de pantalla básica, y se puede ver que esto es muy pequeño y estrecho. Se está alejando de esto. Para que puedas dar click en esta segunda superposición, clic en relleno para llenarlo. Y si no quieres llenarlo tanto como el mismo tamaño que este de aquí. Simplemente puedes cambiar este número de relleno ahora mismo es 1. Puedes escribir 0.5 y puede hacerlo más pequeño. Creo que voy con 0.4 y voy a hacer mi caja horizontal un poco más grande porque creo que esto es demasiado pequeño. Algo, algo así. Y lo que podemos hacer ahora, solo asegúrate de que el punto de anclaje sea correcto. Entonces haciendo clic en el ancla, poniéndola aquí abajo en su lugar. Y luego escribiendo ceros 0 y la posición que se puede ver se alinea debajo de nuestra ventana. Y no queremos eso. Por lo que de nuevo, juega con los alineamientos y este es el motivo por el alineamiento aquí. Y esto sólo está configurado a uno, y será aquí arriba. Ahora, para la posición, lo estaré poniendo a tal vez 30 en la x y menos 30 en y. menos 30 va hacia arriba. Ahora tenemos nuestra pantalla de nivelación. Ahora, sólo para hacernos más fácil en las variables, voy a hacer click en este número y llamarlo al siguiente nivel. Y para éste, realmente no necesitamos convertirlo en una variable porque no la necesitamos. Solo asegurándome de que estoy haciendo clic en este texto aquí porque necesitamos modificarlo, asegurarnos de que esté configurado en es variable. Pero este para este nivel también se asegura de que esté configurado en es variable. Y esta se llama experiencia de textos. Nivel Textos. Esta barra de progreso se llama experiencia prog. Y sí, eso es todo. Al igual que tenemos todo lo que necesitamos y vamos a salvar todo. Y en la siguiente vamos a agregar funcionalidad a esta interfaz de usuario. 102. Funcionalidad de la interfaz de usuario del nivel: Entonces aquí estoy de vuelta en mi interfaz de usuario principal y ahora agreguemos funcionalidad a este sistema de nivelación de experiencia. Entonces lo que tenemos que hacer es pasar al gráfico y codificar algo. Entonces aquí quiero hacer clic derecho y hagamos un nuevo evento personalizado y llamémoslo experiencia de actualizaciones. Y éste va a actualizar la experiencia y el nivel. Entonces va a tener esa experiencia. Y si tenemos la experiencia requerida, también vamos a actualizar el nivel. Entonces ahora no sé qué necesitamos poner aquí en los insumos, como tenemos que averiguarlo por ahora, dejemos que sea así. Y lo primero que tenemos que hacer es tomar esta experiencia de barra de progreso. Y al igual que antes, con la Barra de Salud, dicen set por ciento. Y esto va a establecer en última instancia el porcentaje para esta barra de progreso aquí. Entonces se va a llenar. Y por lo general como aquí comienza como 0 por defecto. Entonces vamos a fijar el porcentaje por algo. Y luego después de eso tenemos esta experiencia. Y vamos a poner este texto también encima de esta barra de progreso. Entonces este es este texto en la parte superior. Y recuerda cuando tengamos textos dinámicos, justo lo que te enseñé antes, necesitamos usar texto en formato. Así que de nuevo, mismo método, trapo hacia fuera, guardar texto de formato. Y necesitamos dos variables. Necesitamos cuánta experiencia tienes, y cuánta experiencia se necesita para subir de nivel. Entonces hagamos dos variables aquí. Hagamos unos corchetes rizados y escribimos experiencia, experiencia. Entonces esta es la experiencia actual. Y luego, después como fuera de los corchetes rizados, estoy escribiendo una barra. Y luego hacemos nuevos corchetes rizados y lo llamamos experiencia necesaria. Y haz como terminarlo con soportes rizados. Entonces tenemos dos corchetes rizados. Tenemos éste aquí, tenemos una barra y esta segunda. Por lo que ahora tenemos dos variables que podemos establecer como variables dinámicas. Veo que necesitamos, como en la información del jugador, tal vez necesitamos sólo una información de jugador aquí porque en lugar de enchufar todas estas variables aquí, realmente igual que podemos usar, como nosotros puede actualizar toda esta información utilizando la información del jugador. Así que en realidad voy a crear esto como una entrada y escritura de información de capa, así como esto. Y llamémoslo info del jugador. En realidad, hagámoslo desde aquí. Entonces con lo que tenemos hasta ahora, vamos a probarlo. Tomemos la información dividida y lo rompamos. Y ahora podemos usar este porcentaje aquí. Recuerda que esta es la experiencia. Entonces, cuánta experiencia tienes en este momento dividida por la experiencia requerida que tú, que necesitas. Entonces escondamos todos los pines no conectados por lo que necesitamos la experiencia requerida. Recuerda, la función que hicimos en la biblioteca es global. Por lo que sólo podemos decir que consiga la información de nivel y se puede acceder a ella aquí. Es necesario especificar el nivel de un jugador. Lo tenemos aquí en nuestra estructura así. Y ahora puedes romper esto. Ahora tienes la experiencia requerida. La experiencia que hayas dividido por la experiencia requerida te dará el porcentaje. Y en realidad, aquí hay un pequeño error. Al igual que cuando lo haces así, en realidad va a mostrar 0 porque recuerda que esto es un entero y este es un entero y esto es un float. Al igual que va a procesar estos datos correctamente, pero el número se va a mostrar mal porque recuerda, cuando dividas enteros, te va a dar un número entero. No te va a dar un porcentaje, como si no tengas decimales ni enteros. Entonces si dices por ejemplo, la experiencia que tienes es de diez dividida por 50. Y ese número que obtienes es un número decimal. Eso no va a mostrar que este número será igual a 0 porque los enteros no pueden tener cifras decimales. Entonces la forma correcta de hacerlo es primero convertir esto en un flotador. Así dicen dos carrozas. Y haz lo mismo para que éste flote. Y eliminemos esto. Y ahora vamos a decir esta experiencia dividida. Y ahora estamos operando con un flotador en su lugar. Así que asegúrate de convertirlo en un flotador primero más no obtendrás esos decimales, pero solo tendrás números enteros. Por lo que ahora tenemos los decimales. Hagamos doble clic y hagamos un nodo ferroviario aquí. Y ahora ese número que tenemos en este momento, podemos usarlo en el porcentaje. Actualizaremos correctamente la barra de progreso. De acuerdo, Así que esto está terminado ahora. Y lo siguiente, realidad primero vamos a hacer clic en éste y esconder pin solo para que se vea un poco mejor. Entonces lo siguiente es que necesitamos actualizar la experiencia que tienes y que experimentaron necesitaban. Esto es muy fácil porque la experiencia que tenemos es solo esta experiencia. Permítanme hacer doble clic y hacer un nodo reenrutado aquí. Y la experiencia que se necesita es solo ésta requerida. Por lo que sólo puedo hacer doble clic y ponerlo aquí. Y déjame realmente simplemente arrastrar esto hacia abajo para que no desborde todo el asunto con las líneas aquí. Algo así. Esto se ve un poco más limpio, mejor para trabajar con. De acuerdo, entonces ahora tenemos ese conjunto de información. Lo que tenemos que hacer a continuación es actualizar la pantalla de nivel para los jugadores. Entonces tomando este nivel de texto, por lo que ahora queremos actualizar este nivel aquí. Entonces tomando este nivel y decir texto conjunto. Y ahora esto también es muy fácil porque ya tenemos el nivel para el jugador. Simplemente podemos tomar éste o puedes tomar éste que depende de ti y conectarlo aquí. Y de nuevo, haz un nodo reenrutado para que se vea mucho mejor. Algo así. Por lo que ahora tenemos en realidad toda la información que estamos actualizando, el porcentaje, estamos actualizando el texto dinámico en esta barra de progreso. Y también estamos actualizando aquí el texto de nivelación. Por lo que ahora podemos compilar y guardar, y ahora podemos usar esta experiencia de actualización en nuestro controlador de jugador para actualizar la experiencia y el nivel del jugador. 103. Finalizar el sistema de nivelación: Hola y bienvenidos de vuelta. Finalicemos ahora el sistema de nivelación. Vayamos al controlador del jugador. Recuerda que hacemos las actualizaciones de la interfaz de usuario en el controlador del reproductor. Así que ir al controlador del jugador aquí, y ahora sólo hagámoslo aquí abajo. Tenemos la barra de salud de actualización aquí arriba. Hagamos uno nuevo. Para éste, sólo voy a llamarlo experiencia de actualización. Así que en realidad volvamos primero a las interfaces en el controlador del reproductor Blueprint Interface. Y hagámoslo aquí llamado experiencia de actualización. Va a recordar tomar la estructura de la información del jugador como la variable porque esa es la que hicimos. Y llamémoslo info del jugador. Recopilar y Guardar. Volvamos a llamarlo aquí, actualizar experiencia. Y ahora de nuevo, corre a través de los clientes. Recuerda que no es el servidor ahora es el cliente porque estamos manejando la interfaz de usuario y la interfaz de usuario pasa por el cliente. Entonces eventos personalizados y pasando por el cliente, diciendo experiencia de actualización. Y hagamos que se ejecute a un cliente propietario y confiable. Y agreguemos aquí la variable info del jugador. Entonces buscando información del jugador. Ahora podemos escribirlo aquí arriba, actualización de Cl, experiencia. Entonces ahora lo va a ejecutar por aquí, ejecutarlo a través del cliente, y el cliente va a ejecutar esa función de blueprints de widget que hicimos aquí en WB main, aquí llamada actualización experiencia. Esto es lo que vamos a hacer ahora. Ahora puedes arrastrar desde aquí. Y en realidad necesitamos acceder al Widget Blueprint main. Y ya recordamos tener eso como variable en nuestro controlador de jugador. Así que empecemos desde aquí y digamos Actualizar experiencia, y la verás aquí. Entonces llámenlo aquí, conéctelos, y luego conéctelos aquí. Por lo que ahora va a ir y alimentar esa información en, aquí adentro y actualizar todo para nosotros. Ahora no hemos especificado dónde agregaremos esto. Así que actualizar la experiencia, en realidad volvamos a, vamos a guardar todo y volvamos al jugador, bajista, base del jugador. Y recuerda, hicimos este anuncio experiencia eventos aquí. Y esto es lo que queremos sumar aquí porque si te has nivelado, entonces estamos actualizando la nueva experiencia. Estamos actualizando el nuevo nivel. Y luego se va a revisar de nuevo. ¿ Necesitas subir de nivel de nuevo? En caso afirmativo, volverá a actualizar la experiencia, actualizar el nivel. Entonces después de eso va a decir que no, ya no necesitas subir de nivel. No eres no estás cumpliendo esa experiencia requerida para este nivel en el que te encuentras. Por lo que solo sigue adelante y actualiza la interfaz de usuario aquí. La interfaz de usuario de nuevo, ahora es la función que necesitamos o el evento que necesitamos para acceder a esto dentro del controlador del reproductor. Ahora podemos decir Get Controller. Estamos dentro de la base del jugador. Y aquí digamos que consigue controlador de jugador REF que hicimos mucho antes. Vamos a conectarlo aquí. Ahora, vamos a arrastrar de esto y decir actualización experiencia. Esto es lo que llamamos la función de interfaz. Y es un mensaje porque es una función de Interfaz Blueprint. Ahora necesita la información. Así que sólo voy a arrastrar desde aquí abajo y arrastrar esta información del jugador a ella. Y ahora se va a actualizar la experiencia. Así que vamos a compilar y guardar elemento en realidad solo dale al jugador mucha más ayuda. Simplemente no quiero morir todo el tiempo. Por lo que establecer las colinas max a tal vez 500 y la corriente ayuda a 500. Y vamos a jugar ahora. De acuerdo, así que ahora soy el jugador, estoy golpeando esto. Ya lo podemos ver actualizaciones. Pero en un principio se puede decir que dice 0 de cada 100. Eso no es correcto. Por lo que necesitamos hacer una actualización inicial. Recuerda que tu interfaz de usuario solo se está actualizando cada vez que adquieras experiencia. Entonces cuando estás desovando, no estás actualizando tu interfaz de usuario. Sólo lo estás actualizando cada vez que matas algo. Así que en realidad lo hagamos aquí arriba en el, déjame copiar pegue este código y déjame subir aquí y hacerlo en el lugar de inicio. Así que cada vez que empiezo a jugar el juego respondiendo al jugador respondiendo a la cámara, estamos configurando la vista de la cámara. Lo voy a hacer aquí en realidad. Entonces justo después de configurar la vista de la cámara, voy a añadir esto. Y voy a actualizar mi interfaz de usuario como actualización inicial. Así que aquí mismo, algo como esto. De acuerdo, y ahora vamos a compilar y ahorrar. Ahora vamos a hacer click en play. Y puedes ver que lo hace en actualización inicial y tienes esa información correcta ahora. Ahora puede matar algo. Te da diez experiencia. El bar también se está actualizando. Impresionante, y veamos si subimos de nivel. Entonces voy a matar a un par de más. Ahora se siente como un juego. Cuando todos los elementos se unen. Ahora podemos ver me aseguraré de que nivelar hasta el nivel dos y mi experiencia amasada sea ahora 75. Y si sigo matando, ahora lo va a aumentar. Entonces ahora se está actualizando correctamente en realidad. Y si subo aquí a llenar algunos de esos aquí, vale, así que ahora puedo ver tengo 70 de 75. Entonces veamos si calcula correctamente. Entonces si creo que cada pic da como 20 experiencia, así que si acabo de matar a uno, debería decir 15 ahora. Así que déjame matar a uno. No me caigo. Dice 15, por lo que en realidad está calculando correctamente y me niveló. Entonces eso es bonito y ahora todo se está actualizando correctamente. Entonces lo último que tenemos que hacer es solo agregar un efecto de sonido y un efecto visual para cuando subimos de nivel. Entonces lo haremos un poco más interesante. 104. Subir el nivel de SFX y VFX: Pero lo final aquí en el sistema de nivelación, vamos a seguir adelante y añadir algún efecto sonoro y visual para subir de nivel. Volvamos a la base de jugadores. Y dentro de aquí, vamos a bajar a nuestra experiencia publicitaria, y ahora agreguemos un multicast. Así que vamos a hacer clic derecho. Hacer un evento personalizado. Y hagamos multicast. Y sólo voy a llamarlo igual. Puedes llamarlo de nivel o simplemente lo voy a llamar experiencia porque la estoy incluyendo ahí arriba. Y lo voy a cambiar a un multicast confiable. Voy a reproducir ubicación de sonido igual que antes. Y agregando esas variables en. Voy a llamarlo efecto de sonido de nivel. ¿ De acuerdo? Y también queremos jugar como un efecto visual para cuando subes de nivel, pero el efecto visual es un flip book. Entonces en los materiales del curso he incluido para ti, este nivel de textura que necesitas agregar. Entonces aquí en la subida de nivel del personaje, vamos aquí a nuestros personajes activos. Y vamos a arrastrar en este nivel de textura. Nuevamente, haga clic con el botón derecho y aplique papel a la configuración, y ahora extraiga esos sprites. Y la rejilla para esto es creo que fue de 180 por 180. Y ahora da click en extracto. Y ahora voy a cambiar el nombre de todos esos. Por lo que ahora que las tienes delante de ti aquí, ahora voy a hacer click en todas ellas, clic derecho y crea un flip book. Y lo voy a llamar una subida de nivel B. De acuerdo, ahora voy a hacer doble clic en este flip book y establecer los marcos por segundo a ocho. Y se puede ver que se ve un raro. Y esto es, recuerda, tal vez puedas averiguarlo, pero probablemente sea porque esto tiene este material. Así que cambiemos el material de la máscara por el translúcido. Entonces buscando translúcido. Entonces lo hemos estado usando un par de veces ahora. Material sprite translúcido, sin luz, puedes ver que se ve mucho mejor ahora. Entonces vamos a cerrar este efecto hacia abajo. Y de nuevo, si no ves esos materiales, recuerda ir a la configuración y habilitar el contenido de los desarrolladores motor decontenido de los desarrolladoresy el contenido de plug-in. Si has terminado con ellos, siempre puedes alejarte de ellos así. Para que no veas todas estas carpetas extra. A veces es molesto ver todas estas carpetas. Así que acabo de hacer clic y lo tengo más limpio así. Así que sólo les muestro cada vez que los necesito. Así que volvamos a la base de jugadores y ahora tenemos que jugar ese efecto de subida de nivel. Pero este es un flip book y realmente no podemos cambiar los personajes flip books. Entonces tenemos que cambiar. No se puede cambiar el libro flip de personajes. Por lo que tenemos que añadir otro componente aquí. Entonces vamos a añadir un nuevo componente. Y llamémoslo o simplemente busquemos flip book. Entonces papel flip book. Voy a llamar a éste, tal vez subes de nivel nivel de efectos V. Sólo lo vas a llamar algo así. Voy a adjuntarlo a mi sprite por ahora. Para este flip book, vamos a cambiarlo a, Encontremos nuestro nivel aquí. Este es el efecto amor, amor, así que lo tenemos aquí. Y al principio, no queremos mostrar esto todo el tiempo. Por lo que en realidad voy a bajar e invisible. Voy a quitar esto visible aquí, por lo que no es visible en el juego para empezar. Entonces lo que quiero hacer cuando subo de nivel es que quería tomar esto y establecer visibilidad para ser visible. Voy a conectar esto aquí. Después de que sea visible. Entonces voy a retrasarlo por algún tiempo y luego volverlo a invisible. Voy a retrasarlo para el momento de este flip books. Voy a tomar esto y decir flip book, y podemos elegir éste, voltear la longitud del libro y el retraso. Y después de retrasarnos, por mucho tiempo que esté jugando este flip book, vamos a ponerlo en invisible de nuevo. Entonces toma esta visibilidad aquí y enganla con ésta. Haz doble clic para hacer un redireccionamiento. Ahora sólo para que se vea mejor, entonces se puede establecer la visibilidad falsa aquí. Lo estamos escondiendo otra vez, lo que sea. Terminamos un bucle de este flip book. Y simplemente no estoy seguro si esto realmente va a jugar desde el principio, así que lo estamos poniendo a visible. Pero, ¿qué pasa si lo que es este flip books realmente jugando en el medio cuando lo ponemos a visible? Por lo que en realidad voy a quitar esto de aquí. Y en realidad vamos a configurarlo a través de código aquí. Entonces lo estamos poniendo a visible. Y luego tomemos este libro flip y digamos Set flip book. Porque solo queremos mostrarlo desde el principio siempre que queramos mostrarlo. Y entonces tenemos que elegir qué libro flip book. No lo hagamos aquí. Simplemente arrastrémoslo a este evento. Y en lugar de llamar nuevo libro flip book, podemos llamarlo subir de nivel los efectos. Y permítanme arrastrar esto solo para que sea más limpio, abriéndola aquí arriba en su lugar, tenemos el VFX como efectos y la ubicación. Y haciendo un nodo redireccionado, en realidad, puedes hacer una nota redireccionada desde ésta para que se vea mejor, así. Y sí, eso se ve bien ahora. Entonces tenemos esta experiencia publicitaria con efectos y tenemos que agregarla en algún lugar y tenemos que agregarla cada vez que el jugador sube de nivel. Entonces subiendo aquí a la experiencia publicitaria, tenemos que encontrar dónde sube el jugador. Y de nuevo, si recuerdas el código, el jugador sube de nivel. Aquí, podemos simplemente cambiarlo aquí al final de este código. Esta es la nivelación del efecto. Y tomemos esto, en realidad tomemos esto aquí y digamos MC, MC ad experience como esta. Y puedes tomar esto aquí y hacer otro nodo redireccionado. O en realidad, lo voy a poner aquí arriba en su lugar. No hay espacio aquí abajo. Así como eso. Vale, así que algo como esto aquí. Y ahora tenemos esta experiencia publicitaria y tenemos que elegir el efecto visual y el efecto visual. Simplemente puedes agregarlo a la estructura si quieres. Entonces volvamos a la estructura. Ir a la información del jugador agregada aquí. Llámalo de nivel como efectos. Y a nivel de los efectos, los efectos o los efectos V, en realidad voy a ponerlo aquí arriba. Y esto es solo porque quiero que los efectos sonoros estén juntos y los efectos visuales si hay más que estar juntos. Vamos a cambiarlo. Este V efectos a un libro flip book, libro flip book de papel. Y el efecto sonoro es una túnica de sonido. Y recuerda que ya agregamos un nivel de efecto sonoro. Entonces compilar y guardar todo. Y vamos al jugador aquí. Información del jugador, y vamos a establecer el efecto de sonido de nivel para que sea el mismo para todos los jugadores porque realmente no tenemos más de uno. Entonces aquí. Y el nivel de efectos V, podemos hacer click aquí y decir subir de nivel. Y podemos elegir el que acabamos de hacer. Y ahora vamos a compilar y ahorrar. Y vámonos y en realidad lo elijamos aquí. Así que tomemos, en realidad podemos romperlo aquí desde esta información del jugador. Ya lo tenemos aquí. Entonces vamos a romperlo. Y ocultemos todo y simplemente escojamos el nivel de sus efectos y el nivel de los efectos. Conéctalas aquí. Y luego tenemos la ubicación, que es la ubicación del jugador. Así que tómalo aquí y digamos consigue ubicación de actor. Así como eso. Y no creo que nos falte algo. Entonces voy a ocultar estos pines no conectados y compilar y guardar. De acuerdo, entonces ahora tenemos este efecto de sonido nivelador y podemos intentar hacer click en Play y ver qué pasa. Entonces haciendo clic en el botón de reproducción, tocándonos aquí. Entonces ahora tratando de subir de nivel para ver si esto realmente está funcionando. Y estoy tratando de subir de nivel más rápido. Entonces hay algunos bichos con estas animaciones. Más tarde vamos a arreglar realmente en la siguiente lección, la he encontrado. Puedo ver que en realidad me nivelé. Y hubo algún juego de efectos. Así que intentemos de nuevo. Agradable. Por lo que se puede ver que el efecto está reproduciendo y el efecto de sonido también está reproduciendo. Se puede ver que este es el error que realmente quiero arreglar en la siguiente lección. Y ahora se ve, en realidad luce bien. Y si quieres que el efecto juegue encima de tu cabeza, recuerda, puedes volver al jugador. Y como lo acabas de agregar como efecto, solo puedes seguir adelante y hacer click en este nivel, nivel de VFX. Y recuerda que esto es sólo un libro flip, lo agregas para que solo puedas arrastrarlo aquí por encima de tu cabeza, anunciado que va a jugar por encima de tu cabeza. Y cada vez que subas de nivel va a jugar aquí arriba. Así que guarde todo. Esto fue todo por ahora. Ahora vamos en realidad seguir adelante y arreglar los errores finales que encontré mientras jugaba el juego. Estuve jugando alrededor de media hora y estaba tratando de encontrar bichos. Y encontré a dos de ellos. Así que vamos a seguir adelante y arreglarlos. Y estamos terminados, casi terminados con este juego. 105. Cómo arreglar los errores finales: De acuerdo, entonces vamos a arreglar ahora los dos libros que tenemos actualmente. Entonces la primera es que si estás parado en la carta, eres capaz de atacar y no queremos hacer eso. Así que vamos a ir al jugador a y la base del jugador. Y lo que he editado dentro de aquí. Entonces en tu lógica de ataque, solo tienes que agregar este booleano. Entonces en este momento tenemos, es que si ya estás atacando, no queremos atacar. Si ya estás muerto, no quieres atacar. El que necesitas agregar. Haga clic en este plus aquí y agregue esto. Entonces si ya estás subido siendo tampoco quieres atacar. Por lo que muy fácil de arreglar, sólo tenemos que comprobar para esto. Lo segundo es a veces los lazos enemigos en la animación de muerte. Y esto es porque olvidamos agregar el modo de caminar. Y volvamos a la base enemiga. Así que pasaba mucho tiempo tratando de reestructurar este código. Para que pueda intentar ver aquí y copiar esto. Entonces en el daño del ADN, tenemos controlador de pantalla y en realidad moví este cálculo de salud primero antes que nada más. Así que trata de disco y creo que estos fueron primero como frente a esto más saludable. Pero creo que estructuralmente sólo tiene más sentido calcular primero la salud. Y después de haber calculado el ****, puedes establecer el modo de movimientos en ninguno. Creo que estos fueron lo contrario. Entonces esto estaba aquí y esto estaba aquí. Pero creo que solo hará que se vea un poco mejor configurarlos el modo de trabajo primero antes de configurar el estado oculto. La otra cosa es, si por la lógica, encontré que es mejor usar este controlador de IA en lugar de, en lugar de obtener controlador. Y consiguiendo el controlador de IA, encontré que es mejor usar este controlador de IA, que también usamos aquí, y el traslado a la ubicación o actor. Entonces usando este controlador de IA y tomando el componente cerebral de esto y luego detener la lógica. Vale, entonces tenemos esto aquí. Y luego voy a pasar al retraso. Creo que tuvimos una parada de inmediato. Parar de inmediato funcionar aquí. Puedes eliminar esto y en realidad vamos a agregar esto más adelante. Entonces así es como se ve ahora mismo, muy simple. Y ahora lo estamos retrasando , igual que antes. Estamos preguntando si el enemigo está muerto o no. Si el enemigo no está muerto, va a ir a poner esto caminando y correr, ¿verdad? Yo creo que lo hicimos antes también. El movimiento ai es lo mismo, todo es igual. Y luego he añadido algo nuevo aquí. Entonces si el enemigo está muerto, somos como en lugar de reiniciar la lógica. Entonces intenta eliminar eso si tienes eso ahora. Entonces, si tienes el controlador Get y inicia la lógica o reinicia la lógica, puedes eliminarla. Y en cambio, hice un nuevo, un nuevo evento aquí, hice uno llamado árbol de comportamiento de reinicio. Creo que esto es mucho mejor que reiniciar la lógica. Porque a veces cuando reinicias la lógica, en realidad estás reiniciando esta lógica y no el árbol de comportamiento. Y es por eso que estoy, específicamente voy a reiniciar el árbol de comportamiento. Encontré que esta caja un poco. Y la cosa así funcionará perfectamente si realmente fuimos aquí. Y recuerda que hablé antes, podrías destruir lo que quita por completo a este actor. Y si hiciéramos eso, no tendríamos este problema. Entonces esto es sólo este proyecto específico. Entonces sólo para este proyecto que estoy haciendo, esto será un problema. Pero si realmente destruyes al actor, esto no será un problema. Pero este día me muevo dos todavía se ejecutará de alguna manera porque detienen la lógica y comienzan la lógica acaba de iniciar esta lógica en lugar del árbol de comportamiento. Entonces hice este llamado árbol de comportamiento de reinicio. Y es sólo una función o eventos que realmente hicieron dentro de la función de interfaz base enemiga. Entonces si vas a la interfaz y a la base enemiga, hice esta llamada árbol de comportamiento de reinicio. Y lo llamé aquí en la base enemiga. Y luego hice una línea de hechos a un lado. Entonces corriendo en poseer cliente y confiable y luego llamarlo aquí arriba, por supuesto el cliente uno. Entonces corre aquí abajo y aquí abajo. Estoy parando el movimiento de inmediato. Y entonces estoy parando la lógica sólo para estar seguro de que la lógica ha sido detenida. Y luego estoy tomando mi controlador de IA y voy a obtener una referencia a mi, a mi controlador de IA. En realidad hecho aquí. Hicimos en el controlador de interfaz ai, hicimos este llamado Good AI controller ref. Estoy obteniendo eso para poder obtener una referencia a mi controlador de IA. Y dentro de aquí en lugar de mi controlador de IA, déjame volver ahora al controlador aéreo enemigo. Hice éste. Entonces antes teníamos este árbol de comportamiento de carrera aquí arriba. Y en lugar de hacer esto, en realidad estoy haciendo mi evento personalizado llamado run árbol de IA. Y cuando empiezo a jugar, solo estoy ejecutando este evento aquí. Y la razón por la que hice este evento es porque en realidad quiero ejecutarlo también en algunos otros puntos. Por lo que no sólo en el start play, sino que quiero ejecutarlo aquí también. En mi base enemiga cada vez que empiezo. Reiniciaron su árbol de comportamiento. Así que estoy ejecutando este árbol de IA de ejecución. Acabamos de ejecutar este árbol de comportamiento igual que antes. Entonces esto es lo que, lo que esencialmente está sucediendo cada vez que estamos reiniciando el árbol de comportamiento. Así que he editado aquí arriba, estoy ejecutando este árbol de comportamiento de reinicio cada vez que el jugador está muerto. Entonces si el enemigo nos está persiguiendo y el jugador muere, reiniciará el árbol de comportamiento. De acuerdo, entonces si el enemigo dice, estamos agregando la experiencia igual que antes. Estamos configurando escritorio para ser verdad. Y aquí, como Justo antes de responder o algo así, estamos eliminando los eventos de superposición de generar. Entonces estamos desvaneciendo el personaje. Después de eso tenemos el temporizador de retardo. Estamos poniendo algo de tiempo. Estamos devolviendo la salud al enemigo. Entonces estamos habilitando la generación de eventos de superposición. Entonces he añadido este, el movimiento establecido para caminar y escribir antes. Es por ello que el enemigo desove en la animación de la muerte. Porque recuerda por aquí al principio, fijamos este modo de movimiento a ninguno y el estado de movimiento para golpear. Cuando el enemigo dice. Nunca lo hemos dicho de nuevo. Entonces cuando el enemigo dados y respuesta acaba de volver a caminar y a la carrera aquí mismo. La respuesta enemiga. Recuerda que me gusta, también he movido esto. He movido la respuesta después de esto porque quiero asegurarme de que mis eventos de superposición de generar estén configurados en true antes de responder. Entonces respondo, y luego le pregunté su destino fijado a falso. Y luego he agregado este llamado árbol de comportamiento de reinicio. Creo que la función de muerte también estaba aquí, así que la eliminé. Y la razón es que las funciones de muerte ya se ejecutan aquí abajo. Así que recuerda que teníamos a este actor se desvanecen. Y cuando el actor se acaba de desvanecerse, y cuando se pone en falso significado por aquí, cuando se pone en falso, y cuando el actor se desvanece, se va a ejecutar esta muerte. Entonces no tiene sentido tener esta muerte aquí arriba. Entonces eliminando eso de aquí, y acabo de agregar este comportamiento de reinicio para leer solo para estar seguro de que está funcionando. Y aquí abajo, también creo que teníamos los derechos de carrera son el modo de caminar en realidad la carga de trabajo. Puedes eliminar eso desde aquí porque ahora ya lo estamos teniendo aquí arriba. Entonces realmente no necesitamos tenerlo aquí abajo. Y así es como se ve y cuando está terminado. Entonces cuando la muerte se establece en falsa, también estoy corriendo reiniciando el árbol de comportamiento solo para estar seguro de que no está molestando. Además, intenta dejarlo fuera del código y ver si funciona. Si tuercas, para volver a conectarlo. Así es como se ve en este momento. Y si jugamos el juego, y vamos a probarlo. Entonces se ve mucho mejor ahora con el código, como si nada estuviera molestando. He intentado jugar durante 15 minutos. Así que acabo de cambiar la salud para el enemigo para poder matarlos un poco más rápido. Pero parece que todo está funcionando ahora. No están desovando y calzando. No están desovando con su animación de muerte. Y podemos pensar jugando el juego así. Todo está funcionando correctamente, como se puede ver. Tan impresionante. Y estos fueron los bichos para esto. Y si los enemigos de nuevo, nuestro recorte entre sí, puedes aumentar esta separación entre ellos como te dije antes, yo también hice esto aquí porque había recorte. Por lo que hice clic en el primero, dijo el E21, hizo clic en el segundo a 1.2, luego el tercero, por lo que 14 y hizo clic en el cuarto, responden a 1.6. Para que pueda aumentarlo aún más. Al igual que si los ves recortar, siempre puedes aumentarlos. Pero sí, ahora todo está fijo y ojalá que en realidad pongamos a prueba la escalera justo antes de que terminemos esto. Yo no hice eso. Por lo que atacar a la carta tampoco es imposible, sólo si me caigo de la escalera. Por lo que se puede ver sólo cuando me quitan la carta, en realidad soy capaz de atacar. Entonces parado en la propia carta, no puedo atacar, pero si me golpearon y me etiquetan, puedo atacarlos. Muy bien, así que esto fue todo por esta lección y vamos a salvar todo. Y sigamos adelante. 106. Creación de la interfaz de usuario de texto flotante: Hola a todos y bienvenidos a esta sección. En esta sección, estaba pensando en crear placas de nombre, pero en cambio vamos a crear realmente un texto de combate flotante. Creo que es más interesante en este punto crear eso. Y incluiré las placas con nombre en mis futuros videos extra. Para el texto de combate flotante. Sólo son algunos textos. Cuando golpees al enemigo, aparecerá ese texto y te mostrará cuánto daño le has hecho al enemigo, porque en este momento el jugador no tiene posibilidad de verlo. Por lo que volará y te dirá cuánto daño hiciste. Y si el enemigo te golpea, el enemigo te mostrará cuánto daño te hizo como jugador. Entonces empecemos a hacer eso. Empecemos a trabajar con la interfaz de usuario. Entonces yendo a la carpeta UI, y aquí podemos hacer clic derecho y crear un nuevo usuario Widget Blueprint. Vamos a crear eso aquí. Y vamos a llamarlo w b y texto flotante. Entonces este es el menú que estaré usando. Aquí adentro. Esta interfaz de usuario será muy simple. Empecemos de nuevo con el panel de lienzo. Empieza siempre con un panel de lienzo cuando estés creando la interfaz de usuario. Y dentro de aquí, Busquemos una superposición en realidad promedios caja cuantil. Y te mostraré lo que estoy haciendo aquí. Tan cuadro horizontal y lo único que necesitamos es una imagen en el cuadro horizontal y un texto dentro del cuadro horizontal. Por lo que sólo será alguna imagen y este será un ícono, obviamente esta imagen aquí. Y luego algunos textos que te muestran cuánto daño has hecho todo el enemigo te ha hecho. Para la interfaz de usuario que donde no necesitas toda la pantalla. Por ejemplo, solo necesitamos algo de texto flotante aquí arriba. En lugar de ir con pantalla, entonces hay que cambiarla a deseada. Deseada es solo ser esta parte aquí para que puedas ver el lienzo desaparecido o en realidad no desapareció. Todavía está aquí, pero acaba redimensionarse a este contenido aquí. Entonces con la imagen, vamos a hacer click sobre la imagen y en realidad vamos a importar eso. Así que de nuevo, en el material del curso he incluido para ti en la interfaz de usuario e imágenes, este tipo y este ícono de sangre. Así que tomemos esos, vamos a ir a las imágenes de la interfaz de usuario. Y dentro de aquí, vamos a importar estos dos. Esto no es escoger ranuras, por lo que no necesitamos hacer clic derecho y aplicar configuraciones 2D de vapor. Por lo que ahora volvamos aquí y haga clic en esta imagen aquí. Busca sangre por ejemplo. Así. Y ahora puedo ver que no está en el tamaño correcto. Entonces haciendo clic en este cuadro horizontal para poder cambiar el tamaño cosas como esta para que se muestre más correctamente. Y haciendo click sobre éste en lugar de llenarlo horizontal y verticalmente, Hagámoslo en el medio. Y para el tamaño, solo estoy haciendo un 44 alrededor de 44 pixeles. Por lo que mucho más pequeño que antes. Y para el texto, vamos a hacer clic en él y vamos a montar, por ejemplo, algún daño. Por ejemplo, hice Dos 135 de daño. Esto será de nuevo cambiar dinámicamente dependiendo de tu daño. Cambiemos la fuente a negra. Y me gusta usar estas fuentes muy pesadas porque cuando estás en el área de juego, quiero que el texto sea muy visible. Entonces eligiendo eso y alinearlo al medio. Y también aquí abajo para la justificación, también alineándola, alineándola al medio. En realidad vamos a alinearlo a la izquierda porque debe estar en la parte izquierda de esta imagen. Por lo que cuanto más largo sea este texto, será de esta manera. Entonces eso es realmente correcto. Vamos, sólo vamos a mantenerlo aquí a la izquierda para la justificación. Y por aquí por este tamaño, probemos algo como 30. Entonces un poco más grande. Y en realidad, antes de que hagamos nada, agreguemos un espaciador entre estos dos. Entonces busquemos un espaciador en ellos entre la imagen y el texto. Y pongamos el espaciador a algo como diez, algo como esto. Y para éste, agreguemos un esquema. Entonces en el tamaño del contorno, voy a poner uno. Por lo que tenemos un pequeño contorno. Aquí se puede ver este color negro. En lugar de ser completamente negro, en realidad sólo hagámoslo un poco gris. Así que sólo un ligero efecto. Se puede ver la diferencia. Este es el antiguo, este es el nuevo. Entonces una diferencia muy, muy leve, no algo muy pesado. Por la sombra. En realidad voy a aplicar sombras. Bueno, vamos a aplicar 0.5 tal vez. Y si eso es demasiado, siempre podemos reducirlo. Entonces 0.5 y va a aplicar sombras para que en realidad podamos verlo más claramente en el entorno. Y en cuanto al color, en realidad podemos cambiarlo dinámicamente por lo que realmente no necesitamos cambiar el color aquí. Y ahora tenemos que alinear correctamente el punto de pivote. Entonces en lugar de estar alineados aquí arriba por la caja horizontal, subamos a la parte superior y ancla en el medio. Y hagamos la alineación 0.5 a 0.5 y hagamos la posición 0 es 0. Así como eso. Ahora está alineado completamente en el medio. Y tal vez si no entendías lo que era esta alineación, como, si tú, si lo tienes de vuelta a 0, puedes verlo siempre líneas a esta esquina superior izquierda. Entonces 0.5, podemos ver que se alinea en el medio a la x. y aquí se alinea en el medio a la y. que lo veas alinea al medio. Si escribes de 0.5 a 0.5, si escribes uno, puedes ver que se alinea de esta manera, 0 o líneas de esta manera. Entonces 0.5 está en el medio. Y se puede ver que todavía tenemos algún espacio al azar aquí. Y esto se debe a que si hace clic en el cuadro horizontal, se puede ver que el tamaño no es como el texto aquí. Por lo que solo puedes hacer click en este tamaño al contenido, y automáticamente se dimensionará a lo que tengas aquí. Entonces si tienes tu daño mucho más alto, puedes ver que la caja horizontal va a dimensionar automáticamente a ese número. Entonces ese es un truco muy cool para dimensionar a los contenidos. Por lo que ahora tenemos estos textos de combate y está listo haciendo click en el cuadro horizontal, se puede ver que está alineado en el medio y se ve completamente correcto ahora. 107. Cómo agregar animación de UI: Ahora agreguemos alguna animación de interfaz para que sea un poco más interesante. Por lo que antes no hemos trabajado con animación. Y si no tienes esta app, a veces se esconde así aquí. Por lo que tienes una pestaña de animación o podemos encontrarla aquí en la ventana. Animaciones. Lo puedes encontrar aquí también si está cerrado. Pero aquí abajo, sólo puede hacer clic y arrastrar y se puede ver esta pestaña de animación aparece. Por lo que queremos crear una animación para este año, y quiero mover todo el asunto, tanto el ícono como el texto. Así que voy a hacer click en este cuadro horizontal y vamos a cambiar realmente el nombre de la misma por ahora. Llamémoslo HB para caja horizontal. Y cambiémoslo a texto flotante para que lo sean. Entonces ahora tenemos esto. Por lo que aquí abajo en la animación, puedes hacer click en este botón para agregar una animación. Y llamémoslo cargando animación de texto. Ahora, puedes hacer click en esta animación y luego puedes hacer click en Agregar Pista. Y entonces tienes que seleccionar a qué quieres agregar animación? Y quiero gustar que tengas que seleccionar lo que tienes que añadir la animación. Por ejemplo, selecciono este cuadro horizontal y hago clic aquí. Y ahora puedo hacer click en este cuadro horizontal para hacer una animación para ello. El asunto es que queremos hacer es primero solo queremos moverlo. Entonces va como cuando golpee a un enemigo, va a ir desde aquí. Entonces aquí con el tiempo, por ejemplo, más de 1 segundo, por lo que el texto va a volar hacia arriba. Entonces esto es lo principal que queremos hacer en este momento. Aquí en el cuadro horizontal, puedo hacer click en este Añadir arrastre. Y quiero cambiar la transformación. Transformar. Se puede cambiar la traducción, que significa lo que queramos hacer en este momento. Por lo que cambiar la posición del texto, es decir traducción. Y se puede cambiar la rotación, la escala y este año. Entonces empecemos con la traducción. Hagamos click aquí. Entonces para la traducción, quiero ir de 0. Y en realidad es de la manera opuesta. Es hacia arriba, es por aquí. Está en el menos. Quiero ir de 0 ahora mismo. Creo que después de 1.5 segundos. Por lo que quiero hacer toda mi animación 1.5 segundos. Entonces después de 1.5 segundos, voy a ir menos 150 en la y. para que puedas ver creado tus puntos. Por lo que vas de aquí a aquí, puedes ver lo fácil que es hacer animaciones de UI. Lo hicimos como si te estás configurando haciéndolo, puedes hacerlo en 15 segundos. Tan fácil, pasando de 0 a menos 150. De acuerdo, así que eso parece interesante, pero en realidad quería hacer un poco más por la rotación en este momento. Está bien. Se inicia con 0, pero después de un 2.5th, así 0.5, quiero hacer cinco en la rotación. Y luego después de 1 segundo, quiero ir a 0, de nuevo. Al hacer clic en 0 aquí, se puede ver que agrega un nuevo punto. Y si alguna vez necesitas mover estos puntos, siempre puedes hacer click en el punto y puedes arrastrarlo a otro lugar. Si quieres que sea más largo o más pequeño, siempre puedes hacer eso. Por lo que así, se puede ver si acabo de quitar esto, si hago clic en otro lugar también. Ahora se puede ver que vuela hacia arriba, gira cinco grados de esta manera, y luego da vuelta atrás. Si quieres que gire más, siempre puedes escribir diez si quieres. Ya se puede ver resulta mucho más. Pero solo quería mantenerlo en archivo por ahora y siempre podemos cambiarlo si es demasiado pequeño de un cambio. Por lo que también creo que va a ser más interesante, como si el texto entra en nuestra fase uno, aparece. Entonces después de 0.3 segundos haciendo clic en la escala, quiero hacerla una talla. Por lo que comienza con uno aquí, y luego parece que el tamaño de dos. Y luego después de 0.6, en realidad quiero que vuelva de nuevo a uno aquí. Entonces cuando es desova, lo hace. Esto nos entra en la cara, vuelve a retroceder y sube. De acuerdo, así que eso se ve interesante. Pero como último efecto, en realidad creo que también será más interesante si desapareció con el tiempo. Aquí a 1 segundo, voy a ahora es en realidad otra transformación porque realmente no tiene una función de visibilidad aquí. Por lo que pinchando en la pista aquí arriba. Y mientras lo tengo aquí en 1 segundo, no es realmente importante. Siempre puedes cambiarlo si no lo has hecho y necesitas cambiarlo a 1 segundo. Nuevamente, solo puedes hacer click y arrastrar estos puntos. Entonces teniendo una lágrima en 1 segundo, voy a dar click en la pista. Y entonces el llamado renderizan opacidad. Para éste, voy a empezar con uno. Entonces eso es correcto. Después yendo a 1.5, voy a escribir 0, por lo que va a desaparecer. Ahora podemos ver la animación. Vamos de esto. Y entonces va a subir, y luego va a desaparecer lentamente, así. Tan animación muy suave. Y siempre puedes hacer clic aquí para jugarlo. Así es como se verá. Animación tan interesante que puedes hacer. Y puedes hacer lo que quieras. Puedes hacer click en esta pista y en realidad puedes ver lo que puedes hacer también para esta transformación, también tienes una animación de cizallamiento y tratar de pensar cualquier animación que estés tratando de hacer. Y creo que esta es una animación sencilla y genial con la que estaremos trabajando. Entonces esto fue todo por esta animación y podemos compilar y guardar, guardar todo. Y pasemos a la siguiente. 108. Funcionalidad de la interfaz de usuario de texto flotante: Ahora que terminamos con la interfaz de usuario y la animación, comencemos con la funcionalidad dentro de aquí y el Widget Blueprint. Ahora vamos a la gráfica, y eliminemos estos eventos predeterminados. Ahora, en lugar de aquí, voy a clic derecho y hacer un nuevo evento personalizado. Llamémoslo actualización. Cargando texto. Texto flotante actualizado. Muy, muy simple. Se va a actualizar nuestro texto. Por lo que al hacer clic en este texto, en realidad cambiemos el nombre primero. Vamos a cambiarlo a TXT cargando texto. Y vamos a hacer clic aquí es variable, lo contrario no aparecerá por aquí. Y tomemos este texto ahora y digamos ese texto como este. Y ahora podemos tomar este texto aquí y arrastrarlo a esta función o eventos, porque este evento estaremos llamando a otro lugar para actualizar el texto. Entonces en lugar de aquí, sólo voy a llamarlo texto flotante. También podemos cambiar el color del texto. Entonces cuando el enemigo nos golpea, podemos tener un color rojo. Cuando golpeamos al enemigo, podemos tener un color azul. Por lo que también podemos hacer que la variable de color. Entonces tomando de nuevo este texto, podemos, si solo quieres, como si no sabes cómo se llama la función y sabes lo que quieres hacer. ¿ Quieres cambiar el color solo para agregar color y ver qué pasa? Y así es como lo encuentras de la mejor manera. Para que puedan ver aquí tenemos algo llamado setColor y opacidad. Entonces eligiendo eso aquí. Y ahora en el color y la opacidad, se puede arrastrar de esto y hacer color pizarra. Y ahora puedes ver que puedes cambiar el color del texto y también puedes cambiarlo se ajusta a un primer plano se especifican color. Este es el defecto. No tienes que tocar esto. En realidad puedes cambiar el color aquí. Entonces con eso, en realidad podemos simplemente tomar de nuevo el color especificado, conectarlo a nuestro evento. Lo estaremos cambiando en otro lugar. Y vamos a llamarlo color de texto flotante. Y lo último que queremos hacer es que también queremos cambiar este ícono. Entonces es sangre cuando estamos siendo golpeados y es ese ícono de tipo cuando estamos golpeando al enemigo. También queremos cambiar esto dinámicamente. Así que primero vamos a cambiar de nuevo el nombre de la misma y llamarlo imagen, cargando texto y tal vez icono icono de texto flotante. Vamos a compilar y guardar, y vamos a la gráfica. Y en lugar de aquí, ahora vamos a arrastrarlo y decir que éste se llama Set brush. Si solo buscas dicho pincel de textura, y esta es una textura y es por eso que decimos Set brush from texture. Entonces vamos a enchufarlo y puedes ver que puedes encontrar todas tus texturas aquí. Pero queremos cambiar dinámicamente. Entonces vamos a arrastrar esta textura y hacerlo aquí. Y llamémoslo icono de texto flotante. Y déjame simplemente organizar las cosas un poco mejor aquí para que puedas hacer doble clic. En realidad, también puedes simplemente arrastrar éste hacia arriba aquí. Creo que es mejor. Y arrástralo aquí. Presiona en la señal para alinear todo. Y creo que esto se ve bien. Entonces esto es lo que tenemos hasta ahora. Esa es la funcionalidad. Y recuerda, queremos tocar nuestra animación. Por lo que aquí arriba en el Constructo de Eventos, puedes escribir constructo de evento y eso es muy probable que empiece a jugar. Recuerda que usamos Begin Play y nuestros otros planos. No obstante, se llama Event Construct cuando se trata de UI, esto es lo mismo. Eso es como cuando juegas el juego y construye la interfaz de usuario. Entonces por aquí lo que queremos hacer es que puedas ver nuestra animación, animación de textos flotantes. Esto es lo que creamos. Consigue esa variable aquí. Y lo más simple podemos simplemente arrastrar esto y decir Play Animation. Ahora vamos a hacer tocar la animación. Realmente no necesitamos hacer más. Entonces eso fue eso. Probemos esto un poco abajo. Por lo que ahora tenemos la funcionalidad de esta interfaz de usuario aquí. Ahora, con esta funcionalidad, realidad podemos llamar a esto en otro lugar y actualizar la interfaz de usuario. 109. Cómo crear el actor de texto flotante: De acuerdo, entonces tenemos que crear un actor de texto flotante ahora. Entonces cuando dañas y enemigo o el enemigo te daña y quieres engendrar esta UI aquí. Si quieres engendrarlo al mundo, recuerda que necesitas algo para engendrarlo. No puedes simplemente engendrar algún texto aquí arriba sin nada. Por lo que en realidad necesitamos un actor y necesitamos engendrar a ese actor cada vez que el enemigo está siendo golpeado. Y luego quitamos ese actor cada vez que el texto haya terminado. Entonces yendo a los planos y dentro de aquí podemos hacer clic derecho y podemos dar click en clase Blueprint. Y luego podemos simplemente crear un acto simple o no uno de papel. En realidad queremos crear uno normal aquí. Lo intenté con el papel uno y en realidad no funcionó. Entonces tenemos que usar uno normal. Y haciendo eso, llamémoslo PP texto flotante. Y vamos a hacer clic en él aquí. Y lo que queremos hacer aquí, no queremos agregar nada a la viewport, pero aquí arriba en los componentes, clicemos aquí y busquemos widgets. Y se puede ver que tiene algo llamado widget aquí. Y este es un widget 3D. Entonces no es como la interfaz de usuario de aquí que hicimos. Cuando añades un componente aquí puedes verlo en realidad también activo a la ventanal. Es un Widget 3D y así es como haces cosas como mostrarte yo en el mundo. Por lo que hablé de la placa de nombre antes. Estaremos haciendo los de las lecciones extra, pero haciendo las placas de nombre, eso será lo mismo. Haciendo estos widgets 3D porque queremos mostrarlos en el mundo y tal vez deban seguir al personaje. Entonces aquí creamos un widget. Y puedes ver a la derecha en el widget, en el panel Detalles, puedes cambiar algunos ajustes. Entonces, en primer lugar, hay que elegir la clase widget. Mirando aquí, tienes que seleccionar el que acabas de hacer. Entonces el texto flotante Widget Blueprint. Y puedo ver que aparece aquí, la ventana gráfica. Entonces vamos a compilar y ahorrar. Y en lugar de hacer mundo, así que si eliges mundo espacial, aparecerá así en el mundo. Al igual que un personaje realmente puede girar alrededor de este texto y verlo en 3D. No obstante, sólo quiero que sea proyectado. Y lo que significa pantalla es justo, siempre estará frente a nosotros en la pantalla. No quiero que parezca texto 3D. pantalla será la correcta. Y voy a decir dibujar un tamaño deseado. Entonces, sin embargo, lo hicimos en nuestro Widget Blueprint, y eso fue todo para éste. Entonces esto fue realmente fácil. Así que vayamos al Gráfico de Eventos y añadamos la funcionalidad de la misma. Así que eliminemos estos predeterminados. Y para éste, voy a clic derecho y hacer tu evento personalizado. No quiero hacer una función Blueprint Interface solo para estos textos flotantes porque no creo que necesito más cosas aquí. Así que hagamos de éste un evento personalizado aquí, y llamémoslo mostrar texto flotante. Y para éste, voy a tomar este widget. Vamos a renombrar realmente. Vamos a cambiarle el nombre a widgets de texto flotante. Entonces me lo voy a llevar aquí. Y luego tenemos que decir Get User, objeto widget. Y ahora tenemos que echarlo al pasado a lo que sea que ustedes hayan elegido aquí. Entonces el texto flotante del WB, un costo para WB cargando texto y luego conectarlo aquí. Y ahora tenemos acceso a ese Widget Blueprint, que puedas llamar a cualquier cosa desde aquí. Y recuerda lo que queremos llamar desde este Widget Blueprint, permítanme realmente hacerlo más grande aquí. A lo que queremos llamar desde ella es esta actualización de texto flotante. Por lo que aquí podemos buscar actualizaciones cargando textos y puedes llamar a esa función desde ella. Y solo asegúrate de que el objetivo sea este texto flotante WP. Y estas son todas las cosas que necesitas actualizar. Y ahora sólo voy a arrastrarlo aquí nuevo a este evento porque lo llamaremos en otro lugar. Así como esto. Y éste en realidad lo voy a ejecutar como multicast. Entonces esto es, recuerda lo que dije antes. Un Multicast solo puede ejecutarse a través de un evento de servidor. Para que puedas imaginar que tendrás un evento de servidor en alguna parte. Por lo que estaremos creando un evento de servidor más adelante. Por lo que esto se está ejecutando ahora a través del multicast y estará mostrando esta información a todos los jugadores. Y la razón por la que estoy llamando a esto en el multicast y no en un rep notifique. Nuevamente, este texto de combate aparecerá y desaparecerá. Y para los jugadores que aún no se han conectado o de pie lejos, esta información será irrelevante porque desaparecerá después de 1.5 segundos. Por lo que no tiene sentido que un rep notifique porque recuerde, Eric notificar es algo que notifica a todos los clientes también cuando se conectan diez minutos después. Entonces si lo haces en un rep notificar diez minutos después cuando se conecten, verán todo este texto de combate de spam que aparecerá y desaparecerá después de 1.5 segundos, aunque sea hace diez minutos. Entonces no queremos eso. Vimos un multicast solo lo mostrará aquí y ahora cayó por los otros jugadores conectados que están cerca de ti. Por lo que al reproducir este multicast, mostrará estos textos flotantes. Y recuerda, esto es un actor. Un actor cuando lo engendras al mundo, tienes que quitarlo en algún momento porque aunque estés tocando este texto aquí y esta animación desaparece así. Recuerda que engendraste un actor y este acto, este actor punto no desaparecerá por sí solo. Entonces tenemos que destruir a este actor en algún momento. Por lo que en realidad voy a tomar esto aquí y tomar mi animación flotante. Entonces voy a llamar a esto aquí. Tienes algo llamado get y time porque quiero eliminar a este actor después de que se haya tocado esta animación. Para que pueda conseguir esta vez. Por lo que 1.5 segundo. En realidad puedo conseguirlo así, tomando la animación, obteniendo la enzima que es de 1.5 segundos. Y ahora puedo poner un retraso y conectado aquí. Ahora con esto, entonces puedo destruir al actor. Lo que eso está haciendo es que voy a actualizar mi texto y le estoy diciendo que espere por el tiempo que sea esta animación. Entonces si en algún momento quieres cambiar esta animación a cinco segundos, esto es muy cool porque ahora solo cambia automáticamente a cinco segundos porque solo está consiguiendo el tiempo de fin de tu animación. Y lo estamos retrasando. Y luego estamos destruyendo a este actor aquí porque ya no lo necesitamos. Entonces eso fue todo por este actor de texto flotante. Y ahora, en realidad sigamos adelante y hagamos la lógica de textos flotantes más grandes. 110. lógica de texto flotante: Ahora trabajemos en la lógica de carga de texto más grande. Entonces lo que queremos hacer es volver a mostrar un texto flotante cuando el enemigo, el enemigo te golpee y cuando golpeas al enemigo. Entonces dependiendo de quién está golpeando, que tienen, por ejemplo, si golpeas al enemigo, quiero que el texto esté por encima del enemigo. No obstante, si el enemigo te golpea, quiero que el texto esté por encima de ti. Entonces tenemos que hacerlo tanto para la base de jugadores aquí. Y también tenemos que hacerlo por la base enemiga. Y recuerda, hicimos un padre para ambos. Así que recuerda aquí, la base de personajes es evidente tanto para la base del jugador como para la base enemiga. Entonces lo hicimos en el inicio de este curso. Así que en realidad vamos a codificar esto dentro de la base de personajes porque entonces podemos usarlo tanto en la base enemiga como en la base del jugador. Y ahora se puede ver lo útil que es hacer un padre para todos estos artículos. Entonces en un punto posterior, si quieres hacer que los enemigos caigan objetos, y también creo que lo haremos en las lecciones extra. Sólo echa un vistazo a mi curso. A lo mejor ya he hecho muchas clases extra en el momento en que estás viendo este curso. Pero para los ítems, de nuevo, queremos crear, hacer clic derecho y crear un actor. Y luego queremos crear una base de artículos. Y desde el elemento basado, queremos crear, por ejemplo, la base de objetos de búsqueda. Y desde Quest basado en elementos, quiero crear objetos de búsqueda. Por lo que muy, muy buena práctica para crear unos planos base porque entonces más adelante puedes usarlos a tu favor. Entonces vayamos al carácter basado en el carácter y hagamos el texto flotante. Entonces vamos a abrir el editor completo del blueprint. Voy a eliminar todos estos eventos predeterminados. Y aquí Empecemos a crear nuestro evento personalizado de texto de fuente de visualización. Por lo que llamarlo muestra texto flotante. Y podemos crearlo en una función de Interfaz de Blueprint. Pero ahora mismo no sé qué variables necesitamos. Así que empecemos a hacer un cliente. Siempre puedes cambiarlo. Y vamos a bajar aquí, hacer un nuevo evento personalizado y ejecutarlo a través del servidor. Porque recuerda en el texto flotante aquí, hiciste un multicast. Entonces tenemos que ejecutarlo a través del servidor y tenemos que hacerlo aquí. Entonces ejecutándolo en el servidor aquí. Y permítanme realmente darle un nombre. Así que el servidor muestra la carga de texto. Para éste, vamos a llamarlo aquí de nuevo. Entonces ya estamos acostumbrados a esto y no lo he llamado algo correctamente. Entonces Display, y vamos a intentarlo de nuevo, servidor muestra texto flotante. De acuerdo, así que aquí lo que quiero hacer como variable en realidad quieren los actores. Entonces si es el enemigo o es el jugador, porque recuerda que esta es una base de personajes. Así que en realidad no tengo ni idea en este momento si es el jugador o el enemigo quedando dañado. Así que permítanme buscar actor en la variable aquí. Elige a este actor. Y cambiemos el nombre por actor dañado. Entonces tenemos que conseguir quién está dañado, es el jugador o es el enemigo? Ahora podemos hacer clic derecho sobre este daño y promoverlo a una variable. Y llamémoslo actor dañado. Ahora podemos establecer la replicación para replicarla. Por lo que el cliente también puede ver este valor. Y obviamente tenemos que arrastrar esto también a este evento, porque éste estará llamando a otro lugar en algún momento. Por lo que ahora tenemos éste y quiero engendrar mis textos flotantes actor en el lugar donde el actor ha sido dañado. Así que llevemos este daño al actor. Y en realidad lo que queremos hacer, en realidad solo lo creemos para que puedas verlo. Creo que será confuso si empiezo aquí. Entonces lo que queremos hacer es engendrar a este actor, por lo que engendró el texto flotante de BP. Textos flotantes. Entonces estamos tratando de engendrar este texto flotante. Y aquí abajo hay que seleccionar, tratar de ajustar la ubicación, pero siempre desova solo para asegurarse de que siempre esté desove. Y para esta transformación de desova, tenemos que conducir desde aquí y decir hacer transformarse. Ahora lo estamos rompiendo para ver tanto la ubicación como la rotación y la escala. Y esto es lo que intentas hacer. Estamos tratando ahora de engendrar este texto flotante por encima del actor dañado. Por lo que estamos tratando de tomar a este actor dañado y decir conseguir la ubicación de los actores. Porque recuerda que esto es un actor. Entonces consiguiendo la ubicación de los actores, solo podemos conectarlo así. No obstante, quiero engendrarlo un poco por encima del actor. No quiero engendrarlo en medio del actor. Así que en realidad voy a decir romper y romper este vector. Para que pueda ver la X, Y, y Z. en realidad estoy haciendo lo mismo aquí. Estoy tomando esto y diciendo make vector. Y ahora la x es la misma, la y es la misma. Es sólo la z Así que aquí arriba, si quieres que el texto sea un poco hacia arriba, es el eje z. Así que estoy tomando este eje z y estoy diciendo plus tal vez 30 o algo así. Tienes que probar eso y luego lo estarás enchufando así. Entonces la x es la misma, la y es la misma. Y solo estoy ajustando el valor z para estar un poco por encima del actor. Arrastremos esto y organicemos esto un poco mejor. Por lo que ahora respondiendo este texto flotante en esta ubicación, por lo que la rotación es la misma, por lo que los ceros son 0 y la escala es la misma aquí no necesitamos tocar eso. Ahora, aquí podemos promover esto a una variable y podemos llamarlo texto flotante. Entonces ahora este es el actor que engendramos cada vez que golpeamos al enemigo. Vale, entonces de este actor, recuerda que hiciste este multicast y ahora realmente tienes una referencia a este actor. Puedes arrastrar desde aquí y decir mostrar texto flotante, mostrar texto de carga. Y no es de la base de personajes, se acaba de llamar función aquí arriba. Y asegúrate de que el objetivo sea BP textos flotantes para asegurarte de que venga de aquí. Ahora en realidad se puede actualizar este texto. Así que muy cool. puede llamar a este evento, pasa por aquí, y luego en realidad se puede actualizar estos textos flotantes. No obstante, recuerda, les dije antes que estaremos cambiando los colores. Entonces, por ejemplo, si el jugador nos golpea o el jugador golpea al enemigo, al enemigo, o mostrará aquí un color azul. No obstante, si el enemigo nos golpea, mostrará un color rojo. Entonces no podemos hacerlo completamente así porque en realidad no sabemos si este actor dañado es un jugador o no. Entonces, lo que puedes hacer, ya sea puedes tomar este actor dañado y decir que el actor ha etiquetado Jugador o actor ha etiquetado enemigo. Porque todos, ya sabemos qué es el actor que tiene etiqueta. Lo usamos antes. No obstante, creo que más adelante, si fuera un juego como un verdadero, otro curso tal vez tengas toneladas de mapas, toneladas de personajes de daño, y en realidad necesitas más variables que solo jugador y enemigo. En realidad puedes crear una enumeración por aquí que será mucho mejor, mucho más dinámica, y luego mucho más fácil para ti. Así que en realidad hagamos eso en la próxima lección. 111. Enumeración de texto flotante: Entonces para esta enumeración, vamos a hacer clic derecho y vamos a crear una enumeración de blueprint. Llamémoslo tipo de texto flotante. Dentro de esta enumeración de tipo de texto flotante, vamos a agregar dos cosas. Vamos a añadir aquí, llamarlo daño de capa. Y llamémoslo aquí abajo, daño enemigo. Por lo que puede ser daño de capa o puede ser daño enemigo. Ahora podemos tomar esta enumeración y volver a la base del jugador o basada en el carácter aquí. Y ahora permítanme borrar estos textos flotantes por ahora. Entonces antes de llamar a esto ahora vamos a añadirlo en realidad a este evento. Agreguemos esta enumeración. Y se llamaba E tipo de texto flotante seleccionado aquí. Y de nuevo llamarlo tipo de texto flotante. Para esta enumeración, vamos a arrastrar y decir cambiar. Recuerda que ya usamos eso un par de veces. Ahora, encienda la enumeración para que podamos comprobar si se trata de daño enemigo o daño de jugador lo que se ha aplicado. Entonces si se trata de daño de jugador, recuerda, será engendrado por encima del enemigo porque el jugador daña, dañaste al enemigo. El daño desova por encima del enemigo. Entonces me voy a llevar a este actor dañado y podemos decir conseguir referencia enemiga porque queremos conseguir este actor ahora. Queremos engendrarlo por encima del enemigo. Ahora. Puedes hacerlo así. Y para el, por el daño enemigo, puedes intentar pensar lo que podemos hacer y tal vez ya lo adivinaste. Tomemos a este actor dañado. Y ahora digamos Get Player Reference porque queremos engendrarlo en donde está el jugador. Entonces si el enemigo daña al jugador, queremos desovar el daño por encima del jugador. El referente de los jugadores. Y desde aquí, ahora podemos tomar este texto flotante y podemos arrastrar y decir de nuevo, mostrar cargando texto y podemos llamar a esta función. Ahora podemos sumarlo aquí arriba. Vamos a copiar pegarlo aquí abajo. Y puedes arrastrarlo de nuevo a los objetivos. Y vamos a arrastrarlo un poco hacia abajo para que tengamos más espacio con el que trabajar . Así como eso. Y si lo desea, puede hacer doble clic para hacer, reorientar nodo y hacer que se vea un poco más delgado. Algo como esto. De acuerdo, entonces ahora podemos actualizar este texto dependiendo de si es un jugador o no. Y déjame arrastrar esto para que en realidad pueda ver lo que está pasando. Y ahora podemos arrastrar esto y toda la lógica que estará actualizando estos dos será entre aquí. Entonces, en primer lugar, para el texto flotante, será la cantidad de daños. Entonces este es el daño del jugador. Tenemos que mostrarle cuánto daño ha hecho el jugador. Por lo que ahora en el enemigo, recuerda que ya tenemos esto, cualquier evento de daño. Entonces vamos al enemigo, base enemiga. Y dentro de la base enemiga ya tenemos este cualquier evento de daño. Entonces a partir de esto cualquier evento de daño, ya sabemos cuánto daño ha hecho el jugador. Entonces vamos a hacer clic derecho en éste y promoviéndonos a una variable para que podamos usarla. Y vamos a llamarlo cantidades de daño del jugador. Conectémonos y recordemos replicarlo. Por lo que el cliente también puede ver este valor. Tenemos que hacer lo mismo más adelante. Así que hagamos esto mismo por el jugador aquí. Entonces para el jugador, cuando el enemigo daña al jugador, también tenemos que hacer aquí clic derecho promovido a una variable, y llamémoslo cantidades de daño enemigo. De acuerdo, entonces estamos promocionando a quienes son variables porque en realidad queremos usarlos. Así que replique este también. Recuerda hacer eso. Ahora, volvamos a la base de jugadores. Entonces, ¿cuánto dañó el jugador a este enemigo? Entonces podemos tomar esto del enemigo y decir cantidades de daño del jugador. Y ahora solo podemos conectarlo aquí y va a convertir tu flotador en un texto. Podemos hacer lo mismo aquí abajo. Podemos decir que los enemigos los dañan. Y podemos volver a conectarlo. Y ahora mostrará cuánto daño ha hecho el enemigo al jugador. Ahora, en cuanto al color de los textos flotantes, puedes hacer click aquí. Entonces lo haré azul para cuando el, cuando el jugador golpee al enemigo. Entonces este es el daño de Blair y se mostrará como azul. Entonces deslizando esto por ahí y simplemente eligiendo algo aleatorio. Y para la saturación, en realidad voy a escribir 0.5. No quiero que sea demasiado azul. Entonces haciendo clic en OK. Y para éste, puedes intentar hacer lo mismo. Así que sólo para elegir un color rojo, tal vez más rosáceo como este. Y luego estableciendo la saturación a 0.5 así y haciendo clic en Aceptar. Así Ahora por el icono flotante, así que cuando el jugador daña al enemigo, quiero mostrar la espada aquí. Entonces buscando dolor, puedes elegir esto, sin embargo, para los enemigos. Entonces cuando el enemigo daña al jugador, quiero buscar este ícono de lote. Entonces ahora lo tenemos, está siendo dinámico aquí. Muy bien, entonces ahora estamos terminados con esta lógica aquí. Esta fue la más difícil en realidad. Entonces ahora tenemos esta lógica completa. Entonces tenemos que llamar a este evento en alguna parte. Y en realidad estaremos haciendo una función de biblioteca de textos flotantes porque eso será más fácil de llamar. Recuerda que ya hicimos algo dentro de esa biblioteca y tenemos que llamar a este evento. Y va a pasar por el servidor. Se va a llevar a este actor dañado. Por lo que esta vez es actor vamos a estar enchufando más adelante. Y se llevará a este actor, tomar la ubicación, desovar al actor de texto flotante por encima del enemigo o del jugador dependiendo de quién se dañó. Y entonces si se trata de imagen borrosa, por lo que tenemos que poner eso también más adelante. Si se trata de daño del jugador, se va a tomar al enemigo y mostrar la cantidad de daño del jugador. Y también mostrar este texto flotante a través del multicast. Y si el daño es daño enemigo, se va a ir y tomar la capa TSP porque este es el actor dañado, los enemigos que dañan al jugador. Y va a tomar esta cantidad de daño enemigo y va a arrojarla a este multicast. Multicast va a correr aquí. Se va a llevar este Widget Blueprint y se va a actualizar. Así que volvamos a nuestros planos de widgets. Va a ir este evento aquí, va a actualizar el texto, el color del mismo, y también el ícono del texto. Y después de actualizar esas cosas, va a esperar hasta que esta animación haya terminado. Y entonces va a destruir a este actor porque no queremos seguir desovándolo l Así que el juego va en algún momento un rezago porque no quitas a tus actores. Por lo que ahora todo esto ha terminado. En realidad sigamos adelante y vamos a continuar y en realidad terminarlo. Entonces aquí está el evento que queremos llamarlo. 112. Función flotante de la biblioteca de texto: Muy bien, por lo que casi estamos terminados con los textos flotantes. Así que ahora vamos a las bibliotecas. Ya hicimos uno y vamos a la biblioteca de funciones. Y dentro de aquí, vamos a agregar una nueva función, y ahora llamémosla mostrar texto flotante. Y la razón por la que en realidad lo estoy creando dentro de aquí es porque este texto flotante, tal vez lo necesitamos en muchos, muchos actores y no quiero hacerlo en cada actor. Así que de nuevo, algo bueno para usar una biblioteca es cuando se quiere llamar a una función en muchos actores, actores de planos. Así mostrar textos flotantes. Me imagino a pesar de que no he creado mi lucrativo, puedo imaginar que voy a estar usando esto en muchos actores y es por eso que lo estoy leyendo dentro de aquí. El texto flotante, de nuevo, necesita la entrada de un actor porque necesitamos al actor dañado que creamos antes. Y necesitamos el tipo de texto flotante. Y esta es la enumeración. Así que primero seleccionemos la variable actor. Y luego seleccionemos los textos flotantes. Este es el tipo de texto flotante enumeración. Ahora desde este actor dañado, tenemos que llamar al evento desde el jugador o el personaje, base de personajes. Tenemos que llamar a éste. Permítanme convertirlo en una función de interfaz de blueprint. Entonces vamos a las interfaces y no tenemos una en este momento. Así que vamos a hacer clic derecho y Blueprint Interface. Ahora llamémoslo base de caracteres. Y dentro de aquí, digamos que necesitamos tener a éste llamado consigue referencia de carácter. Y éste va a tener una salida de base de caracteres seleccionada aquí. Y llamémoslo personaje, Compile y Save. Y ahora volvamos a la base de caracteres, vaya a la Configuración de clase y agregue su Interfaz de Blueprint dentro de aquí, base de caracteres, Compile y Save. Recuerda compilar aquí también, por lo demás esto no te aparecerá. Por lo que pinchando sobre él aquí. Y para éste sólo vamos a decir yo mismo. Entonces lo hemos hecho un par de veces ahora. Entonces con esto tenemos ahora podemos conseguir una referencia. Entonces en la biblioteca podemos realmente arrastrar esto y luego referirnos en lugar de casting, ahora podemos decir obtiene referencia de caracteres. Y desde aquí podemos llamar a este evento llamado. Volvamos aquí, mostrar texto flotante. Ahora en realidad también necesitamos éste dentro de él, y voy a eliminar esto. En realidad podemos hacerlo ahora dentro de esta Interfaz de Blueprint, lo voy a eliminar y llamarlo display cargando texto. Por lo que los compuestos ahorran aquí y aquí podemos buscar búsqueda. Podemos crear una nueva llamada Display, texto flotante. Y en realidad antes de terminarlo, a veces se asoma. Así que permítanme primero crear mis insumos aquí. Actor o actor dañado, más bien actor tan dañado. Y el segundo fue tipo de texto flotante. Y encontremos la enumeración. Y luego encontrar al actor dañado, que es sólo un actor. Justo así de ahí arriba. Simplemente juega texto flotante, así como este, Compile y Save. Ahora en el carácter basado en, puede hacer clic derecho y decir mostrar texto flotante, y puede seleccionarlo aquí. Y ahora es una función de Interfaz de Blueprint. Puedes conectarlos. Esto ahora en la biblioteca, ahora se puede llamar a esta pantalla textos flotantes. ¿ De acuerdo? Muy bien, Bueno Desde aquí y decir mostrar texto flotante. Y es un mensaje porque aquí se trata de un Evento de Interfaz de Blueprint. Actor tan dañado, es sólo éste. Por lo que voy a hacer clic aquí y hacer un nodo de redirección. En realidad no hacer un rerutado. Observe que se ve un poco raro. Así que sólo haciendo esto. Y para el texto flotante, sólo voy a hacer esto. Esto es simplemente lo que va a hacer. Ahora lo último, ahora podemos usar esta función, en realidad estamos terminados. Podemos usar esta función de biblioteca para llamarla en otro lugar. Así que ahora vamos al enemigo. El enemigo. Aquí. Cuando el enemigo se daña, queremos engendrar al actor por encima de los enemigos. Así que aquí, siempre que los enemigos se dañen, ahora se puede decir, se puede hacer clic derecho y decir como lo llamaste dentro de la biblioteca. Entonces yendo a la biblioteca y lo llamaste mostrar texto flotante. Para que puedas hacer clic con el botón derecho aquí y decir mostrar texto flotante. Y se puede ver que está aquí desde la biblioteca de funciones que muestra texto flotante. Ahora, hay que conectarlo aquí y hay que especificar cuál es el actor dañado. Es yo, es el enemigo. ¿ Y cuál es el texto flotante? Lo es, en realidad es daño del jugador. Entonces eso es correcto en realidad en este momento. Vamos a copiar esto aquí. Volvamos ahora a la base de jugadores. Y para el jugador, si el jugador se está dañando aquí, vamos a pegarlo. ¿ Y quién es el actor dañado? Es el auto jugador. Cuál es el tipo de Daño, es daño NME. Así que ahora va a tocarlo en realidad y yo lo mostraré por ti. Así que vamos a hacer clic en Jugar por ahora y ver qué pasa. Así que en realidad voy a jugar como el servidor aquí, como servidor de escucha. Como el servidor. Ahora, se puede ver cuando me daña en realidad se está mostrando cuando golpeo al enemigo. Se va a mostrar ese daño aquí. Así que muy cool. No obstante, si juego como cliente y me golpean aquí, puede ver que nada está mostrando y de esto fue lo que estaremos hablando en la siguiente lección. Entonces para este cliente, ahora no me voy a preocupar por ello. Pero para este jugador aquí, se puede ver que los daños del cliente se muestran en el servidor. Pero si vas al cliente, en realidad no está mostrando nada en el servidor. Se puede ver que ahora se está mostrando correctamente. Y déjame realmente mostrarte lo que está pasando en este momento. Entonces Wendy, ahora estamos dentro de los jugadores. Entonces cuando el jugador se daña, estamos llamando a esta función aquí desde la biblioteca. Entonces estamos especificando quién es el actor dañado es, es el propio jugador. Y este es el daño enemigo que está sucediendo. Ahora va a ir a la biblioteca de funciones, y va a pasar y llamar a esta pantalla que fluye textos desde la base de caracteres. Base de caracteres. Ahora llamando a este evento aquí, pasando por el servidor, el servidor va a establecer esta variable y estamos tratando de encontrar esta ubicación de actores dañados, respondiendo este texto en la ubicación de la actriz. Y cuando respondemos al texto, comprobamos, ¿está claro daño o es daño enemigo? Si se trata de daños por placer? Vamos a hacer esto aquí. Llama a este multicast desde el texto flotante BP. Y lo estamos configurando dependiendo si se trata de daño enemigo o daño del jugador, los colores y los iconos. Entonces este evento es del texto flotante de BP, que está aquí. Ahora va a continuar con este multicast. Pasarlo a todos los jugadores es tomar este Widget Blueprint. Y luego va a pasar y actualizar el texto flotante en ese widget, que está por aquí. Y ahora mostrando ese widget, se va a configurar para este evento aquí. Se va a establecer el texto y el color del texto y establecer el pincel. Y después de que hace eso, va a esperar hasta esto, esta animación aquí que hicimos. Por lo que va a esperar hasta que esta animación se haya terminado antes de que destruya al actor. Porque si lo haces antes, nunca mostrará los textos porque lo destruirá rápidamente. Entonces esto es lo que está pasando. Se puede ver que son muchos pasos, pero una vez que te pones realmente bueno en ello, esto en realidad es muy fácil de hacer. Entonces pasando por la biblioteca de funciones, pasando por la basada en caracteres, la basada en caracteres pasando por el servidor, ejecutando el multicast aquí. Y después del multicast, en realidad estás actualizando este texto aquí. De acuerdo, entonces terminamos con el texto de combate. Y la razón por la que el cliente no está recibiendo todo esto es muy fácil y probablemente tomará un minuto explicar. Así que en realidad hagamos eso en la próxima lección. 113. Replicación de actores: De acuerdo, Entonces, ¿por qué es eso? El cliente no puede ver este daño aquí. Entonces cuando me daña, puedo verlo como el servidor y daño al enemigo. También lo puedo ver, sin embargo, si soy el cliente, así que si realmente abro aquí al cliente, así como el cliente, en realidad no puedo ver este daño aquí. ¿ Por qué es eso? Y esto se debe a la replicación de actores. Entonces, hasta ahora hemos replicado esas variables y hemos replicado eventos, pero no hemos replicado actores de planos. Entonces vamos al texto flotante aquí, Vp texto flotante. Permítanme hacer click en los valores predeterminados de clase para este actor de textos flotantes. Y puedes hacer click en éste llamado réplicas. Esto es lo que te falta. Así que pinchando aquí y yendo a los textos flotantes también, el widget Durante abajo a la parte inferior. Y hay que hacer click en éste llamado componente replica. Recuerda que estamos en multijugador. Por lo que da clic en Play. Ahora al hacer click play como cliente, ya puedes ver que el cliente también lo puede ver. Y este fue el único cambio que estaba mal. Entonces sólo estas dos marcas de verificación. Y tal vez ahora mismo te estás preguntando, ¿ por qué no lo hicimos antes? ¿Por qué? ¿ Por qué tenemos que hacerlo ahora? ¿ Al igual que por qué todo este trabajo? Sin nosotros pinchando aquí? Y esto se debe a que el personaje con el que hemos estado trabajando se replica por defecto en Unreal Engine cinco. Por lo que al hacer clic en este jugador, se puede ver son en realidad los basados en el carácter. Así que al hacer clic en la base de caracteres, puedes ver aquí en la clase por defecto para la base de caracteres, esto se replica ya está comprobado por ti. Por lo que los personajes dentro de Unreal Engine se replican por defecto. Y es por eso que no tenías la necesidad de hacerlo. Si lo quitas, verás muchos bichos en tu juego. Pero esto viene a chequeado por defecto. Y los actores no se replican por defecto. Entonces si creas una app después de eso, todos deberían ver que en realidad tienes que recordar para replicar. Por ejemplo, si estás creando armas. Entonces por ejemplo, en un juego 3D o en un juego 2D, si tu, si tus enemigos cayendo armas o el jugador está envolviendo armas al otro jugador, ese actor arma tiene que ser replicado otra cosa el cliente no puede ver esa arma arrojada. Entonces después de la replicación, al igual que cuando la replicamos, todas estas variables que hicimos en los otros planos, recuerda replicar también al actor. Si necesitas un todo, los jugadores para verlo. 114. Limpiar el proyecto: Ahora que hemos terminado con el juego, en realidad sigamos adelante y limpiemos el proyecto. Así que recuerda revisar mi sección de clases extra. Seguiré actualizando este curso. Por ejemplo, agregaré placa de nombre para soltar los artículos que puedes perder esos objetos, por ejemplo, pociones de salud, barras de salud por encima de estos enemigos. También agregaremos estadísticas para que podamos obtener más fuerza o más salud y actualizaciones y tal vez buscar el sistema solicitante. Entonces muchas cosas más, tal vez incluso 200 videos más que podemos hacer si no partimos desde aquí. Pero esto debería darte una buena base de cómo crear un juego de plataformas multijugador 2D. Por lo que aprendimos a crear todo esto, como importar los activos y aplicarles papel a estos ajustes. Crear flip books en papel, sprites, actores, e importarlos al nivel de crear mapas de teselas. Y hemos incluido un sistema de cartas y sistema de ataque y un montón de cosas que podríamos leer en este curso. Y en la sesión de clases extra, estaré agregando más cosas. Nuevamente, al igual que las barras de salud, el sistema de estadísticas RPG, tal vez un sistema de misiones. Entonces muchas cosas que aún podemos sumar a este proyecto. Pero ahora antes de que termináramos, déjame realmente seguir adelante y limpiar el proyecto porque no me gusta simplemente dejarlo así. Así que vamos a ir a la base del jugador, por ejemplo, podemos empezar con la base del jugador son en realidad, vamos a empezar desde aquí. Entonces para los activos, realmente no necesitamos limpiar todo. En realidad todo ya está limpiado. Y vamos al audio que también es bueno. Vamos a los planos ahora aquí es donde la limpieza es mayormente anuncios. Entonces empecemos con esta cámara BP. Y para éste realmente no tenemos nada. Así que vamos a cerrarlo. Y la base de personajes, tampoco tenemos mucho aquí. Solo revisa aquí. Si, si todo está resuelto y te gusta cómo hiciste las cosas o necesitas agregar, reescribimos nodos. Entonces, por ejemplo, sólo me gusta ser estructuras. A veces solo estoy tomando estos nodos redireccionados y moviéndolos. También recuerde seleccionar todo y haga clic en C para agregar comentarios. Y puedes llamar a esto textos flotantes, por ejemplo, solo, puedes hacerlo mucho mejor que yo. Sólo lo estoy haciendo rápidamente para este curso, así que simplemente no toma una eternidad. Pero trata de escribir aquí un texto largo explicando lo que hiciste. Porque si vas a volver a este proyecto seis meses después, no podrás recordar qué es esto. Así que tratando de escribir, tal vez textos flotantes para el actor dañado y bla, bla, bla, lo que sea. Puedes ver, tienes mucho espacio aquí. Si lo desea, puede cambiar de nuevo el color de los comentarios. Puedes cambiar el tamaño de este texto para que puedas hacerlo más grande si quieres compilar y guardar. Y ahora puedes ir al texto flotante. Aquí. Creo que todo se ve bien. Y sólo dejaré que sea como este año. Ellos van a ser segados región realmente hacen mucho aquí. Y en el controlador del jugador puedes realmente limpiar esto un poco porque no teníamos o no comentamos nada. Entonces aquí, por ejemplo, podemos seleccionar esto y decir inicializar widgets. Normalmente también hago aquí y digo empezar a jugar porque entonces sé dónde está mi partida inicial. Si tengo mucho código, Xia Lai, inicializando widgets. De acuerdo, así que ahora los tenemos abajo. Ahora. Tomemos esto. Ahora estamos seleccionando al personaje aquí, y estos están juntos. Así que tomemos todo esto y voy a llamar a una selección y desove al personaje en capas. Así como eso. Y podemos bajar aquí, esto es actualizar la Barra de Salud y la experiencia. Y permítanme simplemente seleccionar esto y decir actualizar la salud y los bares experimentados. Si quieres, en realidad esto se ve bien, pero si quieres, por lo que a veces siempre puedes arrastrar esto y ponerlo aquí de costado en su lugar. Entonces lo tenemos más compacto juntos, pero no creo que esto encaja. Seleccionando un desove, sólo me gustaría poner cosas que encajan aquí a los lados. Así que sólo voy a arrastrarlo aquí de nuevo. Ahora, si quieres volver a hacerlo, puedes hacer click sobre las variables y darles una categoría si la puedo encontrar aquí. Entonces a éste puedes llamar widget, por ejemplo, Widget, Blueprint o algo así. Así que sólo una categoría y haciendo lo mismo aquí, Widget Blueprint y van a estar por su cuenta por aquí. Entonces intenta hacer eso con todos tus proyectos. Por ejemplo, el más grande es probablemente la base del jugador. Voy a limpiar esto por mi cuenta. Entonces realmente no voy a añadir nada. Sólo voy a arrastrar las cosas. Por ejemplo, haciendo clic aquí, haciendo clic en Ocultar pines no conectados, y luego echando un vistazo aquí y tal vez no estoy satisfecho con esto, arrastraré esto hacia abajo. Así que trata de limpiar tu proyecto lo mejor que puedas. Intenta comentar todo y ponerlos juntos donde encajan. Porque en este momento se puede ver que es un poco un desastre. Por lo que hay que comentar todo. Y en la siguiente lección, en realidad te voy a mostrar recursos muy útiles que estoy usando para mi propio proyecto personal. 115. Recursos útiles: En esta lección, en realidad te voy a mostrar algunos de los recursos útiles que estoy usando para mis proyectos personales. Acabo de crear esto por diversión. Creó este proyecto aquí. O puedes saquear artículos y puedes tener un sistema de inventario. Entonces muchas cosas que puedes hacer, tienes un sistema de nivelación como lo hicimos. Y tienes monedas y puedes ir a la tienda por aquí. Y dentro del afilado, en realidad se pueden comprar cosas. Entonces para este proyecto, se puede ver por este código, nuevo, estoy usando los mismos métodos. Entonces yendo al jugador, la base del jugador, en realidad te voy a mostrar mi base de jugadores. Entonces esta es la base de jugadores hasta ahora para este juego. Y solo te voy a mostrar recursos que realmente te ayudarán mientras estás codificando. Para que podamos ver que las líneas son así. En realidad me gustaron mucho mejor esas líneas que, que aquí en nuestro proyecto donde tenemos estas líneas curvas. En realidad me gusta usar este plug-in donde las líneas se vuelven robóticas o donde sea que se llame, así. Lo puedes encontrar en el marketplace. Entonces yendo al mercado y por dentro de aquí, puedes buscar notas electrónicas. Creo que se llama las notas electrónicas. Y vamos a ver si podemos encontrarlo aquí. A lo mejor acabo de buscar notas electrónicas. Y este es en realidad el uno. Así que al hacer clic en estas notas electrónicas, esta es en realidad la que estoy usando y se puede ver mucho alumno en realidad usando un dos. Este es el y puedes ver que puedes elegir diferentes estilos para tus planos. Por lo que tienes diferentes estilos. En realidad puedes tener notas más oscuras si quieres. Pero esta es la que estoy usando y hace que mis líneas aquí sean electrónicas. Y creo que esto es mucho más fácil de ordenar. Entonces creo que esto hará que todo se vea un poco mejor para mirar, un más fácil de ver en realidad. Y puedes ver aquí ni siquiera necesito crear nodos reencaminados. Esto lo hará automáticamente para mí en nuestro proyecto, pero las líneas curvas normales, tendré que crear notas redirigir para esto. Pero realmente no necesito crear notas redirigir para esto porque se puede ver cuando arrastro, automáticamente hace esto por mí. Activos tan geniales que puedes usar en el marketplace. Cosas muy chulas que han estado haciendo. Entonces estoy usando esto. La segunda cosa es la que estoy usando es esta llamada, vamos a ver, o es comentarios de tamaño automático. Por lo que este auto tamaño comentarios es muy cool para usar también. Se dimensiona automáticamente los comentarios a las notas que tienes. Para que puedas ver aquí, tengo estos nodos aquí, y si arrastro algo, puedes verlo de todos los tamaños. Mi comentario dependiendo de donde esté arrastrando esto. Y si hago algo, por ejemplo, puedo imprimir una cadena aquí. Se puede ver que automáticamente lo incluye dentro del comentario. Así que cosas muy cool. Y esto también es como se puede personalizar los comentarios. Entonces si escribo algo aquí, vamos a escribir un par de grabados cadenas dentro de este proyecto. Y cuando hago clic en ver, ahora lo he personalizado. Así que cuando hago clic y veo, se puede ver que tiene mucho más espacio en la parte superior y la parte inferior y los laterales. En realidad lo hice manualmente. Y el comentario está escrito en medio. Y también personalizo el tamaño automáticamente a 28, así. Por lo que se puede ver muy cool. Y también para el color común, puedes elegir automáticamente qué colores. Entonces por ejemplo, para este proyecto estoy usando azul si es del lado del cliente, eso, estoy usando rojo si se está ejecutando a través del servidor y pagando si está ejecutando tanto el servidor como los clientes, para ejemplo, un multicast. que puedas ver aquí, por ejemplo, un corriendo a través del cliente también, corriendo a través del servidor. Será de color rojo y lanzando otra vez a través del cliente, será aquí a través del azul. Por lo que todos los lados comentan, muy cool para usar también para tu proyecto, solo para hacerlo más organizado. Y sí, en realidad no uso mucho más. Normalmente solo uso estos dos. También puedes usar el que se llama Auto Note arreglista. Creo que fue un poco como si no me gustara, así que en realidad no lo estoy usando. Pero mucha gente creo que lo está usando también, en realidad no mucho, en realidad un par de ellos. Pero creo que está arreglado mis notas y nueces como quería, en realidad no estoy usando eso. Y lo último, pesar de que este es un curso 2D, lo último que quiero mostrarte aquí, cielo ultra dinámico. Entonces, si estás planeando crear un juego 3D, éste es un salvavidas y puedes ver que mucha gente realmente lo está usando y va a crear dinámica es chicos para tu proyecto. Nuevamente, puedes consultar mi página, mis cursos, también estoy haciendo proyectos 3D, cursos 3D y los planos que has estado utilizando aquí en 2D. Entonces lo bueno de crear juegos 2D en Unreal Engine es que ahora eres mucho mejor en usar blueprints que antes. Por lo que ahora, estos métodos que has estado aprendiendo aquí en un juego 2D, realidad puedes estar usándolos dentro de un juego 3D también. Así que a pesar de que todos estos planos se hacen ahora dentro de un juego 2D, realidad no es muy diferente en un juego 3D. Así que ahora que has tenido tu práctica en este curso 2D, realmente puedes usar lo que has aprendido también en nuestros cursos 3D. Entonces esto es lo bueno de usar Unreal Engine y planos. Todo el código naturalmente va a desperdiciar si de repente quieres cambiar a juegos 3D, porque una línea de tiempo es una línea y se usa para lo mismo en 3D, así como eventos personalizados y conseguir la ubicación de la actriz. Tenemos que hacer eso también en 3D. Entonces todo esto es en realidad lo mismo en un juego 3D. 116. Actualizaciones futuras del curso: Ahora estamos terminados con el curso. Espero que te hayas divertido mucho. Me he divertido mucho creando éste. Nuevamente, si quieres extender este curso tú mismo, si quieres sumar más enemigos, puedes ir a esta página web. Aquí es de donde lo conseguí. Arce se puso en pie y solo puedes crear más monstruos aquí. Puedes crear turbas, puedes crear caminos, personajes, y en realidad puede crear más monstruos. que puedas ver agregamos esos animales y ahora lo hicimos tan dinámicamente que en realidad puedes ir al enemigo y hacer clic derecho y crear un nuevo enemigo. Y se agregará automáticamente. Solo recuerda hacer click sobre el enemigo y también el intervalo animal aquí, todas las animaciones, la salud y el nombre y la experiencia y así sucesivamente. Y también recuerda por supuesto, añadir un drag y sumar al enemigo a este nivel. Entonces aunque hayamos terminado con este curso, estaré haciendo futuras actualizaciones para este curso. Estaré agregando muchas más cosas, muchas cosas de RPGs. Por ejemplo, vamos a estar agregando Health Bar dice que ese sistema, tal vez un sistema de habilidades también. Estaremos agregando un sistema de búsqueda. Por lo que muchos otros sistemas que aún podemos sumar a este juego. Por lo que seguiré actualizando este curso. Y si quieres un recuerdo, puedes ir a mi página aquí y echar un vistazo a mis otros cursos. Estoy tratando de liberar uno cada mes o cada mes y medio. Echa un vistazo a mis otros cursos. Y recuerda, siempre puedes ir a mi Discordia y escribirme si tienes un deseo de un curso que quieres ver, o si necesitas ayuda con este curso o cualquier otro curso, puedes ir a mi discurso y podemos tener una charla o se puede escribir con todas las demás personas que realmente están tomando este curso. Puedes escribir con ellos en los servidores de Discord. Así que una comunidad muy agradable que tenemos dentro de ahí. Recuerda también que tengo un canal de YouTube, por lo que también puedes ir a mi canal de YouTube si quieres ver tres videos con respecto a este tema. Por lo que también estoy muy activo. Están agregando videos con frecuencia, así que ve a mi YouTube también y mira si hay algo que consiga tus intereses. Entonces con eso dicho, gracias por todo. Gracias por apoyarme y espero que te hayas divertido mucho y te veré en el próximo curso.