Motor Unreal 5: Cómo empezar con Blueprints | Defuse Studios | Skillshare
Buscar

Velocidad de reproducción


1.0x


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

Motor Unreal 5: Cómo empezar con Blueprints

teacher avatar Defuse Studios

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 (vista previa del curso)

      2:29

    • 2.

      Intro (descripción general)

      3:05

    • 3.

      Introducción (creación de planos)

      12:29

    • 4.

      Introducción (flujo de eventos)

      7:58

    • 5.

      Variables (descripción general)

      6:03

    • 6.

      Variables (booleanos)

      9:56

    • 7.

      Variables (entrantes y flotantes)

      18:18

    • 8.

      Variables (nombres, texto y cuerdas)

      14:40

    • 9.

      Variables (vectores, rotadores y transformaciones)

      25:05

    • 10.

      Variables (Actores y objetos)

      12:55

    • 11.

      Variables (Arrays y bucles)

      21:40

    • 12.

      Fundamentos (Funciones)

      18:04

    • 13.

      Aspectos básicos (Macros)

      10:10

    • 14.

      Fundamentos (Estructuras y Enums)

      17:40

    • 15.

      Fundamentos (Eventos)

      9:51

    • 16.

      Aspectos básicos (herencia de un plano)

      11:51

    • 17.

      Fundamentos (fundición)

      17:15

    • 18.

      Aspectos básicos (despachadores de eventos)

      17:07

    • 19.

      Fundamentos (interfaces)

      11:02

    • 20.

      Fundamentos (componentes)

      17:06

    • 21.

      Aspectos básicos (controlador de jugadores)

      14:58

    • 22.

      Aspectos básicos (GameMode)

      8:16

    • 23.

      Aspectos básicos (nodos de utilidad)

      9:44

    • 24.

      Aspectos básicos (instancia de juego)

      10:31

    • 25.

      Lecciones adicionales (rastros)

      20:09

    • 26.

      Lecciones adicionales (tablas de datos)

      17:54

    • 27.

      Lecciones adicionales (Nodos de superposición)

      6:31

    • 28.

      Lecciones adicionales (entradas)

      12:57

    • 29.

      Lecciones adicionales (entradas mejoradas)

      24:32

    • 30.

      Lecciones adicionales (Etiquetas)

      8:46

    • 31.

      Lecciones adicionales (actores de spawning)

      10:45

    • 32.

      Lecciones adicionales (Organización de códigos)

      11:08

    • 33.

      Lecciones adicionales (herramientas de depuración)

      15:57

    • 34.

      Lecciones adicionales (cronogramas)

      21:34

    • 35.

      Lecciones adicionales (sockets)

      19:26

    • 36.

      Lecciones adicionales (componente de movimiento)

      14:47

    • 37.

      Lecciones adicionales (efectos de audio)

      24:47

    • 38.

      Lecciones adicionales (efectos de partículas)

      13:56

    • 39.

      Widgets (descripción general)

      10:09

    • 40.

      Widgets (diseños)

      19:46

    • 41.

      Widgets (creación de Widgets)

      18:38

    • 42.

      Widgets (uniones)

      9:58

    • 43.

      Widgets (bordes, superposiciones y rejas)

      15:11

    • 44.

      Widgets (Arrastre y suelte)

      18:55

    • 45.

      Planes de animación (descripción general)

      15:18

    • 46.

      Planes de animación (Montages)

      18:30

    • 47.

      Planes de animación (mezcla de nodos)

      15:13

    • 48.

      Planes de animación (Notificaciones)

      16:41

    • 49.

      Planes de animación (States)

      15:12

    • 50.

      Planes de animación (mezcla espacios)

      14:28

    • 51.

      Planes de animación (Apunta offsets)

      18:19

    • 52.

      Planes de animación (curvas y metadatos)

      10:37

    • 53.

      Sistemas de juego (interacción)

      24:40

    • 54.

      Sistemas de juego (daños)

      32:19

    • 55.

      Sistemas de juego (barra de salud)

      9:42

    • 56.

      Sistemas de juego (reanudación)

      18:36

    • 57.

      Sistemas de juego (enrutamiento)

      14:16

  • --
  • 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.

980

Estudiantes

--

Proyecto

Acerca de esta clase

Cómo empezar con Blueprints

En este curso empezaremos con lo básico como lo que son los planos y cómo navegar por el editor de planos en Unreal Engine 5, aunque bien crear sistemas de juego y aprender a usar muchas de las principales características de los planos.

El objetivo de este curso es proporcionarte información y conocimiento útil para que puedas planificar y crear tus propios sistemas de juego para tu proyecto futuro, así como leer los planos de otros pueblos que realmente pueden ayudar a acelerar el proceso de aprendizaje. ¡No se requiere un conocimiento de programación previo!

¿Qué aprenderás?

  • ¿Qué son los planos
  • Cómo navegar por la interfaz de usuario de planos de Unreal Engine 5
  • Qué variables son y cómo usarlas
  • Cómo usar funciones, macros y eventos para mantener tu proyecto limpio y eficiente
  • Las diferencias entre los tipos de planos como personajes, modos de juego y actores
  • La comunicación de los planos incluyendo casting, interfaces y despachadores de eventos
  • Cómo configurar entradas de jugador, incluidas las nuevas entradas mejoradas
  • Cómo crear y configurar la interfaz de usuario de widget en una pantalla de reproductores
  • Los fundamentos de los planos de animación
  • Actores, partículas y efectos de sonido que incluyen los nuevos MetaSounds
  • Cómo crear un sistema de juego de salud, interacción, reaparición y daño
  • Organización de códigos

Conoce a tu profesor(a)

Teacher Profile Image

Defuse Studios

Profesor(a)

Hello, I'm James also known as Defuse Studios. I have been a full time Unreal marketplace creator for the last 5 years, and during that time I have provided support to hundreds of beginners learning UE4.

This has helped me gain insight into some of the things people struggle with when learning game development. I hope to use that knowledge in my future course to provide people with the best information possible, in an easy to follow way to help you on your path to creating the next big indie game or get your dream job!

Ver perfil completo

Level: Beginner

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 (vista previa del curso): Oigan a todos, y bienvenidos al Unreal Engine cinco, Curso de Getting started with blueprints. Me llamo James, también conocido como los pocos estudios. Y he sido creativo del mercado durante los últimos seis años. Y durante ese tiempo he brindado apoyo a cientos de principiantes de Unreal Engine. Y por eso, he aprendido algunas de las cosas comunes con las que la gente tiende a luchar a la hora tratar de aprender el desarrollo de juegos. Estoy arruinado. Jing es uno de los motores de juegos más populares del mundo y los planos es su potente lenguaje de programación visual incorporado. Los planos nos dan la capacidad de codificar sistemas simples o increíblemente complejos desde dentro del motor sin tener que escribir ningún código basado en texto. Y es una gran manera de empezar en el mundo del desarrollo de juegos. Al inicio de este curso, comenzaremos con las variables básicas. Estos se utilizan para almacenar información como la ubicación del jugador, la salud o la resistencia aprenderán sobre los diferentes tipos de variables y también cómo manipularlas durante el juego. Después pasaremos a funciones, macros y eventos. Estos se utilizan para mantener su proyecto ordenado y eficiente y hacer que sea más fácil de modificar más adelante en el desarrollo de su proyecto. Después pasaremos a diferentes tipos de planos de Blueprint, probablemente Actor, Peón, personaje y Game Mode. Cada uno de estos planos vienen con diferentes funcionalidades incorporadas que vienen con el motor que luego podemos usar para crear nuestros juegos. También cubriremos cosas como proyectiles, que a menudo se usan para balas de armas, rastros que a menudo se usan para sistemas de interacción y a veces incluso sistemas Meli. Y cubriremos las entradas de Player incluyendo el nuevo sistema de entrada mejorado. Y esto es lo que nos permite tomar un teclado o botón del ratón presionar y ejecutar código dependiendo de qué tecla pulsamos realmente. También estaremos cubriendo widgets ahora, que es cómo creamos elementos de UI dentro de ellos. El motor de reglas aprenderá cómo crear nuevos widgets y cómo agregarlos a la pantalla de los jugadores, así como cómo cambiar el diseño y adjuntar el comportamiento de los widgets, dos variables diferentes, funciones o eventos, para que podamos controlar nuestros widgets realmente lo hacen. Luego, por último, usaremos todo el conocimiento que hemos adquirido durante el curso para crear algunos sistemas de juego comunes. Esto incluye un sistema de interacción que permite a nuestro jugador interactuar con otros objetos. Un sistema dañado que permitirá nuestros personajes recibir y enviar daños. Un HUD que podemos usar para mostrar información en la pantalla de nuestros jugadores. Establecemos un sistema de respuesta y un sistema de agachamiento también. El objetivo de este curso es brindarle información detallada sobre las diferentes características que se incluyen con los planos. Para que al final de este curso, seas capaz de planificar y crear tus propios sistemas de juego. Gracias por escuchar, y realmente espero que disfruten el curso. 2. Intro (descripción general): Oigan chicos, y bienvenidos a la primera lección de este curso. En esta lección, que va a ser hacer un resumen rápido de qué son los planos, para qué se pueden usar, y algunas frases comunes que estaremos usando a lo largo del curso. Entonces, para empezar, ¿qué son los planos? blueprints son un lenguaje de programación visual integrado en Unreal Engine. A menudo se usan para definir cosas como carácter, arma o incluso un MPC. Los blueprints permiten codificar en el motor conectando diferentes tipos de nodos que juntos crean nuevas funcionalidades. El resultado de esto podría ser una puerta que se abre y se cierra, o podría ser un complejo sistema de inventario o sistema de combate. El motor incluye algunos planos de plantilla que comienzan con código existente útil, como por ejemplo, nuestro blueprint de caracteres, que si traigo al nivel aquí, puedes ver a la derecha de la pantalla, incluye componentes integrados, como por ejemplo, el componente de movimiento de personajes, que controla el movimiento del personaje. Un componente de malla que permite que nuestro modelo de personaje sea visible en el juego. Un componente de cámara, que cuando un jugador toma el control de este personaje, le permite ver. Al comenzar con los planos. Algunos términos comunes que escucharás son Blueprint Classes. Objetos Blueprint, o blueprint actúa como un ejemplo de una Clase Blueprint es nuestro ThirdPersonCharacter aquí abajo. Ahora si pasamos el cursor sobre él, en realidad se puede ver que dice clase Blueprint. Pero si lo arrastramos a nuestro nivel, se puede ver que crea un nuevo objeto blueprint y realidad podemos arrastrar múltiples de la misma clase a nuestro nivel. Ahora estos son dos objetos Blueprint independientes. Si tuviéramos varios jugadores, cada jugador podría estar controlando un plano de personaje diferente y haciendo cosas diferentes. Pero todos estos planos siguen usando la misma Clase Blueprint, que es nuestra Clase ThirdPersonCharacter. Si se realizan cambios nuestra clase ThirdPersonCharacter Blueprint que afectará a todos nuestros objetos Blueprint usando nuestra clase. Entonces por ejemplo, si abro mi ThirdPersonCharacter Blueprint, ir a Viewport y simplemente roto nuestra malla, digamos 90 grados de esta manera. Golpea Compile, vuelve a nuestro mapa. Se puede ver que nuestros personajes ahora están enfrentando una dirección diferente. Y si vuelvo atrás y solo lo giro nuevo a la dirección correcta, presiona Compile. Se puede ver como de nuevo, actualizado, algunos objetos Blueprint no existen en el nivel de juego, sino que se ejecutan en segundo plano, almacenando información y ejecutando funcionalidades importantes. Por ejemplo, el blueprint de instancia de juego, que se utiliza para almacenar información entre niveles de un blueprints como el Game Mode, sí existe en el nivel, pero son completamente invisibles para el jugador. El modo de juego controla cosas como qué clase de blueprint de personaje se crea cuando un nuevo jugador se une al juego. Y qué pasa cuando un jugador abandona el juego. blueprints son una herramienta increíblemente poderosa que permite un desarrollo más rápido, depuración y una muy fácil de usar. En las próximas lecciones estaré cubriendo algunos de los conceptos básicos para que comiences. Por lo tanto, puedes crear algunas de tus propias funcionalidades, así como poder leer los planos de otras personas, lo que realmente puede ayudar a acelerar tu aprendizaje. 3. Introducción (creación de planos): Oigan a todos. En esta lección voy a estar mostrándote cómo crear nuevas clases de blueprint. También vamos a estar echando un vistazo al editor de Blueprint. Antes de empezar, sólo voy a mostrarte cómo acoplar el navegador de contenido a nuestra pantalla. Por defecto, tenemos que hacer clic en este sorteo de contenido para abrirlo. personal, prefiero tenerlo bloqueado a la pantalla. Así que sólo voy a hacer clic en este documento en el botón de diseño aquí. Y ahora tenemos nuestro navegador de contenido bloqueado a nuestra pantalla. Esta es la preferencia personal. Puedes tener tu configuración como quieras, pero así es como la mía va a ser para el resto del curso. Hay algunas formas en que podemos crear planos y nuestro navegador de contenido, podemos hacer clic derecho y seleccionar Clase de plano aquí. También puede bajar a los planos, salir y seleccionar la opción Clase de plano aquí abajo. Esas increíbles clases adicionales aquí, pero no las estaremos cubriendo en esta lección. Esos estarán en una futura lección. Otra forma de crear planos es ir a nuestro botón Agregar aquí en el lado izquierdo de la pantalla. Y ya pueden ver que tenemos nuestro mismo menú. Podemos seleccionar Blueprint Class, o podemos ir a blueprints y seleccionar Blueprint Class aquí también. Entonces solo voy a hacer clic en Clase Blueprint para abrir nuestra ventana de pick class. Aquí podemos seleccionar qué tipo de blueprint queremos crear. Nos da algunos de la selección más común. Entonces arriba aquí arriba. Entonces, para empezar, tenemos actor. Un actor es básicamente cualquier plano que exista en un nivel. Entonces tenemos **** que ha promulgado que el jugador realmente puede tomar el control de un personaje, que también es un ****. Pero tenía alguna funcionalidad extendida por lo que puede caminar y podemos establecer un modelo de personaje. Tenemos el controlador del jugador. Este es el blueprint que le dice a nuestro personaje o a un **** lo que nuestro jugador quiere que hagan. Modo de juego, que es cómo establecemos con qué tipo de controlador de jugador o personaje queremos que comiencen nuestros jugadores . Y luego tenemos algunos componentes aquí abajo, que estaré cubriendo en una futura lección. Pero esencialmente los componentes se pueden agregar a otros blueprints para darles funcionalidad adicional. Y luego aquí abajo tenemos todas nuestras clases. Y esto básicamente nos permite seleccionar cualquier otro blueprint o clase C plus y que nuestro nuevo blueprint los use como plantilla. Así que para empezar, solo vamos a crear un actor simple que pueda llevarte a través de alguna de la interfaz de usuario del blueprint. Comenzará con solo cambiar el nombre de este plano. Voy a llamar a mis planos de video. Y haremos doble clic en esto para abrirlo. Y comenzaremos en el Viewport. Aquí es donde podemos establecer nuestras ubicaciones para nuevos componentes en nuestro plan. Entonces por ejemplo, si voy a nuestra pestaña de componentes aquí y hago clic en Agregar, solo voy a buscar cubo y agregaremos en un cubo. Ahora, podemos establecer la posición de nuestros cubos. Si presiono W, eso nos da controles de movimiento. Si presiono E, podemos rotarlo, o si presiono R, podemos redimensionarlo. Esas opciones también están disponibles aquí arriba. Entonces si quieres usar estos botones en su lugar, puedes. Y si quisiéramos, podríamos agregar componentes adicionales y configurar su ubicación en nuestro plan también. Ahora si solo compilo este plano y lo arrasto al mundo, se puede ver que el centro de mis planos en este punto de aquí, pero mi cubo está por aquí. Ahora eso es porque lo posicionamos en esa ubicación del centro más lejos. Se puede ver que se actualiza en el mundo también. Así que eso solo te da una idea básica de cómo usar la ventana gráfica. Para qué se utiliza, solo voy a borrar mi cubo por ahora porque vamos a pasar a la siguiente parte de la IU, que es el panel Mi Blueprint. Ahora vamos a estar usando esto mucho donde mi codificación. Entonces partiendo de arriba, tenemos nuestras gráficas. Creográfica. Si hago doble clic en esto, nos llevará a nuestro gráfico principal de eventos. Aquí es donde vamos a estar haciendo mucha codificación, al menos para empezar , antes de empezar a meternos en funciones y cosas así. Pero te familiarizarás mucho con esto a medida que avanza el tiempo. Se inicia con algunos nodos básicos. Estaré entrando en estos en una futura lección que no tengas que preocuparte demasiado por esos ahora mismo. Pero también se puede ver que bajo nuestra gráfica nos dice qué eventos hay en esa gráfica. Se puede ver que aquí tenemos estos cuatro eventos. También están listados bajo nuestro gráfico de eventos. Entonces si yo fuera a decir doble clic active begin overlap, en realidad nos llevará a ese evento, lo cual puede ser útil si estás tratando de encontrar cosas. A continuación, tenemos nuestras funciones, macros, variables y despachadores de eventos. Ahora, cada uno de estos va a tener sus propias lecciones porque son va a tener sus propias lecciones sistemas bastante grandes y los estaremos usando mucho. Pero aquí es donde habrá listado. Cualquier función que exista en este blueprint se enumerará bajo funciones. Lo mismo con macros y despachadores de eventos y variables. Si alguna vez deseas crear otras nuevas, podemos hacer clic en el botón pequeño más aquí podemos hacer clic en el botón pequeño más junto a las funciones. Podemos hacer lo mismo con macros, variables y despachadores de eventos también pueden hacer clic en este pequeño botón Agregar aquí arriba. Podemos seleccionar si desea crear una nueva variable, una función de macro y así sucesivamente, podemos crear nuevas gráficas. Y esto es útil sólo para organizar las cosas. Digamos que tenías un personaje y querías tener una gráfica para el movimiento, y una gráfica para tus armas, y una gráfica para la salud, por ejemplo. Podrías hacer eso y eso solo te da gráficas adicionales en las que puedes organizar las cosas. Funciones anuladoras. Estaremos cubriendo eso en el video de funciones. Entonces no te preocupes demasiado por eso. Pero si quieres anular una función, puedes encontrar esas opciones aquí. A continuación está la barra de búsqueda. Podemos usar esto para buscar las funciones, variables y macros para una palabra en particular. Siempre es una buena idea incluir palabras clave en tus nombres de variables y funciones. De esa manera, si, por ejemplo, estuviéramos creando un sistema de salud, podríamos simplemente buscar salud. Y eso mostrará todas nuestras funciones, variables que tienen la palabra salud en su nombre. A continuación vamos a estar cubriendo la barra superior. Entonces para empezar, tenemos compile. Esto básicamente solo nos dice, ¿está listo nuestro juego de blueprint? Entonces ahora mismo tiene un poco de garrapata, que significa que todo está bien. Todos estamos bien. Pero si yo fuera a decir arrastrar hacia fuera y agregar una cadena de impresión aquí y ver que ahora necesitamos compilarlo. Y esto simplemente básicamente permite que los motores revisen el código, asegúrese de que no haya problemas. Si hubo un tema y nos dan un pequeño signo de exclamación rojo. También probablemente nos dé algunos errores del compilador diciéndonos cuál es el problema. Entonces tenemos nuestra reserva que solo guarda un plano. Si hacemos clic en Guardar y vemos que el puntito se fue junto al nombre del blueprint porque está guardado. Tenemos navegador. Sihacemos clic en esto, nos llevará al lugar en el que se encuentra el blueprint y a nuestro navegador de contenido. Entonces tenemos diff, esto es para control de fuente. No voy a estar entrando en eso porque control de fuentes es un tema bastante grande. Entonces sólo vamos a saltarnos eso por ahora. Tenemos hallazgo. Esto nos da la ventana de búsqueda donde podemos buscar, digamos, por ejemplo, un nodo. Entonces si busco cadena de impresión aquí, en realidad nos dirá, oye, hay un nodo de cadena de impresión en el gráfico. Entonces si hago doble clic en eso, en realidad nos llevará a ello. Esto es realmente útil. Si tus planos se hacen bastante grandes, puedes olvidarte de dónde has puesto las cosas. Por lo que solo puedes buscar palabras clave para encontrar dónde están las cosas. Hola, sin relación solo esconde conexiones que no son importantes en ese momento en el tiempo. Por lo general solo recomiendo dejar esto apagado, pero puedes tener una obra de teatro con ella si quieres. A continuación, tenemos Configuración de clase. Estos son algo así como los ajustes básicos de nuestro blueprint. Probablemente no estarás haciendo demasiado aquí. La mayoría de los planos tendrán configuraciones de clase muy similares. También puedes ajustar el ángulo de la miniatura. Por lo que puede cambiar el ángulo de la cámara para la miniatura cuando el Navegador de contenido, si la suya tenía un teléfono. Ahora, también podemos agregar interfaces que serán todo un video separado que entrará. Pero si quieres encontrar las interfaces que están en la configuración de clase debajo de aquí. A continuación tenemos los valores predeterminados de clase. Ahora aquí es donde están todos los ajustes de nuestros planos. Entonces debido a que empezamos con un actor, los actores tienen un montón de configuraciones extra con las que vienen. Cuatro replicaciones multijugador para nuestra tecnología, que es nuestro techno aquí abajo, que corre cada cuadro, podemos hacer algunos ajustes a eso. Tenemos configuraciones de colisión, configuraciones de renderizado, etc. Estaremos adentrándonos un poco más en futuros videos. Si alguna vez quieres saber si un poco más de detalle, qué hacen las cosas, siempre puedes pasar el cursor sobre el nombre y nos da un lo tenso. Si fuéramos a crear una nueva variable, digamos que voy a agregar y simplemente no hice nueva variable. Llamemos a esta prueba. Si ahora vamos a los valores predeterminados de clase, encontramos el, oh, necesitamos compilar primero porque no aparecerá hasta que podamos sacar sus valores predeterminados de clase. Nos desplazaremos hacia arriba hacia arriba. Se puede ver en el valor por defecto que ahora tenemos nuestra variable de prueba. Y ahí es donde podemos ver todos nuestros valores predeterminados de variables. Y esos son los valores con los que comenzará el blueprint cuando se cree. Para que pueda encender y apagar eso aquí también. También tenemos una barra de búsqueda en la parte superior, lo cual es realmente útil, especialmente si tienes muchas variables En tu blueprint o estás usando el blueprint de otra persona, estás tratando de encontrar un ajuste. Puedes buscar palabras clave aquí para encontrar la opción que necesitas. Entonces tenemos los botones de simulación y reproducción. Estos básicamente solo inician la reproducción un modo editor. Si presiono el botón de reproducción, se puede ver que está abierta la ventana del editor de planos. A continuación tenemos el debug caído. Ahora, esta es una característica realmente genial de los planos. Tendré todo un video que entra en depuración y algunas de las características con las que viene el motor. Pero sólo para darles un ejemplo de lo que hace esto, si conecto mi cadena de impresión aquí a la tecnología. Ahora esto corre cada cuadro único que corre el juego. Entonces si voy a nuestro mapa, sólo voy a arrastrar el plano de video M. Golpeé play. Se puede ver que el halo está corriendo una y otra vez por cada fotograma que se dibuja. Y si voy a video blueprint, porque tengo los planos de video seleccionados aquí. Se ve que me está mostrando el código que se está ejecutando. Está todo resaltado. Eso me dice que la nota técnica se está ejecutando y está ejecutando la cadena de impresión. Y esto puede ser realmente útil cuando tienes planos grandes, puedes ver exactamente qué código se está ejecutando. Por ahora sólo vamos a hacer una pausa que borrará nuestra imprimir una cadena aquí. Y también eliminará nuestros planos de video de nuestro nivel. Sólo para que tengamos un comienzo limpio y regresaremos a nuestro plan. Otra cosa que quería mencionar sobre los resultados del hallazgo, en realidad, si volvemos a buscar, se puede ver que todavía tenemos nuestra ventana abierta aquí. Si hacemos clic en este botoncito aquí, en realidad buscaremos en todos los planos y nuestro proyecto nuestra frase de búsqueda. Entonces, si hago clic en esto, se puede ver que en realidad está encontrando muchas pantallas de impresión. Lo siento, Print String nodos alrededor de nuestros proyectos. Y estos son en realidad planos que vienen incorporados en el motor. Así que puedes ver que ha buscado todos los planos y nos está diciendo exactamente dónde se usan las cadenas de impresión a lo largo de nuestro proyecto. Esto puede ser realmente útil si vuelves a intentar localizar algo. Puedes buscar todos tus planos a la vez. A continuación, vamos a echar un vistazo al guión de construcción. Si cierro mi ventana de búsqueda de planos y podemos ir a funciones, posible que hayas notado el guión de construcción que está ahí por defecto, está integrado en el actor. Entonces hacemos doble clic que nos llevará a nuestro guión de construcción. Y aquí podemos agregar código que se ejecutará cuando arrastremos por primera vez nuestro blueprint al nivel. Así que esto es genial para si estás construyendo una especie de herramientas de diseño de nivel y cosas por el estilo, tal vez quieras aleatorizar el color de algo para cada vez que lo arrastres al nivel. El guión de construcción es realmente útil para eso. Ahora bien, si alguna vez desaparece alguna vez alguna de estas ventanas o dices que las cierras por accidente, no es problema. Siempre puedes subir al desplegable de ventanas por aquí. Y aquí puedes asumir cualquiera de estos paneles que hemos estado viendo hoy. Para que puedas apagar. Entonces, por ejemplo, si cierro mis componentes, puedo ir y simplemente puedo volver a abrir el panel Componentes y simplemente volveré a hacer estallar de nuevo. Ahora, lo último que quería señalar es la barra de direcciones que está aquí arriba en la parte superior. Esto siempre dirá qué plano orina, estoy usando ese plano que eres. Esto es realmente útil si estás siguiendo junto con tutoriales o capturas de pantalla o algo por el estilo, siempre vale la pena echarle un vistazo, asegurándote de estar en el plano correcto y también decir el oel nombre de la gráfica de eventos. Entonces si voy a Event Graph, digamos gráfico de eventos, que te dirá exactamente dónde estás o si estás siguiendo junto con un video o una imagen, puedes ver exactamente dónde están en esos videos. Entonces eso va a ser todo por esta lección. Ojalá tengas una comprensión básica ahora de dónde pensadores y el editor de Blueprint. 4. Introducción (flujo de eventos): Oigan a todos, En esta lección les voy a estar guiando por cómo corren los nodos de Blueprint y el orden en que corren. Para empezar. He configurado algunos ejemplos aquí en nuestro Blueprint ThirdPersonCharacter. Y yo sólo voy a estar hablándote a través estos y explicando lo que hace cada uno. Entonces para empezar, tenemos que el evento comience a jugar. Ahora bien, este es un evento que está integrado en el motor y se ejecutará cada vez que comience nuestro juego o cuando se cree el blueprint. Lo que va a pasar aquí es que tengamos nuestro evento comience a jugar que le dirá a nuestro jugador una jugada, reproduzca un sonido ahora para correr. Ahora bien, este es un evento personalizado que yo mismo he creado. Y si bajamos aquí, en realidad se puede ver que tenemos el sonido del play player. Entonces empezaré a jugar o x al cubicado. Ejecutará nuestra reproducción, tocará un nodo de sonido, y eso ejecutará nuestro sonido de reproducción en la ubicación. Y el sonido que, que tocará va a ser donde sea que esté aquí nuestra entrada de sonido. Entonces ese va a ser el sonido de inicio. Después reproducirá ese sonido en la ubicación que estamos proporcionando. Entonces esa es la ubicación get actor, que va a ser la ubicación de nuestro personaje. Entonces una vez que se toca el sonido, nuestra salida de nuestro juego, toca un sonido. Fresco. Vamos a correr. Eso sucederá siempre que la cadena de ejecución aquí abajo no tenga más nodos para ejecutar. Entonces, lo que esto hará es establecer nuestro valor de salud a cualquiera que sea nuestro valor inicial ya que el código se ejecuta de izquierda a derecha típicamente. Y si golpeamos un evento, genial, ejecutaremos el código que está conectado a ese evento. Y luego reanudaremos la ejecución del código con nuestro evento original. A continuación, tenemos la nota tecnológica del evento. Ahora bien, este es un nodo muy comúnmente utilizado por los principiantes. Y la razón es porque corre cada fotograma de tu juego. Por lo que cada vez que tu tarjeta gráfica dibuje un marco, este evento se ejecutará. Ahora, el problema con eso es que la gente tiende a adjuntar mucho código a este nodo. Y eso puede comenzar a ralentizar tu proyecto muy rápidamente, porque generalmente, la mayoría del código en realidad no necesita hacerse cada fotograma. Queremos usar cosas como entradas de Player, temporizadores y varias otras formas de ejecutar ese código. En lugar de solo cada frame lo ejecutamos porque así es como obtienes un pobre rendimiento en tu juego. Pero para este ejemplo, acabo de tomar algún código muy simple. Tengo un valor de número. Y luego estamos trazando uno a ese valor de número y luego estamos estableciendo ese valor numérico. Cada vez que se dibuja un marco de nuestro juego, estamos aumentando nuestro valor numérico en uno. Y luego solo tengo que imprimir string node aquí. Así que eso tomará el valor del número, lo convierte en una cadena, que es texto básicamente. Y luego imprimimos ese valor a la, a la pantalla del jugador. Estaré entrando en más detalles sobre estos eventos cuando lleguemos a crear algunos ejemplos. Pero por ahora solo quiero explicar los diferentes tipos de eventos y cómo ejecutan código. Por lo que a continuación tenemos el salto de acción de entrada. Ahora bien, este es un nodo que se ejecutará cada vez que nuestro jugador presione la entrada de salto. Entonces por defecto esa es la clave de espacio. Y la razón que es porque si nos dirigimos a editar y vamos a Ajustes del Proyecto, entonces voy a ir a Input aquí abajo. Iremos a Action Mappings. Se puede ver que aquí tenemos un mapeo de acción que dice saltar. Si hago clic en la flecha hacia abajo, se puede ver que tiene la barra espaciadora establecida aquí. Entonces esta es una entrada predeterminada para el proyecto ThirdPersonCharacter. Entonces por eso eso ya está aquí para nosotros. Así que cuando vuelvo a nuestro ThirdPersonCharacter Blueprint, Es por eso que dice salto de acción de entrada es porque esas entradas ya se han configurado en nuestros mapeos de acción. Y lo que esto básicamente hace es cuando presiono Espacio, presioné voluntad, voluntad, correrá, y eso hará que nuestro personaje salte. Y luego cuando suelte, eso enfría el stop jumping. Ahora, las acciones de entrada es esencialmente la forma en que tomas la entrada de un jugador y podemos ejecutar código usando esa entrada irá más en impactaciones en una lección futura. También hay un nuevo sistema de entrada mejorado que viene con Unreal Engine five. Entonces también estaremos indagando en eso también. Otra forma de ejecutar código a través las entradas del Reproductor es usar los nodos de eventos de entrada. Entonces si hago clic derecho y busqué un nombre de teclado, diga Enter. Y podemos desplazarnos por estos y bajo eventos de teclado podemos encontrar el Enter. Ahora, esto es similar a nuestra acción de entrada Jump. Tenemos Oprimido, que ejecutará el código que está conectado a él cuando se presione la tecla Enter y se suelte cuando se ejecute el código, cuando se libere la tecla. Ahora, estos son más para depuración y prototipado rápido. Estaremos usando estos bastante más adelante en el curso solo porque son rápidos en sí mismos que la configuración de nuestro proyecto. Pero normalmente no usarías estos nodos. Al configurar los binds clave finales de un juego, usarías las acciones de entrada que te mostré antes. A continuación, tenemos el, cualquier nodo de daño, que está aquí arriba. Y este evento está integrado en el motor. Y nos permite decirle a nuestro TercerPersonaje Personaque ha recibido daños de otros planos. Y esos otros planos también pueden suministrar un valor dañado, similar a cómo llamamos nuestro play play un evento de sonido aquí, y proporcionamos un sonido de inicio. Entonces nuestra obra, toca un evento sonoro aquí abajo, usa ese sonido de inicio y reproduce un sonido en un lugar. Esto es similar en que el otro plano puede llamar al enemigo cualquier daño de m, puede proporcionar un valor dañado. Y ahora en nuestro Plan de PersonaTerceros Personajes, podemos usar ese valor de daño para restar de nuestra salud actual. Ahora son cualquier evento de daño está llamando a una función llamada disminución de la salud. Ahora, yo mismo he creado esta función. Y no te preocupes si no sabes qué es una función, estaremos entrando en eso en una futura lección. Pero esencialmente una función es un nodo que contiene otros nodos y que un nodo es reutilizable. Para que podamos reutilizar ese código en múltiples lugares y nuestro proyecto. Entonces si hago doble clic en esta función realmente nos llevará a la propia función. Y se puede ver que la función contiene todos estos nodos. Ahora, esto se ejecutará de manera similar a nuestra gráfica de eventos. Por lo que ejecutará de izquierda a derecha. Y luego una vez que llegue al final, el nodo estará terminado. Entonces, para empezar, tomaremos nuestro valor actual de Salud y restará el valor de daño que obtuvimos ingresado de cualquier daño de ellos. Entonces establecerá nuestro nuevo valle de salud actual. Y entonces estamos configurando, o lo siento, estamos comprobando, ¿nuestra salud actual es menor o igual a 0? Si es menor que 0 o igual a 0, entonces ejecutamos el nodo Play play sound y le estamos diciendo que ejecute el sonido sordo. Por lo que como puedes ver, estamos reutilizando nuestra obra, toca un nodo de sonido. Y esta vez lo estamos diciendo queremos tocar el sonido sordo. Entonces después de que nuestro sonido haya sido tocado, le decimos al actor que se destruya a sí mismo, lo que básicamente le dice al actor se quite por completo del nivel. O si espero que sea mayor que 0, lo estamos diciendo, estamos girando nuestra obra, tocamos un nodo de sonido para reproducir el sonido hertz en lugar del sonido sordo. Ahora bien, si se ejecuta nuestro nodo Destroy Actor o si nuestro play, reproduce un sonido con las carreras de sonido hertz, puedes ver que no tienen más salidas. Entonces lo que sucederá entonces es que nuestra función ya está terminada. Entonces si tuviéramos código adicional conectado hasta la salida de nuestra función, entonces se ejecutaría. Nosotros no. Por lo que esta cadena de ejecución acaba de terminar ahora con disminución de la función de salud. Eso va a ser todo por esta lección. Esperemos que ahora entiendas qué causa que se ejecute el código de blueprint y el orden en que las cosas generalmente ejecutan. No te preocupes demasiado si aún no entiendes completamente funciones o eventos, estaremos cubriendo esos en lecciones separadas en el futuro. Esto solo estaba recibiendo el cuelgue de cómo se ejecuta realmente el código y qué causa que se ejecute. 5. Variables (descripción general): Oigan a todos, En esta lección sólo voy a estar explicando qué son las variables y para qué se utilizan. Las variables son básicamente solo una forma de almacenar información. Y hay una gran cantidad de diferentes tipos de información, por lo que hay bastantes tipos diferentes de variables. En las próximas lecciones, sólo voy a estar llevándote a través de algunas de las variables más utilizadas. Aprenderemos a cambiar sus valores. Y también cubriremos algunos ejemplos básicos de cosas comunes para las que se van a utilizar. Entonces, para empezar, crearemos una nueva variable. Y para ello, nos dirigiremos a nuestro nuevo panel Blueprint. Y hay un par de maneras en que podemos hacer esto. Podemos dar clic en el pequeño botón más al lado la pestaña de variables y crear nueva variable de esa manera. O podemos subir al botón Agregar aquí y seleccionar el botón de variable aquí, lo que creará una nueva variable también. Ahora, una vez que hayamos creado una nueva variable, podremos renombrarla. Así que para esta variable, sólo voy a llamarla nueva variable. Aquí. También podemos establecer nuestros tipos de variables. Entonces el valor por defecto es un booleano. Un booleano es solo una variable verdadera o falsa, por lo que almacena un valor verdadero o falso. Ahora, con nuestra variable seleccionada, podemos agregar más al panel Detalles. Si no tienes el panel de detalles, siempre puedes sacarlo yendo a Windows y seleccionando la cadera del panel Detalles. Así que durante la noche Detalles panel, tenemos nuestros nombres de variables para que podamos cambiar el nombre de nuestra variable siempre que queramos. Podemos establecer el tipo de variable. Ahora bien, si selecciono la flecha hacia abajo aquí, verás algunos de los tipos de variables más comúnmente usados que estaremos pasando en futuras lecciones. Hay algunos adicionales y menús descendentes. No vamos a estar cubriendo esos en el curso porque hay montones y montones de ellos. Pero estaré explicando qué son y para qué están acostumbrados en una futura lección. Ahora, tenemos un valor por defecto aquí abajo. Este es básicamente el valor inicial de nuestra variable. Ahora por el momento en realidad no tiene ninguna opción aquí. Sólo dice por favor compile el plano. Eso es porque es una nueva variable para esa configuración show up, tenemos que compilar. Entonces yo sólo voy a compilar aquí. Se puede ver que ahora tenemos esta casilla de garrapata que podemos encender y apagar. Y eso es porque un booleano es un valor verdadero o falso. Por lo que podemos establecer donde para esta variable comienza con un valor verdadero o un valor falso. Ahora también había algunos ajustes adicionales aquí arriba. No te preocupes demasiado por estos en este momento, estaremos cubriendo algunos de estos en una futura lección. Ahora una gran parte de las variables es que en realidad podemos obtener la información almacenada en ellas cuando estamos escribiendo código y podemos cambiarlas. Por lo que hay algunas maneras diferentes de obtener los datos de sus variables. Así que podemos simplemente arrastrarlo directamente a nuestro gráfico de eventos desde mi panel de blueprint drop y obtenemos una opción para obtener nueva variable o establecer nueva variable. Para que podamos hacer brecha que nos dará este nodo get aquí. Usando este nodo, podemos obtener el valor actual en el que nuestra nueva variable está establecida. Ahora también podemos arrastrar hacia fuera y hacer set, y eso nos permite cambiar el valor actual de nuestra variable. Ahora bien, estas notas a veces se verán diferentes dependiendo del tipo de variable. Entonces porque esto es un booleano, tiene casita de garrapata aquí. Podemos encender y apagar. Pero digamos que si esta fuera una variable que estamos almacenando un número, no tendríamos la casilla de garrapata allí. Ahora otra forma que puedes hacer esto es cuando arrastramos nuestra nueva variable en, si presiono Control en mi teclado y solto el botón izquierdo del ratón, simplemente crea instantáneamente un nodo para nosotros. Y también podemos arrastrar hacia fuera y mantener pulsado el botón Alt y soltarlo. Y eso nos dará un conjunto de nodos. Así que en lugar de tener que usar este pequeño menú, puedes usar algunos atajos de teclado allí también. Otra forma de crear las variables en nuestro Event Graph es que simplemente podemos hacer clic derecho y buscar una nueva variable y simplemente presionar enter. Y tenemos nuestro nodo get y podemos hacer lo mismo con SAP. Así que sólo puedo buscar un conjunto nueva variable. Y se puede ver que ha surgido ahí arriba y nosotros podemos simplemente crear eso también. Por lo que en realidad no importa de qué manera uses para crear tus variables en el Event Graph, lo que sea más cómodo para ti, solo puedes usar eso. Ahora dependiendo de cuánto tiempo hayas pasado ya en el motor, es posible que sepas o no qué variables se pueden conectar a otras variables. Entonces, por ejemplo, si creo una nueva variable aquí, sólo voy a llamar a esta una de las variables. Y voy a dejar esto como booleano, pelea, arrastra eso a nuestra gráfica de eventos y lo voy a conseguir. En realidad puedo conectar esa otra variable en mi nuevo nodo conjunto de variables. Y sólo voy a mover este fuera del camino. Y lo que esto va a hacer es que tomará lo que sean de un valor variable es, y le dirá a nuestra nueva variable que sea ese valor. Entonces si tuviéramos este nodo funcionando, digamos, en Beginning play, así que sólo voy a empezar a jugar Notre. Enchufa esto. Ahora, cuando comience el juego, nuestra nueva variable se establecerá en cualquier otro valor que se establezca en otra variable. Entonces si selecciono mi otra variable, puedes ver que necesito compilar mi blueprint, así que lo haré. Entonces si pongo las otras variables, por defecto a true, y si voy a mi nueva variable, su defecto es false. Ahora bien, lo que esto hará es que le dirá a nuestra nueva variable que ahora sea verdad. Y podemos comprobar esto si agrego una cadena de impresión rápidamente, conecte la salida de mi nuevo nodo conjunto de variables en la entrada de cadena. Y esta salida es básicamente la misma que un nodo. Entonces solo para mantener tu código limpio o puedes usar eso en lugar de tener que crear un nuevo nodo. Así que ahora cuando comience el juego, esperaríamos que nuestra cadena de impresión imprima verdadera porque eso es lo que nuestra otra vocal, otra variable está establecida en. Entonces si puedo jalar y le pego a Play, se puede ver que está imprimiendo verdad. Y si yo fuera a cambiar mi otra variable a falsa, verás que cuando golpeemos play, se lee false. Entonces eso va a ser todo por este video. En nuestras próximas lecciones, vamos a estar aprendiendo sobre tipos de variables específicas y algunos nodos que se usan comúnmente con esas variables. 6. Variables (booleanos): Oigan a todos. En esta lección vamos a estar echando un vistazo más de cerca a los booleanos. Las variables booleanas se utilizan para almacenar un valor verdadero o falso, pero también se pueden usar para controlar qué código se está ejecutando en su proyecto. Y también pueden ser resultado de ciertas pruebas. Entonces, por ejemplo, si estuviéramos comprobando es un mayor que b, el resultado de esa prueba sería un booleano porque sería verdadero o falso. Entonces, para empezar, voy a estar creando algunos ejemplos de cómo los booleanos pueden controlar qué código se está ejecutando. Y vamos a hacer esto y necesitamos plano del personaje de tercera persona.- Entonces sólo voy a abrir eso. Y aquí vamos a crear nuevas variables. Entonces en mi panel de planos, haga clic en el botón de nueva variable, y voy a llamar al mío ejemplo booleano. Y el mío ya está configurado en booleano, pero si el tuyo no lo es, puedes simplemente hacer clic en el desplegable aquí y seleccionar el tipo booleano. Y vamos a compilar para que consigamos que nuestros valores por defecto aparezcan en el panel Detalles aquí. Si alguna vez te falta alguno de estos paneles, siempre puedes encenderlos y las ventanas desplegables aquí. Vamos a dejar que el valor por defecto es falso porque en realidad vamos a estar cambiando eso usando código. Por lo que vamos a empezar por crear un nodo tick. Por lo tanto, haremos clic derecho en el Event Graph y buscaremos tecnología y crearemos el evento tick. Ahora, si recuerdas de nuestra lección anterior, corre cada vez que un frame es sacado de nuestro juego. A continuación, vamos a sacar nuestro ejemplo booleanos. Y vamos a arrastrarnos de ella y vamos a buscar grunge. Si lo deletreamos bien, ahí vamos, podemos buscar marcas y crear ese nodo conectado hasta nuestra tecnología de eventos. Por lo que ahora cada fotograma, este nodo de rama se ejecutará. Lo que hace un nodo de rama es básicamente simplemente verificar la variable booleana que está conectada a ella y se ejecuta ya sea true o false dependiendo de si la variable booleana es verdadera o falsa. Entonces empieza con, solo crearemos algunas cadenas de estampados. Entonces nos arrastraremos de lo verdadero. Buscaremos la cadena de impresión. Y esto es sólo un nodo que imprimirá algún texto en la pantalla de nuestros jugadores cada vez que se ejecute. Entonces voy a decir, voy a poner esto en realidad. Y copiaré y pegaré esto y conectaré esto hasta lo falso. Y yo sólo voy a poner esto en falso. Y eso sólo significará que cuando nuestro verdadero pin se ejecute para correr en la pantalla y cuando nuestro falso bolígrafo haya corrido, gente correrá en la pantalla. Entonces te mostraré ahora, el valor predeterminado sigue siendo falso. Por lo que deberíamos esperar que la gente corra cuando planeemos, el editor golpeará Play y se puede ver que false se está ejecutando. Si aceptamos, cambiamos nuestro booleano a true y le pegamos a Play. Se puede ver que la verdad está corriendo. Lo bueno de los planos es que en realidad podemos ver este código ejecutándose en tiempo real. Entonces, si vuelvo a mi ThirdPersonCharacter mientras el juego sigue en ejecución, puedes ver el desplegable de depuración aquí. Y si selecciono el ThirdPersonCharacter, solo tenemos una opción porque solo hay un plano de carácter ThirdPersonCharacter en el nivel. Por lo que sólo vamos a cobrar eso. Sepuede ver que podemos ver nodo Arctic está ejecutando cada frame que está ejecutando nuestra rama, lo que comprueba nuestro ejemplo booleano. Y si ahora lo guardamos, en realidad se puede ver que dice verdad. Así que true es correr en nuestra cadena de impresión se está ejecutando y se está imprimiendo verdadero. Así que ahora queremos poder cambiar realmente nuestro valor booleano durante el juego para que podamos cambiar qué código se va a ejecutar. Entonces saldremos de nuestro modo de juego. Y vamos a crear un nuevo nodo de entrada. Y voy a buscarlo botón izquierdo del ratón. Y esto se ejecutará cada vez que se presione el botón izquierdo del ratón. Y luego se ejecutará el release cada vez que se suelte el botón izquierdo del ratón, se arrastrará hacia fuera y vamos a usar un nodo de rama. Ahora, en realidad hay algunas formas en las que puedes crear nodos de rama. Uno de ellos es mantener pulsado B en su teclado y luego hacer clic izquierdo del ratón y se puede ver que crea un nodo de rama o puede hacer clic derecho y buscar si. Eso también trae a colación el nodo de sucursal. O puedes buscar brunch. Y eso también trae a colación los nodos de sucursal , con el que te encuentres más cómodo. Vamos a conectar esto hasta el prensado. Vamos a obtener nuestro ejemplo booleano y enchufar eso a la condición. puede ver que lo estoy arrastrando directamente y en realidad lo conectará automáticamente a nosotros, al nodo de sucursal para nosotros. Y lo que queremos que suceda aquí es cuando se presiona el botón izquierdo del ratón, si nuestra variable booleana actual es verdadera, queremos configurarla en false. Entonces solo voy a enchufar eso en falso y ver si lo arrasto a true, simplemente se conectará automáticamente. Entonces queremos que se establezca en falso si ya es cierto. Y copiaremos y pegaremos este sub conectado a false. Y si nuestro valor actual es falso, queremos establecerlo en verdadero. Por lo que debería verse algo como esto. Compilará esto. Y ahora podemos probarlo. Y otra vez, le pegaré a Play. puede ver actualmente que es cierto porque ese es nuestro valor por defecto. Si presiono el botón izquierdo del ratón, se vuelve falso. Y si sigo presionándolo, se puede ver que está cambiando la cadena de impresión. Ahora hay algunos otros nodos de uso común con Boolean. Por lo que quiero mostrarles, si nos dirigimos de nuevo a nuestro ThirdPersonCharacter Blueprint, tomamos nuestro ejemplo booleano y arrastramos fuera de él y buscamos todos. Se puede ver que tenemos unos cuantos diferentes o nodos. Así que sólo voy a estar usando el nodo booleano OR. Y se puede ver que nos da dos entradas para Boolean. Y entonces una salida que quiero saber hace es básicamente comprobar, alguna de sus entradas es verdadera? Si lo es, entonces volverá verdadero. Si todos son falsos, entonces volverá falso. Y podemos agregar múltiples entradas. Por lo que podríamos agregar entradas adicionales si quisiéramos. Entonces, por ejemplo, nuestro booleano de ejemplo está marcado en true, pero todos los demás son falsos. Por lo que esto todavía se ejecutará o, o, o Nodo o aún salida como verdadero. Para que podamos probar esto. Se puede ver que está funcionando cierto. Pero si cambio mi ejemplo, booleano verdadero, falso. Todas sus entradas son ahora falsas. Por lo que ahora volveremos falso. Ya se puede ver ahora que está regresando falso. Una nota similar es el anti-nodos. Así que si eliminamos nuestro off ahora, vamos a arrastrar hacia fuera de nuestro ejemplo booleano de nuevo y buscar y podemos seleccionar el nodo booleano. Y esto funciona de manera similar. Toma múltiples entradas booleanas y devuelve una salida booleana. Y lo que esto hace es básicamente que todos los insumos deben ser verdaderos para que salga verdadero. Así que ahora mismo nuestro ejemplo booleano es falso y este adicional también es sin tipo, por lo que es falso. Pero si cambio mi ejemplo booleano a true, ahora tenemos una entrada verdadera y una falsa. Ahora, la salida será falsa porque eso no es cierto. Para que podamos probar esto, dale a Play. Se puede ver que es falso. Pero si aceptamos y marco esta opción, ahora que ambos son verdaderos, saldrá true C. Ahora, estas son notas que estarás usando muy a menudo con nodos de rama y pueden le ahorrará tener que tener múltiples nodos de sucursal si está probando más de una variable. Entonces, por ejemplo, si necesitas que las variables libres sean verdaderas antes de querer que se ejecute un nodo de rama, usarías un ánodo. Otro nodo de uso común es el nodo. Entonces si arrastramos hacia fuera y buscamos nada, podemos usar, A ver, NO booleano. Y esto básicamente convierte o cambia o booleano a lo contrario de lo que es actualmente. Entonces si conecto esto, actualmente nuestro booleano está marcado para árbol, pero esto revertirá eso y lo hará zorro. Por lo que podemos ver está definitivamente establecido en verdad, pero va a correr amigos. ver, si nos dirigimos hacia atrás y establecemos esto en falso ahora no son nodo en realidad convertiremos eso y lo convertiremos en un verdadero mientras que se ejecutará el código verdadero. Ahora, hay otra nota que quiero mostrarles chicos, y ese es el nodo igual. Por lo que va a borrar no son nodo ahora y voy a arrastrar hacia fuera, y voy a buscar iguales. Hacer uno o dos iguales. A mí también me gusta hacerlo, porque normalmente solo trae a colación la forma exacta que queremos. Y eso es r igual a nota aquí, se puede ver que tiene dos entradas booleanas y una salida booleana. Si conecto esto hasta nuestra nota de brunch aquí, esto básicamente dice que ambos insumos tienen que ser exactamente los mismos. Por lo que actualmente ambos son falsos. lo que nuestro booleano de ejemplo se establece en falso y su segunda entrada se establece en falso. Entonces esto en realidad será uno cierto porque ambos son exactamente el mismo valor. Para que podamos probar esto en juego. En C. Se está ejecutando cierto pesar de que nuestros valores son en realidad falsos. Y si fuera a poner nuestro ejemplo booleano a true, pero dejar este valor es falso. Se ejecutará false porque ya no son el mismo valor. Y podemos comprobar esto de nuevo. Hit Play. Se puede ver que la gente está corriendo. Ahora como nota al margen, de ti E5, si fueras a crear estos nodos que te he mostrado sin arrastrar desde un booleano, en realidad no tendrían estas entradas y salidas rojas. Así que por ejemplo, si busco r igual nota aquí, se puede ver que tiene una salida booleana porque un nodo igual siempre va a devolver verdadero o falso. Pero estas entradas en realidad están en gris. Y el comodín, lo que significa que en realidad pueden ser de cualquier tipo de variable. Algunas formas de convertirlas en nuestro tipo booleano. Por lo que podemos o bien simplemente arrastrar fuera de nuestro ejemplo booleano, conectar eso hacia arriba y automáticamente lo convertirá para nosotros. O podemos hacer clic derecho en estos penta gris, ir a convertir pin. Se puede ver que podemos cambiarlo a un montón de diferentes tipos de variables. Pero puedes ver que tenemos nuestra opción booleana ahí, así que podemos seleccionar eso. Y ahora convierte nuestro nodo en ese tipo booleano. Entonces eso va a ser todo por nuestra lección sobre los booleanos. Los estaremos usando mucho más en futuras lecciones ya que los booleanos son parte bastante cool de la codificación. No te preocupes demasiado si no recuerdas todos los nodos que hemos usado de nuevo, los estaremos usando mucho más en futuras lecciones. 7. Variables (entrantes y flotantes): Oigan a todos. En esta lección vamos a estar cubriendo los tipos de variables float y integer. Ahora tanto las variables float como integer se utilizan para almacenar valores de números. La diferencia entre los dos es los enteros solo pueden almacenar números enteros, lo que significa que no puede tener un valor decimal, mientras que un flotador puede almacenar números que sí tienen un valor de punto decimal. Ambos pueden almacenar números de valores positivos y negativos. Por lo que comenzaremos creando dos nuevos tipos de variables. Voy a crear dos nuevas variables. El primero solo llamaré ejemplo float, y el segundo, lo llamaré ejemplo en entero, cambiará los tipos por lo que queremos entero. Entonces para nuestro ejemplo float, seleccionaremos float en qué compilador. Ahora con nuestros enteros de ejemplo seleccionados, se puede ver más en el valor por defecto podemos establecer un valor numérico. Así que puedo establecer esto para decir 99, por ejemplo, pero puedo agregar un punto decimal y agregar un valor de punto decimal. Digamos que si traté de hacer eso, cuando presiono Enter, se elimina porque un entero solo podía almacenar números enteros. Mientras que si selecciono mi variable float y voy al valor por defecto aquí puedes ver que realmente realmente tiene un 0 decimal. Y puedo configurar esto a 99.99 mano, y se puede ver que el valor realmente ahorra correctamente. A continuación, te mostraré cómo podemos establecer y obtener nuestras variables float y integer es muy similar a cómo estábamos trabajando con nuestro booleano. Entonces pasaré rápidamente por ese proceso. Sólo voy a hacer clic derecho y crear una entrada de botón izquierdo del ratón, como hicimos con nuestro booleano. Y obtendremos nuestra estrella flotante de ejemplo con, y solo vamos a seleccionar Get Float de nuestro prensado. Sólo voy a elegir el nodo de cadena de impresión. Y eso nos permitirá sólo imprimir cadena nuestro valor actual. Cuando lo conectamos a la cadena, nos da este nodo adicional. Todo lo que está haciendo es convertir nuestro valor de flauta en un valor de cadena. Y un valor de cadena es sólo texto. Y eso permite que nuestros nodos Print String impriman realmente el valor float. Así que ahora cuando golpeamos play y hago click izquierdo, puedes ver que está imprimiendo nuestro valor por defecto. Y el proceso es el mismo para nuestro entero. Simplemente podemos conseguir eso. Voy a arrastrarlo directamente a nuestra entrada de cadena. Y se puede ver que nos ha dado un nodo diferente, se ve similar al primero, pero esto convierte un entero en una cadena. Por lo que voy a imprimir cadena puede exhibirlo. Entonces cuando golpeamos play y me fui del mouse, se puede ver que se está imprimiendo son ahora valor entero. A continuación comenzaremos a cambiar nuestros valores. Entonces lo que podemos hacer es hacer clic derecho y usar un nodo tick. A partir de esto, vamos a aumentar nuestro valor entero. Así que obtendremos un valor entero actual. Nos vamos a arrastrar, vamos a usar el plus. Y este es un nodo add. Y funciona más o menos como te imaginas. Toma el valor actual de nuestro entero y le agrega algún valor. Entonces voy a poner esto a uno. Por lo que la salida será nuestro valor entero de ejemplo actual más uno. Entonces necesitamos establecer nuestro ejemplo entero. Así que sólo voy a arrastrar hacia fuera, hacer SAP, conectar esto en nuestro nodo tick y conectar la entrada en nuestro nodo de adición. Entonces ahora cada fotograma, nuestro número entero de ejemplo aumentará y cuando dejamos el botón del ratón, imprimirá el valor actual. Por lo que compilará y golpeará play. Entonces si le pego a Plus, se puede ver que ya es hasta 249. Y eso es porque nuestro nodo tick está ejecutando cada frame. Por lo que va a aumentar muy rápidamente. Y ver como hago clic ese valor va subiendo mucho. A continuación, haremos lo mismo con nuestro valor de flotación. Entonces volveremos a nuestro blueprint de personajes, y eliminaremos este código aquí. Y haremos lo mismo pero con flote. Entonces nos arrastraremos, hazlo. Conecta esto a nuestro nodo tick. Entonces queremos obtener el ejemplo actual float plus. Por lo que vamos a utilizar un nodo add y podemos agregar un número decimal. Por lo que podríamos agregar digamos, 1.25 y conectar la salida a nuestro ejemplo float. Por lo que cada cuadro tomamos el valor de flotación actual más 1.25. Y luego el resultado que ponemos ahora a nuestro ejemplo flotar. Y luego volveremos a enchufar aquí abajo en nuestro botón izquierdo del ratón, tendremos nuestra pantalla de cadena de impresión, nuestro valor float en lugar de nuestro valor entero. Entonces ahora cuando golpeamos play, podemos hacer clic y se puede ver que está subiendo en números decimales ahora porque estamos usando nuestro flotador. A continuación, te voy a llevar a través de algunos de los nodos más utilizados con flotadores y enteros. Ahora la razón por la que estamos haciendo estas dos variables juntas es porque ambas son número de variables y ambas usan nodos muy similares. Y en realidad se pueden combinar junto con algunos nodos también. Entonces si volvemos a nuestro ThirdPersonCharacter, desharemos de este código aquí arriba para darnos un poco de espacio. Y comenzaremos con los nodos básicos que ya hemos estado usando. Así que sólo voy a conseguir tanto flotar y entero. Ahora el primero es R plus node, add node. Podemos crear que nos permita sumar los insumos juntos. Y salida el resultado. Podemos agregar nuevos pines si queremos, para sumar múltiples variables juntas. También podemos crear un nuevo flujo variables como llamar a esto un flotador. Configura esto en un flotador. Podemos enchufar el de una variable de flotación. Entonces podemos agregar múltiples variables de flujo juntas. Ahora, ya que tenía cinco años, en realidad podemos cambiar estas entradas dos tipos de variables diferentes. Así que digamos que quería agregar mi ejemplo float y mi ejemplo entero juntos. Podríamos hacer eso. Ahora si tenemos varios pines y queremos eliminarlos, solo podemos hacer clic derecho en ellos y eliminarlos. Entonces sólo voy a quitar estos dos extras. Entonces quiero combinar estos dos valores juntos. Eso ya lo podemos hacer. Por lo que podemos hacer clic derecho o pin extra, ir a convertir pin y seleccionar entero. Ahora podemos enchufar nuestro entero m. y ahora esto dará salida al resultado de ejemplo float más integer como float. Por lo que podríamos poner nuestro ejemplo flotar a ese valor. Ahora, podemos probar esto en juego si queremos. Podemos bajar esto aquí. Conecte esto hasta nuestro botón izquierdo del ratón, conectará el resultado en nuestra cadena de impresión. Entonces ahora vamos a decir sumar 1.25, 1.25. Y vamos a sumar a eso. Cuando golpeamos play, esperamos que sea de 3.25. Y en realidad está aumentando porque estamos estableciendo ese valor de flotación. Por lo que cada vez que hacemos clic, ahora estamos aumentando el valor porque nuestro ejemplo de flotación se ha incrementado. Ahora este proceso con convertir uno de los pines a un entero se puede usar con la mayoría de los nodos que te voy a estar mostrando. Entonces si continuamos, voy a conseguir otro ejemplo, flotar el pelo. Si arrastramos hacia fuera y sí buscamos multiplicar, puedes usar este símbolo aquí, o puedes buscar multiplicar. Eso nos da un nodo multiplicado. Esto funciona como probablemente te imaginas. Toma las entradas, las multiplica juntas y devuelve una salida. Podemos hacer clic derecho en una de las entradas y convertirla en un entero también. Ahora bien, te habrás dado cuenta que lo estoy haciendo para que la salida sea un flotador. El motivo por el que estoy haciendo eso es porque si lo hicimos al revés, así que si copio y pego mi entero aquí, y creamos un nodo de anuncio. Si convierto esto a un flotador, se puede ver que la salida en realidad ahora se cambia a un flotador a pesar de que era un entero. La razón por la que esto está sucediendo es porque nuestro, si esto fuera una salida entera, perderíamos cualquier valor, cualquier valor de punto decimal o variable flotante podría tener. Por lo que automáticamente cambia eso ahora a un flotador. Entonces continuando, tenemos nodo multiplicar. También podemos hacer esto con nuestro entero. Así que si elimino esta nota de anuncio aquí siendo arrastrado hacia fuera, podemos buscar multiplicar, multiplicar nodo, y eso nos dará un entero multiplicar nodo. También tenemos los nodos restar. Entonces si solo elimino estas notas, podemos usar un nodo restar. Y puedes buscar el símbolo de línea aquí, o puedes buscar restar. Depende de ti. Y eso nos da lo mismo que nuestro nodo de suma, pero hay resta las entradas y devuelve las salidas. Nuevamente, podemos convertir estas entradas a un entero, o si quisiéramos en un nodo entero, podríamos convertirlo en un float. Y al igual que antes, vuelve a convertir la salida a un flotador, porque hemos agregado una entrada de flotación. Entonces esas son las formas básicas en que podemos manipular nuestros valores de variables. Podemos establecer esos nuevos valores. Pero también hay formas en que podemos comprobar nuestras variables. Así que si nos deshacemos de estos nodos menos por ahora, También hay nodos como el mayor que nodo. Entonces si me arrasto de mi entero, busco mayor que. Se puede ver, podemos o bien buscar mayor. Entonces si busco mayor, puedes ver que sube, o puedes usar el símbolo mayor que y crear este nodo. Y esto nos da dos entradas que son enteros y una salida que es booleana. Entonces esto básicamente comprobará, es el valor a, el valor superior mayor que el valor b o el valor inferior. Si lo es, entonces devolverá un verdadero booleano. Y si es falso, devolverá un booleano falso. Nuevamente, al igual que nuestros nodos anteriores, podemos convertir los pines de entrada. Entonces si me convierto, podemos cambiar esto a un flotador. Así que en realidad podemos comprobar para ver es nuestro entero mayor que nuestro valor de flotación. Y eso volverá a salir todavía un valor booleano porque esto siempre será verdadero o falso. Podemos hacer lo mismo con menos de. Entonces podemos arrastrar hacia fuera de nuestro entero y hacer el símbolo menos que o podemos buscar menos. Y eso nos da el mismo nodo pero al revés. Entonces si a es menor que b, entonces volverá verdadero. Si a es mayor que b, devolverá falso. También hay nodos mayores o iguales. Entonces si hago el símbolo mayor que en C que tenemos mayor igual. Y esto sólo comprueba, es una mayor que B o es? Lo mismo que B. Si es mayor que b, volverá verdadero. Si es lo mismo que B, también volverá verdadero. Y si es menor que b, volverá falso. Y entonces tenemos el mismo nodo, pero con menos sol también. Entonces podemos hacer menos que igual. Y eso hace lo mismo pero al revés. Entonces a debe ser el mismo que nuestro valor inferior o menor que nuestro valor inferior. Y eso volverá cierto. Ahora, debido a que estos nodos generan una variable booleana, en realidad podemos usar estos para decir variable booleana como estábamos haciendo en nuestra lección anterior. Entonces si creo una nueva variable y la llamo booleana, podemos usar estos mayores que nodos o menos que nodos para establecer una variable booleana si quisiéramos. También podemos usar estos nodos para controlar un nodo de rama. Entonces si busco rama y creo un nodo Branch, como hicimos en nuestra última lección, podemos controlar qué código se está corriendo dependiendo del resultado de nuestro mayor que o menor que. Nota. Otra nota que quería mostrarles chicos es el nodo igual. Ahora, esto funciona de manera similar a cómo funciona nuestro nodo booleano igual. Si arrastro hacia fuera de mi entero y hago los dos símbolos iguales y veo que nos crea un nodo igual. Y esto básicamente comprueba, son estos dos enteros iguales y da salida a un booleano que luego podemos usar en cosas como lo antes posible nodo booleano o un nodo de rama. A diferencia de los nodos anteriores, también podemos convertir la entrada a un float si queremos. Podemos elegir flotar de doble precisión porque eso es lo que era nuestra variable. Podemos conectar nuestro ejemplo de flotación en eso. Y esto comprobará, ¿ es nuestro entero exactamente lo mismo que nuestra variable de flotación? Si lo es, devolvemos true, si son diferentes a lo que devuelve false. Los enteros también tienen otra forma controlar qué código se está ejecutando. Así que si elimino este código aquí por ahora, y arrastro hacia arriba nuestro ejemplo entero. Si arrasto hacia fuera y busco switch, puedes encontrar switch on int. Y esto nos da una nota que nos permite controlar qué salida se ejecuta dependiendo de nuestro valor entero. Por lo que actualmente nuestros valores enteros son dos. Tenemos un bolígrafo por defecto. Entonces, ¿qué pasará si me hubiera dejado el botón del mouse en este momento es que nuestro bolígrafo predeterminado se ejecutaría y no pasaría nada más. Pero si agregamos un bolígrafo nuevo, se puede ver que se le agrega un pin que dice 0. Si agrego un par de alfileres más, ves que tenemos 012. Ahora si yo fuera a presionar el botón izquierdo del ratón, los dos lapiceros harían ron, porque nuestro entero se establece en dos. Si tuviera que cambiar esto a 0, entonces nuestro bolígrafo 0 correría en testículo o mediante el uso de una cadena de impresión. Simplemente establecemos esto en 0. Voy a copiar y pegar esto y vamos a establecer este a uno y este a dos. Ahora, dependiendo de lo que se ejecute nuestro entero de ejemplo, se ejecutarán las diferentes salidas si presionamos Play. Y me fui del ratón, se puede ver 0 se está ejecutando porque puse el valor a 0. Si lo configuro en uno, entonces nuestro se ejecutará y eso ejecutará nuestra cadena de impresión única. Se puede ver uno ahora corriendo. Esto puede ser útil si desea ejecutar código diferente dependiendo de qué valor sea. Y si yo fuera a decir establecer este valor para decir 99, ahora no hay una salida de 99 pines. Entonces, lo que en su lugar sucederá es que nuestro lápiz predeterminado se ejecutará en su lugar porque no hay salida coincidente para 99. Entonces si en algún momento quisimos eliminar algunas de estas salidas, solo podemos hacer clic derecho en el pin y podemos hacer quitar la pluma de ejecución para quitarlas. Por último, quiero mostrarte cómo podemos usar un flotador para establecer un entero. Ahora, esto es un poco diferente de lo normal, ya que nuestro flotador podría tener un ganador de valor decimal, y nuestro entero no puede almacenar ese valor. Entonces tenemos que redondear hacia arriba o hacia abajo o flotar. Entonces si obtenemos nuestro ejemplo float aquí, establecemos nuestro ejemplo entero. Conectamos esto hasta nuestro botón izquierdo del ratón aquí. Podemos arrastrar y conectar directamente a nuestro entero. Pero eso nos va a dar este nodo y esto redondeará hacia arriba, redondea hacia abajo o valor flotante. Entonces si esto es decir, 1.25, redondeará ese valor a uno, y luego dirá entero a uno. Entonces si agregué una cadena de impresión aquí para que podamos ver cual es el resultado en juego. Esperamos que este resultado sea uno cuando salí del mouse, que es, y aunque establezca este valor en 1.99, seguirá redondeando el valor a la baja. Entonces si vuelvo a golpear play, se puede ver que sigue redondeando ese valor a la baja a uno. Pero hay otros nodos que nos permiten redondear la flotación a un número entero diferente. Entonces si volvemos a la cabeza del blueprint de nuestro personaje y eliminamos el nodo. Eso es sólo el nodo por defecto para cuando arrastramos de un flotador a un entero. Pero también podemos arrastrarnos de nuestra flotación y buscar ronda. Y podemos usar el nodo redondo, que simplemente redondearía nuestro valor de flotación al número entero más cercano. Entonces si conecto esto aquí arriba, actualmente nuestra variable es 1.2. Entonces cuando dejamos el botón del ratón, habíamos esperado redondear hacia abajo a uno. Entonces si le damos a Play, se puede ver que está imprimiendo uno. Y si yo fuera a aumentar esto para decir 1.8, esperaríamos que redondee a dos. Ya ves que eso está funcionando correctamente. Ahora, no necesitamos este mismo proceso de conversión si queremos establecer un float en un entero, porque los flotadores pueden mostrar números enteros muy bien. Entonces si fuera a borrar este código, pondríamos nuestro flotador. Y tenemos nuestro ejemplo entero aquí. Sólo voy a reutilizar esta variable. Si conectamos eso, puedes ver que solo nos da esta pequeña nota que la convierte de entero a fluir. Y no hay redondeo pasando porque nuestro entero es un número entero. Y nuestra flotación puede almacenar números enteros muy bien. Para que puedas ver nuestro entero, es 99. Cuando dejamos el botón del ratón, cambiará nuestra flotación a esta noche. Entonces solo conectaré esto a nuestra cadena de impresión. Así que cuando golpeemos play, verás que está imprimiendo 99 porque es float como valor de punto, pero se está configurando en el valor correcto de nuestro entero. Ahora, hay muchos otros nodos matemáticos integrados en el motor que no estaremos cubriendo en esta lección porque hay muchos. Pero si arrastramos hacia fuera de nuestro entero, puedes desplazarte hacia abajo y encontrar la masa. puedes encontrar todo tipo de nodos Aquípuedes encontrar todo tipo de nodoscon los que puedes jugar si quieres. La mayoría de ellos son bastante específicos, por lo que probablemente no los uses con demasiada frecuencia. Pero lo que he mostrado aquí son los nodos más utilizados. Y puedes hacer exactamente lo mismo con las carrozas. Si me arrastro de ahí y simplemente nos desplazamos hacia abajo, podemos encontrar las matemáticas. Se puede ver que hay aún más para los flotadores porque son un poco más versátiles ya que tienen un punto decimal. Entonces eso va a ser todo por esta lección. Al igual que el booleano, estaremos usando flotadores y enteros mucho más en futuras lecciones solo porque son una especie de la parte central de hacer cualquier matemática en el motor. Por lo que te estarás familiarizando bastante con ellos en el futuro. 8. Variables (nombres, texto y cuerdas): Oigan a todos. En esta lección vamos a estar repasando los tipos de variables name, string y text. Todas estas variables se utilizan para almacenar texto y cada tipo de variable tiene algunas limitaciones y beneficios al usarlas. En primer lugar, tenemos el tipo de variable de nombre. Ahora bien, esto se usa para almacenar textos en el reproductor normalmente no ve. Es más por hacer referencia a ciertas cosas en código. Entonces, por ejemplo, cuando queremos obtener una ubicación de hueso o zócalos, usaríamos una variable de nombre para decirle al motor para qué hueso o zócalo queremos obtener información. Entonces debido a eso, la variable de nombre es bastante limitada. No necesita todos los nodos a los que las variables de cadenas y textos tienen acceso. Entonces comenzaremos creando nuestra variable de nombre. Así que sólo voy a crear una nueva variable y voy a llamar a este nombre de ejemplo. Vamos a establecer nuestro tipo de variable a la variable nombre. Y compilaremos. Una vez compilado, puedes ver que tenemos nuestro valor predeterminado aquí, y esto es solo un libro de texto estándar que podemos ingresar texto. Por lo que puedo poner hola. Esta es una variable de texto que almacena esa información. Ahora como es de esperar, igual que nuestras variables anteriores, podemos obtener y establecer esta variable también. Así que podemos arrastrarlo y obtener un nodo get, o podemos arrastrar y obtener un nodo conjunto. Ahora la única serie diferente que se establecen nodo tiene un cuadro de texto en el que también podemos introducir texto manualmente si así lo desea. Para que podamos establecer hola. Y si este nodo se ejecutará, sería amargo ejemplo nombre2 hola. Por supuesto, si tuviéramos otro tipo de variable de nombre, podríamos enchufar esto directamente a nuestro nodo set para establecer nuestro ejemplo llamado variable a un valor diferente. Ahora, porque todos nuestros tipos de variables que estamos viendo hoy son variables de textos. Todos almacenan texto. Todos se pueden convertir el uno al otro. Así que si yo fuera a crear una nueva variable de cadena, así que voy a llamar a esta cadena de ejemplo. El autoguardado salió de mi tiempo. Ahí vamos. Cadena de ejemplo. Podemos elegir el tipo de cuerda. Y si me sale mi variable de cadena, se puede ver si arrasto hacia fuera y me conecto hasta mi texto, sólo nos da este nodo de conversión y que tomará lo que sea nuestra cadena de ejemplo es, es texto valor y configurarlo a nuestro nombre de ejemplo. Y podemos hacer eso y lo contrario también. Así que si quisiéramos, podríamos establecer nuestra cadena usando el nombre de ejemplo. Y nos da ese nodo de conversión al revés. Las variables de cadena son los tipos de variables más flexibles de los textos, tienen muchos más nodos disponibles para ellos que los textos o la estancia de tipo variable de nombre. Debido a eso, puede ser útil convertir digamos, un nombre o una variable de texto a cadena, editar esa cadena, y luego convertirla nuevo a nuestro nombre o tipo de variable de texto. Como podemos hacer mucho más editando codificar con nuestro tipo de cadena. Por último, tenemos los tipos de variables de texto. Entonces voy a crear una nueva variable. Voy a llamar a este texto de ejemplo. Y vamos a establecer el tipo a texto y vamos a compilar para que obtengamos nuestro valor por defecto aquí. Puedes ver como nuestras variables anteriores, obtenemos un cuadro de texto para que podamos agregarte texto. Esta es una variable de texto, por ejemplo, podemos compilar y ese es ahora nuestro valor inicial para nuestro texto. Ahora, las variables de textos se utilizan para los textos que los jugadores tienden a ver. Entonces si tuvieras un sistema de diálogos o un sistema de menús o algo así, que el jugador realmente vea los valores del texto. Tendemos a usar variables de texto para eso. Y la razón es porque puede ser localizada, que se utiliza para convertir texto a diferentes idiomas, lo cual irreal tiene un sistema incorporado para. No estaremos cubriendo eso en esta lección. Pero es importante que cuando estés construyendo sistemas de menús o cualquier texto que el reproductor vea, utilices un tipo de variables de texto para que puedas tener acceso a ese sistema de localización que te permite tener múltiplesidiomas. Por lo que los textos pueden ser get y set de la misma manera que hemos hecho con nuestra cadena y nuestras variables de nombre. Para que podamos arrastrar esto y obtener un nodo get. Y ese nodo, se puede ver que es similar a nuestro nombre en cadena. Tenemos una entrada de texto y podemos establecer nuestro nodo a otra variable de texto. O podemos usar digamos, una cadena. Podemos obtener nuestra variable string. Podemos enchufar eso directamente en nuestros textos y se puede ver que nos da un tipo de nodo de conversión de aspecto diferente, pero hace esencialmente lo mismo, lo que sea cadena de ejemplo es, convertirá eso en texto, y luego podremos poner nuestro texto de ejemplo. Y lo mismo para nuestro nombre. Entonces si obtengo la variable de nombre, podemos enchufar eso directamente a nuestro texto. Se puede ver que obtenemos este nodo de conversión aparece automáticamente que convierte nuestro texto de nombre en un texto de texto. Y eso nos permite establecer nuestros textos de ejemplo variables. A continuación, quiero llevarte a través algunos nodos de uso común con estos diferentes tipos de variables. Y empezaremos con la cadena porque esa tiene la mayor cantidad de nodos que se pueden usar con ella y generalmente es el tipo de textos más flexibles que puedes usar codificación. Si arrastramos hacia fuera uno de los más utilizados es anexar. Entonces si buscamos append, podemos sacar este nodo aquí. Ahora el nodo append nos permite tomar múltiples entradas de cadena y combinarlas para una salida. Esto puede ser útil si quieres decir agregar texto adicional a una cadena sin cambiar la variable original. O si tenías múltiples variables de cadena, puedes conectarlas a append y luego generará esos valores de textos combinados juntos. Entonces por ejemplo, si pongo mi cadena de ejemplo a hello, y configuro el espacio B2B, esto es una prueba. La salida de este nodo sería hola. Esta es una prueba todo en un valor de cadena. Y podríamos usar esto para tal vez establecer otra cadena si quisiéramos o establecer cadena de ejemplo también. Podemos agregar entradas adicionales también. Entonces, si quisiéramos, podríamos tener otras variables enchufadas a estas entradas, y todas se combinarían juntas en una sola salida. Otro nodo que se puede usar con cadenas es el nodo contiene. Entonces si arrastramos hacia fuera y buscamos contiene, podemos obtener la cadena, podemos obtener contiene. Y esto buscará nuestra subcadena. Por lo que comprobará es la subcadena en este texto. Entonces si yo fuera a decir hola, buscaría esta cadena para ver si la palabra hola está contenida en ella y luego devolver un valor verdadero o falso. Entonces debido a que nuestra cadena de ejemplo está establecida en hello, esto devolvería true. Entonces tenemos un par de opciones. Entonces tenemos caso de uso. Esto significa que ¿es sensible a mayúsculas y minúsculas? Entonces por ejemplo, si yo fuera a cambiar nuestra edad a una h minúscula, El hola en nuestra cadena tiene una mayúscula. Así que esto en realidad devolvería false porque no coincide exactamente con nuestro hola en minúsculas. Tenemos búsqueda de n, lo que básicamente solo significa que buscará desde el final de la cadena hasta el principio en lugar de principio a fin. Otro nodo que podemos usar es la nota reemplazada. Así que si arrasto fuera de mi búsqueda de cadena para reemplazar, podemos crear el nodo de reemplazo. Y esto nos permite establecer textos que queremos reemplazar y con qué queremos reemplazarlo. Entonces si selecciono mi cadena de ejemplo aquí y agrego, digo la palabra test, pongo el Fromm a probar y los dos a irreal. Sustituirá todas las palabras de prueba por Unreal. Y entonces aquí solo podemos establecer si es o no sensible a mayúsculas y minúsculas y eso dará salida a la nueva variable. Así que en realidad podemos establecer que a nuestra cadena de ejemplo. Vale, tomo nodo solo para que podamos sentarnos y ganar. Conecta eso en nuestro nodo set, creará una cadena de impresión y conectará eso hasta la salida. Así que ahora cuando lleguemos a play, veremos nuestra cadena de ejemplo decir hola y rail en lugar de hello test, que es lo que actualmente está configurado. Ahora el último nodo que vamos a mirar es la nota igual. Así que si eliminamos nuestro reemplazado señaló arrastre hacia fuera de la cadena y podemos buscar iguales. Y queremos, bueno, aquí tenemos algunas opciones diferentes. Tenemos exactamente igual. Así que este es un nodo igual a mayúsculas y minúsculas. Entonces si creamos eso y vemos que tiene tres signos iguales. Y esto comprobará, ¿ambas entradas son exactamente iguales, incluyendo letras mayúsculas y minúsculas? Si lo es, devolverá verdadero si no falso. O podemos usar el igual a mayúsculas y minúsculas. Por lo que esto devolverá true si los valores de texto son los mismos, incluso si tienen diferentes valores en mayúsculas y minúsculas. Entonces por último, tenemos el no igual. Entonces esto hará lo contrario. Esto devolverá true si las entradas de texto son diferentes y devuelve false si las entradas de texto son las mismas. Así que vamos a pasar a nuestra variable de nombre ahora, si quieres encontrar alguna de las otras funciones de cadena están disponibles, sólo tienes que arrastrar fuera de una variable de cadena, buscar cadena. Y podrás encontrar todas las funciones de cadena bajo la categoría de cadena que puedes ver aquí. Así que sólo vamos a eliminar este código ahora y traer en un ejemplo nombre get nodo como ese. Ahora, nuestra variable de nombre es mucho más restringida que las notas de cadena. Sólo hay unas pocas notas que en realidad se pueden utilizar para eso. Si nos arrastramos, podemos buscar a los iguales. Esto nos da el nodo igual original. Usted puede notar esto de nuestro video entero, pero no podemos cambiar las entradas. Entonces si hago clic derecho, se puede ver que no hay opciones de conversión. Este nodo, estamos básicamente sólo tomar en variables con nombre y comprobar si son iguales y devolver un valor verdadero o falso. También podemos crear un switch en NameNode. Entonces si eliminamos este nodo y arrastramos hacia fuera y buscamos switch, podemos crear un switch en namenode. Ahora esto funciona de manera similar al switch entero que creamos en nuestras lecciones anteriores. Podemos agregar nuevos pines de salida. Y dependiendo de lo que nuestra variable de entrada esté establecida, podemos ejecutar un pin de salida diferente. Para que puedas ver más en el panel Detalles tenemos nombres de pin. Para que pueda cambiar estos nombres para saludar. Y cambiaremos el segundo a prueba. Ahora, si nuestro nombre de ejemplo se establece en, si sólo lo cambiamos a hello, cuando este nodo se ejecute, nuestro hello new pen se ejecutaría. Y si estuviera configurado para probar, nuestro pin de prueba funcionaría. Y luego si se configurara en algo completamente diferente, solo se ejecutarían letras aleatorias que nuestro bolígrafo predeterminado. Así que usted puede controlar qué código se está ejecutando por una variable de nombre usando uno de estos, este nodo en realidad también funciona con nuestra cadena, así. Así que si sólo arrastro rápidamente una cadena, podemos hacer un interruptor en la cadena también. Eso funciona exactamente de la misma manera. Podemos crear nuevas entradas, cambiar sus nombres, y se ejecutarán dependiendo de lo que nuestra entrada de cadena esté establecida. Por último, pasaremos a nuestra variable de texto. Así que sólo voy a eliminar estos y vamos a arrastrar en un hueco para nuestro ejemplo de texto, igual que nuestro nodo cadena, los textos pueden utilizar un igual nodos. Entonces si buscamos iguales en C, tenemos los mismos nodos que teníamos para nuestra cadena. Tenemos exactamente igual, que significa que si ambas entradas tienen que ser exactamente iguales, los valores de los textos para que devuelva true. Tenemos el caso insensible a mayúsculas y minúsculas, por lo que sólo tiene que ser los mismos valores de texto. No importa si son mayúsculas o minúsculas y luego regresan true. Y luego tenemos los no iguales, lo que significa que ambas entradas tienen que ser diferentes para que la nieve vuelva verdadera. Ahora, nuestro nodo de texto no puede hacer conmutadores. Entonces si arrasto hacia fuera y busco interruptor, se puede ver que no hay interruptor en el texto, así que eso es una limitación. Tampoco puede hacer cosas como anexar. Se puede ver que esas opciones no están ahí como lo están nuestras cuerdas. Pero podemos usar formato, formato texto, que es un poco más de una versión avanzada del nodo append. Ahora, el nodo de formato de texto es realmente útil para cosas como crear descripciones de elementos o en cualquier lugar donde vayas a tener diferentes entradas en tu texto. Así que lo que quiero decir con eso es si agregamos un formato, por lo que el nombre de este artículo es ahora podríamos ser capaces de pasar el ratón sobre diferentes elementos y queremos que este nombre del elemento cambie, pero no queremos que estos textos originales cambien. Lo que podemos hacer es agregar estos dos corchetes aquí, y voy a hacer zoom para que puedas ver el tipo de corchete. Ahora, sea cual sea el nombre que coloquemos entre estos paréntesis, nos agregaremos una nueva pluma. Voy a llamar nombre a este artículo. Pulse Enter. Se puede ver que ahora tenemos una entrada de nombre de elemento, y este es un comodín para que podamos agregar, podemos enchufar un texto si queremos hacer todo, podemos agregar un entero o una cadena o un nombre, lo que prefieras. Y lo que sea que introduzcamos, saldrá el nombre de este ítem es y luego la entrada. Entonces como ejemplo, si agrego un tick arrastrará hacia fuera y haré cadena de impresión. Simplemente podemos conectar el resultado a nuestra cadena de impresión. Y conectaré mis textos de ejemplo al nombre del elemento, y cambiaremos el texto de ejemplo a Apple así. Por lo que ahora cuando lleguemos a play, veremos que el nombre de este artículo es Apple. Ver el nombre de este artículo es apple. Y podemos extender esto aún más. Por lo que podríamos poner este artículo hace, y volveremos a hacer los soportes, tipo de daño y golpear Enter y ahora crear otra entrada. Y podríamos decir que usa nuestra cuerda. Podemos arrastrar eso en, conectar hasta el tipo de daño. Y podemos poner fuego. Y agregaremos daños después de aquí. Entonces ahora diré que el nombre de este artículo es Apple y el artículo hace daño de fuego, golpea play, y verás que se está imprimiendo correctamente. Si quisiéramos, podríamos establecer estas variables usando otros códigos para que cada vez que pasemos cursor sobre un elemento diferente, por ejemplo, el nombre del elemento cambie al nombre correcto y el tipo de daño cambia a decir las grietas tipos de daños. Entonces si cambio esto dos veces, se puede ver ahora cuando golpeamos play, dice daño de hielo en lugar de daño phi. Eso va a ser todo por esta lección. Esperemos que ahora tengas una idea de lo que sería útil cada una de estas variables. Sólo para repasarlo de nuevo, las variables de textos son las que usamos para mostrar realmente textos al jugador. Ahí es donde vamos a almacenar cosas como el nombre de un artículo, descripciones, cosas así. Entonces tenemos cadenas que son útiles para editar en nuestro código. Pero no tendemos a mostrar eso al jugador porque no se pueden usar para la localización. Y luego tenemos la variable de nombre que es más utilizada puramente codificar para hacer referencia a cosas como nombres de huesos, zócalos, filas DataTable, cosas por el estilo. 9. Variables (vectores, rotadores y transformaciones): Oigan a todos. En esta lección vamos a estar repasando vectores, rotadores y transformar tipos de variables. Vectores o una variable utilizada para definir objetos, ubicaciones. Se compone de flotadores libres llamados x, y, y z Si selecciono uno de mis cubos aquí en el nivel, se puede ver en el panel Detalles tenemos una ubicación y que tiene una ubicación X, Y, y Z. Y a medida que muevo el cubo, se puede ver que esos valores cambian dependiendo del eje que mueva el cubo M. Los rotadores son similares a los vectores en que están formados por flotadores libres. Tienen X, Y, y Z. También tienen nombres secundarios. Entonces si tenemos nuestro cubo seleccionado, puedes ver x es rho, y es pitch, y z es tu. Si presiono E con mi cubo seleccionado, se puede ver que podemos rotar nuestro cubo y esos valores comienzan a cambiar dependiendo del eje en el que estemos girando nuestro cubo. Entonces, por último, nos hemos transformado. Ahora bien, estas variables de ubicación y rotación y escala son en realidad parte de una variable llamada transformada. Transformar se utiliza para definir la ubicación, rotación y escala de un objeto en el mundo. Ahora, la escala es en realidad solo otro vector que se compone de tres flotadores con los mismos nombres que nuestro vector de ubicación. Tenemos x, y, y z Y uno significa que el AXA es su tamaño estándar normal. Si aumentamos esto para decir dos, será el doble de su tamaño estándar, como puedes ver aquí con nuestro cubo. Entonces ahora vamos a echar un vistazo a cómo podemos usar y cambiar estos valores dentro de un blueprint. Entonces abriremos aquí a nuestro personaje en tercera persona. Y sólo para empezar, vamos a crear una nueva variable y vamos a llamarla vector. Y vamos a cambiar nuestro tipo de variable a un vector. Y vamos a arrastrar que en y obtener la variable también arrastrando un conjunto también. Para que puedas ver cómo es eso. Ahora. Nuestro nodo get se ve más igualquenuestras variables anteriores, pero nuestro conjunto ahora tiene tres entradas , y esto nos permite establecer un valor para x, y y z. que o menos igualquenuestras variables anteriores, pero nuestro conjunto ahora tiene tres entradas, y esto nos permite establecer un valor para x, y y z. número de punto decimal porque estos son solo flotadores individuales que podemos establecer. Podemos establecer estos de algunas maneras diferentes. Podemos conectar otro vector hasta esta entrada, y eso solo establecerá nuestro vector a cualquier variable que conectemos a él. Podemos configurarlos individualmente manualmente. Para que pudiera establecer estos para decir 123. O podemos realmente arrastrar hacia fuera y buscar el vector de carne, el nodo vector. Y eso en realidad nos da este nodo, que nos permite enchufar una tarifa variable flotante cualquiera de estos valores x, y, y z. Otra forma en que podemos establecer esta variable es si eliminamos nuestra nota de make aquí y hacemos clic derecho en el lápiz vectorial, podemos dividir struct pen, y eso en realidad nos permite establecer los flotadores directamente en el nodo set. Entonces no tenemos que tener que hacer nodo vectorial. Y si queremos recombinar estos de nuevo en el lápiz original, solo podemos hacer clic derecho en seleccionar Struct Pin recombinado. Y eso restablecerá nuestro nodo SAT. Ahora con nuestro vector, si lo seleccionamos, puedes ver que necesitamos recompilar nuestros blueprints, así que lo haremos rápidamente y de nuevo, en nuestros valores predeterminados, podemos establecer un valor x, y y z, y estos serán nuestros valores iniciales para esta variable. A continuación, sólo te voy a llevar por algunos nodos comunes que se usan con vectores. Entonces el primero es R igual. Si arrastramos y buscamos iguales, entonces tenemos igual exactamente. Este es un nodo que básicamente comprueba ambos vectores que se ingresan en este nodo exactamente igual que los valores x, y y z son los mismos. Si lo es, lo intentará y tratará. También tenemos un casi igual. Entonces si usamos la nota igual aquí, se puede ver que eso nos da dos entradas vectoriales y luego una entrada de flotación. Y lo que hace esto es que podemos enchufar dos vectores, n. y podemos decir, podemos darle una tolerancia al error. Entonces podemos configurar esto para decir uno. Y esto volverá verdadero si los valores x, y, y z están dentro de uno de cada uno de los otros. También podemos usar todos los nodos matemáticos estándar con nuestros vectores para que podamos arrastrar hacia fuera, podemos usar el Add Node que nos da la capacidad de agregar dos vectores juntos y devolver el resultado. Podemos usar el nodo menos o el nodo resta. Eso hace exactamente lo mismo, pero resta los dos vectores el uno del otro y devuelve la salida. Tenemos el nodo Multiplicar, por lo que podemos buscar multiplicar, y eso nos dará el nodo más ply. Esto multiplicará la x por dx del valor superior. El valor y es y y el z por el valor superior C. Y pondré la respuesta. Por supuesto que también tenemos divide, por lo que podemos buscar divide. Y eso opera de la misma manera. Divide el valor superior pero el inferior y nos da la respuesta. Ahora, al igual que nuestros nodos de mapas anteriores, podemos cambiar algunas de estas entradas. Entonces, por ejemplo, puedo hacer clic derecho en la entrada inferior aquí y convertir el pin. Podemos cambiar esto a otras variables matemáticas para que los enteros floten. Por ejemplo, si quisiéramos decir menos un cierto flotador de todos nuestros valores x, y, y z y nuestro vector, podríamos cambiarlo a un flotador y hacer eso. Podemos hacer exactamente lo mismo de nuestro Add Node también. Así que tal vez tenemos un entero esta vez queríamos agregar un valor entero a todos nuestros valores x, y, y z. Eso también lo podemos hacer. La siguiente etapa que vamos a ver se llama los nodos de vuelta. Por lo que sólo vamos a eliminar estas notas aquí. Arrastraremos fuera de mi vector y buscaremos vuelta y crearemos ese nodo. Y esto nos permite tomar dos vectores y dar una salida vectorial. Y este valor alfa es un flotador. Y este es esencialmente el valor entre estos que queremos. Entonces, por ejemplo, si tuviéramos un valor y y un valor y B, y establecimos esto en 0.5. La ubicación de salida sería exactamente entre estas dos ubicaciones de entrada. A continuación, vamos a echar un vistazo al nodo break. Ahora si te acuerdas de nuestro nodo set, podemos arrastrar hacia fuera y buscar make factor. También podemos hacer lo mismo con un vector get node podemos arrastrar hacia fuera y podemos buscar break. Y podemos romper ese vector ahora en sus valores de flotación x, y y z. También podemos hacer clic derecho en nuestro vector, obtener nodo y seleccionar Split Struct Pin. Y eso nos da acceso directo a esos valores también. Y si queremos recombinarlo, simplemente hacemos clic derecho de nuevo y seleccionamos recombinar estructuras pluma. Ahora vamos a utilizar realmente el vector para empezar a efectuar un objeto en el mundo. Para que puedas acostumbrarte a hacer eso. Para empezar, vamos a crear un nuevo acceso. Por lo que iremos al navegador de contenido, clic derecho y crearemos una clase de blueprint. A continuación, seleccione axón. Y llamaremos a este cubo, abriremos nuestro blueprint de colas, y añadiremos un nuevo componente llamado cubo. Eso solo nos va a dar un componente de cubo, compilará y guardará esto, y luego volverá al Blueprint Third PersonCharacter. Y haremos clic derecho y buscaremos el botón izquierdo del ratón. Entonces de prensa arrastrará hacia fuera y buscará el actor de spawn de la clase. Y esto va a crear un nuevo actor en nuestro nivel cada vez que dejamos el botón del ratón. Y vamos a configurar la clase cubo porque queremos desovar nuestro cubo. Y vamos a arrastrar fuera de spawn transform y buscar make transform. Esto funciona de manera similar al nodo make vector. Simplemente nos permite en su lugar hacer una variable de transformación. Así que puedes ver que tenemos nuestro vector para ubicación o rotador para rotación y luego nuestro segundo vector para escala. Y vamos a estar usando la ubicación para elegir dónde queremos nuestro engendro en cubos. Quiero que mi cubo desove justo encima de la cabeza de mi personaje. Entonces voy a usar la carga de ubicación del actor get va a crear eso. Se puede ver que la salida es un vector y la entrada es un objeto actor. Y actualmente sólo dice sur porque nada está enchufado a él. Entonces vamos a estar haciendo que nuestros personajes en tercera persona actúen a la ubicación. Si arrastramos hacia fuera y queremos usar un add notas. Entonces voy a hacer agregar. Sólo estamos borrando nuestra variable vectorial aquí por ahora. Ahora quiero que desove un poco por encima de mi personaje, porque si enchufo esto directamente a la ubicación que un cubo va a desovar justo dentro de nuestro personaje, lo que estropeará la colisión. Entonces vamos a tomar la salida, enchufar eso a la ubicación, y vamos a aumentar esto por decir, 150. Entonces está muy bien por encima de nuestro personaje. Por lo que ahora podemos compilar y golpear play. Cuando dejé el botón del ratón, se puede ver un cubo como desovar justo encima de mi cabeza. Si me muevo sobre otro cubo o desove, seguirán haciendo eso a medida que me muevo por el nivel. Ahora si quería que el cubo me siguiera, eso también lo podemos hacer. Entonces si salgo y vuelvo a nuestro Plano de PersonaTerceros. Entonces para que nuestro cubo nos siga, necesitamos hacer algunos cambios a nuestro código para empezar, vamos a arrastrar hacia fuera desde el valor de retorno aquí, y vamos a seleccionar Promocionar a Variable. Lo que esto hará es crear una nueva variable que sea del mismo tipo que nuestro pin desde el que estamos arrastrando. Por lo que promoverá la variable. Esto creará un tipo de variable de cubo que llamaremos cubo. Y esta es una variable acto de referencia que estaremos cubriendo en una lección posterior. Pero esencialmente, esto sólo nos permite decirle a nuestro nuevo cubo lo que queremos hacer con él. Entonces vamos a conseguir nuestra nueva variable en cubos. Vamos a arrastrar hacia fuera y vamos a hacer es válido y crear un nodo es válido. El de abajo aquí, vamos a hacer un poco más de espacio y vamos a conectar esto hasta el prensado. Y entonces el no es válido hasta nuestro spawn out al cubo. Y lo que esto hace es básicamente comprobar, tiene r cubo Admin creado antes. Si no se ha creado antes, entonces no es válido, se ejecutará, y eso nos permitirá crear un cubo. Y si nuestro cubo ha sido creado, entonces es válido, correrá, que no hará nada. De manera que eso solo nos impide crear más de un cubo. Después crearemos un nodo tick. Entonces haremos evento tick. Y en realidad copiaremos estos dos nodos también. Y conectaremos el ejecuto a lo auténtico. Y luego arrastraremos fuera de nuestro cubo y vamos a usar al actor de set. Nodo de ubicación. Esto nos permite cambiar la ubicación de nuestros cubos dependiendo de nuestra nueva entrada. Estamos usando. Esto es válido solo para asegurarnos de que no obtenemos ningún error. Porque si tratamos de establecer la ubicación de nuestros cubos sin que nuestro cubo haya sido engendrado todavía, obtendremos algunos errores. Entonces usamos el es válido, detén esos errores. Y vamos a establecer su nueva ubicación a la misma que nuestras ubicaciones de desove. Entonces sólo voy a mover esto un poco más alto. Y copiaremos y pegaremos estos nodos. Y conectaremos esto a nuestra nueva ubicación. Así que ahora, solo para correr a través de este código, cada cubo de fotogramas establecerá su ubicación a nuestra ubicación actual de caracteres más 150 y altura. Y podemos jugar a esto ahora. Si le pego play y luego click izquierdo del mouse y vemos que tenemos nuestro cubo como siguiéndome alrededor. Si hago spam con el botón izquierdo del mouse, en realidad no está creando más cubos también. A continuación, vamos a estar echando un vistazo a la variable rotadora. Por lo que saldremos fuera de juego y volveremos a nuestro Third Personcharacter. Guardaremos este código aquí por ahora porque podemos usarlo para hacer algunas cosas con el rotador. Una vez te he mostrado algunos de los nodos de uso común con la variable rotadora. Así que crearemos una variable rotadora la misma manera que lo hemos hecho antes. Crear una nueva variable. Llamaremos a esta herramienta Rotar. Y establecemos su tipo al tipo de rotador. Entonces compilaremos, apuntalaremos nuestro valor por defecto. Se puede ver aquí es muy similar a nuestro vector. Tenemos una X, Y, y Z, y estos son valores de flotación. Podemos obtener nuestro rotador arrastrando y seleccionando get. Y podemos sembrar rotador haciendo lo mismo con la opción set en C. Nuevamente, igual que nuestro vector, nos da una x, y, y z Podemos arrastrar hacia fuera y buscar, hacer rotador. Y podemos seleccionar la opción de rotar aquí. Y eso nos da esas variables que podemos usar para luego configurar nuestro rotador. O si queremos, podemos hacer clic derecho y seleccionar Dividir Struct Pin para obtener acceso a esos directamente. Por lo que podemos usar un flotador para configurar cualquiera de estos individualmente. Al igual que nuestro vector, también podemos arrastrar hacia fuera de nuestro rotor, obtener nodo y buscar rotador de rotura. Y eso nos da nuestros valores x, y, y z como flotadores si necesitábamos acceder solo a uno de esos. Ahora, a diferencia del vector, no podemos usar mapas normales ahora. Así que si nuestra variable rotador, hay nodos personalizados que se utilizan sólo para esto. Así que si arrastramos hacia fuera y buscamos combinado, se puede ver que tenemos un nodo de rotadores combinados, y esto esencialmente sólo combina a con los valores B. Por lo que podría usar esto para valores menos o más a su rotador y luego le dará una salida. También tenemos acceso al laboratorio para nuestro rotador. Entonces si arrastramos hacia fuera y buscamos LAP, vemos que tenemos rotador de labios y esto funciona igual que nuestro amor por nuestro vector lo hizo. No podemos tener dos entradas para rotar o entradas. Y podemos establecer un alfa, y este es un valor entre 011 sería el valor de salida solo sería el valor b y 0 sería el valor a, y luego 0.5 sería el valor entre estos dos valores. A continuación tenemos el nodo vector de rotación de gap x. Entonces eliminaremos ese nodo aquí y buscaremos rotación x vector. Y esto es importante porque nos permite obtener la dirección hacia adelante en una variable vectorial de un actor. Entonces x es el vector hacia adelante para la mayoría de los actores. Entonces si vamos a nuestro nivel aquí, sólo arrastra en una plantilla de tercera persona. Se puede ver esa x, que es roja. Se puede ver rojo es x es nuestro delantero. Entonces esto nos permite obtener la dirección hacia adelante para nuestro personaje en cualquier momento, para que lo rotemos así, voy a seguir dirección ahora estaría por aquí. Pero se puede ver el mundo x-dirección sigue así. Podemos usar este nodo para obtener la dirección a que se enfrenta algo dependiendo de su rotación. Podemos mostrarte esto en un ejemplo. Si vamos a nuestra plantilla de tercera persona y vamos a editar parte de este código para que nuestro cubo realmente genere hacia adelante en una dirección de nuestros personajes de cara. Entonces para hacer eso, vamos a conseguir la rotación de nuestros personajes. Entonces sí conseguiremos rotación, encontraremos la rotación. Ahí vamos, consigue rotación activa. Esto nos da la rotación actual de nuestro carácter. Voy a arrastrar hacia fuera y vamos a hacer conseguir rotación x vector. Y ahora vamos a multiplicar esto. Entonces arrastraremos hacia fuera del vector y haremos el nodo Multiplicar. Y vamos a cambiar la entrada aquí a un flotador porque queremos multiplicarlo por un valor de flotación. Y aquí vamos a establecer qué tan por delante de nuestro personaje queremos r desove en cubos, y esto es en centímetros. Entonces si pongo esto a 500, entonces vamos a más estos dos son actores ubicación actual. Entonces básicamente estamos diciendo 500 centímetros frente ubicación actual de nuestros personajes. Queremos desovar este cubo. Así que vamos a arrastrar hacia fuera de nuestra nota más aquí y vamos a hacer otro nodo más. Y agregaremos valor a nuestros tiempos aquí. Establezca esto en la ubicación. Simplemente voy a reutilizar esto y enchufar esto nuestra nueva ubicación aquí arriba para que cuando engendremos nuestra cola, pero nos siga, esa ubicación, compile y guarde esto. Y eso jugará y jugará. Entonces si le pego play, se puede ver que puedo correr por ahí y si hago clic dentro el cubo se genera por ahí. Y si roto el personaje, se puede ver que el cubo en realidad está actualizando su ubicación delante de mí. Ahora no lo he configurado para usar la rotación de la cámara. Entonces por eso cuando miro a mi alrededor, no cambia el cubo. Pero en cambio cuando roto el personaje, se puede ver que el cubo ahora se está actualizando, está cinco metros por delante de nosotros, pero sigue manteniendo la ubicación de los personajes, por lo que sigue siguiendo junto con nosotros . Si yo fuera a cambiar ese valor 500 para decir 200, que el cubo estaría más cerca nosotros porque es sólo doscientos, doscientos centímetros frente a nosotros. Por lo que ahora puedes ver que está dos metros por delante de nosotros y sigue siendo actualizaciones en la dirección hacia adelante de nuestro personaje. Así que ahora si volvemos a nuestro blueprint Third PersonCharacter, hay un par de otras notas que podemos usar con nuestra variable rotadora. Así que al igual que tenemos la nota de ubicación del actor de set, también tenemos la rotación del actor set, rotación de nodos, que hace lo mismo, pero en su lugar los conjuntos son rotación. Y en realidad podemos hacer algo de rotación si queremos con nuestro cubo. Entonces, si arrastramos fuera de nuestro cubo y establecemos rotación del factor en eso, y decimos cada fotograma, cada cuadro que queremos rotar un poco nuestro cubo. Por lo que necesitamos conseguir como rotación actual y luego agregarle. Entonces vamos a arrastrar hacia fuera y sí llegar a la rotación. Haremos rotadores de combinación. Simplemente enchufaría esto aquí y diremos, vamos a aumentar esto en vamos a aumentar esto uno y a ver cómo se ve esto. Así que golpeó Play. Si me fui del ratón, verán que ahora está girando en esa dirección. Si tuviéramos que cambiar los valores en nuestro nodo rotador combinado, podemos agregar uno en la y también, y veremos que haga una rotación diferente. A continuación, vamos a cubrir el tipo de variable de transformación. Ahora, ya hemos cubierto un poco en esta lección, pero esencialmente una transformación es solo una variable que se compone de un vector para la ubicación, un rotador para la rotación, y luego otro vector para nuestra escala de actores. Y podemos acceder a esa variable de la misma manera que hemos sido nuestra ubicación y rotación. Así que si nos dirigimos de nuevo al ThirdPersonCharacter Blueprint ahora, podemos crear una nueva variable. Llamaremos a este formulario trans. Y vamos a establecer su tipo para transformar. Ahora, de manera similar a las otras variables, podemos obtenerlo y podemos centrarnos. Ahora puedes ver que no tiene las opciones x y porque hay múltiples entradas que son necesidades de transformación desde nuestro nodo set. Si nos arrastramos, podemos hacer transformar. Y esto nos da acceso para establecer su ubicación, rotación y su escala. Y este es un vector, un vector y nuestro rotador aquí en el medio. Y podemos establecer estos manualmente si lo desea, en este nodo. O podemos enchufar vectores y rotadores como lo hemos hecho antes. También podemos dividir este nodo tan bien como lo hemos hecho con los otros. Entonces si hacemos clic derecho en el pin aquí, podemos hacer Split Struct Pin que nos da acceso a la ubicación, escala y rotación. Y en realidad podemos dividir esto aún más si queremos decir, solo quería establecer esta transformación X1 y tenía una variable de flotación. En realidad podría volver a dividir esta pluma. Y se puede ver que ahora puedo establecer el valor x float para nuestra ubicación todo en este único nodo. Y luego si quiero recombinarlo, recombine y luego vuelva a combinar, y vuelve a la normalidad. Podemos hacer lo contrario con nuestro nodo transform get, podemos arrastrar hacia fuera, puedes buscar una transformación break break y podemos acceder a nuestra ubicación y rotación y escala. También podemos dividir esto también para que podamos hacer clic derecho y hacer Split Struct Pin. Y eso nos da acceso a esos también. Ahora podemos configurar las transformaciones de un actor. Así que si volvemos a nuestro código de antes, puede ver que hemos estado diciendo la ubicación del actor y la rotación activa por separado, pero en realidad podríamos arrastrar hacia fuera y utilizar el conjunto actor transform node. Y eso nos daría acceso a su transformada, que por supuesto está conformada por su ubicación y rotación. Para que pudiéramos hacer nueva transformación. En realidad podemos estar configurando estos sin estos dos nodos. Así que si elimino estos dos, en realidad podríamos estar haciendo eso con un nodo. Entonces voy a enchufar esto a nuestro es válido. Usando un nodo make, podemos simplemente tomar nuestra ubicación desde donde lo estamos obteniendo antes. Así que aquí abajo. Entonces nuestra rotación, ponemos eso en rotación y dejaremos escala como una sola. Pero si quisiéramos, podríamos ajustar eso también. Ahora bien, si golpeamos play, en realidad podemos ver que sigue funcionando exactamente igual que antes. Solo estamos usando ese nodo ahora en lugar de los dos separados. Ahora, lo último que quería cubrir en esta lección es la diferencia entre las transformaciones locales y mundiales exhalarán juego por ahora y nos dirigiremos al plano de personajes de tercera persona e inherente. Iremos a la ventanilla. Ahora en la ventana gráfica podemos agregar un componente, así que solo voy a agregar un cubo. Así que ese es el cubo del sábado ahora en nuestra ventana gráfica de planos. Y podemos ver que tenemos una ubicación aquí y actualmente esta leyendo los ceros son 0. Eso se debe a que nuestros cubos ubicación local actual. Es 0, el centro de nuestro carácter. Si fuera a moverlo hacia adelante, se puede ver que está aumentando en la x Y ahora si puedo tirar de esto y colocar esto en, colocar a nuestro personaje en el nivel, se puede ver a nuestros personajes ahora en este ubicación. Pero si selecciono mi componente de cubo, se puede ver que nos está dando un valor diferente al de nuestro actor. Ahora, eso es porque este valor es una ubicación local. Por lo que actualmente se encuentra a 170 centímetros del centro de nuestro personaje. Pero cuando seleccionamos a nuestro personaje, así que cuando seleccionamos al actor completo, nos da nuestra ubicación mundial, y esa es la ubicación de nuestros actores en todo el mundo. Ahora podemos cambiar ambos componentes j, ubicación del mundo y la ubicación local en los planos. Entonces para hacer eso, voy a abrir el carácter de tercera persona aquí, que puede borrar mucho de este código. Por lo que eliminaremos todos los códigos conectados a la tecnología y eliminaremos todo este código también. Entonces solo nos quedamos con nuestro botón izquierdo del ratón de ellos. Entonces ahora vamos a ir a nuestra ventanilla y vamos a seleccionar nuestro cubo que creamos. Voy a restablecerlo a 0, así que está justo en el centro de nuestro personaje aquí. Y luego la gráfica de eventos, vamos a arrastrarla hacia fuera de los componentes. Y le vamos a decir que establezca su ubicación relativa. Y vamos a establecer esto a 0 en la x 0 y la y, y luego 150 en la z. ahora cuando pulsemos el botón izquierdo del ratón, lo moverá a esta nueva ubicación. Entonces si le pegamos a Play y vemos actualmente está justo en el centro de mi personaje. Pero si hago clic izquierdo, va por encima de la cabeza de mi personaje. El motivo por el que se hace eso es porque estos ceros, ceros 0 ubicación para mi cubo está justo en el centro de mi personaje. Entonces todo lo que he hecho es decirle que aumente eso en un 150 en la z. y ahora está por encima de la cabeza de mi personaje. Ahora bien, si cambiamos este código a lugar de ubicación relativa o establecemos ubicación mundial, y usaremos los mismos valores. Entonces x es 0, y es 0, y luego z es 150. Y si le pegamos a Play, no me voy a mover. Acabo de hacer clic y ver mi cubo. Si presiono F1 está por allá detrás de la pared. Ahora la razón por la que está haciendo eso es porque eso es 0 en el mundo, pero más 150 centímetros arriba. Ahora si me muevo, en realidad se puede ver el cubo se mueve con mi estilo de personaje. Y eso es porque el cubo está apegado a mi personaje. Pero le hemos dicho que se mueva a 00150 en el mundo. Así que esa es la diferencia entre establecer una ubicación local y una ubicación mundial. Ahora, si presiono F libre para volver a nuestro modo de iluminación normal allí y para acceder al wireframe. Puedes presionar F1. Si no sabías eso. Presione a tope F3 y salga. Podemos obtener el mismo resultado con nuestra ubicación en el mundo conjunto que obtuvimos con nuestra ubicación relativa del conjunto, solo tenemos que hacer obtener la ubicación del actor. Así obtenemos la ubicación mundial de nuestro personaje actual. Nos arrastramos hacia fuera y haremos más más 1 quinto a su ubicación mundial actual. Y vamos a poner nuestro cubo a eso. En cambio, estamos tomando la ubicación actual de nuestros actores en el mundo, colocando 150 y luego configurando R al cubo a eso en su lugar. Para que podamos probar esto. Ahora bien, si le pego a Play, si hago clic con el botón izquierdo, se puede ver que ahora tenemos ese mismo resultado que hicimos cuando usamos la ubicación relativa, porque ahora estamos agregando en nuestros personajes ubicación comodín. Por lo que nuestro cubo ahora se queda por encima de la cabeza de nuestro personaje. Entonces eso es todo por esta lección. En nuestra siguiente lección, vamos a echar un vistazo a ACTA, un tipo de variable de objeto. Los hemos usado un poco en esta lección, pero estaremos aprendiendo mucho más sobre ésos en nuestra próxima lección. 10. Variables (Actores y objetos): Oigan a todos. En esta lección vamos a estar echando un vistazo las variables de referencia de objetos y cómo se usan en el motor. Entonces he puesto un ejemplo muy básico aquí. Tenemos un gatillo y tenemos algunos cubos. Y cuando nuestro jugador entra en el gatillo, uno de nuestros cubos todos se mueven hacia arriba. Y luego cuando el jugador abandone el gatillo, uno de ellos se mueve hacia abajo. Si le pego a Play y me he topado con un gatillo, puede ver que el cubo correcto se mueve hacia arriba y si dejo el gatillo, se mueve de nuevo hacia abajo. Ahora bien, esto está pasando porque nuestro pelo gatillo tiene una referencia a ese cubo que puedes ver aquí abajo. Se trata de un objeto o una variable activa que se establece en nuestro cubo. Y en realidad puedo cambiar esto eligiendo el actor pick del botón de Escena. Puedo hacer clic en uno de nuestros cubos para poder recoger el cubo de la izquierda aquí. Y ahora cuando golpeamos play y atropello el gatillo ahora está cambiando nuestro cubo izquierdo. Y esencialmente lo que las referencias a objetos nos permiten hacer es decirle al motor qué objetos específicos queremos efectuar. Porque todos estos cubos son exactamente iguales. Utilizan nuestra clase cubo desde nuestro navegador de contenido, pero cada uno es un objeto individual. Es posible que queramos afectar a uno de ellos sin afectar a los demás. Y las referencias a objetos nos permiten hacer eso. Echará un vistazo a nuestro plano de gatillo y verá cómo funciona esto. Entonces sólo voy a abrir eso. Se puede ver que tenemos nuestra variable de objeto seleccionada, que es lo que estamos usando para controlar qué cubo queremos efectuar. Así que puedes ver esto se llama objeto seleccionado y está configurado en nuestro cubo. Y tenemos esa variable arriba aquí. Está configurado para escribir Actor. También tenemos un código aquí que controla lo que hacemos con nuestro objeto seleccionado. Por lo que tenemos activa inicio solapamiento, un actor de eventos y solapamiento. Estos son algunos de esos eventos que están integrados en el motor. Por lo que estos correrán siempre que algo se superponga o se active o deje de superponerse a nuestro gatillo. Ahora, puedes ver que ambos nodos tienen estos pines hiperactivos y estos son referencias a objetos. Nos están diciendo exactamente qué objeto se superpuso o gatillo. Ahora bien, este es un nodo de costos. Tendremos una lección por separado sobre costos porque son bastante importantes y les falta mucho. Pero esencialmente lo que esto está haciendo es tomar un acto de referencia y está comprobando, ¿es este actor un Third PersonCharacter? Y si lo es, entonces permitirá que nuestro código ejecute una F nada. Se devolverá costo fieltro. Por lo que estamos esencialmente usando este nodo de costo como un cheque. Básicamente estamos diciendo, si un acto para parar comienza a abrirse lamiéndonos, ¿es un personaje en tercera persona? Si es así, entonces podemos ejecutar el resto de nuestro código. Si no lo es, entonces no ejecutamos nuestro código. Y luego el resto de nuestro código es básicamente sólo tomar nuestro objeto seleccionado que estamos configurando en las opciones aquí. Y le estamos diciendo que establezca una nueva ubicación. Así que solo estamos tomando su ubicación actual y estamos trazando 150 y configurándola en esa ubicación. De nuevo, estamos haciendo exactamente lo mismo en la superposición final, pero en su lugar estamos minusing un 150 de su ubicación actual y luego configurarlo a esa nueva ubicación. A continuación, quiero explicar ¿qué es un actor? Un actor es cualquier tipo de objeto que exista en un nivel. Entonces todo lo que puedes ver aquí es un tipo de actor. Hay muchos tipos diferentes de actores, como por ejemplo, el plano del personaje aquí. Si arrasto eso adentro, ese es un actor, pero es un tipo diferente de actor, digamos tipo de personaje. Puede hacer todo lo que puede el actor puede hacer, pero también tiene funcionalidad adicional porque está destinado a ser utilizado como personaje. Al igual que por ejemplo, puede ser controlado por un jugador. Tiene una cápsula y un personaje modelo como cámara. Estas son todas las cosas que están incorporadas a nuestro plano de personajes. Estas son todas cosas que los actores por sí mismos no tienen, pero nuestro personaje sí porque nuestro personaje es un tipo de actor especializado. Ahora, esto se hace a través de un proceso llamado herencia, que puede ser un poco complicado de entender. Entonces he creado una imagen aquí para tratar de mostrarles a ustedes lo que quiero decir. Si traigo esto , se puede ver que tenemos un nuevo objeto en la parte superior. Ahora, esencialmente, cada objeto en Unreal es un objeto U. Hay tipo de objeto muy básico y todo hereda de ellos. Bajando por la cadena, tenemos actores. Ahora bien, los actores son de lo que veníamos hablando. Ellos heredan de tus objetos, que significa que tienen todo lo que tú objetas puede hacer. Pero entonces también tienen su propia funcionalidad adicional que les permite existir en un nivel, tener componentes y ser visibles. Y pueden ver que he añadido el cubo y nuestros planos de gatillo que hemos estado usando para el ejemplo. Se puede ver que esos heredan entonces de nuestro actor. Entonces estos son actores que pueden hacer todo lo que un actor normal puede hacer. Pero debido a que hemos agregado un código a nuestro gatillo y una caja de colisión ahora es su propio tipo con su propia funcionalidad especial. Y luego lo mismo para nuestro cubo. Le hemos agregado un componente de cubo. Por lo que ahora es su propio tipo con sus propios componentes. ¿ Los personajes son iguales? Simplemente tiene algunos pasos adicionales. Por lo que se puede ver que desde el actor se crea un ****. Ahora, un **** es una versión más básica de nuestro blueprint de personajes. Puede ser controlado por el jugador, pero en realidad no tiene nada del movimiento o. Para que nuestro modelo de personajes sea visible, entonces tenemos un blueprint de caracteres que hereda del ****. Por lo que consigue que algunas de sus habilidades sean controladas por el jugador y algunas de sus habilidades de movimiento. Y luego se extiende sobre eso y nos permite tener un componente cápsula y un modelo de personaje. Ahora nuestro personaje sigue siendo actor. Todavía se puede hacer todo lo que un actor puede hacer de la misma manera. A **** sigue siendo actor y puede hacer todo lo conectado puede hacer. Pero cada uno de estos pasos solo agrega alguna funcionalidad adicional a sus blueprints. Ahora todo ThirdPersonCharacter Blueprint sería en realidad el siguiente paso hacia abajo de nuestro personaje porque nuestro ThirdPersonCharacter hereda del blueprint del personaje, acabamos de agregar algunos más funcionalidad a la misma. Hemos establecido un modelo y hemos cambiado algunos de sus ajustes. Entonces ahora es su propio plano. Ese es un hijo del plano del personaje. Ahora, volviendo a nuestro ejemplo, si seleccionamos nuestro trigger, puedes ver que cuando selecciono el desplegable para nuestro objeto seleccionado, puedes ver que puedo seleccionar cualquier objeto en el nivel. Ahora la razón que es, es porque se trata de un acto o de tipo variable. Y eso se debe a que todo en nuestro nivel es actor. Si quisiéramos, podríamos cambiar esto de cubo a incluso nuestro cielo. Y si seleccionamos la esfera del cielo, se puede ver que puedo establecer esto a un cielo porque nuestro cielo es un actor es sólo un tipo especial de vector con sus propios ajustes y componentes. Ahora bien, si quisiera que esto fuera más especializado y sólo me diera cubos, por ejemplo, tendríamos que cambiar el tipo de variable de actor a nuestro tipo de cubo en su lugar. Lo que haremos es volver a poner esto en un cubo, así que solo cambiaré de cubo. Y seleccionaremos nuestro plano de cubo aquí. Y luego abriremos nuestro plano de gatillo. Y aquí, podemos seleccionar nuestro objeto seleccionado. puede ver que actualmente está configurado en un tipo de objeto actor. Pero si cambiamos esto, podemos buscar cubo. Por ejemplo, tenemos nuestro plano de cubo. Podemos seleccionar referencia de objeto. Y cuando cambiemos un tipo de variable, nos dará esta advertencia solo diciéndonos que estamos cambiando un tipo. Puede causar algunos problemas. Vamos a seleccionar Cambiar tipo de variable de todos modos. Cerraremos esta ventana de búsqueda y compilaremos. Así que ahora cuando seleccionamos nuestro gatillo en el nivel y hacemos clic en el desplegable, puedes ver que solo me está mostrando cubos ahora, eso es porque hemos establecido nuestro tipo de variable de objeto seleccionado al tipo de cubo. Tal vez te preguntes, ¿por qué usaríamos alguna vez el tipo de cubo cuando solo podemos usar el tipo de actor y seleccionar cualquier actor que queramos. Bueno, podrías tener un código especial o variables en nuestro cubo a las que queremos tener acceso en otros planos. Entonces vamos a abrir el cubo y yo sólo voy a crear una nueva variable. Y va a ser un booleano. Y yo sólo voy a llamarlo ejemplo. Ahora hemos creado esta variable en nuestro cubo. Es una variable única para nuestro blueprint de cola y solo los planos de cubo tienen esta variable. Entonces volveremos a nuestro plano de gatillo. Ahora, debido a que nuestra variable de objeto seleccionado es un cubo, si lo arrasto hacia fuera y busqué, por ejemplo, se puede ver que ahora puedo acceder a esa variable usando nuestro objeto seleccionado. Y esto nos daría si nuestra variable de ejemplo es verdadera o falsa en el cubo que hemos seleccionado en el nivel. Ahora si volvimos a nuestro trigger y cambiamos el tipo de variable para un objeto seleccionado de cubo a actor. Ahora si compilamos, se puede ver que las conexiones se han puesto rojas. Ahora, eso es porque si arrastramos hacia fuera de nuestro objeto seleccionado y buscamos, por ejemplo, de nuevo, ya no podemos encontrar esa variable porque esa variable solo existe en nuestro blueprint Coupa, no en el actor. Y como esto es un acto de referencia, no encontrará variables que sólo existen en nuestro cubo. Sólo encontrará código y variables que existen en el actor. Ahora hay formas en las que podemos acceder a nuestros cubos, variables y funciones desde un acto de tipo variable. Pero eso requeriría casting, que vamos a entrar en una lección futura. Por ahora, solo quiero cubrir algunos nodos más comúnmente usados con tipos de variables de objeto. Ya hemos estado usando bastantes de estos nodos en lecciones anteriores, en esta lección. Por lo que tenemos cosas como el SAT ACT o la ubicación, SAT ACT o rotación que y establecer nodos de transformación de actor. Hemos estado obteniendo nuestra ubicación de actor con el gran nodo de ubicación de actores. También está la rotación del actor de get, que hace lo mismo, pero consigue la rotación de nuestros actores en el mundo y devuelve un tipo variable rotador. A continuación tenemos el nodo Destruye Actor. Entonces si eliminamos nuestro rotar aquí y arrastramos hacia fuera y buscamos Destroy Actor. Ahora, cuando este nodo se ejecute, nuestro actor será destruido. Y podemos usar esto con cualquier app o tipo en nuestro nivel, y eliminará a ese actor del nivel. Ahora otro nodo de uso común es el nodo es válido. Entonces si tomamos nuestro, si borramos nuestro get actor, nótalo. Y me voy a arrastrar y buscar es válido. En C, tenemos dos opciones. ahora vamos a usar la de abajo. Esto nos da una nota de que los cheques es nuestro objeto seleccionado para establecer realmente a cualquier cosa. Entonces si vamos al nivel de escaparate aquí actualmente se seleccionan objetos, sector o cubo. Pero si aclaro esto ahora se establece en ninguno. Ninguno de los cubos se verá afectado cuando nuestro personaje y encima. Y si le pegamos a Play y me topo al cubo y luego me agoto y salgo de Play. Se puede ver que tengo algunos errores ahora. Ahora eso se debe a que nuestro código de activación básicamente le dice nuestro objeto seleccionado que no está configurado en nada para cambiar su ubicación. Y eso es lo que nos está dando estas flechas. Entonces lo que el nodo es válido nos permite hacer es comprobar es que el objeto seleccionado realmente se establece en algo? Si lo es, entonces correremos es válido. Y si no, correremos no es válido. Entonces si tomamos estos nodos ahora, sólo los copiaré y los pegaré. Conéctelos hasta la parte inferior aquí. Y le pegaremos a play. Ahora cuando nos topamos con la caja, pesar de que no tenemos nada seleccionado, no obtendremos ningún error. Ahora, como se puede ver, porque eso es válido, node ahora está impidiendo que el código se ejecute y nos da flechas. El otro nodo es válido funciona de la misma manera. Entonces si lo buscamos, es válido. Se puede ver que esta es una función y básicamente hace exactamente lo mismo. Simplemente nos da un valor booleano, tan verdadero o falso en lugar de este nodo con las salidas. Entonces podríamos usar esto con un nodo de rama por ejemplo. Por último, solo quiero cubrir cómo podemos establecer variables de objeto. Para que podamos simplemente arrastrarlos a nuestro gráfico de eventos, seleccione la opción aquí. Y usando el nodo set podemos arrastrar hacia fuera desde nuestra entrada de objeto. Y debido a que estamos usando un nodo actor, podemos conectar esto hasta cualquier otra pluma variable actor. Por lo que se puede ver que podemos conectar esto en el otro pin actor aquí o el pin de salida en nuestro coche nieve muy bien. Pero si creamos otro tipo de objetos, digamos un personaje. Así que simplemente llamaré a este personaje, y estableceré su tipo en carácter también. Así carácter y luego referencia de objeto. Y luego compilaremos. Si arrastramos en nuestro personaje y creamos un nodo conjunto. Se puede ver si me arrasto de la entrada, no puedo conectarlo a la salida de nuestro actor comenzar solapamiento. Y eso es porque esta es una salida de actor. Ahora todos los actores no son personajes. Por lo que nuestro actor no puede conectarse a la entrada de un nodo de conjunto de caracteres. Pero si nos arrastramos de nuestra entrada, pueden ver que puedo enchufar esto a nuestro nodo de costos en tercera persona. Nuevamente, estaremos haciendo lección por separado sobre costos. Pero esencialmente, este nodo está tomando una entrada de actor y está comprobando, es esto un personaje? Si lo es, entonces podemos dar salida a un tipo de variable de carácter. Y podemos usar esto entonces para establecer nuestra variable de carácter porque ambos pines son ahora un tipo de carácter. Ahora eso es todo por esta lección. Esperemos que ahora tenga una comprensión ligeramente mejor de cómo funcionan las variables de objeto en el motor. 11. Variables (Arrays y bucles): Oigan a todos. En esta lección vamos a estar echando un vistazo las variables de matriz y los bucles. Entonces, para empezar, vamos a crear una nueva variable. Por lo que sólo haremos eso haciendo clic en el botón de nueva variable. Y voy a llamar a este ejemplo nombre de matriz. Vamos a establecer el tipo para nombrar encima en el panel Detalles, en el tipo de variable, se puede ver que tenemos este pequeño botón por aquí. Y aquí es donde podemos establecer qué tipo de variable es. Por lo que actualmente es una sola variable. Eso es con lo que hemos estado trabajando hasta ahora. Pero a continuación vamos a seleccionar la opción de matriz. Entonces haz eso y le pegaremos a Compile. Y se puede ver que tiene un icono diferente ahora en el tipo que indica que es una matriz, puede ver que mi valor por defecto como ahora esta opción de aspecto diferente aquí. Ahora una matriz es básicamente una forma de tener una variable que puede almacenar múltiples valores de ese mismo tipo de variable. Nuestra matriz de variables de nombre aquí puede almacenar múltiples valores con nombre solo en una variable en nuestros valores predeterminados. Si hago clic en este pequeño plus unas cuantas veces en C, Eso me ha dado entradas gratis aquí. Ahora, en el lado derecho tenemos nuestra variable. Entonces, debido a que esto tiene una variable de nombre, este es un valor de nombre. Para que pueda introducir nombres aquí para que pueda ponerlo diga James, bill. Y bueno, por ejemplo, ahora estos actores normales con nombre variables. Si tuviera que crear rápidamente otra variable que voy a hacer ahora, voy a llamar a este ejemplo float array. Voy a cambiar el tipo aquí para flotar. Y ya está configurado como una matriz. Pero si el tuyo no lo es, puedes simplemente hacer clic en la opción de matriz aquí. Ya lo ves ahora tengo un flotador y tiene ese mismo icono para indicar que es una matriz. Y cuando compilo en C, que se ve igual aquí y mi valor por defecto, pero si hago clic en el Plus, se puede ver que ahora en el lado derecho, en lugar de los nombres, tenemos valores flotantes en su lugar. Porque se trata de una matriz de carrozas en lugar de una matriz de nombres. Y en el lado izquierdo se puede ver que tenemos estos valores de índice. Ahora bien, esta es esencialmente la forma en que podemos acceder a estas variables, las cuales estaremos usando más adelante. Pero básicamente estas son la fila en la que se almacena esta variable. Entonces, por ejemplo, o James, valor del nombre se almacena en el índice 0 o el valor de Bill se almacena en el índice uno, y el valor se almacena en el índice dos. Ahora podemos movernos por estos valores usando este pequeño indicador del lado aquí que nos permite reorganizar estos. Para que me pueda mover, decir bien al número dos. Número uno, puedes hacer eso con otros tipos de variables también. Entonces si acabo de poner esto a 12 y ver si arrasto esos, puedo reordenarlos. Quiero eliminar cualquiera de estos. Puedo dar clic en la pequeña flecha hacia abajo, seleccionar Eliminar. También puedo duplicarlas. O si hago clic en el pequeño bote de basura aquí puedes verlo solo borra todas tus entradas. Y eso son solo los controles básicos para establecer sus valores predeterminados para una matriz. A continuación, quiero mostrarles cómo en realidad podemos acceder a estas variables en nuestro código. Así que si arrastro en mi matriz de nombre de ejemplo y sólo puedo seleccionar el nodo como solemos hacer con nuestras variables. Se puede ver que tengo una variable de aspecto diferente. Ahora, no puedo arrastrar hacia fuera y usar esto como una variable de nombre normal porque en este momento esta salida, cualquiera de nuestros valores. Para conseguir uno de esos valores que vamos a arrastrar hacia fuera, voy a buscar GET. Vamos a usar consigue una copia. Y eso nos da este nodo de aquí. Ahora como puedes ver, tenemos una entrada para un entero y una salida para una variable de nombre normal. Y si me arrasto de esto, podría usar cualquiera de mis nodos variables de nombre normal. Así que podría hacer por ejemplo, el nodo igual. Se puede ver que me da la nota igual que hemos mirado antes. Al igual que una variable de nombre normal. El motivo que es es porque esto esencialmente lo hace. Toma nuestra matriz, obtiene el índice 0 y luego genera su valor. Entonces por ejemplo, si yo fuera a ejecutar estos nodos, la salida de nuestro nodo get sería, bueno, porque ese es nuestro índice 0. Si yo fuera a cambiar esto para decir también, la salida de este nodo ahora sería campana. Lo mismo funciona con nuestra matriz flotante. Así que si me sale mi ejemplo float array, y me arrastro fuera de eso y busco o meto en C, obtiene una copia. Y ya pueden ver que tenemos esta versión verde ahora. Tenemos una entrada para nuestro índice y tenemos una salida que es solo un valor de flotación normal que podemos usar un valor de flotación normal. Así que si digo Add Node, ves que puedo usar un add saber muy bien con eso, porque esto es ahora una sola variable en lugar de una matriz. Y esto es lo mismo para todo tipo de arrays. Así podríamos crear una matriz de transformadas, rotadores, vectores, enteros, y el proceso sería exactamente el mismo. Podríamos establecer nuestros valores por defecto. Podríamos usar el nodo get y luego simplemente añadimos un índice al que queremos acceder, y saldrá una sola versión normal del tipo arrays. Se. Ahora sólo voy a pasar por algunos de los nodos de uso común de nuestra matriz. Entonces hemos usado la nota de brecha aquí, pero también hay eliminar nodos. Entonces si me arrastro de mi nombre ejemplo donde y busco eliminar, podemos usar remove index. Y esencialmente cuando esto se ejecute, eliminará cualquier índice que ingresemos aquí. Por lo que actualmente este es 0. Entonces si fuéramos a ejecutar este nodo, nuestro índice en 0, que actualmente está bien se eliminaría. Ahora, algo a tener en cuenta con gomas de borrar cuando elimines un índice. Entonces si fuéramos a quitar el índice 0, puedo hacer esto. Ahora. Se puede ver que todos los demás índices suben uno. Entonces ahora James está en 0 y Bill está en uno, mientras que antes lo estaban. James era uno y Bill dos. Por lo que este nodo es útil cuando sabemos qué índice queremos eliminar, pero también es otra nota remove que podemos usar si arrastramos hacia fuera y buscamos remove, podemos hacer remove item. Ahora esto nos permite contarlo, darnos un valor de nombre y tenerlo eliminado ese valor si existe en nuestro array. Entonces por ejemplo, si quería eliminar factura de nuestra matriz, pero tal vez no sabía qué factura de índice era app. Podría hacer que Bill fuera el insumo. Entonces este nodo comprobaría nuestra matriz, comprobaría el valor de la factura. Y si ese valor de factura está en la matriz, entonces eliminaría ese valor. Y la salida simplemente sería básicamente verdadera si se eliminara el valor y false si no pudiera encontrar ese valor en la matriz. Y esas son exactamente las mismas para nuestras notas flotantes. Si te muestro rápidamente, podemos hacer eliminar índice y se puede ver que funciona exactamente igual, nos permite eliminar una entrada de nuestro índice de salida de matriz. O podríamos hacer quitar artículo. Y eso nos da una entrada de flotación para buscar nuestra matriz y luego eliminar. Ahora vamos a ver cómo podemos agregar valores a nuestros arrays usando nuestro código. Por lo que vamos a eliminar este nodo por ahora. Vamos a arrastrar hacia fuera de nuestro nombre de ejemplo, matriz buscará Add. Ahora, aquí hay un par de opciones. Elegiremos primero el top 1. Ahora, el Add Node esencialmente solo agrega el valor que establecemos aquí a nuestra matriz. Ahora porque se trata de una matriz de nombre, este valor como un nombre. Pero si fuera a arrastrar fuera de mi matriz flotante aquí y buscar anuncio, se puede ver que ese valor es ahora un flotador porque estamos agregando un valor float a una matriz flotante. Esta nota publicitaria esencialmente agregará nuestro valor en el primer índice disponible. Entonces en nuestra matriz de nombres, eso sería índice dos porque se toman 01. Entonces si dijéramos que le pusiéramos esto a Bob, le agregaría un valor de pantano al índice dos. Y emitiría ese índice usando este plumilla entera en la salida. Ahora tenemos la otra nota del anuncio, la única ADD. Y esto funciona de manera similar, pero lo que esto hará es que primero compruebe nuestra matriz para ver si tiene o si ya tiene una entrada para el valor que establecemos. Entonces si agregamos Bob de nuevo, cuando se ejecuta este nodo, primero comprobaría nuestra matriz. Vería que el bulbo no es un valor que tiene actualmente. Lo agregaría en el primer Windex disponible, igual que nuestro nodo de adición normal, entonces emitiría ese índice usando el hit de lápiz entero. Si Bob ya estuviera en nuestra matriz, no agregaría un nuevo valor de bombilla, mientras que el nodo Agregar solo agregaría un segundo valor de bombilla. Ahora, a continuación podríamos querer poder cambiar un valor en lugar de agregar o eliminar uno. Digamos que queríamos cambiar el índice uno de Bill a Bob por ejemplo. Bueno para hacer eso usaríamos un nodo conjunto M. Así que si arrastramos hacia fuera y vamos a establecer L, Se puede ver conjunto de matriz. Y eso nos permite especificar un índice que queremos cambiar y al valor al que queremos cambiarlo. Entonces si yo estuviera queriendo cambiar, digamos Bill, podría poner este índice en uno porque las facturas en el índice uno. Y puedo establecer el nuevo valor. Entonces Bob por ejemplo. Entonces ahora cuando se ejecuta este nodo, cambiaría el valor del índice uno. Por lo que el indexador de facturas a Bob. Y puedes ver que aquí tenemos una opción de talla para encajar. Ahora esto básicamente crea nuevas entradas si estamos tratando de establecer un índice que aún no existe actualmente. Entonces por ejemplo, si yo fuera a configurar esto para decir cuatro, sólo tenemos 01, así que sólo tenemos dos entradas. Lo que esto haría si se ejecutara crearía un índice 23 y luego un cuatro. Y le pondría el índice cuatro a Bob. Pero los dos índices que creó para llegar al número cuatro serían simplemente valores vacíos. Ahora, hay un par de otras notas importantes que podemos usar con arrays. Así que podemos arrastrar hacia fuera de nuestra matriz y buscar contiene y utilizar el elemento contiene. Y esto nos permite simplemente comprobar si nuestra matriz contiene un valor particular si devuelve verdadero y si no devuelve falso. Entonces si tuviéramos que configurar esto para decir Bob, comprobaría nuestra matriz. ¿ Contiene actualmente el valor Bob? No lo hace. Por lo que R contiene nodo volvería falso. Pero si contuviera ese valor, si lo añadiéramos, cuando se ejecutara este nodo, volvería true. Podemos usar el nodo de búsqueda. Entonces si arrastramos hacia fuera y buscamos encontrar, encontrar elemento Nodo, puedes ver aquí podemos ingresar un valor y luego buscará nuestra matriz por nosotros. Y si lo hace, si ese valor sí existe en nuestro array, nos dará el índice que ese valor está actualmente arriba. Por ejemplo, si yo fuera a establecer esto en factura, buscaría nuestra matriz para nosotros cuando se ejecute este nodo, y devolvería que la factura está en índice uno y ese valor aquí, el valor entero sería uno. Otro nodo útil que se puede utilizar con matrices es el nodo claro. Entonces si nos arrastramos y buscamos claro. Esto cuando se ejecute, lo matará por completo o matriz. Por lo que será esencialmente vaciar nuestra matriz de todas sus entradas. Por lo que esos son algunos de los nodos más comúnmente utilizados con matrices. Pero si quieres encontrar alguno de los otros nodos, puedes arrastrar hacia fuera y buscar array. puedes encontrar muchos Aquípuedes encontrar muchosnodos diferentes que te permitirán cambiar y obtener valores de tus variables de matriz. Otra nota que puede ser útil como la longitud para el nodo. Así que si arrastramos hacia fuera y buscar longitud, se puede ver que tenemos un nodo llamado longitud, y esto sólo contará el número de entradas que tenemos en nuestra matriz y salida cuántos tenemos. Así que si yo fuera a añadir, digamos, nodo de tres longitud sería libre porque tenemos tres entradas en nuestra matriz. Ahora vamos a pasar a bucles. Así que sólo voy a eliminar estos nodos por ahora, y sólo vamos a empezar con nuestra matriz nombre. Así que si arrastro hacia fuera y busco bucle en C que tenemos para cada bucle que, eso es lo que vamos a estar echando un vistazo por el momento. Entonces vamos a crear eso. Ahora, esencialmente, cómo funciona este nodo es que toma y ejecuta. Y vamos a ejecutar el cuerpo del bucle, sin embargo muchas entradas que tenemos en nuestra matriz. Por lo que actualmente tenemos libres. Entonces nuestro cuerpo de bucle correría tres veces. Y la forma en que te puedo mostrar esto como si arrastráramos hacia fuera y busquemos cadena de impresión. Y agregaré una gran jugada aquí. Ahora tenemos tres entradas en nuestra matriz de nombres en este momento. Por lo que cuando lleguemos a play, veremos Hello print tres veces. Así que golpeó Play, se puede ver una carrera más baja tres veces. Si nos dirigimos de nuevo a nuestro código y ves que también tenemos un bolígrafo completo. Así que una vez que este cuerpo de bucle ha terminado de ejecutar el número de veces que tenemos valores en nuestra matriz. A continuación se ejecutará la pluma completa para que pueda agregar otra cadena de impresión aquí. Permítanme establecer esto para decir Hecho. Y ahora lo que veríamos Hello imprimir tres veces y luego arrojado correría así. Ahora, si x fuera de juego y nos dirigimos de nuevo a nuestro plano de personaje, también tenemos un elemento de matriz y un índice de matriz. Ahora, estos serán los valores de de nuestra matriz por los que nuestro cuerpo de bucle estará corriendo. Entonces, por ejemplo, la primera vez que esto se ejecuta, la primera vez que bucle body unos, lo siento, el índice será 0 y el elemento array será cualquiera que sea nuestro valor. Por lo que actualmente estos están todos configurados en ninguno. Pero si tuviera que reemplazar rápidamente estos, sólo diré que este es Bill Bob james. Ahora, la primera vez que el cuerpo del bucle ejecutaría el valor, el valor del elemento array sería bill y el índice de la matriz sería 0. Y luego la segunda vez que ese elemento raro sería Bob y el índice de matriz sería uno, y así sucesivamente. Ahora bien, lo que básicamente decide cuándo se ejecuta el cuerpo del bucle es cuando golpea un nodo que no tiene una salida. Así que para nosotros eso es sólo va a imprimir cadena sea cual sea el valor que ponemos aquí. Y luego se hace ese cuerpo de bucle y pasará al siguiente. Ahora si está en el último cuerpo del bucle, así que si estuviera en bucle, digamos para el índice al elemento array era James, tocaría el final de este C. No hay más nodos para ejecutar. Y debido a que estamos en el último índice, entonces se ejecutará completado, que ahora se hacen pantalla de impresión. Así que si enchufar el elemento de matriz aquí en nuestra cadena de impresión, y voy a mover estos nodos. Si compilamos y golpeamos play, deberíamos ver nuestros nombres que tenemos de animador impresos en la pantalla. Entonces si hacemos eso en C que esos están imprimiendo y luego tenemos el valor W1 que se imprime una vez que se completen las matrices. Entonces esos son los fundamentos de cómo funciona un nodo de bucle, pero sí tenemos algunos otros tipos. Así que si nos dirigimos de nuevo a nuestro personaje ahora y vamos a eliminar esto para cada bucle. Vamos a arrastrar hacia fuera y vamos a buscar bucle de nuevo. Ahora vamos a probar el bucle for-each con break. Ahora esto funciona muy similar al último nodo, pero nos da una entrada extra que podemos ver aquí llamada break. Y eso nos permite detener nuestro cuerpo de bucle corriendo en un punto en particular. Entonces por ejemplo, si queríamos ejecutar nuestro cuerpo de bucle hasta que llegamos al nombre bob y luego queríamos cancelar nuestro cuerpo de bucle. Podríamos hacer eso. Así que si hacemos un poco más de espacio aquí, podemos arrastrar hacia fuera de nuestro elemento de matriz a un igual nevado. Podríamos decir si nuestro elemento array es igual a, creo que fue Bob. Bob dirá Bob. Queremos revisar un nodo de sucursal. Y queremos cancelar while loop si el valor es Bob. Para que podamos hacer eso. Podemos arrastrar desde True y conectar eso hasta la entrada de break aquí. Y si hacemos doble clic en la línea blanca, podemos crear estos pequeños nodos que nos ayudan a organizar un poco mejor nuestro código. Entonces solo haré eso así. Así que ahora lo que va a pasar es cuando nuestro bucle se ejecuta, comprobará es el elemento de matriz Bob. Si lo es, entonces queremos dejar de correr nuestro bucle. Entonces, lo que esto nos hará hacer es ejecutar a Bill y Bob imprimirá en una cuerda. Pero James no lo hará, porque detuvimos nuestro bucle y completado habremos corrido en su lugar. Podemos probar esto. Puedo pegarle a Play. Se puede ver que Bill y Bob están corriendo y luego corre hecho porque nuestro valor james ya no se está ejecutando. Si tuviéramos que cambiar este nombre para decir Bill, ahora, esperaríamos que solo ejecutara el nombre de la factura porque una vez que llegue a facturar, cancelaría nuestro bucle. Para que podamos probar esto ahora. Y ves a Bill, y luego solo está cancelando nuestro bucle y hecho se está ejecutando en lugar de completar el resto de nuestro bucle. También podríamos hacer esto con nuestro índice si arrastramos hacia fuera de nuestro índice y hacemos iguales, en lugar de usar los valores, podemos simplemente usar el índice en su lugar. Entonces digamos que quería detener nuestro índice de bucle uno, puedo hacer eso. Podría simplemente configurar esto en uno, enchufar esto a nuestro brunch y compilar y golpear Play. Se puede ver que obtenemos ese mismo resultado Bill y Bob están imprimiendo. Y luego los bucles terminando porque hemos cancelado el bucle y luego lo completamos como estar equivocados. Ahora, hay otro tipo de bucle que podemos echar un vistazo. Entonces sólo voy a borrar estos textos. Ya no los necesitamos. Pero si nos arrastramos hacia fuera, podemos buscar bucle de nuevo. Y ahí está el reverso para cada bucle. Y esto funciona igual que el primer nodo de bucle que elaboramos. Pero en lugar de hacer un bucle desde el principio hasta el final, se bucle del final al principio y todo lo demás es igual con este nodo. También hay nodos de bucle que no usan una matriz. Así que si eliminamos esto por ahora y acabo de buscar bucle, voy a desplazarse hacia abajo y verás que tenemos cuatro bucle. Ahora si hago clic en esto, se ve que en lugar de una entrada de matriz, tenemos un primer índice y el último índice. Esto básicamente solo le dice a un bucle ¿ cuántas veces se va a ejecutar? Entonces si yo fuera a dejar nuestro primer índice en 0, pero establecer el último índice a decir para este bucle se ejecutaría cinco veces porque se ejecutaría una vez para 0 y luego otra vez hasta que se pone hasta cuatro. Y a medida que corría a través de cada cuerpo de bucle, el índice aumentaría en uno. También tenemos ese mismo nodo pero con un break si quisiéramos eso, podríamos hacer un for-loop con break. Y eso vuelve a funcionar de manera similar a nuestro nodo break. Es sólo que en lugar de una entrada de matriz, podemos establecer de nuevo un índice y el último índice en cuanto a establecer esto a 04, se ejecutaría cinco veces. Pero durante nuestro cuerpo de bucle, podríamos cancelar este bucle ejecutando la entrada break como acabamos de hacer con el bucle con nuestra matriz. Por último, solo quería mostrarles cómo podemos establecer una carrera para que podamos establecerlas como valores normales. Así que si arrastramos en, podemos elegir la matriz de nombre de ejemplo conjunto. Se puede ver que sólo nos da un nodo conjunto normal y podemos establecer esto para ser un número arrays valores hasta el punto de crear rápidamente otra matriz de nombre. Y establecemos esto para nombrar y cambiamos su tipo a array. Podríamos tomar eso y podemos enchufar eso en nuestra matriz de nombre de ejemplo igual que podemos con variables normales. Y esto solo tomaría nuestra corriente, o lo siento, Tomaría nuestros valores de matrices de nombre y los pondría a la matriz de nombre de ejemplo. Por lo tanto, borraría completamente nuestra matriz de nombres y luego establecería los valores a exactamente lo mismo que nuestra matriz de nombres. Esto es lo mismo para nuestra matriz de flotación también. Y luego cualquier otro tipo de matriz que cree, podemos establecer los bien. Y podemos tomar otro valor de matriz. Podríamos establecer eso a eso, así como siempre y cuando sean del mismo tipo, como si tuviéramos nuestro flotador enchufado a nuestra matriz flotante, nombre conectado a nuestra matriz de nombres. Lo mismo ocurre con todos los nodos que he estado usando. Así que nuestras matrices de bucle, si te muestro rápidamente, podemos tomar nuestra matriz flotante ejemplo, puedo arrastrar hacia fuera y puedo buscar bucle. Y ya ves que tenemos esos mismos nodos para crear un nuevo nodo de bucle. Tenemos ese elemento de matriz, pero en lugar de un nombre, es solo un valor flotante porque se trata de una matriz de valores flotantes. Pero nuestro índice se mantiene igual porque siempre va a tener un índice para cada entrada en nuestro array. También podemos hacer una carrera por nuestro actor u objetos referencias. Entonces si hago eso rápidamente, solo llama a esto la matriz de actores. Se puede ver que si cambio el tipo a actor, vamos a nuestra referencia objeto actor. Se puede ver que ahora tenemos una serie de actores. Y esto vuelve a funcionar, igual que hemos estado usando nuestro nombre y matrices flotantes. Podríamos recorrer una serie de actores. Y eso nos dará una salida de actor y un índice de que ese actor es app en nuestro array. Ahora el motor tiene algunos nodos incorporados que en realidad generan matrices. lo que un ejemplo de ello serían los actores superpuestos. Y esto esencialmente consigue a los actores que se están superponiendo nuestros planos actuales. Entonces estoy en el Third Personacter. Esto obtendría o cualquier aplicación a como superposición de nuestro personaje, las salidas como una matriz. Podríamos usar esto al igual que hemos estado usando nuestras variables de matriz. Así podría, por ejemplo, recorrer todos los actores que actualmente se superponen a mi personaje. Y podríamos hacer cualquier tipo de cheque que quisiéramos, podríamos decir, quizá destruirlos. Si quisiéramos, podríamos destruir a esos actores que se están superponiendo a nuestro personaje. Y podemos usar este elemento de matriz igual que una variable normal, como hicimos en nuestra lección anterior con el tipo de actor, podemos usar esto para decir obtener sus ubicaciones. O podríamos usarlo para establecer sus ubicaciones. Al igual que un acto normal de variable. Por supuesto, tampoco tenemos que usar un nodo de bucle para hacer eso. Podríamos usar el nodo get y esto solo nos dará el primer índice en la matriz de actores que se superponen a nuestro personaje. Si quisiéramos pasar, conseguir decir el segundo o el tercero, podríamos cambiar este valor de entrada. Y entonces podríamos usar nuestro nodo get para conectarnos a cualquiera de estos nodos que podamos usar con variables activas. Entonces eso es todo para esta lección, y eso es todo para la sección de variables del curso. En nuestra siguiente lección, vamos a estar echando un vistazo a las funciones y cómo funcionan y cómo podemos crear otras nuevas. 12. Fundamentos (Funciones): Oigan a todos. En esta lección vamos a estar aprendiendo sobre las funciones, cómo se usan y para qué se usan. Las funciones son piezas de código autónomas que podemos modificar y reutilizar muy fácilmente. Entonces, para empezar, en mi personaje en tercera persona aquí, sólo voy a crear una nueva función. Y eso lo podemos hacer haciendo clic en el botón de nueva función aquí. O podemos ir al botón Agregar y seleccionar nueva función que nos va a crear una nueva función. Voy a llamar al mío ejemplo. Se puede ver que también ha abierto un nuevo gráfico de eventos para nosotros con una entrada. Y tiene el nombre de nuestra función aquí. Ahora aquí es donde estaremos codificando nuestra función si alguna vez necesitas llegar al código de una función. Entonces estás en el Event Graph y deseas obtener el código de tu función, siempre puedes simplemente hacer doble clic en el nombre de la función y te llevará directamente a tu función. Ahora como puedes ver, tenemos un nodo de entrada y este se ejecutará cada vez que se ejecute nuestra función. Si vamos al Event Graph y arrastramos hacia fuera nuestra función de ejemplo, se puede ver que nos ha dado un nuevo nodo llamado ejemplo. Ahora, siempre que este pin de ejecución de entrada se haya ejecutado, se ejecutará el código dentro de nuestra función. Entonces como ejemplo rápido, si agrego una cadena de impresión a mi función de ejemplo aquí, en nuestro gráfico de eventos, solo voy a crear un nodo de inicio de reproducción. Y conecto esto hasta mi función de ejemplo. Ahora cuando comience el juego, nuestra función de ejemplo se ejecutará, y eso ejecutará el código dentro de nuestro ejemplo, que es esta cadena de impresión. Por lo que sólo voy a compilar hit Play. Se puede ver que nuestra cadena de impresión se está ejecutando. Entonces, para mostrarte cómo esto podría ser útil, saldremos de la reproducción, volveremos a ThirdPersonCharacter y crearemos una nueva función y llamaremos a esto aumentar la salud. Y también crearemos una nueva variable, y llamaremos a esto salud actual. Si el tuyo es un entero, puedes simplemente hacer clic en esto y cambiarlo a un entero y lo compilaremos. Ahora, pensarías que si quisiéramos aumentar la salud, íbamos a nuestro Event Graph, arrastraban de nuestra salud actual para conseguir salud. Y usaríamos un nodo add, añadimos la montaña que queremos agregar para decir uno. Y entonces entonces pondríamos la salud actual. Pero el problema con esto es cada vez que quieres cambiar nuestra salud y nuestro código, tendríamos que escribir todas estas notas. Lo que funciones nos permiten hacer es básicamente tomar este código y ponerlo dentro de una función. Y en lugar de tener que escribir este código, solo podemos arrastrar una función al Event Graph u otra función y tener ese código ejecutado. Entonces, si tomamos este código, simplemente lo cortaremos y volveremos a nuestra mayor función de salud. Pegará esto adentro y conectado para arriba. Ahora en la actualidad, si ejecutamos el aumento cómo funciona, lo único que va a hacer es agregar una salud a nuestra salud actual, lo cual no es particularmente útil. Queremos poder elegir cuánta salud se agrega a nuestra salud actual, y no podemos hacer eso. Por lo que si seleccionamos nuestro nodo de entrada aquí, se puede ver encima en el panel Detalles que tenemos entradas y salidas. Ahora podemos agregar nuevas entradas haciendo clic en este pequeño botón de aquí. Y eso agregará una nueva entrada de variable. Se puede ver que aquí tenemos una entrada. Y si vamos al Event Graph y arrastrando nuestra función increase how, puedes ver que esa variable también está disponible aquí también. Ahora, podemos renombrar esto volviendo a nuestra función, seleccionando la entrada y la cambiaremos para montarla. También podemos cambiar el tipo de variable por aquí. Así menos ido a entero por defecto. Pero puedes cambiarlo a cualquier variable que te guste. Usaremos entero por ahora porque eso es lo que es nuestra variable de salud. Y podemos arrastrar hacia fuera de nuestra cantidad y enchufar eso en el nodo plus aquí. Entonces ahora lo que sucederá es cuando se ejecute nuestra función de aumento de salud, tomará lo que sea la cantidad más eso a nuestra salud actual y establezca la salud actual. Ahora, arrastraré desde aquí y agregaré una cadena de impresión solo para que podamos decir si esto está funcionando, arrastramos desde el nodo set y lo conectaré al nodo de cadena de impresión aquí. Ahora, en nuestro Event Graph, queremos ejecutar nuestro aumento de salud, digamos cuando presiono un botón, así que haré clic derecho y buscaré el evento de entrada. Decir por qué. Nos desplazaremos y encontraremos la entrada y de ellos. Esto simplemente se ejecutará cada vez que presione Y en mi teclado. Si conecto esto en aumento lo rápido que puedo establecer la cantidad. Entonces me voy a poner a decir cinco. Entonces ahora cuando compilamos y golpeamos play, cada vez que presiono Y, puedes ver que mi salud actual aumenta porque la está aumentando en cinco cada vez que presiono Y. Ahora también podemos agregar salidas a nuestra función. Entonces si retrocedemos y salimos de la obra, aquí podemos volver a nuestra función de aumentar la salud. Si seleccionamos el nodo de entrada, podemos agregar nueva salida. Entonces voy a hacer clic en el botón de salida nuevo aquí y ves que ya está creado un nuevo nodo para nosotros. Y esto es lo que corremos cuando queremos sacar algo de nuestra función. Entonces si enchufo esto a la anterior después imprimir cadena en C que le puedo dar un nombre. Por lo que sólo voy a poner la salud actual. Y vamos a tomar lo que sea nuestro valor actual de Salud es y la salida que. Si compilamos y volvemos a nuestro gráfico de eventos, se puede ver que ahora nuestro nodo en el gráfico de eventos tiene una salida llamada estado actual. Y esta salida, cualesquiera que sean los valores que conectemos en ella desde nuestra función. Entonces por el momento, solo estoy sacando mi valor actual de salud. Para que podamos acceder a eso en la gráfica de eventos. Ahora también podemos usar funciones dentro de una funciones. Así que si vamos a nuestra función de aumento de la salud aquí, y aquí, nosotros, tal vez queríamos tocar un sonido cada vez que nuestra salud aumentara, podríamos crear una nueva función que reproduzca un sonido en nuestra ubicación de personajes que también podríamos utilizar otros lugares si queremos que lo haga. Entonces, por ejemplo, crearemos una nueva función. Simplemente llamaremos a esto sonido de reproducción. Reproducir reproductor de sonido. Ubicación. Aquí, podemos arrastrar hacia fuera de nuestra entrada y utilizar el sonido de las placas en el nodo de ubicación se arrastrará hacia fuera de la ubicación y no obtener la ubicación del actor. Esto reproducirá un sonido que establecemos en la ubicación del jugador actual. Ahora, podemos agregar una nueva entrada para nuestros sonidos para que podamos elegir qué sonido se reproducirán. Una forma más rápida. Podemos hacer esto como si arrastramos fuera de nuestra entrada de sonido aquí y arrastramos esto al nodo de entrada, si lo dejo ir, se puede ver que en realidad solo agrega una nueva entrada de sonido para nosotros y nombres que suenan. Si queremos cambiarle el nombre, podemos, sólo lo hacemos en las entradas aquí. Y ahora, cuando compilamos, si volvemos a qué aumento, cómo funciona, ahora podemos arrastrar esa nueva función que acabamos de crear a nuestra función aumentada. Podemos usar esto como podemos en el Event Graph. Entonces si conecto esto, ahora podemos decir sonido porque agregamos la entrada de sonido a nuestra función. Y cada vez que nuestro aumento cómo funciona la función y ejecutar el mismo código aumentando nuestra salud por la cantidad. Imprimirá cadena la cantidad actual, y luego ejecutará el código dentro de nuestro sonido de reproducción en la ubicación utilizando el sonido que establecemos. Actualmente, no he puesto un sonido. Y luego una vez que eso suena y esta función esté terminada, entonces continuará y devolverá nuestro valor actual de Salud en nuestro Gráfico de Eventos. Y por supuesto, el sonido de reproducción en ubicación de reproducción es sólo una función como nuestro aumento de la salud. Entonces si quisiéramos, podríamos usarlo también en el gráfico de eventos y en otros lugares o dentro de unas funciones. Ahora una de las mejores cosas funciones es que son reutilizables. Entonces tengo mi función de aumento de salud siendo ejecutada aquí en la entrada y. Pero también podría usar el aumento de cómo funcionan en otras partes de mi código si quisiera, puedo tener tantas como quiera. Y cuando todo el mundo se ejecute, ejecutará el código como es de esperar. Siempre que modificamos algo dentro de nuestra función celular aumentada. Entonces digamos que queríamos hacer un cambio aquí o si había un bug o algo así, podríamos hacer un cambio en un lugar dentro o aumentar cómo funciona. Y eso afectará a todos los lugares que hemos utilizado se incrementan la función de salud del nodo. Las funciones también tienen otra característica llamada variables locales. Entonces si abrimos el aumento del corazón cómo funciona aquí se puede ver abajo en la parte inferior del panel Mi Blueprint, tenemos las variables locales. Ahora una variable local opera más o menos igual que una variable normal, es sólo eso. Sólo existe dentro de nuestra función. Por lo que no podemos acceder a una variable local en el gráfico de eventos desde nuestra función de salud aumentada, solo podemos acceder a ellas dentro de nuestra función aumentada. Otra cosa de las variables locales es que una vez que esta ejecución o una vez terminada nuestra función, variable se restablecerá a su valor predeterminado. Entonces como ejemplo, si creo una nueva variable, hip y cool este ejemplo. Y esto es sólo un booleano. Así que si hacemos un nodo get aquí, y también vamos a crear una cadena de impresión. Ahora, cuando ejecutemos este nodo de cadena de impresión, voy a enchufar mi ejemplo a la cadena. Se imprimirá verdadero o falso dependiendo de cuál sea nuestro valor de ejemplo actual. Por defecto, está establecido en false. Ahora, después de eso, si lo configuro en true, esperarías que la próxima vez que ejecutemos este código vuelva true porque lo estamos configurando a true después de imprimir cadena. Pero siempre volverá falso como se puede ver aquí. Porque cada vez que nuestra función haya terminado, esa variable se restablecerá a su valor predeterminado, que es falso. Las variables locales son una excelente manera almacenar temporalmente información dentro tu función sin tener que crear nuevas variables que pueden sumar rápidamente si tienes muchas funciones en marcha. También fueron bastante buenos para organizar su función. Entonces digamos que tenías un poco más de código pasando y querías almacenar variables solo para mantener las cosas ordenadas. Podrías hacer eso también. Otra cosa útil que puedes usar para mantener tus funciones ordenadas ya que tenemos nuestras entradas, digamos, por ejemplo, nuestra entrada MT aquí. Y ese cable va a entrar en nuestra nota publicitaria. Ahora, tal vez en el futuro tengas una función que tiene un montón de entradas. Tendrías cables apagándose por todo el lugar y no se vería muy ordenado. Entonces lo que puedes hacer en su lugar es que puedes hacer clic derecho y tal cantidad olvidar. Se puede ver que tengo acceso a la variable de cantidad, pero no tengo una variable local llamada cantidad. No hay una variable normal llamada cantidad. Esto es básicamente sólo un atajo a esta cantidad de salida aquí. Entonces en lugar de tener el cable enchufado desde nuestra entrada de ellos, podemos simplemente arrastrar esto aquí y podemos obtener ese valor. Y todo lo que está haciendo es esencialmente simplemente cortar el cable y acceder a esa variable de cantidad, una especie de atajo. Ahora bien, las funciones sí tienen algunas limitaciones. Entonces, por ejemplo, no podemos usar nodos latentes dentro de una función. Ahora aún no hemos cubierto notas latentes, pero lo haremos en una lección futura. Pero así como un rápido desglose, si hacemos clic derecho y el gráfico de eventos aquí y buscamos hoy, podemos crear un nodo de retardo. Ahora, un nodo latente tendrá un pequeño icono de reloj en la esquina superior derecha. Y básicamente lo que hace un nodo de retardo es que obtiene una entrada y luego cualquiera que sea nuestra duración, espera esa cantidad de tiempo antes de ejecutar la salida. Por lo que sólo nos permite sostener código. Entonces, por ejemplo, si yo estuviera enchufando mi nota de reproducción aquí, y sólo voy a poner esto para decir tres. Y luego enchufé mi aumento de salud aquí. Empezaría a jugar, se ejecutaría, entonces se ejecutaría un nodo de retardo, y esperaría tres segundos, y luego ejecutaría la salida completada. Ahora bien, debido a que este es un nodo latente, no podemos usarlo dentro de la función. Entonces si voy a mi aumento de salud, justo, y me arrastro y busqué retraso. Se puede ver que ese nodo de retardo no está subiendo porque está latente y no podemos usar los que están dentro de la función. A continuación, vamos a ver funciones puras e impuras. Entonces si volvemos a nuestra gráfica de eventos aquí, y creo un nuevo aumento de cómo funcionan. Y encima en el panel Detalles se puede ver que podemos cambiarlo a una función pura. Entonces si me llevo esto, se puede ver que esto también afectará a todos los demás aumentar cómo funciona, lo cambia en esta función. Ahora, la forma en que estos funcionan es para cada salida conectada a nuestros pines de salida, esta función se ejecutará. Entonces como ejemplo, si tomo mi punta Plano inicial y sólo voy a usar un conjunto de salud actual. Y nos conectaremos hasta aquí, aumentaremos la salud por decir uno. Y conectaremos esto hasta la salud actual. Por eso digo espero que con 0 lo incremente en uno y luego salga una nueva salud actual. Entonces este sería uno. Y si fuera a copiar y pegar este nodo conjunto de nuevo, y vamos a conectar esto a aquí. Este nodo sería uno, pero entonces este nodo se ejecutaría de nuevo para este nodo conjunto, y este nodo realmente lo establecería en dos, y luego así sucesivamente y así sucesivamente. Por cada conexión, volveríamos a ejecutar este nodo y aumentar el valor espero. Mientras que una función impura, si seleccionamos nuestra función nuevamente y hacemos clic en tech P0, si conectamos esta copia de seguridad para comenzar a reproducirse, esta siempre devolverá la misma salida que tenía cuando se ejecutó. Por lo que cuando empiece el juego aumentaremos nuestra salud de 0 a uno. Pondremos ese valor aquí. Este valor se establecerá en uno. Y entonces éste también se establecerá en uno porque sólo se ejecutará una vez cuando se ejecute. Y luego almacena los valores de su salida en estos pines. Y entonces cada conexión que tengamos para eso será la misma hasta que volvamos a ejecutar esta función. Eso es sólo algo para recordar cuando estás trabajando con funciones puras, es sin embargo muchas conexiones que tienes conectado a esa función es cuántas veces se ejecutará. Si tienes algún tipo de matemáticas pasando o algo así como aumentar la salud, cada vez que arrastres y pones algo, volverá a correr. Por lo tanto, su valor, sus valores de salida pueden ser diferentes cada vez que se ejecuta. A continuación, vamos a echar un vistazo a las funciones anuladoras. Ahora, si no lo has visto ya, te recomiendo ir y echar un vistazo. Tenemos una lección de variable sobre actores y objetos. En esa lección, entro en herencia y explico un poco sobre eso. Pero esencialmente, cualquier objeto que exista en el mundo es un actor, incluido nuestro personaje. Pero entonces tenemos diferentes tipos de actores como nuestro personaje aquí. Y podemos acceder al acto de funciones o a las funciones que existen dentro del actor a través esta opción de anulación aquí en la pestaña de funciones. Entonces si pinchamos en eso, se puede ver que tenemos del lado derecho dice actor. Ahora estas son funciones a las que podemos acceder que existen en el actor. Y los tenemos porque somos un personaje, pero también somos actor. Si bajas un poco más, puedes ver que tenemos algunos que dicen carácter. Ahora tenemos acceso a estas funciones porque nuestro personaje en tercera persona es un personaje. Y si bajamos aún más, se puede ver que también tenemos **** unos. Y tenemos estos porque nuestro carácter también es un ****. Y cada vez que seleccionamos una de estas funciones aquí, básicamente le decimos al motor, no queremos que ejecutes el código que existe en, digamos, el blueprint de caracteres. Queremos tomar esta función y ejecutar nuestro propio código. Entonces por ejemplo, podríamos hacer clic, podemos saltar. Y ves que ahora nos hemos hecho cargo esa función de la clase de caracteres. Podemos escribir nuestro propio código y tener ahora no todas las funciones se verán así, donde tenemos un editor separado si creamos o si anulamos otra función, digamos la destruida, que se crean lo que parece un evento dentro de nuestro gráfico de eventos. Y la razón por la que hace eso es sólo porque nuestra función destruida no tiene ninguna salida, pero puede saltar hace por lo que tiene una salida aquí. Y lo que sea que regresemos aquí básicamente se revisará cada vez que intentemos saltar. Así que actualmente si tratara de saltar ahora, no sería capaz de hacerlo porque nos hemos hecho cargo de la función y sólo estamos diciendo que no podemos saltar con set this a false. Entonces podríamos tener nuestro propio código aquí que controle si podemos saltar o no, por ejemplo. Ahora, tal vez te estés preguntando si podemos anular estas funciones. ¿ Podemos realmente ir y encontrar dónde están estas funciones y mirar dentro y ver qué está sucediendo como podemos con las funciones que hemos creado. Desafortunadamente, estas son clases de C plus plus. Actor, personaje importante en realidad se crean en C plus plus y eso incorporado en el motor. No hay plano al que podamos ir. Podemos personaje en primera persona, por ejemplo, y mirar estas funciones. Puedes hacerlo en C plus plus si quieres, pero eso es un poco más avanzado. Por último, solo quiero mostrarte cómo puedes llamar a funciones desde un blueprint dentro de otro. Entonces, si vamos a nuestro mapa en tercera persona aquí, simplemente crearé una nueva clase de blueprint rápidamente. Habrá un actor, llámelo gatillo, lo arrastrará al nivel aquí. Y abriré ese plano. Agregaremos un nuevo componente y llamaremos a esta casilla. Queremos la colisión de la caja y sólo la voy a mover hacia arriba. Y también estamos en la búsqueda de detalles escondidos en juego de Nin. Voy a desmarcar esto solo para poder verlo. Y luego nos desharemos de esa búsqueda y nos desplazaremos hacia abajo hasta el fondo. Vamos a decir en realidad, podemos ir a Event Graph, que crean nueva función. Lo siento, el evento serviría, empezaría a solaparse. Ahora ya hemos usado este nodo antes, si te acuerdas en nuestras lecciones anteriores. Pero esencialmente este evento correrá cada vez que algo se superponga nuestro gatillo y nos dará una referencia al actor que nos solapó. Para que podamos arrastrarnos fuera de esto. Y sólo le voy a hacer un costo a TerceraPersonaPersonaje. Ahora bien, si recuerdas esencialmente qué costo tiene es verifica, es este objeto de entrada un carácter? Si es así, ejecutaremos aquí el cubo x superior y nos dará acceso a ese carácter es variable. Ahora de nuevo, en el futuro habrá una lección de casting, pero esto es sólo un ejemplo rápido. Si lo recuerdas, podemos acceder a variables usando esto. Entonces hicimos esto con nuestros cubos. También podemos acceder a funciones. Entonces si me arrastro porque estoy lanzando al plano de los personajes de ThirdPersonCharacter y eso es en lo que hemos estado trabajando. Si lo arrastro hacia fuera y busco aumentar la salud, ya ves que puedo conseguir ese aumento de cómo funcionan. Y si recuerdan, lo configuramos a, si nos dirigimos de nuevo a nuestra característica, establecemos nuestro aumento de nuestra función a PO. Entonces si desmarco esto y lo hago impuro, necesito desconectar éste porque nos va a dar querer lo contrario. Se puede ver que en realidad está actualizado aquí. Y usando eso podemos acceder a las funciones que existen en nuestro personaje en tercera persona en otro blueprint. Esta función correrá como si acabáramos de ejecutarla en nuestro personaje en tercera persona. Pero en cambio en realidad ahora podemos ejecutar que cada vez que nuestro, digamos que nuestro carácter se superponen. Entonces dispararé, para que podamos aumentar su salud en digamos cinco. Ahora, cuando golpeamos play y atropello esa caja, se puede ver que ahora está imprimiendo ese mayor valor para la salud. Eso va a ser todo por esta lección. Esperemos que entiendas un poco más sobre las funciones de vez en cuando nuestra siguiente lección, vamos a echar un vistazo a las macros. 13. Aspectos básicos (Macros): Oigan a todos, En esta lección vamos a estar mirando macros. Estas son similares a las funciones en que son piezas autónomas de código que podemos reutilizar alrededor de nuestro blueprint. También vamos a estar aprendiendo acerca de cuándo es posible que desee utilizar una macro en lugar de usar una función también. Entonces comencemos. Crearemosuna nueva macro. Eso lo podemos hacer en el panel de mis planos aquí. Puede hacer clic en el botón de nueva macro aquí o ir al menú desplegable y seleccionar macro. Si hacemos clic en eso, podemos llamar a nuestro nuevo ejemplo macro. Se puede ver que también nos ha abierto un nuevo editor, como lo hace con una función. Y tenemos una entrada y una salida nevadas. Ahora, a diferencia de una función, se puede ver que en realidad no tenemos ninguna entrada y nuestra macro, y eso es porque necesitamos agregarlos nosotros mismos. Por lo que encima en el panel Detalles aquí podemos hacer clic en el símbolo más y podemos crear algunas entradas nuevas. Ahora, en realidad podemos crear entradas y salidas de pin de ejecución. Entonces si hacemos clic en la opción Crear nueva salida aquí para las salidas, puedes ver ahora tengo una entrada de ejecución y una salida de ejecución. Y si podemos tirar de esto, ir al Event Graph, realidad podría arrastrar esta macro ahora a nuestro gráfico de eventos. Y puedes ver que tenemos tanto nuestras entradas como nuestras salidas y podemos renombrar estos también, algo un poco mejor. Entonces renombra esto para decir en este 12 out, solo para que sea un poco más claro. Ahora lo bueno con las macros es que en realidad puedes tener múltiples entradas y salidas de ejecución. Entonces si quisiera, podría agregar otra salida de ejecución. Podría llamar a esto un out to. Y podríamos correr algún código y pelo. Y luego dependiendo de lo que haga ese código, podríamos ejecutar cualquiera de estas salidas. Al igual que nuestras funciones, también podemos tener entradas y salidas variables. Entonces, por ejemplo, podría agregar una nueva entrada entera y podría cambiar el nombre para decir cantidad, como hicimos con nuestra función en nuestra lección anterior. Se puede ver que ahora tenemos una entrada de cantidad. Si vuelvo al Event Graph, se puede ver que tenemos eso en la pluma de ejecución, y también tenemos una entrada también, y luego ambas salidas. Ahora la forma en que usamos las macros es muy similar a la forma en que usamos las funciones en que podemos tener múltiples de la misma macro en cualquier lugar de nuestro blueprint, podemos usar macros dentro de otras macros si quisiéramos a y si hacemos algún cambio dentro de la macro. Entonces, por ejemplo, si agregamos algún código aquí, afectaría a todas las macros que hemos creado a partir de ese tipo de macro. Por lo que todas estas macros se actualizarían con los cambios que hacemos dentro de nuestra macro. Así que ahora hemos configurado nuestra macro de unas cuantas entradas y salidas diferentes. Podemos codificar aquí al igual que podemos en el Event Graph o en nuestra función. Por lo que en nuestro último video, configuré una función de salud para aumentar la salud. Yo puedo hacer lo mismo con macro, así que crearemos una nueva variable, lo llamaremos salud actual. Y lo pondremos en entero si el tuyo no lo es ya. Y arrastraremos eso en un nodo add. Y le sumaremos la cantidad. Y vamos a arrastrar hacia fuera de la salida de nuestro Add Node y vamos a hacer establecer la salud actual como este. Ahora bien, debido a que se trata de una macro, podemos tener múltiples plumas de ejecución de salida. Entonces podríamos hacer un chequeo, digamos, nuestra salud actual es igual a decir 100? Si está ahí, a lo mejor queremos ejecutar una pluma de ejecución diferente. Yo uso un nodo de sucursal aquí. Si está en un 100, ejecutaremos la salida superior, y si no, ejecutaremos la de abajo. Puedes renombrar estos, digamos salud máxima para la superior y no salud máxima para la inferior. Porque tal vez queremos que tenga un código diferente corriendo dependiendo de si somos Max Health o no. Entonces si luego volvemos a nuestro gráfico de eventos aquí, se puede ver que tanto de nuestra nota de ejemplo aquí he actualizado, por lo que han actualizado las salidas. Y eso es porque hemos cambiado su macro. Y podríamos ejecutar esto ahora y aumentar nuestro valor para la salud. Entonces si digo poner esto a 50 y agregaremos un nuevo evento de entradas. Y qué usarías, digamos x, que encuentran la entrada x de m Así que cuando presiono X en juego sumaré 50 de salud. Y luego podemos ejecutar código diferente dependiendo de si somos Mac self o no. Entonces solo usaré la cadena de impresión porque son fáciles de ver en juego. Entonces llamaremos a max health y copiaremos y pegaremos. Esto correrá max así. Por lo que vamos a componente. Por lo que ahora podemos golpear play y ver si esto funciona. Si presiono X, se puede ver actualmente no max out. Si lo presiono de nuevo, ahora estamos girando max health. Así que eso es solo un ejemplo de cómo podemos usar macros para ejecutar código diferente en nuestros blueprints dependiendo de un valor, por ejemplo, ahora el motor realidad incluye una gran cantidad de macros incorporadas. Entonces por ejemplo, r es nodo válido si hacemos clic derecho y tal lo que es válido, y nos desplazamos hacia abajo hasta el nodo es válido. Es posible que reconozcas esto de una de nuestras lecciones anteriores. Esto es sólo una macro y está integrada en el motor. Entonces, si hacemos doble clic en él, en realidad nos lleva a un blueprint llamado macros estándar. Y esto viene con el motor y se puede ver que esto es sólo una macro, igual que nuestra macro de ejemplo. Tiene el mismo tipo de layout y podemos ver las entradas también. Así que si vamos a macros estándar, ver por aquí las entradas. Entonces solo tiene un pin de ejecución. Entrada y un pin de objeto y luego a salidas de ejecución. Y todo esto está haciendo es usar la función válida que está incorporada en el motor. Cheques. Es el objeto de entrada válido y luego usa una rama para ejecutar es válido o no es válido. Hay otras macros que vienen con el motor que puedes revisar. Todos están en estas categorías aquí. Entonces si quieres, puedes mirar a través de esos y ver cómo funcionan. Pero esencialmente las macros son realmente útiles para piezas de código más pequeñas e independientes que puedes reutilizar mucho en tu proyecto. Entonces por ejemplo, tal vez querías comprobar, está muerto el personaje? Entonces, en lugar de recibir el chequeo de salud, ¿esto es menor que o, es menor o igual a 0? Y luego ejecutando un nodo F, en realidad podrías simplemente tomar todo este código, cortarlo, y ponerlo en tus propias macros para que pudieras tener está muerto. Podríamos tirar esto aquí. Y si en realidad arrastramos de nuestra pluma de ejecución a la entrada, y podemos hacer lo mismo con las salidas. Para que podamos hacer así. Simplemente lo hace un poco más rápido que tener que agregarlos todos aquí. Entonces ahora tenemos un poco de macro aquí que podemos usar para comprobar es nuestro personaje muerto. Por lo que sólo podemos arrastrar eso. Y en lugar de tener que sumar todos esos nodos. Y cada vez que queremos comprobar es el personaje muerto, sólo podemos arrastrarlo en una pequeña macro y lo hace todo por nosotros. Aquí es realmente donde está su fuerza con las macros, puedes usarlas mucho. Pueden controlar qué código se está ejecutando. Y son solo pequeñas herramientas útiles, especialmente para cosas como revisar valores, como lo estamos haciendo aquí. Otro beneficio de la macro dice que se pueden usar nodos latentes en ellos. Entonces, si recuerdas de nuestra lección anterior, no puedes usar un nodo de retardo dentro de una función, pero puedes usarlos dentro de macros. Entonces si quisiera, podría agregar un nodo de retardo y aquí, así que todo un retraso. Ya ves que puedo agregar eso en muy bien . Yo lo puedo compilar. Y si vamos a nuestra gráfica de eventos, se puede ver ahora es que macro está latente porque tiene el pequeño reloj ahí. Y eso es porque dentro de él, hemos agregado este nodo de retardo. Y la razón de esto es que las macros se ejecutan como si fueran código en el Event Graph. Pero en su lugar simplemente compactaron hacia abajo en OneNote que podemos reutilizar y editar muy fácilmente. Tampoco restablecen funciones lo hacen cada vez que las ejecutamos. Por lo que son mucho más similares al código que tenemos en el Event Graph en lugar de al código que tienes en una función. Ahora, algunas cosas que no puedes hacer con las macros es que no puedes llamarlas desde otros planos. Entonces si recuerdas en nuestra lección anterior, creo un gatillo y podemos hacerlo de nuevo. Si creamos una nueva clase de blueprint, venderemos a un acento y lo llamaré gatillo, lo abriremos. Y crearé un nuevo componente de colisión de caja. Y sólo movemos esto un poco hacia arriba y lo configuraremos para que se oculte en juego se quitará esto para que solo lo podamos ver. Y aquí vamos a crear un nodo de inicio solapamiento. Si te acuerdas, esto simplemente se ejecuta cada vez que algo se superpone nuestro gatillo y luego nos dará el actor que lo solapó. Así que arrastra desde aquí y usa el Cast to Third PersonCharacter. Y esto tomará nuestra salida de actor que se solapó o gatillo. Y comprobará, es un ThirdPersonCharacter para es, entonces nos da acceso a ese fuego una variable y ejecutaremos el pin acertado aquí en la parte superior. Por lo que si recuerdas, podemos llamar a funciones vía esto. Pero vuelve a mi personaje aquí y sólo voy a crear una función. Llamaremos a esto decir aumentar la salud. Y sólo vamos a compilar. No agregaré ningún código y volvemos a nuestro gatillo. Si me arrasto, puedo o puedo acceder a esa función para poder ir a aumentar la salud. Se ve que puedo llamar a esa función desde mi personaje. Pero si te acuerdas, tenemos r está muerto macro. Si me arrasto y busco está muerto, no puedo encontrar esa macro porque no es accesible desde mi Character Blueprint. Solo puedo usarlo dentro de mi Character Blueprint. Por último, si recuerda de nuestra lección anterior, podemos anular funciones de nuestros planos principales. Por ejemplo, debido a que este es un plano de personaje en tercera persona, ese es un hijo del personaje. Puedo anular funciones que existen en el Character Blueprint. Pero no se puede hacer esto con macros. Las macros existen sólo en nuestro cabello blueprint. No puedo anular y tomar control de ninguna de las macros de digamos, el blueprint de caracteres o el blueprint activo por ejemplo. Así que solo para resumir, las macros son herramientas realmente útiles que puedes construir que solo pueden hacerte la vida un poco más fácil. Para que no tengas que recodificar cosas todo el tiempo. Y puedes modificarlos solo en un solo lugar y afectará a todos los lugares que se use macro. También pueden controlar qué código se está ejecutando muy fácilmente porque podemos tener múltiples entradas y salidas de ejecución. 14. Fundamentos (Estructuras y Enums): Oigan a todos. En esta lección vamos a estar echando un vistazo a estructuras y enumeraciones. Entonces comencemos. Las estructuras, o a veces referidas como estructuras, son una forma de almacenar múltiples tipos diferentes de variables dentro de una variable. Entonces, para darles un ejemplo, sólo voy a crear una nueva variable. Voy a llamarlo ejemplo paja. Y vamos a establecer el tipo de variable a una estructura que en realidad viene incorporada con el motor. Si quieres encontrar las otras estructuras de motor que vienen con él, solo puedes bajar a la categoría de estructura. Y aquí puedes ver todas las estructuras que usaste a lo largo del motor. Lo más probable es que no vayas a entrar aquí muy seguido. Porque estos solo se usan principalmente para funciones del motor y cosas por el estilo. Pero vamos a usar uno como ejemplo. Así que voy a crear, o voy a establecer nuestra variable tipo dos llamado float. Y vamos a establecer nuestra variable dos nombres flotar, y luego vamos a compilar. Ahora que hemos compilado, se puede ver que nuestro valor por defecto incluye una variable float y una variable de nombre que podemos ambos individualmente si quisiéramos. Y operan de la misma manera que uno esperaría que funcionara un nombre o una variable de flotación. Ahora bien, esta estructura solo incluye dos variables, un flotador y un nombre, pero puedes ser golpeado con muchas más variables y diferentes tipos de variables también. Ahora, podemos obtener y establecer trazo sostenido de manera que podamos con cualquier otro tipo de variable. Entonces si arrastramos en nuestro ejemplo struct aquí puedes ver que podemos conseguirlo todo. Podemos crear un nodo set y nos da estos nodos que hemos visto antes con otros tipos de variables. Ahora, lo genial de las estructuras a las que podemos acceder estas variables se almacenan en él muy fácilmente. Podemos simplemente arrastrar hacia fuera de nuestro nodo get y podemos crear un nodo break. Ahora porque estoy usando float named, dice break named float. Pero si estuviéramos usando una estructura diferente con un nombre diferente, diría break y luego el nombre de esa estructura en su lugar. Por lo que creará el salto Blake llamado nodo flotador. Y se puede ver aquí que ahora podemos acceder o flotar variable así como nuestra variable de nombre. Y estos son solo pines variables ordinarios. Ahora si quisiéramos, podríamos arrastrar hacia fuera de nuestro flotador y podríamos crear un nodo add, por ejemplo, o cualquier otro nodo flotante Related. Y podríamos hacer lo mismo de nuestro nombre, salida variable también. Si hubiéramos dicho, una variable de flotación, podríamos establecer esa variable de flotación usando esta pluma también. También podemos conseguir el pelo de las horquillas una manera diferente si obtenemos suficiente, nuevamente, obtenlo, y hacemos clic derecho en el pin de salida, podemos seleccionar la opción Dividir Struct Pin aquí. Se puede ver que ahora podemos obtener directamente el valor float y nuestro valor name de la variable struct de ejemplo. Y si queremos recombinarlos, para que vuelva a nuestro nodo get predeterminado normal aquí, podemos hacer clic derecho en los pines de salida y seleccionar recombinar Struct Pin. Se puede ver que ahora vuelve a la normalidad. Diré sin embargo, con mi experiencia en el motor usando esta opción Split Struct Pin, en lugar de usar el nodo break, esto es un poco más propenso a romperse con actualizaciones del motor y cosas por el estilo. Por lo que en lo personal prefiero usar los nodos break, pero es una preferencia personal. Puedes usar las clavijas divididas si quieres. Por lo que ahora sabemos cómo obtener información de nuestro nodo get strokes. Queremos poder establecer información a nuestros trazos, lo cual podemos hacer. Entonces si tomamos nuestra nota de set aquí y arrastramos hacia fuera desde el pin de entrada, buscaremos hacer. Se puede ver que tenemos una opción para make named flow. Ahora de nuevo, si estuviéramos usando un tipo diferente de struct, diría Make y luego ese nombre de trazos. Por lo que vamos a crear esta nota aquí. Se puede ver que ahora tenemos una entrada flotante y una entrada de nombre. Y esto nos permite poner en marcha el flujo o se denominan variables en nuestra estructura. Ahora el único problema con esto es decir que solo queremos que cambie nuestro valor de flotación y no queríamos cambiar nuestro valor de nombre, solo queríamos dejar eso igual. Esto en realidad sobrescribiría nuestro valor de nombre. Entonces, lo que podemos hacer en su lugar, si queremos simplemente cambiar una de las variables dentro de nuestra estructura, podemos hacer es crear un nodo, arrastrar hacia fuera, y buscar miembros de conjunto. Y ya ves que tenemos miembros set en el nombre non struct. Por lo que de nuevo, a la nuestra se le llama flotador. Entonces diremos que los miembros establecidos en el flujo nombrado crearán ese nodo. Y aquí tenemos esta nota de aspecto extraño. En el panel Detalles. Podemos bajar a este desplegable. ¿ Puedes ver que tenemos una casilla de verificación para cada tipo de variable que está dentro de nuestra estructura. Entonces si quería simplemente cambiar la variable de flotación, podemos asumir eso aquí. Y ya ves que a eso ahora se le agrega un insumo para nuestra flotación. Ahora, cuando este nodo se ejecuta, podríamos establecer una nueva variable de flotación dentro de nuestra estructura sin afectar nuestra variable de nombre. Mientras que con el nodo set, tendríamos que establecer tanto nuestra variable float como nuestra variable de nombre. Y por supuesto, si tuvieras una struct con más variables, esas estarían listadas aquí. Puede asumir múltiples variables usando las notas de los miembros del conjunto. Entonces si quisiera, podría tener ambos pines aquí como entrada también. Y podríamos cambiar ambos valores al mismo tiempo. Este nodo actúa automáticamente como lo hace un nodo conjunto. Por lo que no necesitamos usar un nodo set para que estos cambios se apliquen. Justo cuando este nodo se ejecute, cambiará esos valores para nosotros dentro de nuestra estructura. Entonces, hasta ahora hemos estado usando este llamado flotador golpeado que viene incorporado en el motor. Pero en realidad podemos crear nuestros propios trazos y podemos elegir qué variables se van a almacenar dentro de él. Entonces para ello, iremos al navegador de contenidos aquí. Sólo voy a hacer clic derecho y un espacio vacío. Después queremos ir al pop out de los planos y seleccionaremos la estructura. Ahora lo que si nombras tu estructura es cómo se llamará la estructura y la opción de tipos de variables. Entonces yo sólo voy a llamar a mi video struct así. Y haremos doble clic en él para abrirlo. Yo sólo voy a poner el mío en la parte de arriba aquí. Se puede ver que ahora tenemos una opción donde podemos establecer nuestras variables. Así que por defecto acabamos obtener una variable booleana que se llama miembro subrayado 0. Podemos agregar nuevas variables aquí haciendo clic en el botón agregar variable. Y si queremos, podemos eliminar variables haciendo clic en el pequeño bote de basura de aquí para eliminarlas. Por lo que añadiremos algunas variables. Y se pueden imaginar si quisiéramos almacenar información sobre digamos, un elemento, podríamos usar una estructura para hacer eso y mantener toda esa información almacenada en una variable, lugar de tener que tener cientos de variables que describen un ítem. Entonces por ejemplo, tal vez queríamos que nuestro artículo tuviera un nombre. Por lo que pondríamos el nombre del artículo. Podríamos llamar a este nombre tal vez un peso. Por lo que usaremos flotador. Llamamos a este peso variable tal vez un valor dañado. Entonces podríamos decir un entero a dañar, y luego tal vez un texto que podemos decir es la descripción. Y podemos salvar esto. Ahora cuando volvamos a nuestro ThirdPersonCharacter, podemos crear una nueva estructura. Y a esto lo llamaremos nuestro video. Y cuando pasamos al tipo variable, podemos buscar un video. Y verás el video struct. Ese es el nombre de nuestra estructura. Si llamaste a mandíbulas algo diferente a lo que tendrás que buscar eso. Entonces crearemos esto y compilaremos. Así que ahora cuando pasamos al valor predeterminado, se puede ver que tenemos las cuatro de nuestras variables que hemos creado dentro de nuestra estructura con los nombres correctos y ver si podemos establecer nombre, un flotador, un entero y una descripción para nuestra estructura. Y al igual que antes, podemos acceder a estos con la nota de freno. Entonces, si creamos un nodo, arrastramos hacia fuera y creamos una estructura de video break, se puede ver que el motor simplemente se configura automáticamente para nosotros para que podamos simplemente crear ese nodo. Y así como así, tenemos acceso a nuestro nombre, peso, daño y descripción usando nuestro nodo de rotura. Nuevamente, si quisiéramos establecer esas variables usando el nodo set members, podemos arrastrar hacia fuera, usar los miembros del conjunto. Y se ven miembros de set en video struct. Y podemos asumir cualquier variable que queramos, como hicimos antes con nuestro flotador llamado. Pero esta es ahora nuestra propia estructura personalizada. Ahora, también podemos establecer los valores predeterminados para nuestra estructura también. Entonces, si volvemos a nuestros trazos de video, puedes ver que aquí tenemos una opción de valores por defecto. Entonces aquí podríamos simplemente sentarnos cuáles los valores predeterminados estándar sonlos valores predeterminados estándarpara el video tipo Struck. Entonces tal vez solo quiero decir, diga nombre del artículo. Queríamos que el peso por defecto fuera decir uno y descripción ¿qué parte? Información del artículo aquí. Y el daño será de diez. Entonces estos son ahora los valores por defecto si guardamos ahora y volvemos a ThirdPersonCharacter. Y selecciono mi estructura de video o compilo porque hemos hecho algunos cambios a la estructura, habrá que compilar. Se puede ver que ahora está usando esos valores predeterminados que establecemos dentro de nuestra struct. Si queremos volver a poder cambiar variables, solo podemos hacer clic en la pestaña Estructura aquí y podemos acceder a esas variables. Ahora, otra cosa que puedes hacer aquí dentro es que si quisiéramos, podríamos reordenar estos para que pudiera agarrar este pequeño icono al final aquí. Podemos cambiar el orden, así que tal vez quiero que el nombre sea tercero ahora en lugar de la parte superior, lo hacemos y podemos golpear Guardar. Vuelve a nuestro personaje y lo compilaremos. Observa que ahora con nuestro trazo de video seleccionado, que ahora están en un orden diferente. Ahora es algo que hace que las estructuras sean realmente poderosas es que las podemos usar en matrices. Así que si recuerdas de nuestra matriz de video para establecer una variable para ser una matriz, podemos hacer clic en este pequeño desplegable aquí y seleccionar matriz. Ahora vamos a romper un poco algunas de nuestras conexiones allí porque no podemos conectar una matriz en ninguno de estos nodos. Por lo que sólo voy a borrar esos por ahora. Pero si recuerdas, podemos arrastrar hacia fuera desde una variable de matriz y buscar bucle. Podemos seleccionar para cada bucle. Usando esto, ahora podemos recorrer nuestras entradas en nuestra matriz. Así que sólo voy a compilar aquí, así que tenemos nuestros valores por defecto. Entonces, por ejemplo, podríamos usar una struct para almacenar mucha información sobre diferentes artículos, tal vez para un inventario, por ejemplo. Entonces, por ejemplo, si creo algunas entradas aquí, se puede ver que ahora tenemos múltiples versiones de esa estructura almacenada en la matriz. Y luego podemos recorrer esas versiones de nuestra struct usando el nodo loop y luego acceder a su información usando el elemento array. Y entonces sólo podemos usar el video break atado como lo han sido antes. Y podemos acceder a esa información desde nuestro array. Entonces eso es más o menos lo básico de las estructuras. Son realmente útiles para mantener las cosas organizadas y almacenar grandes cantidades de datos. Al igual que si tuvieras un inventario lleno de artículos. Puedes usar estos para almacenar mucha información sobre cada artículo. Y después podemos ponerlos dentro un rayo o podemos usar trazos solo para mantener las cosas organizadas también. A lo mejor tienes un conjunto de variables que siempre has usado juntas. Por lo que podría almacenar los en una estructura y simplemente acceder a ellos a través de una variable. A continuación, vamos a mirar a los sindicatos. Ahora. Nuevamente, al igual que la estructura, el motor en realidad tiene indio incorporado. Entonces, si bajas al fondo, puedes ver la categoría de modismo aquí. Y hay muchos que vienen con el motor. Nuevamente, realmente no usarás estos. Simplemente están integrados en el motor y los usan los nodos dentro del motor. Pero también puedes crear tus propias enumeraciones al igual que hicimos con nuestra struct. Ahora, te mostraré cómo hacer eso. Por lo que compilará este blueprint por ahora. Y haremos clic derecho y nuestro navegador de contenido volverá a los planos. Y aquí vamos a seleccionar enumeración. Y a esto lo llamaremos un video. Nuevamente, lo que llames a este blueprint es lo que se llamará en la opción de tipo variable. Entonces eso es sólo algo a tener en cuenta. Podemos abrir esto. Se puede ver que se ve un poco similar a nuestra estructura en la parte superior, pero aquí hay algunas diferencias, por lo que en realidad no tenemos ningún valor predeterminado para empezar. Daremos clic en Agregar en numerador. Ya ves que esto nos da un nuevo insumo aquí. Ahora todos podemos establecer un nombre, por lo que podríamos decir la opción uno. Y agregaremos un par más solo para que podamos verlo en el editor. Entonces llamaremos a esta opción dos, y guardaremos esto. Ahora, en realidad no hay mucho más que puedas hacer aquí. Por lo que volveremos a nuestro ThirdPersonCharacter. Y voy a crear una nueva variable. Llamaremos a esto un video. En ella. Voy a cambiar el tipo de variable aquí. Yo sólo voy a cambiarlo a una sola. Y haremos clic en el desplegable y vamos a buscar nuestro video en ti. Así como así. Y vamos a compilar. Ahora puedes ver en el valor por defecto aquí tenemos este desplegable. ¿ Ves eso? Porque tengo la opción uno y la opción dos que me senté en mi video union, que son las opciones que tengo para mi valor predeterminado. Ahora, las enumeraciones funcionan igual que la mayoría de las variables que podemos obtener y establecerlas. Así que si arrasto hacia fuera y hago un nodo get, se puede ver que sólo podemos conseguirlo como una variable normal. Y también podemos configurarlo. Así que si arrasto hacia fuera y no establecer, se puede ver que tengo un nodo conjunto, pero en realidad podemos establecer manualmente cualquier opción que queremos par utilizando el nodo conjunto, así, o podemos tomar una entrada si queríamos. Ahora, las enumeraciones son realmente útiles para controlar qué código se ejecuta en tu proyecto. Y la forma en que pueden hacer eso es si arrastramos fuera de nuestro nodo get, podemos hacer un switch. Se vería interruptor en video. Nuevamente. Si estás en humanos llamado algo diferente, diría encender y luego ese nombre enumeraciones. Pero el nuestro es video indio. Entonces vamos a crear esto. Se puede ver que ha creado un nodo switch para nosotros y por cada ajuste que tenemos dentro de nuestro indio, nos dará un pin de salida. Entonces si volvimos a nuestro video en num aquí, agregué un par de opciones más, así que agregaremos un par más. Voy a configurar esto para decir prueba 123 y prueba 456. Nos ahorramos esto. Ahora cuando volvamos a nuestro Third PersonCharacter, probablemente querrás compilar solo para asegurarte se vean esas opciones Update. Ahora, tenemos nuestras dos opciones originales y en realidad se han añadido algunas adicionales. Y usando esto, en realidad podemos controlar qué código se va a ejecutar dependiendo de lo que nuestras enums se establecen a. Un buen ejemplo de cómo se puede usar esto ya que tal vez tengas artículos en tu juego y diferentes artículos hacen cosas diferentes cuando los usan. Entonces tal vez tenías consumibles, medicinas, cosas así. Podrías tener una opción para cada uno de esos diferentes tipos de artículos y luego tener un código diferente que se ejecute dependiendo del tipo de artículo que sea. Ahora, también podemos usar una nota selecta de ellos. Entonces si arrastramos hacia fuera, buscamos seleccionar. En realidad podemos seleccionar una variable dependiendo de nuestro valor de enumeraciones. En este momento solo está en gris porque no hemos introducido ningún tipo de variable. Pero si yo fuera a crear una nueva variable y vamos a llamar a este flotador, sólo voy a configurarlo a un flotador. Si conectamos este flotador ahora a la nota de selección, se puede ver que todos se convierten en flotadores. Y esto nos puede permitir seleccionar y generar salida a partir de este valor de retorno. Podemos seleccionar cualquiera de estos insumos dependiendo de nuestro valor indio. Entonces, por ejemplo, si tuviéramos que configurarlo en la opción dos, entonces lo que esté conectado a la opción dos sería devuelto a través del valor de retorno. Ahora, también podemos hacer cosas como controlar un nodo de rama usando enumeraciones. Así que si acabo de borrar estos nodos por ahora, podemos arrastrar hacia fuera y hacer un nodo igual. Podemos comprobar. crear este nodo igual a Ethereum aquí. Y podemos comprobar, ¿es nuestro inmune igual a uno si es opciones afiladas? Y si lo es, podemos dar salida a un valor verdadero, y si no, pondrá un valor falso. Por lo que podríamos crear un nodo Branch él y controlar si esto se va a ejecutar o no verdadero o falso dependiendo del valor de nuestros sindicatos. Ahora también podemos usar nuestro indio dentro de nuestra struct, así que podemos hacer eso ahora si quisiéramos, podríamos volver a nuestra estructura de video aquí, agregar una nueva variable, y llamaremos a este tipo say item. Podemos configurar esto para que sea nuestro video inmune. Así como así. Ahórrate esto y tal vez queríamos cambiar cuáles eran nuestras opciones. Entonces tal vez esto era comida, bebida, conocido, y arma. Por lo que ahora podríamos usar este video indio dentro nuestra estructura para establecer cuál es el ID de tipo de un artículo. Así que si volvemos aquí y obtenemos nuestra estructura de video, podemos decir bucle a través de nuestra matriz. Podemos acceder a todos los valores en nuestras estructuras para poder arrastrar hacia fuera, romper nuestra estructura de video. Se puede ver que ahora hemos pasado un cierto número de variables. Por lo que obtenemos esta pequeña opción desplegable que podemos usar. Y en realidad se puede organizar esto más. Entonces tal vez solo necesitas el valor del peso. Por lo que podrías entrar aquí y desmarcar ciertas variables que solo muestra la opción Peso. Ahora, solo para mantener las cosas ordenadas porque podrías tener una struct con muchas variables. Para que puedas desmarcar cuáles simplemente no necesitas en ese momento en particular. Esto no afecta tu golpe de ninguna manera. Simplemente arregla el nodo. Pero también podemos acceder a ese tipo de ítem en él que agregamos a nuestra struct. Así que si arrastramos hacia fuera, podemos usar decir, el nodo igual. Podemos comprobar es este artículo, esta entrada en particular en nuestra matriz? ¿ Es un artículo de comida, por ejemplo, si lo es, entonces tal vez queremos ejecutar una pieza específica de código. O si se decía, un arma por ejemplo, podríamos tener que ejecutar código diferente. Como dije antes, podríamos usar ese nodo switch. Para que pudiéramos ejecutar un interruptor en video. Y ahora podemos cambiar dependiendo de qué tipo de elemento pasa a ser esta entrada en nuestra matriz. Ahora Eso es todo por esta lección. Al igual que un resumen, las estructuras son una muy buena manera de almacenar múltiples tipos de variables dentro de una variable. Y luego con las matrices podemos almacenar mucha información a la que luego podemos acceder realmente fácilmente. Y las enumeraciones son una gran manera de controlar qué código en tus proyectos se está llevando a cabo. O podemos usarlos para seleccionar variables dependiendo de los nums, fantasía. 15. Fundamentos (Eventos): Oigan a todos. En esta lección vamos a estar echando un vistazo a los nodos de eventos. Ahora ya hemos estado usando nodos de eventos bastante en nuestras lecciones anteriores. Si recuerdas la nota de reproducción inicial por ejemplo, que es un evento o eventos destruidos nodo también es un evento. Estos eventos se llaman desde el código dentro del motor. código que está integrado en el motor ejecuta estos eventos cuando se inicia el juego o cuando los actores se destruyen. Ahora, también podemos crear nuestros propios eventos personalizados que podemos ejecutar cuando queramos. Haz eso, podemos hacer clic derecho. Podemos buscar evento personalizado. Y podemos usar la opción de agregar evento personalizado aquí para crear un nuevo nodo de evento. Yo sólo voy a llamar evento de ejemplo mío , evento como ese. Y se puede ver que ahora se parece a nuestros otros eventos, pero este evento en realidad nunca va a ser llamado en este momento porque no lo hemos llamado a ninguna parte. Entonces si quisiera que mi ejemplo vent se ejecutara y viera el código que conecto a él, como cadena de impresión para ejecutar, necesitaríamos llamar a nuestro evento de ejemplo. Entonces para hacer eso podemos usar un evento existente como la nota de plano inicial para llamarlo. Para que pudiéramos arrastrar y buscar, por ejemplo, evento. Y eso llamaría ahora nuestro evento de ejemplo cuando comience el juego. Ahora podemos llamar a eventos en múltiples lugares en nuestro código. Entonces, por ejemplo, si quisiéramos que este código de evento de ejemplo se ejecutara cuando comience el juego y también cuando nuestros personajes se destruyan. Podríamos hacer eso también. Podríamos simplemente arrastrarnos hacia fuera en otro evento de ejemplo. Fresco aquí. Y ahora cuando empiece nuestro juego, llamaremos a este evento, estoy ejecutando su código. Y también cuando este actor es destruido, llamamos al evento y ejecutamos este código. También podemos agregar insumos a nuestros eventos. Por lo que si seleccionamos nuestra nota de evento aquí, se puede ver que hay una opción de entradas. Entonces si hago clic en el botón de añadir entrada aquí, podemos ver que tienes una nueva entrada booleana. Y eso agrega una salida a nuestro nodo de eventos y también entradas a nuestros nodos cool de eventos. Por lo que ahora podemos controlar una variable usando los nodos del núcleo. Entonces por ejemplo, tal vez queríamos que nuestro booleano cierto Cuando se ejecuta la jugada inicial, pero falsa cuando corre la destruida. Y entonces podríamos tener tal vez ejecución de código diferente, dependiendo de si ese valor de salida era verdadero o falso. Los eventos también se usan bastante ampliamente en la codificación para multijugador. Si seleccionamos el evento aquí, se puede ver que tiene algunos ajustes de replicación. Estos son para multijugador. Ahora no voy a estar cubriendo esto en esta lección porque el multiplicador es un tema enorme y realmente necesitas conocer los fundamentos de planos antes de entrar en la codificación para multipolar, sigue adelante, otra cosa que puedes hacer con los eventos es llamarlos desde otros planos como podemos con nuestras funciones. Entonces, si puedo sacar mi plano aquí, voy a crear un nuevo plano. Yo sólo voy a usar a un actor y lo vamos a vender para detonar. Y eso lo abriré. Yo sólo voy a agregar una caja. Colisión irá al Event Graph y vamos a crear una superposición de inicio. Actor de eventos comienza solapamiento. Nuevamente. Esto es sólo un evento. Se puede ver que dice evento en el nodo. Pero a esto se le llama cuando algo se superpone son actor gatillo, eso nos da una salida de cualquier actor solapamiento que Todd disparador arrastre hacia fuera de esto. Usaremos un nodo Cast to ThirdPersonCharacter. Y si recuerdas de nuestras lecciones anteriores, este chequea es el otro actor que está superponiendo nuestro gatillo, un personaje en tercera persona. Si lo es, entonces nos da acceso a sus variables, funciones y eventos. Entonces si arrastro desde aquí y busqué por ejemplo, se puede ver que puedo llamar a mi evento de ejemplo. Y también tenemos acceso a esa variable que agregamos. Y cuando un actor se superpone son gatillo, comprobaría, ¿es un Third PersonCharacter? Y si lo es, entonces llamaremos a este evento de ejemplo en ese ThirdPersonCharacter Blueprint. Y si hacemos doble clic en este evento, en realidad nos llevará al plano de nuestro personaje. Y eso solo nos lleva directo a nuestro código que podamos encontrar fácilmente lo que estamos ejecutando. También podemos usar eventos con temporizadores. Entonces si nos desconectamos, empiezo a tocar nota aquí y sólo la moveré aquí arriba para un poco más de espacio. Si arrastramos fuera de mi Begin Play y buscamos establecer un temporizador por evento. Se puede ver que tenemos una opción llamada set timer por ellos. Y eso nos da este nodo. Ahora, si puedes sondear, obtendrás un error. No te preocupes por eso porque aún no tenemos un evento conectado. Entonces hay un par de formas en que podemos hacer esto. Podemos arrastrar desde nuestro pin de evento aquí, luego buscar personalizado. Y podemos agregar un evento personalizado como lo hicimos antes. Y eso nos da un nuevo nodo de eventos. O simplemente podemos hacer clic derecho y buscar personalizado y agregar un evento personalizado como lo hicimos antes. Y podemos conectarlo hasta la entrada del evento aquí. Ahora, una cosa a tener en cuenta es que si tu evento tiene alguna entrada, no podrás conectarlo hasta este nodo. Entonces por ejemplo, si agregué un booleano aquí y podemos tirar, se puede ver si me arrastro desde la ventilación de mi cliente aquí, no puedo conectarlo hasta la entrada. Y eso es porque tenemos una variable de entrada para nuestro mover esto y compilar de nuevo, voy a poder conectar esa copia de seguridad. Por lo que ahora el evento timer nos permite ejecutar un evento dependiendo de su configuración. Así que actualmente en Begin Play, queremos que nuestro cronómetro se ejecute, digamos, cada 1 segundo, que podamos establecer el tiempo a uno y podamos activar el looping si queremos que este evento se ejecute cada una segundo. Para que pudiéramos asumir eso. Si dejáramos esto fuera, la jugada inicial no funcionaría. Corría el tiempo establecido que los compro. Esto esperaría 1 segundo, y correría nuestro evento una vez, y entonces eso sería todo. Pero si tenemos ticks de looping encendido, lo correrá cada segundo. Ahora, los temporizadores son una muy buena alternativa al uso del evento tick. Entonces, si recuerdas, si creamos el evento tick, esto ejecutará cada fotograma único que nuestro juego se renderice. Y muchos principiantes tienden a adjuntar una gran cantidad de código a esto solo porque funciona continuamente. El problema con eso es que mayoría del código no necesita ejecutarse cada fotograma y puedes arruinar muy fácilmente el rendimiento de tu proyecto haciendo eso. Por lo que una gran alternativa es usar temporizadores. Digamos que si necesitabas código para ejecutarse cada 1 segundo, puedes conectarlo así, en lugar de usar una técnica, por ejemplo. Ahora podemos usar un controlador de temporizador para controlar nuestro temporizador. Así que si arrastramos hacia fuera de este valor de retorno aquí, podemos crear nueva variable utilizando la opción promueve Variable, y que acaba de crear alguna nueva variable es tipo es temporizador manejar, y sólo voy a llamarlo temporizador. Ahora esta vez una variable nos permite controlar nuestro temporizador. Así que digamos por ejemplo, queríamos ejecutar a este cliente luego varias veces y luego detener el temporizador funcionando. Podemos hacer eso. Entonces podríamos agregar, digamos una nueva variable. Sólo llamaré a este número. Lo pondré en un entero. Obtendremos nuestro entero y sólo comprobará, ¿es igual a decir, cinco a cinco? Y haremos un nodo F. Entonces si no es igual a cinco, queremos agregarle uno. Eso lo haremos, lo conseguiremos. Agregaremos uno y luego haremos sexo el valor del número está en cinco. Queremos detener nuestro cronómetro. Entonces lo que podemos hacer es que podemos arrastrar hacia fuera de R o podemos conseguir nuestro tiempo una variable aquí, arrastrar hacia fuera de ella y buscar clip y usar el tiempo claro e invalidar que compro manejar. Entonces ahora, la forma en que funcionaría este código es cuando empieza el juego o cuando el personaje ha engendrado. Nuestro temporizador ejecutará a nuestro cliente luego cada 1 segundo, configuraremos su referencia de temporizador a la variable de mango del temporizador. Así que ahora cuando se ejecuta nuestro evento personalizado, comprobamos que es número igual a cinco. Si no lo es, le agregamos uno y lo configuramos. Y entonces la próxima vez que esto corra, después de un segundo, volvemos a comprobar. Y luego una vez que están a las cinco, entonces le decimos a este temporizador que se detenga. Ahora, usar el clear e invalida el timer por nodo manejado se detendrá por completo esta vez. Tendrás que ejecutarlo de nuevo para poner en marcha. Pero si quieres poder reanudar este temporizador, realidad podemos usar un nodo diferente. Para que podamos alargar y podemos buscar decir, pausa. Y podemos pausar el mango del temporizador. Para que podamos ejecutar esto en su lugar. Ahora, esto nos permite decir tal vez queríamos retomar el tiempo de espera de nuevo más adelante. Podríamos entonces usar el nodo un-pause que reanudaría el funcionamiento de nuestro temporizador. Ahora podemos probar esto out and game. Por lo que sólo voy a eliminar la un-pausa anotada. Y agregaré en un par de cadenas de impresiones solo para que podamos ver qué se está ejecutando. Conectaremos nuestro número dos, imprimo una cadena aquí, y agregaré una cadena de impresión hasta mi tiempo de pausa del código. Y pondré esto en tiempo de espera. Entonces ahora cuando le peguemos al play, todo esto debería correr cuando iniciemos el juego. que podamos comprobar que nuestro tiempo corre cada segundo. Está aumentando el valor de nuestro número. Una vez que son cinco, el puerto, el tiempo de espera se pausa. Ahora si alguna vez quieres encontrar los eventos que vienen incorporados en el motor, puedes hacerlo si vamos a nuestro ThirdPersonCharacter Blueprint aquí, haz clic en Buscar evento. Puedes ver una lista de todos los diferentes eventos que vienen incorporados a nuestro personaje. Ahora bien, debido a que este es un personaje, tiene algunos eventos personalizados que otros actores no tienen. Al igual que por ejemplo, el aterrizado, esto correrá siempre que nuestro personaje aterrice de un salto. También puedes hacer esto en actores normales como por ejemplo, nuestro gatillo. Si hago clic derecho en buscar evento, puedes ver que no tiene tantos eventos como lo hizo el personaje, pero sí tiene algunos eventos construidos y que puedes usar para ejecutar tu código. Eso es todo por nuestra lección de eventos. usaremos eventos en nuestras futuras lecciones, simplemente porque son parte bastante central de la codificación y los planos. 16. Aspectos básicos (herencia de un plano): Oigan a todos. En esta lección vamos a estar hablando un poco sobre la herencia de Blueprint. Ahora, ya hemos hablado de esto un poco antes en los actores y los objetos varían hasta el video. Si no has visto esa, te recomendaría echarle un ojo a eso. Pero esencialmente, la herencia de blueprint nos permite crear un blueprint a partir de un blueprint existente que luego usa ese blueprint existente como padre. Y lo que eso significa es nuestro nuevo blueprint, que tiene el hijo hereda todas las funciones, variables y código del blueprint padre. Entonces primero pondré un ejemplo aquí. Si solo creamos cualquier Blueprint, solo voy a hacer clic derecho y seleccionar Clase de plano. Se puede ver que cuando en realidad seleccionamos una de estas opciones aquí, en realidad estamos escogiendo una clase padre. Ahora, hemos estado usando al actor en su mayor parte porque ese es solo el objeto más básico que puede existir en el mundo. Entonces sólo vamos a seleccionar actor de nuevo ahora. Y al hacer eso, heredamos nuestro nuevo plan aquí, hereda todas las funciones, variables y habilidades que tiene un actor. Ahora, si abrimos nuestro nuevo plano, puedo mostrarles a qué me refiero. Si solo tenemos esto en el PEP superior, si vamos a nuestra opción de variables aquí abajo, parece que solo tenemos nuestra ruta vista por defecto, que viene con nuestro actor. Director en realidad viene con un montón de otras variables. Simplemente no los podemos ver porque son heredados. De la forma en que podemos encender eso en esto, si vamos a este pequeño cog aquí, podemos dar clic en Mostrar variables heredadas. Y ya ves que ahora tengo un montón de categorías que acaban de aparecer. Ahora. Estas son todas variables que mi nuevo plano o heredando porque es hijo del actor. Todas estas variables fueron creadas en el actor. Ahora podemos usar estas variables al igual que podemos con las variables que creamos nosotros mismos. Entonces si voy al Event Graph aquí, puedo arrastrar estos , puedo conseguirlos. No puedo establecer ciertas. Entonces, por ejemplo, solo relevante para el propietario está en realidad deshabilitado. No puedo establecer eso usando código, pero otros que puedo, por ejemplo, si nos desplazamos hacia abajo, puedo tener pueden dañarse si lo arrastro y se puede ver que puedo obtener esa variable al igual que nuestras variables normales. Y también puedo configurar. Y esto es lo mismo para las funciones. Hablamos un poco sobre esto en la lección de funciones, pero cuando hacemos clic derecho y buscamos decir, set to transform, este set actor transform node es solo una función que existe en la clase de actor a la que tenemos acceso porque nuestro nuevo plan es un hijo de la clase actor. Ahora, no podemos ir al Navegador de Contenido y encontrar el acto de blueprint porque no está aquí. En realidad está integrado en el motor y todas sus variables y funciones están codificadas en C plus plus. Entonces ahora les voy a mostrar cómo podemos configurar nuestro propio sistema de herencia, como heredamos del actor. Podríamos tener nuestro nuevo blueprint, tener algún código en él, algunas funciones, variables. Entonces podríamos tener otro nuevo blueprint heredar de nuestro nuevo blueprint y tener acceso a esas variables y funciones. Entonces iremos al navegador de contenidos aquí, y solo voy a cambiar el nombre de mi blueprint. Yo sólo voy a llamarlo el maestro, lo llamaré BP Underscore Master. Ahora, para crear un plano infantil, hay algunas maneras en que puedes hacer esto. Simplemente podemos hacer clic derecho en nuestro blueprint master bp. Se puede ver que aquí hay una opción llamada Create Child Blueprint class. Si hacemos clic en eso, puedes ver que nos ha creado cualquier nuevo blueprint. Le está dando el nombre BP master underscore child, y esto ahora es un modelo infantil de nuestro maestro. Si lo abrimos, verás que en lugar de que la clase padre sea el actor como está en el blueprint maestro o master child es la clase padre es BP master. Ahora solo voy a ir al Navegador de Contenido y renombrar esto a niño solo para, así no nos confundamos aquí así. Ahora, otra forma de crear blueprints secundarios es en la opción Crear blueprint. Entonces si vamos a clase Blueprint, puedes ver aquí abajo que tiene todas las clases. Y si buscamos BP Underscore Master, verás que en realidad lo encontramos. Es un poco difícil de ver porque ahí está resaltado. Pero eso dice BP master. Si damos clic en esto, podemos hacer clic en Seleccionar. Y eso también nos creará un hijo de la máscara. Para que puedan ver que ha creado un nuevo blueprint. Si abro eso, verás que la clase de padres también es maestra de BP. Ahora voy a volver a mi navegador de contenido y simplemente eliminar este nuevo blueprint porque ya tenemos un hijo con el que podemos trabajar. Así que ahora si volvemos a nuestro bp master y solo voy a borrar estos nodos por ahora. Voy a ocultar mostrar variables heredadas. Por lo que ahora estamos de vuelta a nuestra vista por defecto. Voy a crear cualquier variable y sólo voy a llamar a este decir, variable de ejemplo creará una nueva función también. Llamaré a esta función de ejemplo. Ahora bien, esta variable y función son únicas de nuestro maestro bp. Entonces otros hijos del acceso, dicen por ejemplo, nuestro personaje, que en realidad es hijo del actor también. No tendrá acceso a estas variables porque nuestro personaje no es hijo de nuestro maestro bp, pero nuestro hijo lo siento. Bp Child Blueprint es un hijo del maestro BP. Entonces si vamos al o si volvemos a nuestro maestro aquí y compilamos la mayoría guarda eso también. Después volvemos a nuestro hijo bp. Entramos en Event Graph. Podemos encender eso, mostrar variables heredadas. De acuerdo, Entonces el desplegable, ves que tenemos todas las variables activas porque a pesar de que el maestro de BP es nuestro padre, el padre del maestro BP es el actor. Entonces nuestro hijo todavía tiene todas las cosas que hacen los actores, todavía tiene todas sus variables son otras funciones. Pero luego añadimos en lo que nuestros padres consiguieron también. Para que puedas ver nuestras variables de ejemplo que podemos usar eso como si lo hubiéramos creado. Podemos configurarlo bien en nuestro hijo BP. También podemos usar esa función que creamos en el maestro. Así que si solo hago clic derecho y busqué por ejemplo función, se puede ver que puedo crear la función de ejemplo y cualquier código que teníamos dentro nuestra función aquí se ejecutaría igual que si lohabíamos llamado en nuestro plan maestro de Event Graph para que podamos acceder a eso en nuestro blueprint. Y si recuerdas de nuestro video de funciones, podemos anular funciones de nuestros planos padre. Así que si vamos a anular en la pestaña de funciones aquí, se puede ver que tenemos todas estas funciones que podemos anular desde nuestro actor. Pero también tenemos al maestro de BP. Y se puede ver que tenemos nuestra función de ejemplo aquí. Si hago clic en esto, podemos tomar el control y cambiar qué código se va a ejecutar cada vez que se ejecute nuestra función de ejemplo, también tenemos esta nota extra aquí, y esto básicamente hace que el código que está en la ejecución del plan de los padres. Y entonces podríamos tener código adicional si quisiéramos. También podríamos simplemente eliminar este nodo y ejecutar completamente nuestro propio código personalizado para siempre que funcione el ejemplo como RAM. Ahora, el código que se está corriendo en el plano maestro también se va a ejecutar para nuestro Child Blueprint. Entonces te está dando un ejemplo. Voy a ir al Event Graph it y sólo voy a borrar estos nodos. Voy a borrar estos también. Acaban de venir con nuevos actores que se crean. Por lo que se puede ver nuestro hijo ahora no tiene código en él. Podemos eliminar eso, anular algunos sólo va a seleccionar la función de ejemplo aquí, eliminar eso. Eso en realidad no elimina la función. Si ves, todavía puedo acceder a la función que acaba de borrar son Override of it. Así que cualquier código personalizado que podríamos haber añadido a la anulación ahora se ha ido y sólo vamos a utilizar lo que nuestro blueprint maestro, um, tiene en esa función. Entonces si borro eso, pueden ver que no tenemos ningún código en absoluto en nuestro hijo. Bp compilará y guardará esto. Ahora si voy a mi maestro de BP y voy a crear una nota de reproducción inicial. Y agregaré una cadena de impresión a esto. Entonces sólo algo sencillo que nos deja hola. Entonces ahora el único código que tenemos en ambos planos es este comenzar a jugar y luego una cadena de impresión. Ahora, si voy al mapa de tercera persona y arrastro en mi hijo BP, y simplemente colocaré eso ahí dentro. Ahora recuerden, nuestro hijo no tiene ningún código en él en absoluto. Pero cuando le pegue a Play, verás que está imprimiendo hola, pesar de que no tiene código ahí. Ahora eso es porque el niño seguirá corriendo el código que existe en el padre. Por lo que nuestros padres dicen que comiencen a jugar cadena de impresión. Por lo que voy niño va a hacer lo mismo. Ahora, al igual que nuestras funciones, también podemos anular eventos. Entonces en mi hijo ahora, si creo un nuevo start play de m, no me conectaré a nada a la altura de esto. Yo simplemente lo dejaría así. Voy a compilar. Y ahora cuando golpeo play y veo que No Print String sucede. Y eso es porque hemos, le estamos diciendo al motor que nuestro hijo anula a sus padres comienzan a jugar nodo. Entonces ya no correrá esto para nuestro hijo. Ejecutaremos nuestro propio código personalizado para que podamos agregar otra cadena de impresión y podríamos decir esto, esto, esto es una prueba. Y ahora esto se ejecutará en lugar de que esto se ejecute. Entonces si le pegamos a Play, ves que esto es una prueba. Y otra vez, si me quito eso, empiezo a jugar fuera de mi hijo, ya verás que empezará a imprimir el hola otra vez. Ahora, tal vez te estés preguntando cuál es el punto de la herencia de Blueprint. ¿ Por qué no tendrías todo este código y cada uno de los planos? Bueno, la razón principal es porque es más difícil de mantener si tenías todo este código y dices 20 planos diferentes y hubo un bug con ese código. Tendrías que pasar y cambiar 20 planos. O si quisieras agregar una nueva característica, de nuevo, tendrías que revisar todos estos 20 planos y cambiar el código. Ahora con la herencia de blueprint, puedes tener un blueprint maestro que tenga todo el código que necesitas en él. Y luego los planos de los niños que luego heredan ese código. Y si tal vez uno de los planos infantiles necesitara hacer algo especial, pero la mayor parte del código tendría que seguir siendo el mismo. Podrías ir al plano de ese niño. Podría anular, digamos, una función o un evento y tener código personalizado que se ejecute solo en ese niño sin afectar a todos los demás hijos o afectar el blueprint maestro. Un buen ejemplo de ello serían cosas como armas. Si tuvieras 20 armas diferentes en tu juego, no querrías tener todo el código para disparar, apuntar, recargar en cada plano de arma porque si quisieras cambiar cualquiera de ese código o arreglar un error o agregar una característica, tendrías que pasar por 20 o 30 planos haciendo lo mismo una y otra vez. Mientras que si solo tuvieras un plano maestro que tuviera todo tu puntería, recargando código. Todas las armas son hijos de ese modelo maestro. Puedes cambiarlo todo en un solo lugar y eso afectará a todos los planos del niño. Ahora, la herencia también cubre los componentes de los planos maestros. Entonces, si agregamos un nuevo componente a nuestro blueprint maestro aquí, solo voy a usar un componente de malla estática. Verás que tenemos un componente de malla estática. Ahora podemos establecer una malla. Voy a poner el mío a un cubo por ejemplo. Y solo pondré un cubo y compilaré. Entonces ahora tenemos un cubo en nuestro plan maestro. Vamos al Plano del Niño. Se puede ver que también tenemos un cubo en la ventana gráfica. Ahora, también puede encontrar la malla de estado en el panel Componentes. Si seleccionamos eso, en realidad podemos cambiar nuestro cubo destrozado. Para que pueda cambiar esto para decir, un peine. Entonces si busco cono, puedo configurar esto a un cono. Ahora, nuestro hijo tiene una malla de pila diferente de nuestro modelo maestro. Podríamos hacer lo mismo con múltiples planos infantiles de nuestro modelo más grande. Di si tenías armas Meli, por ejemplo, y agregas un arma cuerpo a cuerpo maestra con todo el código. Y entonces podrías tener planos infantiles de la misma por ejemplo, un cuchillo y actúa una lanza y así sucesivamente. Y podrías cambiar la malla de pila para cada uno de esos y hacer que todos sigan teniendo el código del blueprint maestro. Eso va a ser todo por esta lección. Esperemos que tengas una mejor comprensión de la herencia en el motor y también de lo que realmente es útil. 17. Fundamentos (fundición): Oigan a todos, En esta lección vamos a estar echando un vistazo al nodo de costos. Así que antes de empezar, recomiendo encarecidamente si aún no has visto la lección variable de actores y objetos. Y también nuestra lección anterior sobre la herencia de planos como tipo de fundición se conecta con ambos sistemas. Entonces, para empezar, solo vamos a crear un nuevo plan como lo hemos hecho antes. Sólo Blueprint Class, se lo venderemos a un actor. Y yo sólo voy a llamar a este gatillo, que va a configurar una caja básica que nuestro personaje puede superponerse. Y usaremos esos eventos superpuestos para ejecutar algunas notas de casting. Entonces abriremos nuestro gatillo. Y sólo voy a agregar un nuevo componente, y este será un componente de colisión de caja. Yo sólo voy a mover esto hacia arriba para que cuando esté en el mundo sean corregibles, sean capaces de solaparlo. Y también estoy con nuestra caja seleccionada. Voy a buscar escondidos. Y voy a desmarcar juego final oculto aquí, sólo para que podamos ver nuestra caja mientras estamos jugando en el juego. Entonces en el gráfico de eventos, sólo voy a eliminar estos nodos son clic derecho y buscar comenzar solapamiento. Voy a usar el evento empieza a solaparse. Y si no recuerdas de nuestras lecciones anteriores, este nodo correrá siempre que algún actor se superponga a nuestro actor. Por lo que los solapamientos son gatillo. Esto correrá y nos dará una referencia a cualquier actor por encima de la lactosa. Por lo que la salida de nuestro nodo de inicio solapamiento es un acto de referencia. Y si recuerdas de eso, podemos usar esto para acceder a cualquiera de nuestras funciones o variables o eventos de actor. Pero a lo mejor queríamos acceder a información que estaba en nuestro personaje cuando se superpone son gatillo. Ahora para hacer esto, podemos usar costo. Entonces si me arrasto de mi otro actor aquí y busco costo a tercera persona. Se puede ver que podemos causar a la BP Third PersonCharacter. Entonces voy a dar click en eso y eso nos crea un auto nuevo nevado. Y esencialmente lo que hace un coche nieve es que toma en un objeto y comprueba, ¿es el objeto que estamos tratando de disfrazar? Entonces tomando nuestra referencia actor, que podría ser cualquier cosa que exista en el mundo, este nodo de costos lo comprobará, es un personaje en tercera persona? Si es así, entonces nuestro pin de ejecución de salida superior se ejecutará. Y podemos ejecutar código o el costo fallido se ejecutaría, y también podemos ejecutar código diferente. También nos da acceso a un tipo de variable de carácter en tercera persona. Ahora, esto sólo será válido si el Elenco tiene éxito. Y lo que quiero decir con válido es que sólo podemos obtener información a través de esta variable si el Elenco tiene éxito. Entonces si por ejemplo, tal vez tuvieras un vehículo cuando se ejecutara el nivel que atropelló nuestro gatillo, si no fuera un personaje en tercera persona nivel que atropelló nuestro gatillo, si no fuera un personaje en tercera persona que el costo falló. Y si tratamos de obtener alguna información de nuestra salida variable aquí, usando código que se está ejecutando desde el costo fallido, en realidad obtendríamos errores porque el costo había fallado. Por lo que en realidad no podemos recuperar ninguna información de esta salida Third PersonCharacter. Entonces, un ejemplo de cómo podemos acceder a información de nuestro carácter en tercera persona usando esta salida variable es que podemos ir a nuestro Third PersonCharacter. Y sólo voy a crear una nueva historia que fue un accidente, una nueva variable. Y a esto lo llamaremos salud actual. Y lo establecemos en un entero. Sólo voy a eliminar esta nueva macro. Y vamos a guardar esto ahora y volver a nuestro plano de gatillo. Y si nos arrastramos, ahora podemos buscar obtener salud actual. Puede ver que ahora podemos acceder a nuestra variable de estado actual a través del pin de salida en nuestro nodo de costo. Y si añadimos en digamos, una cadena de impresión tal que en una cadena de impresión aquí. Y fíjate que lo estoy conectando al PIM superior porque solo queremos que se ejecute esta cadena de impresión. Si nuestro costo tiene éxito, nos arrastraremos de la salud actual y solo conectaremos eso a nuestra cadena de impresión aquí. Y volveré a mi TercerPersonaPersonaje, selecciona mi salud actual. Yo sólo voy a fijar la salud actual para decir 50. Entonces ahora cuando juguemos y atropelle mi gatillo, imprimirá cadena el valor de nuestra salud. Así que golpeó Play. Estamos repasando mi gatillo y se puede ver que está imprimiendo valor 50. Ahora si recuerdas de nuestras lecciones anteriores sobre eventos y funciones, también podemos llamar a aquellos que usan nuestro nodo de costos. Entonces, si salimos del editor de planos, volvamos a nuestro personaje. Sólo voy a crear una nueva función o enfriar esta función de ejemplo. Y agregaremos algo así como qué ensillarlos, imprimir cuerda y pelo porque es fácil de ver y función de ejemplo de juego. Entonces esta es una función dentro nuestro plano de ThirdPersonCharacter, y podemos llamarla desde nuestro disparador. Así que sólo voy a compilar, volver a mi gatillo aquí, borrará este código por ahora. Arrastraremos desde el pin Third PersonCharacter aquí y buscaremos, por ejemplo, la función. Ya ves que ahora podemos acceder a nuestra función que a pesar de que está en el Third PersonCharacter. Y cuando golpeamos play, pasamos por encima de nuestro gatillo. Verás que el código interior en realidad se está ejecutando como si esa función se ejecutara dentro del ThirdPersonCharacter. Lo mismo se puede hacer con los eventos también. Entonces, si volvemos a nuestro Third PersonCharacter, entonces vamos al Event Graph y creamos un nuevo cliente. Entonces solo acercaré aquí y llamaré a este ejemplo. Y sólo añadiremos otra cadena de impresión aquí. Y vamos a poner la cadena de dos ejemplo de evento. Ahora cuando volvamos a nuestro gatillo. Podemos eliminar la función de ejemplo y arrastraremos hacia fuera y podremos buscar, por ejemplo. Ya ven que ahora puedo acceder a ese ejemplo de ellos. Y luego cuando golpeemos play, atropelle nuestro gatillo, verá que ahora está imprimiendo la cadena de impresión de eventos de ejemplo. Ahora también quiero darles un ejemplo de cuando falla un elenco. Entonces para hacer eso, saldremos del juego. Y sólo voy a crear una nueva clase de blueprint, que se la envía al actor. Y yo sólo voy a llamarlo EP ejemplo de subrayado. Y eso lo abriremos y solo lo compilaremos y lo guardaremos. Voy a arrastrarlo. Entonces está en la pestaña superior aquí con el resto de nuestros planos. Y voy a crear una nueva variable. Y yo sólo voy a llamar a esta Prueba. Y vamos a compilar. Siguiente. Vamos a ir a nuestro gatillo aquí, y vamos a quitar estas notas. El costo del personaje en tercera persona lo arrastramos de nuestra salida de otro actor y costará a nuestro blueprint de ejemplo bp. Y vamos a arrastrar hacia fuera de la variable de ejemplo BP. Y sí nos hacen la prueba. Yo sólo voy a correr una cadena de impresión. Y vamos a imprimir cadena si ese valor es o no cierto. Entonces ahora cuando compilemos y atropellemos nuestra caja, verás que no está pasando nada. Y la razón de eso es nuestro personaje es lo que se está superponiendo a nuestra caja y no es un ejemplo de BP. Por lo que nuestro costo está fallando. Si tenemos que salir ahora, vuelve a nuestro gatillo y agregamos nueva cadena de impresión al costo fallido. Verás que se imprime el Print String. Entonces si lo atropellamos ahora, se puede ver que está imprimiendo hola, y eso es porque el cartílago está fallando. El objeto de entrada a nuestro nodo de costo no es un ejemplo de BP. Por lo que el costo ha fracasado. Ahora, si fuera a tratar de obtener información de nuestro bp variable pin hair cuando falla el yeso. Así que en realidad estamos obtener un error y te voy a mostrar cómo se ve eso si tratamos de acceder a nuestra variable de prueba aquí, cuando el costo falla, enganchamos compilar y vamos a ejecutar sobre la caja. Y gay, puedes ver que el nodo print string todavía se está ejecutando y se está ejecutando false porque ese es solo el valor predeterminado para las variables. Pero si salimos ahora se puede ver que ahora estoy recibiendo un error. Y esencialmente esto solo nos está diciendo que nuestro costo fracasó. Seguimos tratando de acceder a información desde ella a pesar de que falló. Entonces sabemos que estamos accediendo a nuestra variable de ejemplo bp aquí, pero el costo está fallado. Entonces eso es algo que hay que tener en cuenta al trabajar con notas de costos. Simplemente voy a cambiar esto de nuevo a nuestro Third PersonCharacter para que podamos hacer algunas cosas más. Entonces el costo a tercera persona, y lo conectaremos así y lo compilaremos. Ahora, es posible que queramos almacenar una referencia al acto que se superpone que gatillo para usarlo más adelante con código. Entonces hay algunas maneras en que podríamos hacer esto. Podríamos arrastrarnos de nuestro otro actor aquí y sí promover una variable. Y eso nos creará una nueva variable. Y sólo lo dejaré llamado otro actor y está configurado un acto para escribir porque ese es el tipo de pin que es este. Podríamos poner esto aquí. Y luego más adelante tal vez teníamos algún otro código que estábamos ejecutando. Posteriormente, podríamos acceder a nuestro Third PersonCharacter simplemente obteniendo nuestra otra variable de actor, arrastrando el costo a la tercera persona, de nuevo, para costar al personaje de tercera persona. Y de nuevo, podríamos acceder a esas variables y funciones y cosas que lo necesitamos. Pero también podríamos simplemente almacenar la referencia a nuestra tercera persona en lugar del actor. Y la razón de esto es que realmente no queremos echar a nuestro plan cada vez que necesitamos información de él. Está bien una o dos veces, pero pueden empezar a sumar y afectar el rendimiento. Entonces lo que podríamos hacer en su lugar es que podríamos deshacernos de nuestra otra variable actor aquí. Porque sólo quiero que mi código lo ejecute si es un personaje en tercera persona de todos modos. Por lo que no hay razón real para almacenar la referencia real. Solo podemos almacenar la referencia del personaje. Entonces, para hacer eso, podemos eliminar nuestra variable anterior. Voy a arrastrar hacia fuera de mi Third PersonCharacter, do promueve variable. Y lo dejaremos llamado ThirdPersonCharacter y veremos que también lo establece el tipo de variable de caracteres de tercera persona BP. Por lo que sólo vamos a guardar eso y compilar. Así que ahora podemos acceder a todas las variables y funciones usando esta variable. Ahora, no tenemos que costar otro tiempo para acceder a esa información. Entonces podría arrastrarme y podría obtener mi salud actual por ejemplo, o podría acceder a esos ejemplos función o evento. Ahora, hasta ahora acabamos de costar directamente al Third PersonCharacter Blueprint porque eso es lo que es nuestro personaje. Pero debido a nuestro plano de personaje, también hay un hijo de los tipos de personaje, por lo que su clase padre tiene carácter. También podríamos costar a carácter. Entonces si borro estas notas aquí por ahora, vamos a arrastrar hacia fuera de nuestro actor general y costo para el personaje. Utilizará una nota de carácter de costo. Y sólo voy a agregar otra cadena de impresión aquí a la pluma superior. Y esto será si nuestro costo tiene éxito, así que ya termino. Entonces imprimiré pantalla dm correrá si nuestro costo tiene éxito, y fallará, correrá si nuestros autos fallan, y si atropellamos nuestra caja ahora en el mundo tiene carácter. Se puede ver que Don está corriendo porque nuestro personaje o nuestro terceroPersonaPersonaje también es un personaje y sus paredes y nuestro personaje también es importante. Por lo que podríamos volver a nuestro gatillo otra vez y reemplazar esto con un costo a ****. Y al igual que antes, conectaré el exitoso hasta W1 y el fallido hasta el File Print String. Y verás cuando volvamos a atropellar la caja, que sigue teniendo éxito, porque nuestro personaje es hijo del ****. Ahora si volvemos a nuestro gatillo y tratamos de acceder, digamos, a nuestra variable de salud desde el **** costo aquí. Entonces si me arrasto y no conseguí. Salud actual, se puede ver que no podemos acceder a esa variable porque esa variable no existe en la clase ****. Sólo existe en nuestro personaje en tercera persona. Entonces no podemos acceder a nada de eso, ninguna de esas funciones o eventos o variables que creamos ahí a través del ****. Y eso es lo mismo para nuestros costos de carácter. Por lo que si arrastro hacia fuera y costo carácter de nuevo, de nuevo, sólo podremos acceder a variables y funciones y eventos. Existen en la clase de caracteres, no nada que exista en nuestro Third PersonCharacter. Y esto es útil porque tal vez tenías cinco personajes diferentes en tu juego y todos tenían sus propios planos individuales. Querías tu gatillo solo para comprobar, es el personaje superponiéndome, en lugar de tener que tener un costo por cada único blueprint de caracteres posible que se superpone, solo puedes hacer un nodo de costo, decir ¿es un personaje o el plano que nos está superponiendo? ¿ Hereda de un personaje? Si lo hace, pues genial, podemos pasarlo triunfar. Podemos establecer variable, y si necesitamos más adelante, incluso podemos usar esta salida. Podríamos establecerlo en una variable de carácter. Y luego más adelante en nuestro código, si necesitábamos, podríamos lanzar a un blueprint más específico para que pudiéramos causar hasta el ThirdPersonCharacter y podríamos acceder a toda su información como hizo antes. Entonces podríamos hacer ponernos al y podemos conectar esto hasta nuestra cadena de impresión. Entonces ahora cuando solapamos una casilla, se comprobará, ¿es el objeto un personaje? Si es así, vamos a establecer que como una variable. Entonces comprobaremos es el carácter que hemos solapado. ¿ Es un Tercero PersonaPersonaje? Y si es genial, entonces imprimiremos cadena en su estado de salud actual. Entonces, cuando solapemos la caja, se esperaría que su estado actual se imprima. Por lo que el casting nos permite costar o tener hijos Los planos cuestan a su plan padre y el costo aún tendrá éxito. Por lo que les puedo dar un ejemplo de esto. Podríamos hacer clic con el botón derecho en nuestro Third PersonCharacter y hacer Create Child Blueprint Class. Yo sólo voy a llamar a esta tercera persona, en realidad sólo quédate con ese nombre. Voy a abrir ese show Clase Blueprint arriba. Seleccionaré el personaje lo malla y sólo lo voy a cambiar para decir, el dinero simple aquí. Por lo que podemos decir la diferencia entre los dos personajes diferentes o compilar. Y también podemos cambiar el valor actual de la salud también. Entonces si busco actual, cambiará el valor actual de salud a 25. Y entraremos a nuestro nivel aquí, y yo iré a las ventanas. Y queremos los escenarios del mundo. Y esto sólo me permitirá cambiar qué personaje estamos usando en el juego. Así que sólo voy a cambiarlo de Third PersonCharacter a Third PersonCharacter child. Es ahora cuando golpeamos play, puedes ver que ahora estamos usando el personaje infantil en lugar del personaje original. Y si atropello esa caja, se puede ver que la salud aún se está imprimiendo a pesar de que no estamos usando el ThirdPersonCharacter. Y eso es porque nuestro TerceroPersonaPersonaje niño es un hijo del TerceroPersonaPersonaje. Así que en nuestro disparador, cuando llegue a nuestro costo Third PersonCharacter, tendrá éxito porque nuestro hijo Third PersonCharacter sigue siendo un Third PersonCharacter es solo un hijo de ese TerceraPersonaPersonaje. Por lo que todos sus costos seguirán teniendo éxito. Y si quisiéramos, incluso podríamos agregar código personalizado y variables a nuestro Child Blueprint. Entonces queríamos acceder a esos. Entonces tendríamos que lanzar. O podríamos costar de nuestro otro actor aquí, podríamos costar al plano infantil acceder a esas variables. A modo de ejemplo, si voy a mi hijo en tercera persona aquí, agregaré una nueva variable, variable, no una macro. Y vamos a poner esto en, lo ponemos en un flotador, y vamos a llamar a esto daño. Ahora cuando compilamos y volvemos a nuestro trigger, si solo desconecto este código por ahora, si me arrastro de mi otro actor y hago Cast to Third PersonCharacter. Aquí tenemos nuestra nota original de Third PersonCharacter. Si me arrastro y trato de obtener ese rally de daños, se puede ver que no puedo acceder a ella porque esa variable no existe en el Third PersonCharacter, sólo existe en el niño Third PersonCharacter. Entonces, si hemos necesitado acceder a esa variable, necesitaríamos costar a nuestro hijo Third PersonCharacter. Por lo que costará a TerceraPersonaPersonaje niño. Y a partir de eso, podemos dañarnos valle así. También podemos acceder a ese valor de salud actual porque nuestro hijo heredó ese valor del modelo de personaje en tercera persona. Ahora, otra característica de los costos. Note que podemos cambiarlos para que sean puros. Entonces si recuerdas de nuestra lección de funciones, tenemos funciones impuras y puras. Y esencialmente si se ejecuta una función pura, entonces esta, lo siento, una función impura. Esta es una función impura. El cálculo sólo se hará cuando se ejecute, y luego almacena este tipo de referencia en el lápiz para que podamos acceder a él varias veces, y este nodo sólo se ejecutará una vez cuando realmente ejecutemos lo. Ahora si desconecto este nodo de aquí y hago clic derecho, y sí convierto a puro costo. Y ves que se convierte en un nodo que no tiene pines de ejecución estando en, plug-in u otro actor aquí. Por lo que ahora, siempre que alguna información haya llegado a través de este costo, este costo se volverá a ejecutar. Si yo fuera a hacer cadena de impresión, imprimimos cadena la salud actual, e imprimimos encadenado el daño actual. Este nodo de costo funcionaría dos veces por cada pin de salida que esté conectado a él. tanto que si convertimos esto de nuevo un costo impuro, así. Ahora nuestra nota de costos solo se ejecutará una vez. Se ejecutará una vez cuando lo ejecutemos a través de los pines de ejecución. Y luego almacena esa referencia a nuestro niño Third PersonCharacter en este bolígrafo. Y a pesar de que estamos usando una cadena de impresión dos veces, este nodo de costo solo se ejecutará una vez. Entonces esa es la diferencia entre costos puros e impuros. La mayoría de las veces estarás usando NPR solo porque son un poco más óptimos. Y realmente no quieres que se ejecute un costo por cada bolígrafo que tengas conectado a él. No olvides que siempre puedes simplemente promocionar tu pin de salida a una variable. Eso significa que sólo se va a ejecutar una vez. Y entonces se puede acceder a ese blueprints variables en el futuro sin tener que costar. Entonces eso es todo por nuestra lección de casting. Estaremos usando causas un poco más en futuras lecciones solo porque hay una parte bastante genial de la codificación y el motor. En nuestra siguiente lección, vamos a estar echando un vistazo a los despachadores de eventos. 18. Aspectos básicos (despachadores de eventos): Oigan a todos, En esta lección vamos a estar echando un vistazo a los despachadores de eventos. Entonces si estabas siguiendo junto con nuestra última lección, tenía bastantes planos extra y estaba cambiando algunas cosas en los ajustes. Entonces todo lo que he hecho para esta lección es crear una nueva plantilla de tercera persona. Entonces tenemos un nuevo comienzo para esta lección. Entonces, para empezar, Event Dispatcher permite enfriar código en Blueprints sin tener que conocer realmente el blueprint específico en el que estamos llamando al evento. Voy a poner un ejemplo aquí para que podamos probar esto. Entonces empezaré creando una clase de blueprint. Voy a poner esto a un actor y voy a llamar a este gatillo. Y también vamos a crear otra clase de Blueprint, y yo sólo voy a llamar a esto. Entonces abriremos nuestro gatillo. Y como lo hemos hecho antes, sólo voy a agregar un componente de caja de colisión y vamos a compilar. Entonces voy a mover un poco mi caja de colisiones para que podamos atropellarla y el juego. Y voy a buscar oculto y desmarcar oculto en juego. Entonces vamos a ir al Event Graph. Y yo sólo voy a eliminar estos nodos, haga clic derecho y buscar evento comienzan a superponerse. Como antes. Este evento se ejecuta cuando algo se superpone. Entonces dispararé y nos da acceso al actor que nos solapó. Ahora, vamos a ir a nuestro cubo que acabamos de crear. Así que abre el plano de la cola. Y aquí sólo voy a agregar un nuevo componente y sólo voy a buscar cubo. Agregaremos un cubo. Yo sólo voy a subirlo un poco así. E iremos a nuestra gráfica de eventos y solo compilaremos. A continuación, vamos a crear una nueva variable. Sólo voy a dar clic en el botón de nueva variable. Voy a llamar a este gatillo. Y vamos a establecer el tipo de variable al blueprint trigger que acabamos de crear. Entonces para mí esa es la opción gatillo aquí. Seleccionaré eso y los compilaré. Vamos a seleccionar nuestra variable trigger y vamos a tomar en instancia editable. Y si lo recuerdas, eso nos permitirá cambiar este valor cuando seleccionemos nuestro cubo en el nivel. Entonces volveremos a compilar, ve a nuestro mapa en tercera persona aquí. Yo sólo voy a agregar en tres cubos, así que los dibujaré así. Y voy a agregar un gatillo también. Entonces voy a poner esto aquí. Ahora voy a seleccionar cada uno de mis cubos y pueden ver que aquí tenemos nuestra opción Trigger. Ahora. Eso se debe a que cuando seleccionamos nuestro disparador, marcamos en instancia editable. Así que si el tuyo no es que necesitas asegurarte de que eso está marcado y luego compilas. Por lo que ahora podemos seleccionar un gatillo. Sólo voy a hacer clic en el menú desplegable y seleccionar nuestro gatillo aquí. Entonces ese es el plano del gatillo aquí. Haré esto por cada uno de nuestros planos de cubo. Y todo lo que estamos haciendo es simplemente configurar esa variable de disparo en nuestros cubos a este disparador específico. Ahora vamos a volver a nuestro gatillo y realmente crear un nuevo despachador de eventos. Así que si bajamos aquí y podrían panel de planos, puedes ver que tenemos despachadores de eventos y podemos hacer clic en el botón New Event Dispatcher aquí o podemos ir a agregar y seleccionar Evento Despachador. Entonces sólo voy a dar clic en eso. Voy a nombrar a este ejemplo despachador así. Y vamos a compilar. Ahora, vamos a llamar a nuestro Despachador de Eventos siempre que un personaje se superponga o se active. Entonces me voy a arrastrar fuera de otro actor. Sólo le voy a costar al personaje. Y eso nos permitirá comprobar es el objeto o carácter de entrada. Si es así, entonces podemos ejecutar el resto de nuestro código. Y me voy a arrastrar desde mi Despachador de Eventos aquí. Se puede ver que obtenemos algunas opciones diferentes. Voy a estar revisando, Pinchando cool. Y si hacemos clic en eso, se puede ver que obtenemos este nodo y esto causa nuestro Despachador de Eventos. Ahora, compilaré e iré a nuestro cubo aquí. Yo sólo voy a borrar estos dos, obtenlo y solo quiero mantener el nodo de reproducción inicial porque vamos a usar eso. Voy a conseguir la variable gatillo aquí. Voy a alargar. Voy a hacer una señal. Nos desplazaremos hacia abajo y queremos encontrar el despachador de ejemplo seno. Voy a dar clic en eso. Se puede ver que esto crea un par de nodos para nosotros. Por lo que crea primero y luego asigna nodo. Y en realidad nos crea un nuevo evento personalizado. Y conectaré esto hasta la jugada inicial. Entonces lo que esto esencialmente hace es en Begin Play, asignamos, bueno, usamos nuestra referencia de trigger aquí para asignar nuestro evento para que se ejecute cada vez que se llame al despacho de ejemplo. Y si recuerdas en nuestro gatillo, cada vez que un personaje se superpone o gatillo, llamamos a ese Despachador de Eventos. Y lo que esto hará es ahora nuestros cubos, los tres ejecutarán este evento cuando el evento, se llame al despachador de ejemplo dentro del gatillo que seleccionamos. Para que pueda ejecutar algún código aquí. Digamos que podríamos hacer establecer ubicación, ubicación. Queremos ubicación Sac hará que se mapeen a la ubicación L más algún valor a la misma. Entonces haremos un add. Ahora diría un 100 en la altura y conectar hasta la ubicación de noticias. Es ahora cuando entramos en nuestro gatillo porque hemos ligado este evento. Dos ejemplo, despachador o gatillo se enfriará y divertido ejemplo con despachador y nuestros cubos se moverán hacia arriba, así que vamos a golpear play. Ahora, cuando atropello mi gatillo, se puede ver que los tres cubos se han movido hacia arriba. Ahora, esto es útil porque nuestro gatillo en realidad no tiene que decirle a cada uno de estos cubos que hagan algo. Todo lo que nuestro gatillo está haciendo es llamar al despachador de ejemplo. Y entonces nuestros cubos están realmente configurados para hacer algo cuando ese disparador específico ejecuta el despachador de ejemplo. Entonces esos son los conceptos básicos de cómo funcionan los despachadores de eventos. Ahora bien, si recuerdan cuando estábamos en nuestro gatillo aquí y arrastré en mi despachador de ejemplo, tenemos algunas opciones diferentes. Por lo que hemos probado el nodo cool. Eso es lo que ejecuta el Event Dispatcher y ejecuta cualquier evento que se asigne al despachador de ejemplo. También tenemos ataduras. Entonces si creamos eso en C, este es en realidad el mismo nodo que teníamos en nuestro cubo. Es simplemente que no ha creado el evento para nosotros. Entonces tal vez ya tuvimos un evento de cliente que solo queremos enchufar a él. Podemos usar un nodo Bind. Si lo arrastro de nuevo, pueden ver que tenemos desatar. Esto nos permite conectarnos a un evento y realmente decirle que ya no queremos que ese evento se ejecute más para nuestro despachador de ejemplo. Entonces por ejemplo, si compilamos nuevo y le pego a Play cuando me encuentro con este cubicaje y los veo subir. Y si vuelvo a encontrarme con ellos, se puede ver que está sumando la altura. Ahora, tal vez sólo quería que eso funcionara una vez. Y después de eso, si el jugador se encuentra con la pupa, ya no se moverán hacia arriba. Y yo puedo hacer eso. Para que pueda ir a mi cubo y puedo arrastrar fuera de mi gatillo y hacer desatar. Queremos encontrar unbind todos los eventos de Event Dispatcher, o podemos usar unbind events. Entonces usaremos desvinculación de ellos. Y podemos decir que queremos que este evento sea desvinculado de nuestro despachador de ejemplo. Entonces ahora esto sólo se ejecutará una vez y luego ya no se ejecutará. Entonces si me topo ahora y vuelvo y vuelvo corriendo, se puede ver que ahora nuestro evento ya no está ligado a nuestro despachador de ejemplo. Entonces a pesar de que aún se está ejecutando, ese evento ya no se está ejecutando. Ahora volviendo a nuestro gatillo, podemos arrastrarnos otra vez. Y también hay una opción de desvincular todo. Ahora que prácticamente hace lo mismo. La única diferencia es que no especificamos evento. Entonces si arrastro hacia fuera y lo hago desvincular todo, podemos desvincular todos de nuestro despachador de ejemplo aquí. Se puede ver que no hay entrada de eventos. Esto simplemente desvinculará todos los eventos en todos los blueprints que están vinculados a este despachador de ejemplo. Ahora, los despachadores de eventos también pueden tener entradas variables similares a funciones y eventos. Entonces, si volvemos a nuestro plano de gatillo aquí, y seleccionamos nuestro despachador de ejemplo en el panel Detalles. Simplemente me voy a deshacer de esta búsqueda oculta. Ya verás que tenemos entradas. Y si hacemos clic en el botón Nuevo parámetro aquí, podemos agregar nuevas variables. Por lo que podríamos agregar flotadores, booleanos, cualquier tipo de variable que quieras. Yo sólo voy a agregar un flotador y voy a configurar esto para que se llame, digamos flotar. Vamos a compilar. Se puede ver que me está dando un error aquí y no ha actualizado el nombre de la variable. A veces esto puede suceder con los despachadores de eventos. Note preocupes demasiado. Simplemente puedes hacer clic derecho en el nodo y nosotros haremos los nodos de actualización. Y ves que ahora ha cambiado el nombre a lo que debería ser y solo podemos compilar. Y ahora no tenemos errores. Ahora eso se agrega esta entrada variable a nuestro despachador cool. Si vamos a nuestro cubo ahora y compilamos, se puede ver que en realidad se agrega automáticamente esa variable flotante a nuestro evento aquí. Ahora, lo que sea que establecimos en nuestro Despachador de Eventos es lo que se generará aquí en nuestro evento. Entonces si yo, por ejemplo, quería que esto fuera cinco, y fui a nuestro cubo, sólo voy a hacer, tenía una cuerda de impresión. Entonces solo agregaré una cadena de impresión aquí. Y conectaremos la cadena de impresión al valor float, que mueve estos a lo largo un poco. Entonces tenemos un poco más de espacio así. Ahora, cuando este evento se ejecute, imprimirá cualquier valor que sea nuestro valor flotante, y eso es establecido por nuestro Despachador de Eventos. Entonces si lo compilo play y me encuentro con mi cubo, se puede ver que los tres de estos cubos están ejecutando el código, por lo que imprime cadenas 53 veces. Ahora, lo bueno de los despachadores de eventos es que podríamos tener muchos otros planos que también están usando este Despachador de Eventos que acabamos de configurar. Para que tal vez cuando un personaje entra a una habitación, tienes un gatillo por el que caminan. Y tal vez querías que esa habitación cambiara de alguna manera. Querías que desaparecieran algunos objetos. Querías que algunos objetos se movieran, tal vez, tal vez un sonido para tocar. Podrías tener todas esas cosas sucediendo usando solo un despachador de eventos que se ejecuta cuando tu personaje se superpone a una caja. Ahora regresamos a nuestro plano de activación, si recuerdas cuando seleccionamos nuestro Despachador de Eventos aquí, también tenemos una opción llamada copia firma de. Y si hago clic en eso, pueden ver que tenemos algunas opciones diferentes. Ahora, esencialmente esto solo le permite copiar las variables de entrada de otro despachador de eventos. Entonces hay una gran lista de ellos aquí porque el motor en realidad viene con un montón de despachadores de eventos incorporados. Entonces esto solo es útil si lo deseas, en lugar de tener que agregar manualmente entradas variables. Digamos que ya tenía un despachador de eventos con las mismas entradas que desea utilizar. Podrías usar Copiar firma de y simplemente agregarlas de inmediato. Ahora, para darles un ejemplo de algunos de los despachadores de eventos en realidad están integrados en el motor. Podemos hacer clic derecho y buscar enlazar. Y si nos desplazamos a través de él, se puede ver que tenemos algunos eventos de bind incorporados. Entonces, por ejemplo, tenemos algunos para entradas de mouse, tenemos algunos por daños, y también tenemos algunos por colisión. En realidad se puede ver que hay un evento Bind to on actor comienza a superponerse. Eso es lo mismo que nuestro evento aquí. Así que en realidad podríamos configurar esto de manera diferente. Entonces si hago clic en Bind event también. En actos o comenzar solapamiento obtendrá un nodo de juego de juego. Conecta esto hasta aquí. Ahora podemos eliminar este evento y crear nuestro propio evento personalizado que se ejecutará cada vez que un actor se superponga, lo activaré usando este Despachador de eventos. Así que puedo hacer clic derecho o realmente puedo arrastrar hacia fuera del evento aquí, buscar personalizado. Ya verás que acaba de hacer un evento para nosotros y en realidad se suman esos actores superpuestos y otros actores aquí. Por lo que puedo llamar a esto, digamos. Y ahora podemos conectar esto. Podemos tomar el otro pin de actor, enchufa esto a nuestra verificación de personajes. Entonces ahora esencialmente lo que este código está haciendo es en Begin Play, vinculamos un evento, que es nuestro evento de superposición aquí, a cuando un actor comienza a superponerse nuestro gatillo. Y luego cuando un actor sí se superpone, voy a desencadenar o se ejecutará el evento de solapamiento. Nos dará el otro actor. Podemos comprobar es que otro actor que se superpone, yo disparo un personaje. Si lo es, entonces lo llamamos nuestro ejemplo despacho arriba. Podemos probar si esto está funcionando, así que solo compilaremos y guardaremos, dale a Play. Y ahora cuando estamos repasando nuestro gatillo, se puede ver que ese código en realidad sigue funcionando como antes. Pero en cambio ahora estamos usando un Event Dispatcher que en realidad está integrado en el motor. Ahora, hasta ahora solo he estado usando el Event Dispatcher para enfriar eventos en otro Blueprint. Entonces, por ejemplo, un cubo aquí ejecuta este evento Cuando el despachador de ejemplo es ron, pero también podemos usar nuestro Despachador de Eventos dentro del mismo blueprint. Entonces tal vez quería que se ejecutara un evento cuando llamo a mi Despachador de Eventos, en realidad dentro de mi gatillo, podría hacer eso también. Para poder arrastrar a mi Despachador de Eventos. Podría hacer, si hacemos clic en Asignar aquí, hace lo mismo que el evento Bind, pero también crea nuestros eventos personalizados. Entonces si hago clic en asignar, ves que se ha creado nuestro evento Bind y el respiradero del cliente. Mientras que si arrastro hacia fuera y hago enlace, se puede ver que simplemente crea el enlace. Entonces eso está a solo un clic de distancia, básicamente creando los dos nodos juntos. Para que podamos hacer eso. Puedo conectar esto aquí arriba. Y voy a mover mi este evento aquí arriba en c que nos da una salida de flotación. Porque si recuerdas, tenemos una entrada de flotación en nuestro despachador de ejemplo. Fresco. Y podríamos ejecutar algún código dentro de nuestro trigger, y eso se ejecutará cada vez se llame a nuestro despachador de ejemplo. Por lo que podría agregar una pantalla de impresión aquí, decir hola. Ahora, cuando nos topamos con nuestro cubo, verás que imprime los cinco valores para R en cubos. Y entonces sólo corre una vez. Hola, porque solo tenemos un gatillo y ese código se está ejecutando dentro de nuestro trigger. Ahora, algo a tener en cuenta con estos eventos, despachos es, si ya tengo un evento personalizado, digamos que crearé una costumbre de ellos, y tal vez tenga diferentes entradas. Por lo que sólo voy a agregar una entrada de flotación. Si traté de conectar esto al Event Dispatcher para on actor comience a superponerse y vea que en realidad no puedo conectarlo. Si desconecto esto, se puede ver que todavía no lo puedo enchufar. Y eso es porque este evento personalizado no tiene las entradas ni las salidas. Este nodo se une requiere. Por lo que cualquier evento de cliente al que conectemos tiene que tener estas dos variables. Entonces no puedo conectar esto a esto. Puedo conectarlo a nuestro despachador de ejemplo así, porque tiene un valor float y eso es lo que se requiere, por ejemplo, despachador. Por lo que normalmente la forma más fácil si solo tienes un evento Bind, digamos así, es simplemente arrastrarte, buscar Cliente ellos. Y creará un evento personalizado para ti. Y agregará cualquiera de las variables que necesite que tenga para poder conectarse a ese despachador. Ahora, como probablemente te puedas imaginar, si tuvieras muchos de estos, conseguirías estos cables largos yendo por todas partes y podría ser un poco desordenado. Lo que puedes hacer en lugar de tener que correr el cable al evento aquí, ella puede alargar y puedes buscar Crear evento. Y se obtiene aquí esta pequeña nota que nos permite seleccionar otro evento. Por lo que podemos dar clic en esto y se puede ver que sólo me está dando la opción para cliente vent guión bajo 0 y ejemplo despachador evento subrayado. Y sólo me está dando esas opciones porque son los únicos eventos que tienen nuestro valor float. Y puedo decir select seleccionará nuestro ejemplo despachador de ellos así. Ahora puedes ver que nuestro cable rojo ya no está conectado hasta este evento. Pero voy hola reloj de cuerda, todavía se ejecutan porque esta nota Crear Evento aquí básicamente conecta el Despachador de Eventos al evento aquí arriba sin realmente conectar un cable. Entonces si lo compilamos play, me estoy topando con nuestro gatillo aquí. Se puede ver que nuestra cadena de impresión Hello todavía se está ejecutando a pesar que no está conectada directamente a ese nodo Bind. Ahora que crear un nodo de evento en realidad nos permite usar funciones con despachadores de eventos también. Por lo que si hacemos clic en la opción desplegable aquí, se puede ver que podemos configurarlo a ninguno. También podemos crear una función o evento de coincidencia. Si haces clic en evento coincidente, solo creará un nuevo evento personalizado aquí abajo. Y agregará las salidas variables apropiadas que necesita el Event Dispatcher, y luego también simplemente lo configurará automáticamente a ese nuevo evento. Por lo que ahora cuando el lote de eventos corre se acostumbra a evento se ejecutará. Pero también podemos crear funciones que se enfríe. En su lugar, podemos hacer clic en Crear una función coincidente y eso nos crea una nueva función. Esta es solo una función normal como la que hemos usado antes, es solo que esta ahora se ejecutará cada vez que se ejecute nuestro despachador de ejemplo. Por lo que puedes ver que automáticamente se agrega un flotador para nosotros. Esto funcionará como una función normal. Entonces podríamos agregar algún código a esto si quisiéramos . Tenía una pantalla de impresión. Ahora para poner esto a funcionar, sabemos que es esta cadena de impresión la que se está ejecutando. Y ahora cuando golpeamos play, atropello mi gatillo aquí. Se puede ver que los mantiene movimiento como la impresión de esos cinco valores. Y también es función de impresión porque esa función dentro de nuestro gatillo ahora se está ejecutando porque está configurado para estar vinculado al despachador de ejemplo. Entonces eso es todo para nuestra lección de despachadores de eventos. Hay una gran herramienta para poder llamar a un evento y un blueprint y efectuar muchos otros blueprints y diferentes formas sin tener que especificar cada blueprint que desea efectuar. 19. Fundamentos (interfaces): Oigan a todos. En esta lección vamos a estar hablando de las Interfaces de Blueprint. Las Interfaces de Blueprint nos permiten llamar a funciones y eventos en otros Blueprints sin tener costar a ese tipo de blueprint. Ahora puede que hayas notado que todavía tengo el cubo y los planos del gatillo de mi lección anterior. Simplemente me las voy a quedar porque las voy a reutilizar para un ejemplo un poco más adelante. Entonces, para empezar, vamos a crear una nueva Interfaz de Blueprint. Si hago clic derecho aquí y voy a los planos , salgo y bajaremos a Blueprint Interface. Yo sólo voy a llamar a la mina BP on score ejemplo interfaz así. Y haremos doble clic en él para abrirlo. Y yo sólo voy a arrastrar el mío y agregarlo a la pestaña aquí arriba. Por lo que como pueden ver, tenemos una nueva interfaz de usuario. Tenemos esta gran gráfica de eventos que en realidad no la vamos a usar realmente. No podemos hacer ninguna edición aquí ni agregar ningún código es solo una vista previa de las funciones que agregamos. Y puedes ver que tenemos nuestra pestaña de funciones por aquí donde podemos crear y eliminar funciones. Y si tenemos una función seleccionada, podemos agregar entradas y salidas. Por lo que comenzaremos renombrando la función predeterminada que viene con nuestra interfaz de ejemplo. Entonces sólo voy a renombrar la mía para disminuir la salud así. Y compilaremos y volveremos aquí en un momento. Pero quiero mostrarles cómo se la función de disminución de la salud ve la función de disminución de la saluden nuestro plano de personajes. Entonces iremos al ThirdPersonCharacter. Haré clic derecho y buscaré disminución de la salud. Y se puede ver que esto sube o disminuye el nodo de mensaje de salud. Ahora, debido a que hemos creado esto en nuestra interfaz de ejemplo, esto aparecerá en cada blueprint si hacemos clic derecho y lo buscamos. Entonces si creo esto, se puede ver que se parece mucho al nodo cool que usamos con los eventos. Con un par de diferencias. Tenemos este ícono en la esquina superior derecha, y también tenemos la entrada objetivo, pero no dice auto al lado. En realidad tenemos que proporcionar un objetivo. Y esto es sólo el, el plano o la referencia al plano que queremos llamar nuestra disminución. Cómofuncionan. Ahora, si yo fuera a ejecutar este nodo ahora, así que si consigo el Plano y conecto esto hasta una disminución nuestra función, no pasaría nada porque no hemos proporcionado un target. Pero si nos arrastramos y nos hacemos uno mismo como objetivo, nada pasaría todavía, porque en realidad no hemos implementado esta función en nuestro personaje en tercera persona. Entonces para hacer eso, necesitamos simplemente compilar primero, iremos a la configuración de clase. Y bajo Interfaces implementadas, dice que actualmente no hay interfaces , pero podemos agregar una nueva. Entonces haremos clic en Agregar y buscaremos por ejemplo. Y seleccionaremos allí la interfaz de ejemplo . Y luego compilaremos. Ahora si bajamos a la interfaz es la opción a, se puede ver que tenemos disminución de la salud. Ahora, si hacemos doble clic en esto, en realidad creará un evento de disminución de salud. Ahora, cuando corremos, cuando nuestro Begin Play se ejecuta y ejecuta este nodo de disminución de salud cool con nuestro yo como objetivo. Este evento de aquí abajo correrá. Yo sólo voy a moverlo hacia arriba más cerca nuestro nodo de juego inicial aquí, que se mueven aquí arriba así. Para que podamos probar esto rápidamente. Simplemente correré una cadena de impresión y le pegaremos a play y veremos que esa pantalla de impresión y que acabamos de agregar se está ejecutando. Ahora también podemos agregar entradas y salidas a nuestras funciones de interfaz. Entonces si volvemos a la interfaz de ejemplo, seleccione nuestra disminución de salud. Voy a agregar una entrada primero, así que agregaré una nueva entrada. Lo dejaré como booleano. Y yo sólo diré que esto es, sólo lo llamaremos una prueba por ahora. Se puede ver que la vista previa está actualizada. Dice que test compilará y volverá a nuestro ThirdPersonCharacter. Y puedes ver ahora que nuestra nota genial aquí, el nodo de recuperación de la función de interfaz de salud de disminución ahora tiene una entrada de prueba y nuestro evento tiene una salida de prueba. Entonces sea cual sea nuestra entrada de prueba, esa será la salida para nuestro nodo de eventos. Si me pongo esto y lo enchufo a nuestra cuerda de aquí, cuando lleguemos a play, verás que imprimirá cadena true, true. Ahora, también podemos agregar salidas a nuestra función Interface de ejemplo. Entonces si vamos a eso, sólo voy a presionar escape para aceptar el editor del plan seleccionará disminuir la salud. Y aquí abajo, podemos agregar una nueva salida. Entonces agregaré una salida. Hay un bicho en este momento donde ahora mismo se ha ido todo, grisáceo. Tengo que compilar, luego seleccionar la disminución nuestra función de nuevo, se puede ver que ahora puedo renombrarla y acceder a esta información. A lo mejor para cuando estés siguiendo esta lección, eso se arreglará. Pero por ahora eso es lo que hay que hacer. Cuatro salidas. Yo sólo voy a nombrar así a esta salud actual. Y lo vamos a establecer en un entero y vamos a compilar esto. Ahora agregar salidas a una función de interfaz en realidad causará algunos cambios en nuestro blueprint de caracteres. Así que si volvemos a nuestro personaje, se puede ver que nuestro nodo de eventos ahora tiene una advertencia en él y en realidad se convierte a sí mismo en un cliente, entonces ya no es una interfaz eventos hasta el momento de golpear play ahora. Y se puede ver que nuestra cadena de impresión ya no se está ejecutando porque ese evento en realidad no se está enfriando. Y si vamos a nuestra disminución la atención médica y hacemos doble clic en ella, se puede ver que en realidad nos ha llevado a lo que parece una función. Ahora, no ha agregado nuestro nodo de salida. Podemos agregar eso con solo hacer clic derecho y hacer retorno. Queremos agregar nodo de retorno. Y ves que ahora nos está dando una pluma de ejecución de salida con nuestra salud de corriente de salida. Variable. Es posible que no tengas que hacer eso. Podría simplemente agregar automáticamente el nodo devuelto por ti, pero a veces no lo hace. Entonces si no lo hace, entonces puedes iniciarlo tú mismo. Así que ahora esta función en realidad se ejecutará en lugar Begin porque todavía estamos llamando a la función de interfaz de disminución de salud. Entonces si conectamos esto a nuestra salida, ahora, tal vez quiero que emita un valor de salud actual. Por lo que crearemos un nuevo valor para la salud. Salud. Cambiamos esto a un entero. Voy a compilar, voy a poner esto a un 100. Ahora porque esto es una disminución cómo la función que he llamado hará que disminuya en alguna cantidad. Haremos restar y haremos Set Health. Ahora. Le restaremos cinco a nuestra salud y luego daremos salida al valor de salud actual. Como puedes ver, solo puedes escribir código aquí como una función normal. Se comporta igual que las funciones que hemos usado antes. Entonces ahora si vamos a nuestro gráfico de eventos, si recuerdas en Begin Play o disminuimos la salud, la función de interfaz se va a enfriar. Tenemos pruebas marcadas, pero no estamos haciendo nada con eso y disminuimos cómo funcionan, como puedes ver, no los está enchufado. Y entonces queremos que devuelva un valor de salud actual. Y puedo agregar una restricción a esto, que comenzó cadena de impresión aquí. Ahora se disminuyen la función de salud que teníamos antes. Esto ya no es hacer nada. Simplemente se ha convertido en un cliente normal, entonces en realidad podemos simplemente borrar eso ahora. Y si puedo jalar y le pego a Play, se puede ver que nuestra salud actual ha bajado en cinco. Empezó en un 100 y eso ahora son 95. Por lo que podría estar preguntándose cuál es el punto de la interfaz. Solo estamos usando estos eventos y funciones normales. Ahora, lo genial de ellos es que podemos usarlos en otros Blueprints sin tener que lanzar para decir personaje en primera persona. Entonces lo que voy a hacer es ir a mi gatillo aquí. Y ahora iré al Event Graph, este código es de la lección anterior, así que solo voy a resaltar y borrar eso. También va a eliminar esta función también. Y sólo vamos a compilar. Ahora normalmente si quisiera decir disminuir mi valor de salud y mi ThirdPersonCharacter, crearíamos un evento, comenzaríamos solapamiento o comenzaríamos solapamiento de actor. Y eso corre cada vez que algo se superpone, dispararé y nos da acceso al actor solapó nuestro gatillo y le costaríamos al ThirdPersonCharacter como hicimos en nuestro video de casting. Entonces o obtendríamos nuestras funciones, digamos que disminuyo la función de salud, o obtendríamos nuestra variable de salud. Entonces lo disminuiríamos y estableceríamos el nuevo valor usando nuestro auto nevado. Pero lo que Blueprint Interfaces nos permiten hacer es que en lugar de tener que lanzar, en realidad podemos simplemente arrastrar hacia fuera de otro actor y podemos buscar una función de interfaz de salud disminución y crea eso y ese será nuestro objetivo, cualquiera que sea el solapamiento que dispararé, llamaremos la función de disminución de salud en ese plano. Y esto solo se ejecutará realmente en ese blueprint si hemos implementado la interfaz como lo hicimos en nuestro ThirdPersonCharacter. Te acuerdas, configuramos la interfaz y aquí, si un objeto que no usa RPP ejemplo de interfaz se superpone, así que dispararé, este código seguirá ejecutándose, pero simplemente no pasará nada. No obtendremos ningún error, no tendremos ningún problema. Esto sólo será ignorado y luego se ejecutará el resto del código. Ahora debido a que nuestro ThirdPersonCharacter sí usa una función de disminución de cómo cuando solapamos nuestro disparador, se ejecutará. Así que si vamos a nuestro personaje en tercera persona aquí, yo sólo voy a abrir la función de celda disminuida y voy a añadir en, o en realidad vamos a volver a nuestro gatillo aquí. Agregaremos una cadena de impresión y aquí en su lugar, así que tuve que imprimir una cuerda e imprimiremos nuestra salud actual. Y porque nuestros personajes, lo que se va a superponer o desencadenar será disminuyendo su salud en nuestro personaje y luego conseguiremos nuestros personajes tengan salud actual para poder compilarlo play. Ahora cuando atropellamos nuestro gatillo, se puede ver que nuestra salud disminuye. Ahora lo bueno de esto es que no estamos limitados a solo hacer esto en nuestro ThirdPersonCharacter. Si queríamos otros planos, digamos un vehículo por ejemplo, cuando golpea este gatillo, queremos reducir también su salud. Podemos hacer eso. Entonces si abrimos nuestro plano de cubo aquí, por ejemplo, solo voy a eliminar este código de nuestra lección anterior. Añadimos una variable de salud. Se lo diremos a un entero también. Y vamos a establecer el valor para decir 50. Ahora, ahora mismo, si nuestro cubo se solapara nuestro pelo gatillo, no pasaría nada porque nuestro cubo no tiene implementada la interfaz de ejemplo. Entonceseso lo haremos ahora. Agregaremos la interfaz de ejemplo y compilaremos. Ahora, como puedes ver, la función de salud disminuida está ahora en la pestaña Interfaces aquí. Pero si yo fuera un cubo fuera superponer nuestro gatillo, ahora, todavía no haría nada porque en realidad no hemos agregado ningún código a la función de disminución de salud dentro de nuestro cubo. Si abrimos eso, con solo hacer doble clic arriba, se puede ver que tenemos nuestro nodo de retorno y r nota aquí. Y podemos ejecutar código. Entonces si quisiera, podría hacer salud. Haremos menos. Y decimos, bien menos cinco. Y luego nos pondremos y devolveremos la salud actual aquí. Así que ahora cuando nuestro cubo se superpone son trigger, esta función se ejecutará. Tomará el valor de salud actual menos cinco, establecerá el valor de salud actual y luego lo devolverá. Entonces si le pegamos a Play, si lo atropello con mi personaje, se puede ver que sigue disminuyendo nuestro valor para la salud. Pero si presiono F8, que básicamente me detiene el control de mi personaje y me permite moverme libremente. Pero el juego sigue en marcha. Puedo seleccionar mi cubo si lo muevo al gatillo, puede ver que cuando entra en el gatillo, realidad está imprimiendo su valor de salud y también lo está disminuyendo. Así que ojalá eso te dé una idea de cómo funcionan las Interfaces de Blueprint. Esencialmente nos permiten crear funciones que se pueden ejecutar en diferentes planos sin tener que costar a esos blueprints. Y eso es útil en casos de uso como nuestro gatillo aquí donde si quieres una caja de Trigger dañe cualquier cosa que entre en ella que tenga salud, entonces puedes configurarlo usando Interfaces de Blueprint. 20. Fundamentos (componentes): Oigan a todos. En esta lección vamos a estar mirando los planos de los componentes. Ahora si estás siguiendo junto con la lección anterior, todo lo que he hecho aquí es simplemente crear una nueva plantilla de tercera persona. Entonces tenemos un nuevo comienzo para esta lección. Por lo tanto, para comenzar, usamos componentes para agregar nuevas funcionalidades a los blueprints de actores. Entonces por ejemplo, en nuestro nivel aquí, si selecciono el suelo, por ejemplo, y encima en el panel Detalles, tenemos la pestaña de componentes que nos muestra qué componentes tiene este actor. Por lo que podemos ver que tiene un componente de malla estática. Y eso es lo que nos permite en realidad establecer una malla estática para exhibir en el mundo para este actor. Ahora, hay una gran cantidad de diferentes tipos de componentes. Entonces si voy a mi Character Blueprint por ejemplo, y vamos a la ventana gráfica. Puede ver más en el panel Componentes que tenemos algunos tipos diferentes de componentes aquí también. Entonces, para empezar, nuestro personaje tiene un componente de cápsula, que es esta área de colisión en forma de cápsula. Y eso es lo que impide que nuestro personaje simplemente caiga por el suelo o pueda caminar a través de paredes. Entonces tenemos un componente de flecha, que básicamente está configurado para apuntar en la dirección hacia adelante para nuestro personaje. Tenemos el componente de malla, que es un componente de malla esquelética. Y eso nos permite establecer una malla esquelética. Y la Malla Esquelética es sólo una malla que puede ser animada. Entonces tenemos nuestro boom de la cámara, y la cámara que está conectada al boom de la cámara. Y la forma en que funciona es si entre el final del boom de la cámara y el inicio del ala común, hay un bloqueo de objetos que se acortará. Y porque nuestra cámara está unida al extremo de la cámara, boom, eso acercará nuestra cámara al personaje. Si hay un objeto bloqueando nuestra cámara, boom. Entonces tenemos nuestra cámara. Y nuestra cámara es justo lo que nos permite elegir la perspectiva que ve nuestro jugador cuando está controlando a este personaje. Ahora, todos los componentes de explicado hasta el momento están viendo componentes. Estos son componentes que pueden existir en el mundo. Tienen una ubicación y a veces tienen unos objetos visibles para ellos. Pero también tenemos un tipo diferente de componente que es puramente código. No tienen ubicación. Entonces ejemplo, si este es nuestro componente de movimiento de personajes aquí, que viene incorporado en el motor y incorporado en nuestro plano de personaje. Y si quisiéramos, podríamos agregar este componente a otros planos también. Y esto es lo que maneja el movimiento de nuestro personaje. La diferencia importante entre un componente de sumidero y un componente estándar es que un componente estándar no existe en el mundo, no tiene una ubicación y no puede ser visible para el jugador. Mientras que ver componentes puede existir en el mundo. Tienen una ubicación en una rotación. Y algunos de ellos como nuestro componente de malla, por ejemplo, sí tienen un objeto físico en el mundo. Ahora, la razón por la que usamos componentes en lugar de simplemente poner todo este código y funcionalidad directamente en un blueprint actors blueprint es porque podemos reutilizar componentes en múltiples blueprints que pueden nos ahorra mucho tiempo tener que escribir código una y otra vez o copiarlo y pegarlo cuando podríamos hacerlo una vez en un componente, luego reutilizar ese componente en varios blueprints. De manera similar a cómo las funciones son útiles, porque podemos cambiar el código en un solo lugar y éste lo afecta en todos los lugares en los que se está utilizando la función. Si cambiamos el código dentro de nuestro blueprint de componentes, el blueprint que está usando ese componente también se actualizará y obtendrá esos cambios. Podemos crear nuestros propios Componentes Blueprint. Todas las que hemos mirado hasta ahora están integradas en el motor. Si haces clic hacia fuera, puedes ir a través y ver todos los componentes que realmente vienen con el motor. Pero si queremos crear el nuestro propio, necesitamos ir al Navegador de Contenido. Haremos clic derecho e iremos a clase Blueprint. Y luego aquí se puede ver en la parte inferior tenemos componente activo y componente de sumidero. Ahora si recuerdas desde escena completa los componentes pueden existir en el mundo. Tienen una ubicación, mientras que los componentes activos no. Son puramente código. Empezaremos creando un componente activo. Yo sólo voy a llamar a este VP para subrayar componente actor así. Y haremos doble clic en él para abrir. Entonces sólo arrastraré la pestaña hasta aquí hasta la barra superior con los planos. Ahora, es posible que hayas notado que esta interfaz de usuario se ve un poco diferente a nuestro editor de blueprint normal. Y como puedes ver, no tenemos un panel Componentes porque los componentes pueden tener sus propios componentes. Sólo los actores pueden. Tampoco tenemos una ventana gráfica porque este es un componente activo. No tiene componentes de partes visibles a la misma. Entonces es puramente código. Por lo que sólo tenemos acceso al código IU relevante. Pasa esas diferencias. No hay mucho diferente a la codificación y un componente que luego computa y codifica en un blueprint. Tenemos nuestro nodo o nodo de juego inicial, por ejemplo, estos están aquí por defecto, pero podemos acceder a la mayoría de los eventos y funciones que podemos en nuestro blueprint activo normal dentro de un componente. Ahora bien, debido a que este es un componente activo, no puedo hacer algo como decir get location y no podemos encontrar el nodo getLocation porque este actor, este lo siento, componente, no tiene una ubicación. Por lo que les puedo dar un ejemplo de cómo podemos ejecutar código y yo componente. Ahora, si me arrastro de mi gran en juego aquí, sólo voy a agregar una cadena de impresión. Por lo que he añadido algún código a mi componente. Y si puedo sondear y golpear a Play, ya verás que no pasa nada. Ahora, eso es porque en realidad no he agregado mi nuevo componente activo a ningún blueprints que exista en mi nivel. Para que ese código no se vaya a ejecutar. Pero si voy a mi Third PersonCharacter aquí y voy a agregar, y busco componente actor. Se puede ver que tenemos nuestro BPR, su componente, ahí es cuando acabamos de crear o agregar eso. Y se puede ver que en realidad lo ha añadido a esta segunda mitad del panel junto con el movimiento del personaje. Eso se debe a que ambos son solo componentes activos, no viendo componentes. Pero ahora si compilo y volvemos a la play y editor, se puede ver que ahora ese código dentro nuestro componente se está ejecutando porque ahora está unido a ThirdPersonCharacter y su inicio de juego correrá cuando se genere el personaje en tercera persona o cuando comience el juego. Ahora también podemos acceder a funciones, eventos y variables desde nuestro componente activo dentro del blueprint al que los agregamos. Entonces si salimos fuera de juego un editor y vuelvo a mi componente activo aquí. Sólo voy a añadir , digamos, una nueva variable. Simplemente llamaremos a esta Prueba. Crearé una nueva función también, y llamaremos a esta función de ejemplo. Y también crearé un evento o crearé un evento, solo llamaré a este ejemplo. Así que ahora tenemos nuestro evento, función y variable, y estos están todos dentro de nuestro componente actor. Ahora bien, si vuelvo a mi personaje en tercera persona aquí, puedo acceder a esas variables y funciones realmente fácilmente simplemente arrastrando mi componente BPS desde el panel Componentes. Arrastrar hacia fuera. Y sólo puedo buscar prueba, por ejemplo. Y puedo conseguir todo el conjunto de esa variable de prueba si quiero. También puedo acceder a las funciones para poder arrastrar hacia fuera y buscar por ejemplo. Y puedes ver que puedo acceder a mi función de ejemplo y a mi evento de ejemplo. Justo así. Ahora un buen ejemplo de un sistema que tal vez quieras poner en un componente es algo así como un sistema de salud. Y la razón de eso es que es posible tengas múltiples actores en tu juego que quisieras tener un sistema de salud. Ahora, en lugar de tener que agregar una variable y funciones que afectan su salud a cada uno de esos actores. Podríamos simplemente crear un componente de salud y agregar ese componente de salud a los múltiples actores. Entonces, porque solo podemos acceder a las funciones y variables desde nuestro componente fácilmente dentro de cualquier blueprint al que lo agreguemos. Entonces podríamos usar ese sistema de salud sin tener recrear todas las funciones y variables dentro del plano. Ahora, también podemos acceder y actores componentes de otros planos. Entonces, si armé rápidamente un plano de gatillo, solo voy a crear un nuevo blueprint. Habrá un actor. Yo sólo voy a llamarlo gatillo va a abrir eso. Agregaré un componente de colisión de caja. Colisión de caja. Vamos, voy a subir un poco esto. Y voy a apagar oculto en juego. Y después iremos al Event Graph y eliminaremos estos nodos. Y crearé una vuelta start over. Si recuerdas, este nodo se ejecuta cada vez que algo se superpone, dispararé y nos da acceso al actor que nos solapó. Para que podamos acceder a nuestro componente desde nuestro Third PersonCharacter y de algunas maneras diferentes. Si me arrasto de otro actor y la búsqueda le costará a la persona. Ahora tenemos nuestro nodo de costos, que si recuerdas, hemos hecho una lección por separado sobre. Y si nos arrastramos, podemos acceder a esto. O voy a personajes en tercera persona, variables, y funciones. Pero también podemos acceder a sus componentes. Así que si busco componente actor, nos desplazamos hacia abajo que por lo general en la parte inferior aquí se puede ver que puedo obtener nuestro componente activo que nos permite acceder a cualquiera de las funciones y variables de nuestro componente x a través de nuestro ThirdPersonCharacter. Si me arrasto cuando busco pruebas, por ejemplo, se pone prueba, ahí vamos. Puedo acceder a esa variable. También puedo acceder si busco, por ejemplo, se puede decir que puedo acceder a mi evento de ejemplo y a mi función de ejemplo. Ahora, hay otra forma de poder acceder a los componentes de nuestros actores sin casting. Y podemos hacer eso usando un nodo que si arrastramos hacia fuera de nuestro actor, buscará componente por chocar. Ver aquí arriba, si creo ese nodo. Ahora esencialmente lo que esto hace es que se necesita una entrada de actor y establecemos una clase de componente para que pueda buscar el componente actor. Y pondré esto al componente BP act. Ese es el que creamos. Esto comprobará, ¿ nuestra entrada de actor tiene este componente? Si lo hace, entonces generará una referencia a ese componente aquí. Y si me arrasto, puedo buscar nuevo solo desde mi variable de prueba. También puedo acceder a esos eventos y funciones que creamos. Ahora bien, si r no tiene un componente activo, entonces esta referencia no será válida. Entonces lo que hacemos cada vez que usamos este nodo es solo asegurarnos de que usamos y es válido nodo así. Por lo que ahora, cuando un objeto se superpone son trigger, este evento se ejecutará. Se comprobará, ¿este actor tiene nuestro componente bp act? Entonces si lo hace, daremos salida a una referencia válida. Por lo que R es válido, correría válido. Y si no lo hace, entonces es válido nodo se ejecutaría, no es válido. Ahora podemos tener en realidad múltiples del mismo componente en los mismos planos. Entonces si voy a mi personaje en tercera persona aquí y agrego la app de subrayado BP al componente. De nuevo, vas a ver que ahora tengo dos de ese componente en mi Third PersonCharacter. Ahora es posible que queramos acceder a aquellos que usan un nodo como este. que podamos eliminar este nodo en su lugar, podemos usar el componente Get por clase. Y ese es un nodo que funciona más o menos exactamente igual que nuestro nodo anterior, pero en lugar de una sola salida variable, es una matriz. Ahora bien, si fuéramos a buscar el componente actor no escolarizado de BP, esto devolvería cada componente que coincida con nuestra clase de componente de nuestro personaje. Y lo devuelve en una matriz. Y si recuerdas de nuestras matrices de video y re solo nos permite almacenar múltiples del mismo tipo de variable todo en una sola variable. Y si quisiéramos acceder a una de esas variables de nuestra matriz, necesitaríamos arrastrar hacia fuera y usuario obtener nodo. Tenemos que suministrar un índice. Así que esta es la variable dentro de nuestra matriz queremos acceder. Y luego desde nuestro nodo get solo podemos arrastrar hacia fuera y buscar, digamos, consigue prueba. Y debido a que este bolígrafo de aquí es un bolígrafo de componente BP act, podemos obtener nuestra variable de prueba o podemos obtener esos ejemplos de función y evento que creamos anteriormente. Así que eso son sólo algunas formas en las que se puede acceder a los componentes de un actor utilizando estos nodos. Ahora otra característica interesante de los componentes es que en realidad podemos establecer sus variables para cada blueprint al que agregamos el componente. Entonces si vamos a nuestro blueprint de componentes de app aquí, solo voy a crear una nueva variable y voy a llamar a esto decir max health. Así. Lo estableceremos en un entero. Ahora si compilamos este blueprint y volvemos a nuestro blueprint Third PersonCharacter. Simplemente voy a eliminar este componente extra activo y agregué fue como el primero. Y se puede ver más en el panel Detalles, tenemos una categoría por defecto. Y luego aquí tenemos nuestra variable de prueba. Ese es el booleano que creamos al principio. Y también tenemos nuestra variable de salud máxima, y podemos usar estos para establecer esos valores iniciales serán para nuestro componente de aplicación. Para que pudiera establecer esto para decir un 100. Y tal vez tenía un segundo plano de personaje. Sólo usaré el gatillo como ejemplo. Entonces, si agregamos otro guión bajo BP, BP, componente de acto BP, no es necesario usar guiones bajos. Y aquí se puede ver si uso un guión bajo, no lo encuentra. Entonces si hago BP x componente y nos deshacemos de este buscador, y selecciono ese componente. Se puede ver que nosotros de nuevo, tenemos nuestras variables test y max health aquí y la categoría por defecto. Y ves que está por defecto a 0 por defecto porque eso es lo que está configurado dentro de nuestro componente x. Entonces aquí adentro, podríamos establecer esto para decir, mil. Ahora, si nos instalamos en Begin Play, imprimiremos nuestra salud máxima. Por ejemplo. Ponemos nuestro gatillo y el nivel y le pegamos a Play. Se puede ver que está imprimiendo mil y ese es nuestro gatillo haciendo hasta un 100, y ese es nuestro componente de actuar de personajes haciendo eso. A continuación, solo quería mostrarles cómo podemos crear rápidamente un componente de sumidero. Así que solo saldremos de los planetas para hacer clic derecho y crear un nuevo plano. Y en lugar de componente activo, vamos a hacer clic en componente visto. Simplemente llamaré a este componente BP subrayado visto. Y haremos doble clic en eso para abrirlo. Ahora como puedes ver, es más o menos lo mismo que nuestro blueprint de componentes activos. La única diferencia está en nuestra clase por defecto. Por lo que se puede ver que en realidad tenemos una ubicación, rotación y escala. Y si vamos a nuestro Third PersonCharacter aquí, añadimos un nuevo componente y luego añadiremos nuestro componente bp seen. Ya verías que tenemos una ubicación en el, en el Viewport aquí. Podemos moverlo. Si seleccionamos el componente ahí dentro, ven que puedo moverlo, puedo colocarlo, podemos rotarlo y escalarlo. Y si volvemos a nuestro componente de sumidero, porque es el mismo componente, podemos acceder a su ubicación para que podamos buscar consigue ubicación salvaje. Puedes ver que tenemos nuestro nodo Get World Location. También tenemos la rotación mundial de nuestro get. Si lo deletreo bien, rotación que vayamos obtenemos rotación mundial. Y estos funcionan igual que nuestros nodos en nuestros planos activos. Simplemente obtiene la ubicación y rotación de nuestro componente pecado. Ahora, hasta ahora solo hemos estado agregando componentes usando el panel Componentes aquí, pero también podemos agregar componentes durante el juego usando código. Entonces si hago clic derecho aquí y mi Third PersonCharacter Blueprint, busco comenzar a jugar. Si arrastramos hacia fuera de los padres, busque add y luego el nombre de nuestros componentes. Entonces BP, puedes ver que tengo opciones para el componente BP x y nuestro BPC y componente. Entonces si hago clic en nuestro componente x aquí, nos metemos en este nodo. Y esto esencialmente significa que en Begin Play o cuando nuestro personaje desove, agregará un nuevo componente de acto BP a nuestro personaje. Podemos usar el valor de retorno aquí como podríamos con si arrastramos en una referencia como esta, podemos simplemente arrastrar hacia fuera y buscar, digamos, obtener, probar por ejemplo, podemos acceder a nuestra variable. También podemos acceder a esas funciones de ejemplo y al evento que creamos anteriormente. Y si quisiéramos, podríamos crear una variable para almacenar esta referencia. Entonces si quisiéramos acceder a esta nueva variable más adelante en nuestro código, podríamos hacer eso. Sólo estamos promocionando una variable que nos crea una nueva variable que establece un tipo de componente actúa BP. Podemos nombrar esto para decir nueva computadora. Y eso nos permite ahora acceder a ese nuevo componente que creamos más adelante, entonces podemos usarlo. Por lo que obtiene un valor máximo. Al seleccionar esta agregar actina BP, HE en realidad puede ver que obtenemos acceso a ella variables de inicio. Para que pudiéramos establecer nuestro yo máximo a lo que quisiéramos decir 99. Y ahora cuando ese acto ha creado su máximo provechoso, benigno. Y por último, también podemos destruir componentes durante el juego. Entonces si arrastro mi referencia de componente activo aquí, sólo voy a eliminar este código. Ahora para destruir componente, lo que tenemos que hacer es arrastrar hacia fuera, buscarlo, destruir. Puedes usar el nodo destruir componente y eso eliminará por completo el componente del blueprint durante el juego. Por supuesto, en realidad no afecta el plano aquí. Entonces no es como si lo hubieras eliminado, solo destruye el componente durante esa sesión de juego. Entonces eso es más o menos para componentes. Ojalá tengas una mejor comprensión de cómo funcionan y para qué se usan por ahora. 21. Aspectos básicos (controlador de jugadores): Oigan a todos. En esta lección vamos a estar echando un vistazo al plano del controlador del jugador. Ahora en el controlador de juego, se crea el blueprint cuando golpeamos play e iniciamos el juego. Y se crea para cada jugador que existe en el nivel. Y el propósito de un controlador de jugador es tomar el control de unos planos como personajes o vehículos, y proporcionarles las entradas que el jugador está presionando. Ahora el mando del jugador permanece igual para cada jugador a menos que se abra un nuevo nivel, en cuyo caso se destruye el antiguo mando y se crea uno nuevo para cuando se abra el nuevo nivel. Ahora en la plantilla de caracteres en tercera persona que hemos abierto aquí, en realidad no incluye un controlador de blueprint. Y eso es porque por defecto solo usa el controlador de reproductor incorporado que viene con el motor, cual está codificado en C plus plus. Por lo que no encontrarás el controlador del jugador en nuestro panel de planos. Si abrimos nuestro modo de juego, podemos ver donde realmente podemos configurar nuestro controlador de jugador. Entonces si bajamos y las clases, se puede ver que tenemos la clase de controlador plaga actualmente que está configurado para jugar controlador. Y ese es nuestro controlador de jugador C plus plus que está integrado en el motor. También puedes ver que tenemos la Clase de Peón predeterminada aquí abajo, que está establecida en nuestro bp Third PersonCharacter. Y esencialmente lo que hace un modo de juego es que le dice al motor que queremos arrancar a cada jugador en el juego con este controlador de jugador, que actualmente es el controlador de jugador C plus plus. Y este personaje, que es nuestro terceroPersonaPersonaje en el que hemos estado trabajando, en lecciones anteriores. Pero en realidad podemos crear nuestros propios planos de controlador de jugador. Entonces para hacer eso, voy a cerrar mi modo de juego por ahora, y haremos clic derecho en el navegador de contenido e iremos a planos. Y vamos a seleccionar controlador de jugador. Y vamos a nombrar este ejemplo de BP, control así. Y haremos doble clic en él para abrirlo. Y yo sólo voy a arrastrar la parte superior aquí hasta la cima con nuestros otros planos. Ahora, tocaré los controladores. Blueprint se parece más o menos a un acto de Blueprint. Y eso se debe a que en realidad es un actor es sólo un hijo del controlador del jugador también. Entonces en el Viewport aquí se puede ver eso, pero no tenemos ningún objeto visible. Por lo general, no estarás agregando cosas como una malla o algo por el estilo a la ventana gráfica de un controlador de jugador. También tenemos una cámara aquí. Ahora bien, esta cámara sólo se usa cuando no estamos poseyendo otro Blueprint. Entonces cuando poseemos son carácter en tercera persona, por ejemplo, en realidad usamos la cámara que está incluida con eso. Si queremos poseer algún plano, entonces se usa esta cámara. También hay algunos ajustes adicionales en los valores predeterminados de clase exclusivos para el controlador del jugador. Por lo que tenemos cosas relacionadas con el cursor del ratón y eventos táctiles para móviles, así como algunas herramientas de administración de cámaras aquí arriba también. Y si nos dirigimos al Event Graph, puedes ver que prácticamente tenemos el diseño predeterminado que esperarías. Ahora lo que te podrías estar preguntando, ¿qué es lo que realmente usamos nuestro foro de controlador de reproductor, qué codificaríamos aquí en lugar de simplemente codificar dentro de nuestro personaje? Ahora bien, porque voy a jugar a los controladores se mantiene igual sin importar el personaje que estemos controlando, podemos almacenar información aquí que queremos mantener la misma para controlar cosas diferentes. Entonces, por ejemplo, si tuvieras un sistema de misiones y quisieras que tus misiones estuvieran disponibles todo el tiempo, no importa si posees un personaje o un vehículo o algo de la cosa, probablemente desea almacenar esa información dentro de su controlador, ya sea directamente creando el código dentro del controlador o agregando componentes a ese controlador. Otra cosa para la que los controladores son útiles es para agregar entradas que quieres que permanezcan iguales sin importar el carácter que estés controlando. Así que un ejemplo de esto sería si tuvieras, digamos, un menú de escape en tu juego donde todos tus ajustes y controles, o probablemente quisieras que ese botón funcionara sin importar el personaje que seas controlando. Así que en lugar de hacer o agregar ese código en cada blueprint de caracteres, podemos agregar a la vez y el controlador, y de esa manera la entrada siempre estará disponible para el jugador sin importar qué personaje estén controlando. Entonces, para darles un ejemplo de lo que quiero decir con la información permanece igual sin importar qué personaje estemos controlando creará una nueva variable. Y yo sólo llamaré a esta misión una hecha. Y lo dejaremos como booleano. Y voy a compilar. Ahora, volveré al navegador de contenidos y crearemos un trigger. Este disparador pondrá a esa misión un booleano en verdadera. Por lo que sólo vamos a crear un actor. Yo lo llamaré gatillo de misión. Así. Eso lo abriremos. Voy a añadir una caja de colisión sólo para que podamos solapar a nuestra actor ella. Yo lo moveré hacia arriba. Ahora establece que está oculto en juego a falso para que podamos sentarnos. Y luego en nuestra gráfica de eventos, voy a usar al actor comenzar solapamiento. Y si recuerdas, esto correrá cuando algo se superponga nuestro gatillo y nos dirá qué actor lo solapó. Entonces se arrastrará desde aquí, le voy a hacer un costo al personaje. Y a partir de eso, podemos arrastrar hacia fuera y hacer obtener controlador. Y esto nos da acceso a cualquier controlador que esté controlando este personaje. Ahora bien, esto será válido o no válido. Por lo que si un personaje no está siendo controlado, este volverá y no es válido pen. Por lo que queremos crear un nodo es válido. De esta manera, si un personaje que no está siendo controlado, los solapamientos son trigger, no obtendremos ningún error. Entonces desde nuestro controlador, necesitamos hacer nuestra misión variable. Entonces, si nos arrastramos y la investigación lograría hacer la misión, no funcionará porque esto es solo una referencia de objeto controlador, no una referencia a nuestro controlador de ejemplo real. Entonces lo que podemos hacer es porque nuestro controlador de ejemplo es un hijo del tipo de controlador que podemos arrastrar hacia fuera, podemos echar a ejemplo, controlador conectará esto hasta es válido. Y luego a partir de eso podemos alargar y podemos hacer misión puesta, una hecha. Y podemos poner esto en realidad. Entonces sólo para repasar esto, cuando un actor se superpone. Entonces nuestro gatillo, comprobamos es ese Acto donde un personaje, si lo es, entonces nos metemos como controlador y comprobamos, ¿es válido? Entonces básicamente comprobamos, ¿este personaje está siendo realmente controlado por algo? Si lo es, entonces comprobamos, ¿este controlador es un controlador de ejemplo BP? Si lo es, entonces establecemos que los controladores de ejemplo BP misión uno hecho variable a true. Ahora queremos poder acceder a la información para ver si nuestra misión se ha cumplido. Entonces iremos a nuestro Third PersonCharacter y luego al Event Graph. Voy a añadir una nueva entradas de ellos que buscan entrada evento uno. Y esto sólo se ejecutará cada vez que presione uno en mi teclado. Ahora, podemos conseguir a nuestro controlador de la misma manera que lo hicimos en el gatillo de la misión. Entonces lo buscaré, consigue controlador. Y usando este nodo, se verificará uno mismo para un controlador. Entonces estamos en el TerceraPersonaPersonaje, el autónomo como **** y nuestro personaje es un poema. Por lo que podemos comprobar nosotros mismos si tenemos un controlador va a hacer costo a la BP guión bajo ejemplo controlador. Y a partir de eso podemos hacer nuestra misión una. Y sólo imprimiremos una cadena esté o no hecha. Usaremos un nodo de cadena de impresión y conectaremos esto hasta en cadena. Así. Simplementevoy a compilar esto. Ahora volveremos a nuestro mapa en tercera persona, y sólo voy a añadir el gatillo de la misión a nuestro nivel. Lo haré un poco más grande, así que solo usaré la herramienta de re-escala aquí vamos. Y hay una última cosa que tenemos que hacer antes de probar esto, y eso es cambiar nuestro controlador. Por lo que actualmente en el modo de juego en tercera persona, si abro eso, se puede ver que el controlador del jugador todavía está configurado en controlador de jugador. Tenemos que cambiar esto ahora a nuestro controlador de ejemplo bp. Ahora, debido a que ese controlador es un hijo del controlador del jugador, hará todo lo que ese controlador de jugador haga por defecto. Bell también ahora tenemos nuestra nueva variable que agregamos. Entonces si presiono Play, si presiono uno, se puede ver que está imprimiendo falso. Pero si me topo con mi gatillo, ahora, cuando presiono uno, se puede ver que está imprimiendo verdad. Entonces así es como podemos configurar y obtener información del controlador de jugadores de OCT. A continuación, te mostraré cómo en realidad podemos cambiar qué personaje estamos controlando. Entonces para hacer esto, voy a crear un segundo plano de gatillo. Entonces haremos clic derecho y haremos clase Blueprint haría un actor, voy a llamar a esto cambio de zanahoria. Carácter. Gatillo. Eso lo abriremos y haremos lo mismo. Agregaremos una nueva caja de colisión, moveremos esto hacia arriba. He puesto esto a su oculto en juego a falso. Y lo compilaremos e iremos al Event Graph. Voy a usar el actor principiante solapamiento aquí. Entonces, para empezar, controlaremos a otro personaje que coloqué en un nivel. Voy a ir al mapa de tercera persona aquí, y sólo arrastraré en un Third PersonCharacter. Yo estoy por aquí. Después volveremos a nuestro gatillo de cambio de personaje aquí. Y nos arrastraremos de otro actor y volveremos a lanzar al personaje. A partir de eso queremos obtener su controlador va a hacer obtener, obtiene controlador. Entonces vamos a arrastrar hacia fuera desde Get Controller y buscar poseer y usar el nodo de proceso. Ahora, te das cuenta que no estoy echando a mi controlador de ejemplo BP. Y eso es porque no necesitamos hacerlo, porque este evento posee existe en el controlador del jugador que es el padre de nuestro controlador de ejemplo. Entonces no hay necesidad de echarle. Ya podemos acceder a ella. Y conectaremos esto hasta nuestro nodo de costos. Ahora, esto nos permite tomar el control de una bomba. Entonces lo que haremos es arrastraremos hacia fuera de entrada y promoveremos variable. Esto creará una nueva variable **** para nosotros. Y con esa variable de punto seleccionada, sólo se va a librar del buscador. Y tomaremos en instancia editable. De esa manera cuando seleccionamos a nuestro personaje, lo cambiamos, cambiamos el gatillo de carácter y luego nivel podremos seleccionar un control de puntos. Porlo que sólo hará eso. Ahora, arrastraré en mi cambio gatillo de zanahorias. Lo pondré por aquí y lo haré un poco más grande también así. Ahora, en mi panel de detalles por aquí, por defecto, se puede ver en ****, puedo seleccionar un control de puntos y simplemente elegiría nuestro Third PersonCharacter. Entonces ese es el personaje de aquí, así. Y ahora podemos volver a nuestro personaje de cambio y asegurarnos de que eso esté compilado. Ahora podemos probar esto, así que le pegaremos a play. Entonces tenemos nuestro carácter normal como antes de que podamos correr por ahí. Si me topo con el gatillo de mi misión y presiono uno, se puede ver que esto ahora está volviendo cierto. Pero si me topo con mi personaje de cambio, verán que ahora hemos tomado control de este otro personaje de aquí. Ves a nuestro viejo personaje de allá todavía corriendo por ahí. Si presiono uno, verán que nuestra variable de misión sigue siendo cierta pesar de que estamos controlando un personaje diferente. Eso se debe a que nuestro controlador de jugador sigue siendo el mismo plano. Lo fue. Cuando estamos controlando ese personaje sobre eso. Ahora también podemos tomar el control de personajes que han sido engendrados durante el juego. Y para hacer eso, si vamos a nuestro gatillo de cambio de personaje aquí, vamos a eliminar esta variable poema por ahora, porque vamos a estar creando un recién nacido usando el spawn activo del nodo de clase. Ahora, vamos a entrar más en detalle sobre el uso de este nodo en el futuro. Pero esencialmente, te permite crear nuevos actores y el nivel durante el juego, llegamos a clase. Entonces este es el plano que querríamos engendrar. Entonces para nosotros ese va a ser el Tercero PersonaPersonaje. Y obtenemos, digamos, una ubicación de desove. Entonces me arrastraré y buscaré marca. No queremos esa, perdón, queremos hacer transformar así. Y eso nos permite establecer una ubicación y rotación. Tenemos que proporcionar una ubicación para que nuestros personajes puedan engendrar. Por lo que sólo voy a hacer volver a la ubicación ahora. Vamos a arrastrar hacia fuera de eso y hacer un nodo de adición sólo para agregar poco de distancia entre nuestro engendro de caracteres y cambiar el código para activar. Entonces agregaré decir 200 y la Z y tal vez 400 y la X así. Entonces eso le dice a nuestro personaje dónde queremos que se genere. Y luego tenemos este valor de retorno y esto nos da una referencia al nuevo personaje que acabamos de engendrar. Ahora porque nuestro personaje es hijo de un tipo de personaje, y los personajes son hijos del tipo peón. Podemos enchufar esto directamente a la importante opción aquí. Así que ahora cuando compilo y presiono Play, podemos encontrarnos con nuestro gatillo de cambio de personaje y verías que genera, digo nuevo personaje en en su ubicación. Dijimos que hemos tomado el control de ese personaje. Así es como puedes generar nuevos personajes y tomar el control de ellos con el mando de tu jugador. Ahora lo que tal vez quieras destruir ese personaje sobrante que cuando ya no controlo. Entonces lo que podemos hacer es volver al gatillo del personaje, un inherente. Tenemos que hacer algunas cosas más. Así que primero necesitamos almacenar una referencia de variable de controlador. Y la razón de eso es que si te acuerdas, esta es una función pura. Las funciones puras ejecutarán cada conexión que tengan. Ahora bien, si tratamos de destruir nuestro personaje antes de engendrar uno nuevo y poseerlo, lo que sucederá es cuando intentemos poseerlo o obtener nodo controlador se ejecutará y usará el objetivo de un carácter. Pero si hemos destruido ese personaje, entonces ya no tendrá un controlador que podamos usar para poseer el nuevo personaje. Ella es un poco difícil de conseguir su cabeza alrededor, pero vamos, vamos a arrastrar hacia fuera de get controller y lo promoveremos a una variable. Lo llamaremos controlador de solapamiento, así, que se conecta hasta aquí. Entonces ahora solo estamos almacenando una referencia al controlador tan pronto como lo solapemos. Y en realidad podemos desconectar el objetivo ahora de por aquí. Entonces desde nuestro controlador de superposición solo podemos arrastrar hacia fuera y hacer que se controlen ****. Esta nota solo nos permite obtener una referencia a cualquier peón que nuestro controlador esté controlando. Para que podamos arrastrarnos de eso y lo vamos a destruir. Porque esto sigue siendo una referencia a nuestro viejo personaje que ya no somos uno. Para que podamos hacer eso. Luego tomamos nuestra variable de controlador de superposición y la conectamos al objetivo de nuestra posesión. Por lo que tu código debería verse así. Y podemos compilar esto. Entonces ahora cuando saltamos al nivel y golpeamos Play, si me topo con mi gatillo ahora puedes ver que he engendrado un nuevo personaje. Yo tengo el control de ello, pero viejo personaje que nos topamos con el ancho de la caja se ha ido. Y si lo hacemos de nuevo, se puede ver que engendramos otro personaje. Ese viejo personaje se ha ido de nuevo. Así que eso es lo básico de cómo puedes engendrar en nuevos personajes y destruir a los viejos. Ahora, hay otra nota de la que quiero hablarles y esas son las notas sin procesar. Así que si vuelves al disparador de caracteres de cambio aquí, solo voy a eliminar este código ahora porque ya no necesitamos eso. Y en realidad podemos deshacernos de este controlador de solapamiento porque tampoco necesitamos eso. Ahora cuando arrastramos hacia fuera desde el controlador, recuerdas esto El nodo poseen. También está el nodo sin procesar. Entonces, si creamos un nodo sin procesar, es esencialmente solo le dice al controlador que deje de controlar cualquier personaje, vehículo, cualquier **** que esté controlando. Entonces si conectamos esto ahora, cuando golpeemos esa caja de colisión, vamos a perder el control de nuestro personaje. Entonces cuando me topo con eso, se puede ver que mis personajes se quedaron corriendo en el acto. No puedo controlarlo. No puedo mover mi cámara. Y eso es porque ya no controlamos a este personaje ni a ningún personaje de nuestro nivel. Eso va a ser todo para nuestra lección de controlador de jugador. Ojalá tengas un poco de una mejor comprensión de cómo funcionan. 22. Aspectos básicos (GameMode): Oigan a todos. En esta lección vamos a echar un vistazo más de cerca al tipo de blueprint del modo de juego. Entonces esencialmente el Modo de Juego es lo que le dice al motor con qué controlador queremos que comience cada jugador, así como con qué personaje queremos que comience cada jugador en nuestro nivel. Entonces si vamos al modo de juego en tercera persona que tenemos en nuestro navegador de contenidos hip y lo abrimos. Se puede ver que tenemos los valores predeterminados de clase abiertos aquí, y nos da algunas opciones diferentes bajo las clases. Ahora, sólo vamos a estar enfocándonos en el controlador y la clase Default Pawn para esta lección, porque esos son los principales que estarás cambiando. Estaremos repasando los otros escenarios en una lección futura. Pero para la clase de controlador de jugador, este es el blueprint de controlador de jugador que se generará para cada jugador que se una al juego. Ahora actualmente está configurado para BP ejemplo controlador de nuestra última lección. Pero si quisiéramos, podríamos dar clic en esto y cambiar esto a otro controlador. Siquisiéramos. Entonces tenemos la Clase de Peón por Defecto. Ahora, actualmente se establece en el BP, personaje en tercera persona porque ese es el valor predeterminado. Esta es la plantilla de tercera persona. Pero si quisiéramos, si añadimos otro personaje, digamos un vehículo, por ejemplo, con el que queríamos empezar. En su lugar, podríamos seleccionar eso aquí en el desplegable. Ahora bien, debido a que este plano realidad no tiene ningún código en él, nos ha dado esta vista. Pero si quieres llegar al editor principal de planos completo, siempre puedes hacer clic en esta opción aquí arriba para abrir el editor de fotos principal. Y eso nos da acceso a todos los ajustes que esperarías, los componentes, el Event Graph y demás. Ahora el modo de juego sí existe en el nivel, es un hijo de los tipos de actor, por lo que puede tener componentes. También podemos escribir código en él como cualquier otro blueprint. También podemos crear nuestro propio modo de juego. Entonces si vamos al Navegador de Contenido y simplemente hacemos clic derecho, vamos a Blueprint Class. Y tenemos una opción para Game Mode base aquí, pero eso es un poco más de una versión reducida del modo de juego. Por lo que si vamos en todas las clases y buscamos el Modo de Juego, puedes ver que aquí hay una opción de Modo de Juego. Prefiero usar este solo porque viene con un poco más de funcionalidad incorporada. Por lo que haremos clic en Seleccionar para crear un nuevo blueprint usando el modo de juego. Y yo sólo voy a llamar a este BP ejemplo Game Mode. Si hacemos doble clic en eso, podemos abrirnos. Y yo sólo voy a arrastrar la pestaña hasta arriba aquí. Ahora, aparte de ser el blueprint donde podemos configurar nuestro controlador de inicio y clases de peón, en realidad podemos agregar código a nuestro modo de juego. Ahora, por lo general, añadirías código al modo de juego que mueve el juego de alguna manera. Entonces, por ejemplo, si estoy empezando a jugar, querías un temporizador para contar atrás y luego el juego terminara o que se abriera un nuevo mapa. Normalmente harías eso dentro de tu blueprint de modo de juego. Ahora algo útil del plano de camuflaje es que prácticamente puedes acceder a él en cualquier lugar. Entonces un ejemplo de esto es si fuéramos a ir a nuestra cadera Third PersonCharacter. Ahora tengo algún código sobrante de nuestras lecciones anteriores, así que solo borraremos esto. Y si hacemos clic derecho y lo buscamos consigue el modo de juego. Podemos usar este nodo para obtener una referencia a nuestro modo de juego actual. Y actualmente es una salida base de modo de juego. Entonces, lo que podemos hacer es simplemente arrastrar hacia fuera el costo a nuestro modo de juego de ejemplo. Y la razón por la que podemos hacer eso es porque nuestro ejemplo Game Mode es un hijo del modo de juego. Y el Modo de Juego es un hijo de la base de Game Mode. Por lo que podemos usar ese nodo de costo para acceder a nuestras funciones y variables desde nuestro modo de juego de ejemplo. Entonces si vuelvo a mi modo de juego aquí y creo una nueva variable, solo voy a llamar a este nombre de juego. Y voy a poner el mío a un tipo de nombre. Y voy a poner esto para decir def mucho por ejemplo. Podemos tirar de esto. Si volvemos a nuestro Third PersonCharacter, podemos arrastrar y buscar, olvidar el nombre del juego. Podemos acceder a esa variable. Si agrego adentro, digamos cadena de impresión, podemos simplemente imprimir cadena que hacia fuera cuando presionamos uno en nuestro teclado. Y vamos a compilar. Ahora, si tuviéramos que golpear play ahora mismo, esto no funcionaría y hay algunas razones planas. En realidad aún no hemos configurado nuestro juego para usar nuestro modo de juego de ejemplo. Y además no hemos configurado nuestro modo de juego para usar a nuestro personaje en tercera persona. Así que si volvemos a nuestro motor de juego de ejemplo, y luego los valores predeterminados de costo, podemos establecer nuestra clase de controlador por defecto y nuestra clase **** predeterminada. Así que voy a establecer el **** por defecto el BP ThirdPersonCharacter. Y vamos a establecer la clase de controlador. Podemos cambiar esto a nuestro controlador desde nuestra última lección o simplemente dejarlo como controlador de jugador. Voy a dejar el mío como controlador de jugador por ahora. Simplemente compilaremos. Entonces tenemos que ir a la configuración del proyecto. Entonces si voy a editar aquí arriba en la parte superior y vamos a Ajustes del proyecto, simplemente arrastraré esto a través de mi otra pantalla. Entonces necesitamos ir a mapas y modos. Ahora, mapas y modos también, podemos establecer el modo de juego predeterminado para nuestra pandilla, y este será el modo de juego para cada mapa que creamos. Por lo que actualmente está configurado en el modo de juego en tercera persona. Si cambio esto aquí, quiero seleccionar mi modo de juego de ejemplo BP. Por lo que ahora cuando creamos nuevo nivel o golpeamos Play y nuestro nivel actual, usará el modo de juego de ejemplo en lugar de un modo de juego en tercera persona. Ahora, desde aquí, también podemos establecer nuestra clase **** por defecto y nuestro controlador predeterminado si quisiéramos, personalmente, prefiero simplemente ir al propio blueprint. Entonces ve a nuestro ejemplo Game Mode y cámbialo ahí dentro. Pero si quieres, puedes cambiar esos ajustes y aquí también. Ahora hay otro lugar en el que podemos configurar el modo de juego y eso está en nuestros escenarios mundiales. Entonces si cerramos la configuración de nuestro proyecto y vamos al mapa de tercera persona, voy a ir a Windows y voy a marcar la configuración del mundo. Puede que el tuyo ya esté marcado, pero el mío no. Entonces yo sólo voy a asumir eso. Y luego aquí hay ajustes para este nivel específico. Se puede ver que tenemos una categoría de modo de juego y podemos anular un modo de juego. Y esto básicamente solo dice que solo para este nivel, queremos usar un modo de juego diferente predeterminado que acabamos de establecer en la configuración de nuestro proyecto. Se puede ver que esto en realidad está configurado en nuestro modo de juego en tercera persona. Entonces, si tuviera que golpear play, a pesar de que hemos puesto nuestro modo de juego de ejemplo en la configuración del proyecto, este solo este nivel por sí solo en realidad todavía usaría el modo de juego en tercera persona. Esta configuración es útil porque es posible que desee ganar modo que permita el uso de niveles, aparte de un par que podría tener un modo de juego específico que desea utilizar para esos niveles. Por lo que usarías esta configuración para tomar el control del Modo de Juego y venderlo a lo que quieras para este nivel específico. Así que por ahora, sólo voy a establecer esto a ninguno, o simplemente podemos hacer clic en él y seleccionar ninguno. Y eso despejará la anulación del modo de juego. Entonces ahora cuando golpeamos play y presionamos uno, se puede ver que está imprimiendo death match, que es esa variable que establecemos dentro de nuestro modo de juego de ejemplo. Pero podemos acceder a ella muy fácilmente simplemente usando el nodo get Game Mode casting a nuestro modo de juego y luego podemos acceder a esa variable. Y esto mostrará trabajo para eventos y funciones también. Ahora, por último, solo quiero cubrir algunas de las funciones incorporadas que vienen con conseguir más. Entonces, si vamos a nuestro modo de juego de ejemplo, ahora, si recuerdas con funciones, podemos anular funciones de nuestros blueprints padres. Entonces si hacemos clic en esta opción de anulación aquí, puedes ver que aquí tenemos bastantes funciones, mayoría de ellas provenientes de nuestra base de modos de juego. Ahora bien, si recuerdas de nuestra lección de funciones, cuando sobrescribes una función, básicamente le dice al motor que no quieres que se ejecute el código que está dentro de esta función en la base del modo de juego, quieres usar tu propio código. Ahora como advertencia, quieres tener cuidado al anular estas funciones porque más o menos anular cualquiera de ellas puede romper tu proyecto. Entonces por ejemplo, si yo fuera a anular, spawn Default, Peón que transforman, si hago clic en eso, se puede ver que tenemos esta función que está integrada en la base del modo de juego. Y esta función es la responsable de desovar en realidad en el personaje. Entonces si compilo esto y le pego a play ahora, se puede ver que ya no tengo personaje y ya no he controlado nada. Y eso es todo porque acabo de anularlo. Función que en realidad engendra nuestro personaje. Entonces no voy a pasar por todas estas funciones. Hay bastantes. Algunos de ellos son autoexplicativos, algunos son un poco más complejos, pero solo ten en cuenta cuando estés anulando estas funciones. Si optas por hacer eso, ten cuidado. Pueden romper tu proyecto con bastante facilidad porque estas son como funciones básicas para asegurarte de que el juego realmente funcione. Además, si pasas el cursor sobre estas funciones, así podrás ver que en realidad obtienes consejos de herramientas razonablemente decentes que te dicen exactamente lo que cada una de estas funciones hace y es responsable. Así que eso va a ser todo para nuestra lección de modos de juego. Esperemos que ahora entiendas un poco más sobre qué hacen realmente los modos de juego en el motor y cómo puedes usarlos en tus proyectos. 23. Aspectos básicos (nodos de utilidad): Oigan a todos. En esta lección vamos a estar echando un vistazo de cerca a los nodos de servicios públicos. Los nodos de utilidad son útiles para algunas cosas diferentes. Nos permiten elegir qué código se va a ejecutar, con qué frecuencia se ejecuta ese código. Y también nos pueden ayudar simplemente ordenar el código de nuestro proyecto. Para que puedan ver en nuestra última lección, en realidad he reiniciado solo con una nueva plantilla en tercera persona. Por lo que es posible que quieras hacer lo mismo también. Y luego sólo voy a abrir el TercerPersonaje Persona.- Y he añadido algunos de los nodos de utilidad más comúnmente utilizados aquí que sólo vamos a pasar en esta lección. Entonces, para empezar, echaremos un vistazo a la nota de secuencia. Así que si movemos esto aquí arriba por ahora, ahora una nota de secuencia toma en una entrada de ejecución y tiene múltiples salidas de ejecución. Podemos agregar nuevas salidas haciendo clic en el botón Agregar pin aquí. Y podemos eliminarlos simplemente haciendo clic derecho y seleccionando la opción de quitar pin de ejecución. La forma en que funciona el nodo de secuencia es que toma una entrada como digamos, una jugada inicial. Nota. Podemos conectar eso aquí arriba. Y ejecutará cualquier código conectado al entonces 0 PM. Una vez que se ejecuta todo ese código, se ejecutará el código de un y luego el siguiente código y el siguiente código y así sucesivamente hasta que todos los pines se hayan ejecutado. Ahora, el uso principal para el nodo de secuencia es simplemente mantener tu código un poco más organizado. Con planos. Si tienes mucho código, puedes tender a tener estas líneas de código realmente largas. Un nodo de secuencia te permite simplemente romper eso para que puedas tener múltiples líneas y mantener las cosas un poco más organizadas. También puede usar el nodo de secuencia dentro de una función. Entonces, si creo una nueva función, arrastro hacia fuera cuando busqué secuencia corta en C, puedo crear un nodo de secuencia. La forma en que funciona dentro de una función, sólo algo de lo que quieres estar pendiente. Se dice que tenía algún código aquí arriba, digo que imprimo cadena y luego si nodo, y luego si tuviera de pelo un nodo de retorno. Ahora recuerda cuando ejecutas un nodo de retorno, éste termina la función. Entonces, si este nodo de retorno donde ejecutar cualquier código que hayas conectado a cualquiera de estos otros pines dentro de tu función no se ejecutaría. Así que eso es algo de lo que hay que tener en cuenta al usar secuencias dentro de una función. Por lo que ahora volveremos a nuestro gráfico de eventos y echaremos un vistazo al nodo de la puerta. Entonces, si eliminamos en esos pit arriba, de nuevo, permite ejecutar código que está conectado hasta la salida a una frecuencia de lo que sean las entradas al entrenudo. Entonces lo que quiero decir con eso es si conecto un tick hasta el entrenudo aquí, entonces nuestro código de salida ejecutará cada tecnología. Y el portón nos permite esencialmente abrir y cerrar esta salida PM. Entonces si añado un, si hago clic derecho y tal qué entrada, entrada de ellos, uno, podemos crear una entrada de ellos, uno. Conecta eso para abrir, copiar y pegar esto. Ahora selecciona la nota aquí, este pequeño ícono del teclado y presiona dos, y en realidad solo cambia esto a un 2-input ahora. Y conecto esto y solo agregaré una cadena de impresión aquí que estamos haciendo esto todo dentro del personaje en primera persona, tercera persona. Perdón. Vamos a compilar e iremos al mapa. Se juega. Ahora puedes ver que mi cadena de impresión no se está ejecutando. Y si vuelvo al personaje en tercera persona aquí y uso la opción de depuración. Se puede ver que el código para mi tick se está ejecutando. Se va a la puerta, pero la salida no corre. Ahora si vuelvo a mi nivel, presiono uno. Se puede ver que esa cadena de impresión ahora se está ejecutando. Y si volvemos a acudir a nuestra tercera persona, se puede ver que el código de salida ya se está ejecutando. Y eso porque apreté uno y abrí la puerta. Si presiono dos, ahora puedo cerrar el portón. Si vuelvo, se puede ver que el código ya no se está ejecutando y que la cadena de impresión tampoco se está ejecutando. Ahora hay un par de otras opciones en nuestro nodo de puerta. Podemosusar toggle. Entonces esto básicamente solo se abrirán las puertas actualmente y queremos alternar, lo cerrará. Si las puertas están cerradas actualmente y corremos toggle, toggle, se abrirá y luego tenemos una opción para empezar a cerrar. Por lo que actualmente se inicia cerrado. Pero si desmarco esto, le pegamos a Play, verás que en realidad solo empieza a correr en su lugar. Ahora, he estado corriendo la puerta con un techno. Entonces, si solo salgo fuera de juego aquí, podríamos usar un temporizador en lugar de un nodo tecnológico, que probablemente sea mejor para el rendimiento. Por lo que sólo haremos un plug-and-play, conectaremos un temporizador. Así que si recuerdas el nodo setTimeout por evento, arrastramos hacia fuera de esto y creamos un evento personalizado que llamó un temporizador. Podemos conectar esto hasta nuestra puerta en lugar de un técnico, es decir 0.5. Por lo que cada 2.5 esta vez correrá, tomará en looping. Ahora, cuando golpeamos play, puedes ver que nuestra cadena Hello print solo se está ejecutando cada 2.5 porque eso es, ese temporizador es lo que está controlando nuestra salida de salida. Por lo que a continuación pasaremos a nuestro siguiente nodo. Por lo que sólo saldremos del editor de avión de ahí. Y usaremos la nota do una vez. Ahora, la D quiere saber que prácticamente hace lo que dice. Toma en una entrada, ejecuta una completa y luego si se ejecuta de nuevo, no ejecutará el código completo. Para que podamos probar esto. Si acabo de borrar mi nota de puerta, conectará esto hasta nuestro temporizador que acabamos de usar y conectará esto a completado. Por lo que deberíamos ver nuestra cadena de impresión uno. Hola una vez y luego no pasa nada más. Entonces le pegaré a play y veré que eso pase. Y aunque vaya a mi Third PersonCharacter aquí, se puede ver que mi tiempo está corriendo, pero la D una vez lo está bloqueando. Ahora podemos restablecer este nodo do una vez. Si cojo el pin de aquí y lo enchufa para reiniciar, y puedo sacar y presionar Play. Se pueden ver holos impresos, pero ya no es imprimir. Si presiono uno, se puede ver que se imprime de nuevo, pero ahora otra vez lo ha detenido. Entonces tendría que seguir presionando uno para seguir abriendo y reiniciando que sí quieren nevado. Al igual que nuestro nodo de puerta, sí tiene una opción cerrada de acciones. Entonces si me llevo esto y golpeamos Play, verás que no obtenemos ninguna cadena de impresión hasta que presione una, que restablece ese nodo. Ahora si salimos del editor del plan, pasaremos al siguiente nodo, que es el do n. y n básicamente hace lo mismo que yo sí quiero nevado. Pero nos permite controlar cuántas veces se ejecutará este nodo antes de que bloquee el código. Entonces si elimino esto, enchufo el enter two timer aquí y la salida a nuestra cadena de impresión y digo, queremos que este código se ejecute cinco veces y luego queremos que se detenga. Así que podemos enchufar el contador en nuestra cadena de impresión aquí, y esto solo mostrará cuántas veces se ejecuta esto. Si podemos jalar, le pegamos a Play. Se puede ver que está imprimiendo los números, pero una vez que llega a cinco se detiene porque ARRA sí, un nodo está bloqueando la salida. Y podemos restablecer este nodo también. Entonces si tomo el pin de reinicio, enchufa eso a uno, pulsa play, podemos reiniciar, o lo siento, contar hasta diez o cinco, lo siento, entonces presionaremos uno y verás que puedo reiniciarlo de nuevo. Así que ahora volveremos a nuestro Third PersonCharacter y echaremos un vistazo al siguiente nodo, que es el nodo flip-flop. Ahora esto básicamente justo cuando se ejecuta, lo vamos a ejecutar un. entonces si este nodo se ejecuta de nuevo, se ejecutará B. Y simplemente seguirá yendo entre estos dos pines cada vez que lo ejecutes. Así que si conecto esto hasta nuestro evento de una entrada aquí, y imprimo cadena de una, podemos hacer, voy a establecer esto a una copia y pegar esto y establecer esto a. Vamos a compilar y jugar. Se puede ver que nuestro temporizador ahí todavía está funcionando. Pero si presiono uno y ves a, B, a B. Así que puedes usar esto para hacer un ciclo entre dos partes de código. Como nota al margen, con el flip-flop, probablemente no lo estés usando cuando tengas un poco más de confianza con la codificación. Pero puede ser útil si estás creando un prototipo rápido o algo así. Pero normalmente querrías usar digamos, una rama, un nodo y un booleano. Y eso te daría mucho más control sobre cómo funcionaría este código. Y luego avanzando por último, tenemos nuestros nodos latentes. Y si recuerdas eso es lo latente porque tienen estos pequeños símbolos del reloj y las esquinas. Ahora que hemos usado el nodo delay antes, nos permite esencialmente mantener el código arriba por una cierta cantidad de tiempo. Entonces si fuéramos a eliminar este código con eliminar esto, y voy a eliminar esto también. Entonces cuando presionamos uno, podríamos tener un retraso y luego podríamos hacer algunas cosas. Por lo que podría decir llamar al salto de ellos. Esto en realidad hará que nuestro personaje salte. Estableceré el retardo para decir dos segundos. Entonces ahora cuando golpeo play y presiono 12 segundos después, se ve que el personaje salta. Ahora hay un tipo diferente de este nodo. Entonces si salimos fuera de juego aquí y volvemos al ThirdPersonCharacter. Podemos usar el re-gatillo son ambos retardo. Ahora la diferencia aquí es que si yo fuera a decir simplemente seguir presionando uno mientras mi nodo de retardo está contando hacia atrás que la duración, este nodo simplemente ignoraría la entrada y contaría dos y luego saltar correría. Ahora, un re-disparador o retardo seguirá reiniciándose cada vez que reciba una entrada. Entonces si uso la palabra trigger delay en lugar de solo el nodo delay, ella y yo pulsamos Play y empiezo a presionar uno. Ya has visto que mis zanahorias no saltan ni después dos segundos porque sigo reiniciando ese temporizador. Si dejo de presionarlo, esperará dos segundos ahora y nuestro personaje saltará. Ahora, hay una última nota que quería mostrarles, y esa es la demora hasta el próximo nodo tick. Así que si arrastro esto hasta aquí, puede ver que esto también es un nodo latente, y esto esencialmente sólo bloques de código para un fotograma o hace que el código de peso de un fotograma antes de que el pinna completado luego se ejecuta. Así que si tuviéramos que usar esto con el uno y saltaré la función aquí, no notarás ninguna diferencia porque presiono uno, parecerá que es instantáneo, pero en realidad está esperando un fotograma antes de que le diga a la función de salto que funcione. Ahora, esto sí tiene usos a veces en los planos, es posible que tenga que esperar un marco antes que se establezca una variable o algo así. Para que ese nodo pueda ser útil para ese tipo de cosas. Eso es todo por nuestra lección de nodos de utilidades, volveremos a usar la mayoría de estos en futuras lecciones, por lo que tendrás la oportunidad de familiarizarte con ellos. 24. Aspectos básicos (instancia de juego): Oigan a todos. En esta lección vamos a estar echando un vistazo al blueprint de instancia de juego. Ahora el blueprint de instancia de juego se crea cuando nuestro juego arranca por primera vez y permanece ahí hasta que cerramos el juego. Y a diferencia de otros planos, si cambiamos de nivel, nuestra instancia de juego no se destruye. Es permanente mientras estemos corriendo el juego. Y eso lo convierte en un modelo realmente útil para almacenar información que necesitas transferir a otros niveles. Por ejemplo, es posible que tengas variables que quieras transferir de tu nivel de menú principal a tu mundo de juego. Bueno, puedes usar una instancia de juego para hacer eso. Entonces, para empezar, vamos a crear un nuevo plano. Y ese plano va a mandar a nuestro personaje a un nivel diferente. Entonces estamos haciendo clic derecho, ve a Blueprint Class, crea un actor. Voy a llamar a mi DP subrayado teletransporte. Teletransporte. Ahí vamos. Y eso lo abriremos. Yo sólo voy a arrastrar el mío hasta la barra superior aquí. Ahora este va a ser el plano que realmente envíe a nuestro jugador a un nivel diferente. Entonces agregaremos una colisión de caja solo para que sepamos cuando entren a este actor, yo sólo voy a mover el mío un poco más arriba así. Después nos dirigiremos al Event Graph. Y sólo vamos a estar usando el actor comenzar nodo solapamiento. Por lo que va a eliminar estos dos y vamos arrastrar hacia fuera de otro actor y sólo cuesta al personaje para asegurarse de que sólo ejecutamos este código si el actor superpuesto es un personaje, entonces vamos a usar las notas de nivel abierto. Entonces arrastraremos hacia fuera y buscaremos nivel abierto, y vamos a usar Open level por nombre. Y esto nos permite simplemente decirle al motor que abra un nuevo nivel. Y abrirá el nivel para el que nos pusimos el nombre. Esto sólo voy a arrastrar hacia fuera y crear variables. Así que sí promoveremos la variable y la dejaremos como nombre de nivel y un tipo de variable de nombre como ese. También voy a tomar en instancia editable, y luego compilaremos. A continuación, necesitamos crear un nuevo nivel al que nos vamos a teletransportar. Entonces nos dirigiremos al Navegador de Contenido, luego a mapas en tercera persona. Y aquí tenemos nuestros mapas en tercera persona, así que sólo vamos a duplicar esto. Ahora. Puedo hacer clic derecho y presionar Duplicar por alguna razón. Pero lo que podemos hacer es simplemente arrastrar esto sobre la carpeta maps. Se puede ver que podemos hacer Copiar aquí. Ahora en realidad nos crean una copia de nuestro mapa actual. Ahora abriremos nuestro subrayado en tercera persona para mapear. Yo sólo voy a seleccionar Guardar actores. Ahora estamos en ese segundo mapa y sólo voy a borrar algunas cosas para que podamos ver la diferencia entre las dos. Entonces solo seleccionamos todas estas cosas por aquí, borra estas. Entonces sabemos que cuando entramos a este mapa, estamos en nuestro segundo mapa. Ahora regresaremos a nuestro mapa en tercera persona. Entonces haremos doble clic para abrir eso. Voy a seleccionar, Guardar, seleccionarlo. Y ahora estamos de vuelta en nuestro primer mapa en primera persona. Y vamos a añadir nuestro teletransporte a este mapa. Entonces iremos a planos y arrastraremos uno. Voy a hacer el mío un poco más grande. También podemos ir a nuestro plano de teletransporte, seleccionar la caja y simplemente apagar oculto en juego para que realmente podamos ver la colisión así. Y ahora necesitamos usar esa variable que creamos en nuestro telepuerto para decirle a qué nivel queremos teletransportarnos. Entonces iremos a Detalles y ya ves que aquí tenemos nuestro nombre de nivel. Entonces lo que vamos a hacer es ir a mapas, simplemente hacer clic derecho o en tercera persona subrayado dos, haremos Renombrar, luego hacer Control C, y hacer clic de distancia. Y luego pegaremos ese nombre en nuestro nombre de nivel aquí. Y entonces podemos probar esto. Entonces le pegaré a play o correré a la caja. Y se puede ver que ahora hemos transportado a nuestro nuevo segundo nivel. Ahora cuando abrimos un nuevo nivel, todo en el nivel anterior se destruye. Nuestros modos de juego de controlador de jugador de personajes están todos destruidos. Y luego cuando se abre el nuevo nivel, nuestro personaje está siendo engendrado. se crean un nuevo controlador y modo de juego Tambiénse crean un nuevo controlador y modo de juegopara nuestro nuevo nivel. Entonces eso significa que cualquier variable que hayas establecido en tu personaje antes de transportarnos a este nuevo nivel, todas esas se perderán y comenzaremos de nuevo con un personaje fresco. Y para solo darte un ejemplo de que saldrá fuera de plano editor, dirígete a nuestros planos que personaje en tercera persona. Sólo voy a crear un nuevo booleano. Lo llamaremos ejemplo, y usaremos un nodo tick. Entonces solo voy a hacer clic derecho y buscar tecnología. En tecnología, solo vamos a imprimir si nuestra variable de ejemplo es cierta o no. Por lo que usamos una cadena de impresión. Conectaremos esto hasta aquí, así. Y ahora voy a agregar una entrada, así que llamaremos a este evento de entrada uno. Entonces cuando presionamos uno, quiero establecer esta variable en true. Entonces haremos esto y luego compilaremos. Entonces ahora cuando golpeo play, se puede ver que actualmente estamos en nuestro primer mapa en tercera persona. Si presiono uno, se puede ver que nuestra variable se hace verdadera. Pero si me encuentro con nuestra caja y vamos a un nuevo nivel, se puede ver que esa variable es ahora cambiar a ser falsa porque tenemos un nuevo blueprint de caracteres. Ahora podemos usar nuestra instancia de juego para realmente guardar esa variable para nosotros y llevarla al siguiente nivel. Entonces lo que haremos es salir. Vamos a crear una nueva instancia de blueprint. Haremos clic derecho e iremos a planos. Queremos clase Blueprint. Y en las opciones aquí, realidad no hay clase de instancia de juego. Entonces vamos a bajar a todas las clases y buscar por ejemplo. Y luego vamos a seleccionar la instancia de juego aquí abajo y presionar Select. Y ahora eso nos ha creado un nuevo blueprint de instancia de juego. Por lo que llamaremos a este ejemplo de subrayado BP, instancia de juego así. Entonces podemos abrir eso. Y se puede ver que esto es sólo un plano básico. Ni siquiera tiene variables incorporadas. Se puede ver si hago clic en valores predeterminados de clase, aquí no hay variables. Este es solo un plano bastante simple que podemos usar para almacenar variables. Podemos crear funciones, macros como otros blueprints también. Aquí hay algunas funciones dobles de anulación, por lo que puedes anular el init, que es básicamente la función que se ejecutará cuando creamos por primera vez nuestra instancia de juego, tenemos un error de red, que no voy a estar cubriendo en esta lección. Nos han cerrado y esto correrá cuando en realidad cerremos nuestro juego. Entonces tenemos error de viaje. Y esto correrá si tenemos algún tipo de problema transportando a un nuevo nivel. Por ahora queremos que nuestra instancia de juego realmente almacene una variable para nosotros. Entonces vamos a crear esa variable. Simplemente voy a llamar de nuevo a este ejemplo. Y vamos a compilar. Ahora antes de abrir nuestro nuevo nivel, en realidad necesitamos establecer esta variable. Por lo que irá a nuestro Third PersonCharacter aquí y crearemos una nueva función. Yo sólo voy a llamar a esta instancia de ganancia de actualización , así. Ahora lo genial de las instancias de juegos es que prácticamente puedes acceder a ellas desde cualquier blueprint igual que el modo de juego. Por lo que sólo podemos hacer clic derecho en la búsqueda de Instancia de Juego. Y puedes ver que podemos usar el get Game Instance y esto solo devuelve una referencia a nuestra instancia de juego. Ahora debido a que creamos nuestro propio blueprint de instancia de juego, necesitamos lanzar eso para poder acceder a sus variables. O podrías configurar una Interfaz Blueprint si quisieras. Pero sólo nos vamos a quedar con el casting. Entonces voy a usar un costo a ejemplo, y luego queremos ejemplo, instancia de juego así. Por lo que ahora sólo vamos a mover estos nodos aquí abajo y conectarlos hasta la entrada de nuestra función. Entonces queremos usar set esa variable de ejemplo que hemos creado suficiente. Por lo que vamos a hacer dar ejemplo, conectar esto aquí arriba. Y luego tomaremos nuestra variable de ejemplo de nuestro personaje, y conectaremos eso al set. El nodo set compilará. Entonces ahora realmente necesitamos ejecutar esta función antes de abrir nuestro nuevo nivel. Entonces nos dirigiremos a teletransportarnos y heredaremos , ejecutaremos esa función. Entonces vamos a necesitar cambiar nuestra nota de costos aquí a una tercera persona cuesta. Por lo que vamos a arrastrar hacia fuera y hacer costo. En tercer lugar, queremos que el Third PersonCharacter porque ese es el blueprint que tiene nuestra nueva función se arrastrará y buscará la instancia de actualización del juego. Y eso establecerá nuestra variable dentro nuestra instancia de juego a lo que sea de nuestro personaje. Y luego conectaremos esto hasta nuestro nivel abierto así. Así que ahora cuando nuestro personaje desove, necesitamos que realmente lea la variable de ejemplo que hemos creado dentro de la instancia de juego de ejemplo. Entonces para hacer eso, que puede ir a la Gráfica de Eventos, creará unos planetas de inicio. Por lo que tal comenzará a jugar de nuevo, lo que puede obtener la instancia o lo siento, obtener la instancia de juego. Y eso nos dará acceso al plano, costará al ejemplo Game Instancia. Y luego obtendremos su variable de ejemplo. Por lo que vamos a arrastrar hacia fuera y sí obtener ejemplo. Y lo usaremos para establecer nuestra variable de ejemplo de caracteres. Entonces vamos a poner esto así. Y vamos a correr esto en Begin place. Así que cada vez que nuestro personaje lo genere, lee cualquiera que sea la variable de ejemplo en nuestra instancia de juego, y luego ponlo en su variable de ejemplo. Ahora hay un par de cosas más que tenemos que hacer antes de poder probar esto. Lo primero es que en realidad no le hemos dicho al motor que use nuestro nuevo ejemplo de Game Instancia. Ahora en realidad no hacemos esto en el modo de juego como la mayoría de las cosas, realidad lo hacemos en la configuración de nuestro proyecto. Por lo que tendremos que editar luego Configuración del proyecto. Y vamos a buscar Instancia de Juego. Y quieres la clase de instancia de juego aquí, y cambiaremos esto a la instancia de juego de ejemplo de BP. Ahora el motor sabe usar esa instancia de juego. Y luego segundo, vamos a volver a nuestro segundo mapa que creamos. Entonces yo sólo voy a abrir eso y vamos a golpear Guardar aquí. Y aquí en realidad voy a agregar nuestro plano de teletransporte aquí también. Entonces sólo arrastraré eso, escalaré para ser un poco más grande. Estoy agregando esto solo para que podamos avanzar y retroceder entre nuestros dos niveles. Tenemos que establecer un nombre de nivel. Entonces ese será el nombre de nuestro primer mapa, que es mapa en tercera persona. Sólo voy a hacer clic derecho en seleccionar, Renombrar, copiar esto, y luego pegar eso en nuestra variable de nivel aquí así. Entonces vamos a regresar a nuestro primer mapa en tercera persona. Por lo que sólo abriremos eso y luego presionaremos Seleccionar, Guardar, seleccionarlo. Y entonces estamos listos para probar esto realmente . Entonces le pegaré a Play. Se puede ver que el valor es actualmente falso porque acabamos de empezar y no he establecido el valor. Pero si presiono uno, se vuelve verdad. Ahora bien, si entramos al telepuerto, seguirá siendo cierto incluso una vez que estemos en nuestro segundo nivel. Y eso es porque nuestro personaje está leyendo esa variable de nuestro ejemplo Game Instance y luego configurando. Y no importa cuántas veces cambiemos entre niveles, siempre leerá ese valor porque nuestra instancia de juego no está siendo destruida a diferencia de nuestro personaje y controlador. Ahora, por supuesto, este es un ejemplo bastante simple, que es almacenar una variable en nuestra instancia de juego. Y luego leyendo desde el personaje, puedes almacenar tantas variables como quieras en tu blueprint de instancia de juego. Y puedes acceder a esas variables prácticamente desde cualquier plano. Entonces usamos nuestro Third PersonCharacter, pero si quisiéramos, podíamos acceder a nuestra instancia de juego en el teletransporte. Por lo que podríamos hacer conseguir instancia de juego. Podemos acceder a nuestra instancia de juego aquí también. Entonces eso es todo por esta lección. Esperemos que ahora entiendas los usos de la instancia de juego y cómo puedes usarla en tus proyectos futuros. 25. Lecciones adicionales (rastros): Oigan a todos. En esta lección vamos a estar echando un vistazo a las huellas. Los rastros nos permiten tomar una ubicación de inicio y fin y luego verificar lo que hay entre esas dos ubicaciones. Entonces, para empezar, crearemos algunos planos de ejemplo. Solo voy a hacer clic derecho y crear una nueva clase de blueprint. Va a ser actor, sólo va a llamar a este rastro BP en cubos. Eso lo abriremos. Y sólo voy a arrastrar la lengüeta hasta el par superior. Y añadiremos un nuevo componente. Sólo voy a agregar un componente de cubo que compilará eso. E iremos al Event Graph. Entonces vamos a configurar este cubo para que haga una traza a otro cubo cada cuadro. Por lo que comenzará borrando estos comienzan a jugar y el actor comenzará a solapar nodos. En realidad usa el nodo tecnológico y crearemos una nueva variable y simplemente llamaremos a este cubo. Y voy a establecer su tipo a BP subrayan trace, trace cube. Y vamos a compilar entonces en el panel Detalles que va a tomar en instancia editable así. Y volveremos a compilar. Entonces nos arrastraremos y conseguiremos nuestro otro cubo. Queremos comprobar que esté configurado, así que usaremos un nodo israelí solo para asegurarnos de que no obtenemos ningún error. Y luego de r es válido, vamos a arrastrar hacia fuera y vamos a buscar rastro. Ahora, si nos desplazamos hasta aquí, se puede ver que tenemos bastantes nodos de rastreo diferentes. Todos están bajo colisión aquí. Vamos a empezar con sólo un simple trazo de línea por canal. Entonces crearé eso. Ahora. Un trazo de línea es esencialmente una línea de píxel único que irá desde el inicio hasta la ubicación final, verificando si golpea algo en el camino. Ahora, hay algunas otras opciones en este nodo, pero vamos a configurar nuestro ejemplo primero y luego voy a explicar esas. Entonces lo que haremos es arrastrarnos de nuestro otro cubo. Queremos llegar hasta la ubicación. Y vamos a enchufar esto a la ubicación final. Y luego para la ubicación de inicio, solo vamos a usar nuestra ubicación actual de cubos. Así que obtén la ubicación del actor. Por lo que nuestro rastreo comenzará en esta ubicación mantiene y viajará a la otra ubicación del cubo. Ahora cuando digo viajar, traza sucede en un fotograma, no es como si se mueve lentamente a lo largo. Todo sucede en un fotograma y esencialmente solo verifica, ¿hay algún objeto entre las ubicaciones de inicio y final? También voy a encender el Draw Debug aquí. Lo pondré en un fotograma, y esto esencialmente nos permite ver el rastro en nuestro juego, generalmente los rastros son invisibles, pero esta opción nos permite ver un rastro mientras estamos jugando en el juego. Un fotograma significará que la traza solo será visible para un fotograma. Duración significa que la traza será visible por mucho tiempo que se establezca el tiempo del cajón, lo que es de cinco segundos por defecto. Y luego persistente significa que el rastro será visible para siempre. Entonces, debido a que estamos dibujando nuestro trazado cada fotograma, podemos simplemente configurar esto para un fotograma. Por lo que ahora sólo vamos a compilar este plano e ir a nuestro nivel. Sólo voy a arrastrarlo en un cubo. Y arrastraremos en un segundo cubo. Y voy a, con mi segundo cubo seleccionado, sólo voy a usar la otra opción Cubo aquí abajo en los detalles. Y seleccionaremos R de un cubo. Y sólo voy a moverlos a ambos hacia arriba para que podamos verlos un poco mejor cuando golpeemos play. Entonces cuando golpeo play, se puede ver que tenemos esta línea de un solo píxel que va de este cubo al cubo que seleccionamos. Si presiono F1 para entrar en modo wireframe, se puede ver que la traza comienza en el centro de nuestro par de claves y se lee. Y luego una vez que golpea el otro cubo, obtenemos este cuadrado rojo y luego la línea se pone verde. Y eso significa esencialmente que hasta ese cuadrado rojo, el rastro no ha golpeado a nada. Entonces el cuadrado rojo indica que se ha golpeado algo, y luego la luz se vuelve verde porque es, los trazadores golpearon algo más allá de ese punto. Ahora, tal vez te estés preguntando por qué se rastrean y golpean el cubo del que provenía. Y si salimos del modo editor plano y volvemos a nuestro cubo de trazas, se puede ver que en realidad hay una opción aquí llamada ignore self en el trazado de línea. Y eso significa que la traza esencialmente simplemente ignorará al actor que hizo la traza. Entonces porque estamos en nuestro cubo, si desmarco esto y compilo y luego presiono Play, se puede ver que la línea ya está en verde. Y si golpeamos F1, se puede ver que nuestro rastro en realidad está golpeando nuestro cubo tan pronto como empieza y luego el resto de la línea se pone verde. ver que en realidad no golpea nuestro segundo cubo. Ahora, eso es porque este es un solo trazo de línea. Golpeará un objeto y luego no le importa el resto después de eso. Ahora volviendo a nuestro seguimiento keep, hay algunas otras opciones para que podamos configurar actores para que ignoren. Esto nos permite esencialmente simplemente establecer actores que queremos que nuestra línea trazada ignore por completo. Así que si fuera a arrastrar y hacer un make array, esto nos permite simplemente agregar actores individuales a una matriz y luego agregar eso a nuestro trazo de línea. Así que si yo fuera a enchufar mi otro cubano aquí y enchufar eso en la matriz, voy a marcar de nuevo en ignorar auto porque queremos que nuestro rastro ignore el cubo que hace la traza voluntad compilar cuando golpeo play, se puede ver si presiono F1 o trace ya no está golpeando nada porque lo hemos dicho que no lo queremos ni lo sentimos, queremos que ignore nuestro segundo cubo. Ahora, volviendo a nuestro plano de cubo de trazas, hay otra opción aquí llamada canal de rastreo. Ahora los canales traza son algo así como capas en las que podemos usar nuestras trazas. Ahora bien, la razón por la que tenemos esto es que puede tener un objeto que desea bloquear un tipo de traza pero no otro. Por lo que en este momento puedes ver que lo tenemos configurado en visibilidad. Este es un canal de rastreo que está integrado en el motor. Si voy a mi cubo aquí en el nivel y lo selecciono, voy a seleccionar el componente de cubo. Voy a hacer esto un poco más grande para que podamos ver lo que voy a desplazar hacia abajo a la categoría de colisión. En Presets de colisión, puedes ver que actualmente está configurado para bloquear todas las dinámicas. Damos clic en el desplegable aquí. Se puede ver que aquí tenemos estas opciones que están en gris. Eso se debe a que tenemos seleccionado un preset. Entonces si hacemos clic en el desplegable aquí y hacemos clic en Personalizado, eso nos permitirá personalizar la configuración. Por lo que se puede ver que para las respuestas de rastreo, tenemos visibilidad y tenemos cámara. Ahora, si configuro nuestro par de claves para ignorar el canal de rastreo de visibilidad, y vuelvo a mi cubo. Yo sólo voy a desconectar el otro cubo de aquí de nuestro make array. Por lo que ahora voy a rastrear, va a golpear el otro cubo. Voy a pegarle a Compile y a Play. Se puede ver si presiono F1, la traza aún no está golpeando el cubo, por lo tanto tiene que volver con nuestro cubo seleccionado aquí. Selecciona nuestro cubo y configúrelo para que bloquee la visibilidad nuevamente, y luego presiona Play. Ya ves que ahora está golpeando ese cubo. Y eso es porque le estamos diciendo a esta malla de cubo ignore o bloquee este tipo de traza. Ahora se trazas se utilizan para todo tipo de cosas en el desarrollo de juegos. Utilizaron para la interacción para determinar qué está mirando el personaje. Puedes usarlos para cosas como sistemas de huellas para detectar qué tipo de suelo están los personajes de pie. Puedes usarlas para armas. Entonces pulsa Escanear armas, usas rastros. Por lo que cualquier juego donde no haya tiempo de viaje de bala que típicamente usa rastros para los cálculos de bala. Por lo que los rastros tienen una gran variedad de usos en el desarrollo de juegos. Pero lo importante de los rastros, en realidad podemos obtener información sobre el objeto que golpeó. Entonces si salgo de nuestro editor de planos aquí, volvemos a nuestro cubo de trazas. Se puede ver que tenemos algunas salidas. Ahora si me arrastro de mi atuendo aquí, podemos romperlo. Y eso es porque en realidad es sólo una estructura. Se puede ver la estructura de resultados de caderas. Para que podamos romper eso. Y eso nos da este nodo aquí con toda la información sobre qué objeto, la cabeza traza. Ahora también tenemos valor devuelto aquí, y esto básicamente sólo dice si la traza realmente golpea algo o no. Así que normalmente probablemente querrías hacer y si nodo aquí y obtener información sobre el objeto sólo si el rastro realmente golpeó algo. Ahora voy a pasar por algunas de estas variables. No los cubriré todos porque hay bastantes, pero pasaré por los más comúnmente usados en la parte superior. Aquí tenemos bloqueo aquí. Esto básicamente hace lo mismo que un valor de retorno. Dice si la traza de línea golpeó o no algo, y eso es un booleano. Después moviéndose hacia abajo, tenemos distancia. Ahora bien, así de lejos de la estrella la traza de línea golpea algo. Entonces si la distancia entre, digamos, inicio y fin era de 500 centímetros y la traza golpeaba algo a 100 centímetros del inicio, entonces este valor de distancia sería un 100. A continuación tenemos la ubicación y el punto de impacto. Ahora, para un trazado de línea, estos en realidad solo serán exactamente el mismo valor, pero serán diferentes para algunos de nuestros otros nodos de rastreo que veremos en un momento. A continuación, tenemos uno de los pines más importantes, que es nuestro Hit Actor. Ahora esto nos da una referencia a cualquier actor o trazo de línea golpea. Y es muy útil para cosas como si estás creando un arma, ese trazo de línea de Pfizer o un sistema de interacción, quieres saber a qué actor golpeó la traza de línea y usando el pin de Hit Actor aquí es cómo harías eso. También tenemos acceso al componente de cadera. Entonces ese será el componente dentro del actor al que golpeamos. Entonces por ejemplo, nuestro cubo, estaríamos golpeando el componente cubo. Por lo que este componente hit sería una referencia al cubo dentro de nuestro actor cubo. Estos pines funcionan como hemos usado clavijas de actor y bolígrafos de componentes antes. Podríamos arrastrar hacia fuera de esto, podríamos utilizar un costo para determinar si es decir, Cast to thirdPersonCharacter. Y si el rastreo llega a un personaje en tercera persona, podríamos acceder a esa información utilizando nuestros nodos de costos. Podemos usar nuestros nodos de interfaz también, y podemos obtener información del actor. Para que pudiéramos hacer algo como GetLocation. Y podemos usar este acto de pin, como lo hemos hecho con los tipos dependientes de actos anteriores antes. También tenemos acceso al nombre óseo que golpea el rastro. Entonces si trafico golpea una malla esquelética, entonces esa es una malla de máscara animada que tiene un esqueleto. Esto devolverá el nombre óseo real de la parte de colisión que golpea el rastro. Por lo que puedes usar estos para acceder a nombres óseos. Y luego aquí abajo tenemos nuestro rastro, inicio y rastreo. Y estos simplemente serían los mismos que nuestros insumos aquí arriba para inicio y fin. Ahora, hasta ahora sólo hemos estado mirando el trazado de la línea por canal. Ahora hay otro nodo de traza de línea. Entonces, si buscamos trazas mentirosas, se puede ver que también tenemos un trazado de línea por perfil y alineamos el trazado para los objetos también. Entonces, si creo un trazo de línea para objetos, este es esencialmente el mismo nodo. Hace lo mismo que tenemos estamos aquí afuera. Tenemos el inicio y el final. Tenemos la misma configuración, pero en lugar de un canal de seguimiento, tenemos esta entrada de matriz que es un tipo de objeto. Si arrastro desde aquí y los uso hacer matriz que nos permite establecer realmente qué valores van a estar en esta matriz de entrada. Por lo que se puede ver que por defecto tiene un mundo estático aquí. Hago clic en el menú desplegable. Se puede ver que nos está dando algunos tipos de objetos. Ahora, si volvemos a nuestro cubo con nuestro cubo seleccionado aquí, y vamos al componente cubo. Esto se refiere al tipo de objeto aquí listado. De manera que se puede ver que esto se establece en mundo a dinámico, lo que significa que este cubo o sólo se sostendrá por rastros que tienen una entrada de dinámica mundial. Este trazo de línea aquí con estática mundial en realidad ignoraría por completo ese cubo. Entonces a eso se refieren los tipos de objeto de entrada. Es este tipo de objeto dentro de nuestros Presets de Colisión. Podríamos conectar rápidamente esto para ver si acabo de enchufar esto a mi como válido, voy a eliminar nuestro nodo de traza de línea anterior. Conectaremos esto a nuestra estrella y escucharemos nuestro final. Y vamos a conectar esto para arriba. Podemos dejar eso por ahora. Acabamos de establecer el Draw Debug Type dos para que se compile un frame y luego le pegaremos a Play. Se puede ver que si presiono F1, ese rastro está ignorando por completo el cubo. Pero si volvemos a la traza, al cubo de trazas y cambiamos esto a dinámica mundial. Golpea Compile, dale a Play. Se puede ver que ahora ese rastro está golpeando a un cubo porque está golpeando esa Q porque es del mismo tipo de objeto. Y lo genial con esto es que en realidad podemos establecer múltiples tipos. Así que solo podemos agregar un nuevo bolígrafo y podríamos agregar wild static también. Podríamos agregar otra entrada. Podríamos establecer esto en ****, por ejemplo. Podríamos añadir tantas como queramos este rastro a la cadera. Ahora la última nota de traza de línea que veremos es la traza de línea por perfiles. Entonces si busco trazo de línea por perfil, ahora las entradas son las mismas que nuestros nodos anteriores, pero tenemos este nombre de perfil. Ahora eso se refiere a las respuestas de objeto que tiene el objeto que estamos tratando de golpear. Así que volvemos a nuestro mapa aquí, seleccionamos nuestro cubo, y en la configuración de colisión puedes ver que tenemos respuestas de objetos. Ahora, usaré **** como ejemplo. Por lo que se puede ver **** está configurado para bloquear. Entonces si vuelvo a mi trazador, voy a establecer nombre de perfil para conectar esto como lo hemos hecho antes. Conectar empezar a obtener ubicación activa y terminar hasta nuestros otros cubos, la ubicación del actor. Encenderemos el Draw Debug Type dos para un frame. Golpearemos a Compile. Y cuando golpeamos play, se puede ver que nuestra traza de línea está golpeando la de un cubo de allá. Pero si aceptamos y selecciono el cubo y seleccionamos nuestro componente de cubo y configuramos nuestro **** objeto responsive para ignorar. Entonces le pegué a play. Se puede ver que nuestra traza ya no está golpeando el cubo porque nuestra traza se hace en ese perfila la respuesta del objeto. Y nuestro cubo, ya no está bloqueando ese rastro. A continuación vamos a echar un vistazo a los múltiples rastros. Ahora bien, si recuerdas, cuando nuestro rastro actualmente golpea algo, ya no le importa nada más a lo largo de su camino, se pone verde y no golpea ningún otro objeto. Pero con multi traza ya que nos permite golpear múltiples objetos en un solo rastro. Entonces si nos dirigimos de nuevo a nuestro cubo de traza ahora voy a borrar esta nota de traza que hemos estado usando y voy a hacer renta. Si busco un trazo de línea, se puede ver que tenemos versiones de trazas multilínea de los nodos que hemos mirado. Para que podamos hacer una traza multilínea por canal. Y se puede ver que todas las entradas son iguales, pero en lugar de una sola por aquí, tenemos una matriz de salidas. Y esto funciona como una matriz habitual. Podemos decir obtener el resultado getter en un determinado índice. Por lo que podríamos utilizar la entrada de nodo get un índice al que queremos acceder desde la matriz y la salida son resultados de golpe. Entonces si arrastramos fuera de nuestro nodo get, entonces hacemos un descanso. Se puede ver que tenemos la misma nota de descanso que teníamos antes. Y ahora estamos accediendo al primer resultado de éxito de nuestra variedad de atuendos. Ahora también podemos recorrer estos resultados también. Por lo que podemos utilizar un nodo de bucle a para cada nota de bucle, y si se recuerda, que va a ciclo a través de todos los resultados o todas las entradas en nuestra matriz. Y nos dará acceso a cada uno de ellos utilizando nuestros elementos array. Por lo que de nuevo, podemos utilizar un nodo de resultado de kit de frenos, acceder a toda esa información sobre cada uno de los objetos que nuestra línea traza golpeó. Ahora aparte de tener múltiples salidas para nuestros resultados de cadera, la traza multilínea funciona exactamente de la misma manera una traza de línea normal por nodo de canal, proporcionamos una ubicación de inicio y ubicación final. Podemos decir un canal en el que queremos hacer el rastreo. Por lo que actualmente está ajustado a cierta visibilidad. Podemos establecer si podemos ver o no el rastro. Yo sólo voy a poner el mío para, para un cuadro. Entonces ahora si compilamos y le pegamos a Play, se puede ver que nuestro rastro está funcionando. Pero lo bueno de las trazas multilínea es que podemos tener múltiples hits. Ahora para hacer eso, voy a arrastrar en un cubo nuevo por aquí. Voy a configurar mi primer cubo para rastrear a ese en su lugar. Ahora si le pego play, se puede ver que todavía estamos ingresando wireframe con F1. Ya puedes ver que todavía sólo estoy golpeando uno de nuestros cubos. Si vuelvo a nuestro código y en realidad puedo arrastrar fuera de los atuendos, voy a hacer longitud borrará este rastro, el nodo de bucle por ahora. Esto realmente nos dirá cuántos resultados hay en nuestra matriz de resultados hit. Entonces, si compilamos y presionamos a Play, ve que solo está golpeando un objeto a pesar de que está rastreando a este cubo. Ahora la razón de eso es que este cubo sigue bloqueando el rastro de visibilidad, lo que significa que el rastro no puede viajar a través y golpear a otros objetos. Para permitir eso, tenemos que configurar nuestro cubo para que realmente se superponga. El rastro. Entonces vamos a visibilidad aquí con nuestro cubo seleccionado, y voy a configurarlo para que se superponga. Ahora cuando golpeamos play, se puede ver que estamos golpeando dos objetos. Si entramos en nuestro wireframe, se puede ver que estamos golpeando este primer cubo y luego estamos viendo nuestro segundo cubo. Entonces eso es algo a tener en cuenta si trabajas con trazas multilínea. Y el futuro es si quieres que el rastro pueda viajar a través de un objeto y aún así golpear a otros objetos. El objeto debe establecerse para que se superponga en lugar de bloquear. Si está configurado para bloquear, entonces cualquier objeto en el rastreo golpea después de ese objeto no se emitirá en nuestros resultados desde nuestro nodo de traza multilínea. Ahora, hay otros tipos de nodos traza. Hasta ahora sólo hemos usado el trazado de línea. Si hacemos clic derecho y buscamos rastreo, nos desplazamos hacia arriba aquí. Se puede ver que tenemos un box trace por canal, multicast, trace by channel. Tenemos el rastro de esfera por canal. Y esencialmente estos harán lo mismo que nuestro canal. Trazado de línea por canal, trazado de línea por perfil y línea trazada por objetos, nodos. Pero en lugar de una sola línea de píxeles en realidad nos da una forma. Entonces si tuviéramos que seleccionar, digamos, por ejemplo, la traza cuadrada por canal, se puede ver que tenemos el mismo tipo de entradas. La única diferencia es que tenemos un radio. Este es el tamaño de la esfera que son bits trazables. Entonces si borro nuestro trazador multilínea, podemos actuar hasta nuestro canal de rastreo de esfera. Simplemente conectaré esto hasta el final, inicio y fin. Y fijaremos el radio para decir diez. Ese es el tamaño de la esfera que irá de principio a fin ubicación. Por lo que vamos a establecer el empate D cubo dos para un frame compilará y luego le pegaremos a Play. Se puede ver que ahora en lugar de una sola línea, es esta traza en forma de esfera. Ahora esto solo te permite rastrear un área más grande. Entonces di que no querías que una bala fuera un pixel de tamaño cuando una pistola la dispara, tal vez querías que fuera una esfera que tuviera 55 centímetros de diámetro, entonces podrías hacer eso en su lugar. Ahora, al igual que nuestro trazo de línea, hay una multi-versión de este nodo. Entonces si hago clic derecho y busco rastro de esfera, se puede ver que tenemos traza multi-escalar por canal, maltés, rastreo justo por perfil y traza multi esfera para objetos. Así podríamos crear una versión multi esfera de este nodo. Se puede ver que es exactamente lo mismo, pero tenemos nuestra entrada de radio y podemos emitir múltiples resultados de cadera. Ahora no voy a pasar por cada nodo de rastreo porque la mayoría de ellos son iguales. Son solo versiones diferentes para el multi traza y luego las diferentes trazas por tipos y luego las diferentes formas. Pero si quieres encontrarlos, siempre puedes buscar rastreo y buscar decir, caja que te dará acceso a toda la caja. Traza estos primeros aquí con un solo rastro y luego tienes los múltiples rastros. También se puede buscar esfera. Esto te da acceso a todos los rastros de esfera. Se puede buscar línea, traza, línea. Esto le dará acceso a otras trazas de línea. Y luego por último tienes la cápsula. Estos le darán acceso a todos los tipos de trazas de cápsulas. Ahora, por último, te dije que te diría la diferencia entre el punto de impactos y la ubicación en nuestro descanso ahora, así que si hacemos clic en la flecha hacia abajo aquí y abrimos eso hacia arriba. Ahora en un trazado de línea tanto la ubicación punto de impacto serán exactamente los mismos, pero con una esfera, por ejemplo, el punto de impacto y la ubicación en diferente, el punto de impacto seael punto exacto en que la esfera golpea la superficie del cubo. Entonces si te imaginas justo en el borde de la esfera donde están las cajas rojas, ese es el punto de impacto. El mismo punto de que la esfera se superpone a la caja. Mientras que el pin de ubicación aquí es la ubicación de esa esfera. Entonces nuestra esfera, el centro de la misma, está en realidad más alejada de la superficie del cubo. Entonces esa es la diferencia entre el punto de impacto. Ese es el punto exacto en que la esfera se superpone, el cubo y la ubicación es el centro del cubo cuando ocurre ese solapamiento. Ahora eso es todo por nuestras huellas menos que en este momento, estaremos volviendo a usar rastros nuevo en algunas de nuestras futuras lecciones sin embargo. 26. Lecciones adicionales (tablas de datos): Oigan a todos. En esta lección vamos a estar echando un vistazo a las tablas de datos. Usamos tablas de datos para almacenar información que no necesitamos cambiar durante el juego, pero podemos recuperar esa información usando planos. Un ejemplo de cuándo podrías usar una tabla de datos es por ejemplo, si estás creando un juego de rol o supervivencia donde tenías cientos o tal vez incluso miles de diferentes tipos de artículo y estás obtener cada uno de esos elementos van a tener algún tipo de información que en realidad no cambia durante el juego, como por ejemplo, su nombre, artículo, descripción y peso. Esos valores podrían no cambiar durante el juego. Por lo que una tabla de datos sería una buena manera almacenar esa información y luego poder recuperarla fácilmente en el código. Entonces comencemos. Tenemos que crear una nueva estructura. Y eso se debe a que las tablas de datos usan la estructura para determinar qué información pueden detener. Entonces haremos clic derecho e iremos a los planos, saldremos e iremos a la estructura. Voy a nombrar el mío S subrayado y esa es estructura de ejemplo, struct. Vamos a abrir esto. Ysi lo recuerdan, tenemos una lección previa sobre estructuras. Entonces si no has visto eso, recomendaría echarle un vistazo a eso. Pero sólo vamos a agregar un par de nuevas variables y les daremos nombres. Por lo que nuestro primer nombre de un artículo. Y vamos a establecer esto a un tipo de variable de texto. Llamaremos al segundo, espera. Y vamos a poner esto en una carroza. Llamaremos al siguiente daño. Y vamos a establecer esto en un entero y causará la última salud. Y vamos a establecer esto a un entero también. Y luego salvaremos esta estructura. Ahora estamos listos para crear nuestra tabla de datos. Por lo que volveremos al navegador de contenidos, haga clic derecho y seleccionaremos la categoría miscelánea. Y luego aquí queremos seleccionar Tabla de datos. Ahora, aquí es donde seleccionamos qué struct queremos que use nuestra tabla de datos. Así que voy a hacer clic en el menú desplegable y buscar S guión bajo ejemplo struct. Seleccionaré eso y le pegaré a Ok. Ahora nombraremos nuestra tabla de datos. Por lo que voy a llamar a la mía tabla de datos de ejemplo. Y haremos doble clic en eso para abrirlo. Y yo sólo voy a arrastrar el mío hasta el pip superior. Por lo que ahora tenemos un nuevo diseño de interfaz de usuario aquí arriba. Tenemos nuestra tabla de datos. Ahora esta es la información actual que estas tablas almacenan. Como puedes ver, actualmente está vacía. Y luego aquí abajo tenemos al editor de fila. Por lo que cuando sí tenemos información en nuestra tabla de datos, podemos seleccionar una fila, y este editor de filas nos permitirá cambiar la información que se almacena en esa fila en particular. Entonces para crear una nueva fila o sube al botón Agregar y presiona eso. Ahora puedes ver que tenemos una nueva fila en la tabla de datos. Y con eso seleccionado, puedo cambiar cualquiera de las variables que creamos dentro de nuestra struct para esta fila en particular. Ahora también tenemos el nombre de la fila. Ahora este es el nombre que usaremos para acceder a la información almacenada en esta fila específica cuando estemos codificando y blueprints. Por lo que siempre quieres asegurarte de que estás dando tus nombres de fila y a tus tablas base nombres fáciles de usar. Entonces podríamos renombrar esto para decir actos. Por ejemplo, digamos que estábamos creando una tabla de datos para los elementos que van a estar en nuestro juego RPG. Por lo que tendría entradas en la tabla estados o filas nuevas para cada elemento. Aquí, establecerías el nombre del elemento, por ejemplo, para que podamos configurar nuestro nombre para que actúe. Como dije, el peso diez, el daño a 20 por ejemplo. Y ahora hemos puesto estos datos en esta cuerda específica. Y si quisiéramos, podríamos crear otra fila. Para que pudiéramos dar clic en Agregar. Y ahora tenemos una nueva fila. A lo mejor queríamos almacenar información sobre las clases para poder crear una fila de espadas en C. He renombrado el nombre de la fila para ordenar, y voy a establecer el nombre para ordenar. Quién fijó el peso para ahorrar cinco y nuestro daño a diez, por ejemplo. Ahora hay algunos otros botones aquí arriba que nos permiten controlar nuestras filas. Por lo que tenemos copiar y pegar. Esto le permite copiar el conjunto de datos en una fila y pegarlo en otra. Entonces si selecciono mi AKS por ejemplo, y hago copia, y selecciono mi espada escribí y hago Pegar. Se puede ver que ahora ha reemplazado los datos en mi fila de espadas con la información que se puso en mi fila de AKS, se puede ver que el nombre de la fila no se ha cambiado, que todavía está puesto espada. Eso se debe a que los nombres de sus filas necesitan ser únicos. Entonces no pudimos crear una nueva fila, por ejemplo, y llamarla actúa. Se puede ver que nos da un error porque cada fila necesita tener un nombre único. Ahora también podemos eliminar filas. Entonces con mi nueva fila seleccionada aquí, puedo golpear quitar para quitar la fila. Y también podemos duplicar filas. Para que podamos seleccionar fila, golpear duplicar y duplicará esa fila. Se puede ver que le está dando un nuevo nombre llamado espada subrayado 0. Si ahora sólo voy a quitar esa espada subrayado 0 y voy a volver a poner mi información a lo que era para nuestros SolidWorks. Entonces seleccionaré Ordenar y pondré esto a espada. Y vamos a configurar esto a, creo que fue F5 blanco y lo dañó. Ahora te mostraré cómo podemos acceder realmente a esta información que estamos configurando en nuestra tabla de datos dentro de un blueprint. Por lo que comenzaremos yendo a nuestro plano de personaje ThirdPersonCharacter. Yo sólo voy a abrir eso. Y si hacemos clic derecho, podemos buscar la fila Get Data Table. Se puede ver que aquí tenemos dos opciones. Voy a seleccionar el nodo de fila de la tabla de datos get aquí y vemos que obtenemos este nuevo nodo que no hemos usado antes. Si seleccionamos nuestra tabla de datos, así es como establecemos desde qué tabla de datos queremos acceder a la información. Entonces solo tenemos la tabla de datos de ejemplo que creé. Entonces vamos a seleccionar eso. Se puede ver que nuestro nombre de rol en realidad ha cambiado automáticamente en una pequeña opción desplegable. Y podemos ver que tenemos tanto nuestros actos como filas de espadas que creamos dentro de nuestro ejemplo DataTable. Ahora bien, estas son solo entradas variables. Así que digamos que tenía una variable de nombre de fila a la que quería conectar aquí. Podría, si me arrastro desde aquí, podemos hacer promociona variable. Y si recuerdas que solo crea una nueva variable del tipo del que hemos arrastrado. Así que sólo voy a crear una nueva variable y ver que está utilizando un tipo de variable de nombre. Se acaba de nombrar para nosotros nombre de fila, pero esto es sólo una variable de nombre estándar que podemos conectar en nuestra tabla de datos para decirnos qué fila queremos obtener de nuestra tabla de datos. Pero por ahora sólo voy a borrar eso y vamos utilizar el menú de selección aquí. Entonces sólo voy a seleccionar espada. Ahora, tenemos dos salidas. Tenemos fila encontrada y rho nada encontrado. Ahora, esto se usa más para si estás usando una variable que se conecta al nombre de fila. Porque si usamos una de estas selecciones, nos está dando las filas que existen en nuestra tabla de datos. Por lo que siempre va a encontrar estas filas. Pero si tuviéramos nuestra variable de nombre de fila conectada y decimos que esto estaba configurado en, si podemos tirar para mostrar el valor predeterminado, digamos que esto se estableció en algo así como mochila. Ahora, no hay una fila de mochila dentro de nuestra tabla de datos de ejemplo. Entonces es, este nodo correría rho nada encontrado porque no encontrará esa fila. Mientras que si se establece en algo así como actos por ejemplo, entonces rho found sería gordo, se ejecutaría porque se encuentra esa fila dentro de nuestra tabla de datos. Ahora tenemos una salida aquí llamada excrecencia. Y si arrastramos hacia fuera, podemos hacer un nodo break. Y se puede ver que en realidad es romper nodo para la estructura que usamos o hemos creado y estamos utilizando dentro de nuestra tabla de datos. Para que podamos romper esa estructura. Se puede ver que ahora podemos acceder a toda la información que establecemos dentro de nuestra tabla de datos. Entonces, si tuviera que crear un begin play, por ejemplo, conectamos esto a nuestra fila de tabla de datos. Así, se asegurará de que el nombre de la fila se establece en hacha, que es entonces sólo vamos a hacer desde la fila encontrada. Arrastraremos hacia fuera y haremos una cadena de impresión. Y podemos conectar, digamos, el nombre hasta nuestra cadena de impresión. Y lo compilaremos y le pegaremos a play. Y verás que el hacha se está imprimiendo. Si volvemos a nuestro ThirdPersonCharacter y cambiamos nuestro nombre de fila a algo así como, creo que se vendió. Podemos apilar. Y cuando lleguemos a Play, verás que la tabla de datos dentro del ThirdPersonCharacter está encontrando esa fila de espadas y está devolviendo la información que almacenamos dentro de esa fila. Si quisiéramos, podríamos cambiar esos datos. Entonces si voy a ejemplo tabla de datos y cambio el nombre dentro de nuestra fila de espadas, algo más, digamos manzana. Si guardamos esto y le pegamos a Play, verás que ahora imprime manzana, pesar de que estamos seleccionando la fila de espadas, y ese es solo el nombre de la fila. Estamos usando, la información que hemos almacenado dentro de esa fila, y eso ahora es Apple. Ahora hay otra forma en que podemos decir nuestras fechas get, fila de tabla, nodo, qué fila queremos obtener esto un poco más fácil de usar que usar solo una variable de nombre. Entonces, si eliminamos nuestra variable de nombre del gráfico de eventos aquí, creamos una nueva variable. Voy a llamar a esta fila seleccionar. Selector establecerá el tipo a tabla de datos manejador de filas manejar, lo siento. Crearemos eso, compilaremos y obtendremos un error de este nodo solo porque no hemos establecido una fila en. Así que sólo voy a configurar esto para ordenar. Y si volvemos a compilar, se puede ver que el error desaparece. Ahora podemos nuestra fila seleccionar una variable como esta. Ahora bien, esto es básicamente sólo una estructura que está integrada en el motor. Así que si arrastramos hacia fuera, se puede ver que tenemos un nodo de manija de fila de tabla de datos de ruptura que nos permite acceder a las dos variables que se establecen dentro la struct selectiva fila y en clase por defecto. Así que si nuestras variables de selector de filas seleccionadas, se puede ver que podemos decir tabla de datos y un nombre de fila. Ahora actualmente si selecciono Renombrar y creo que aparece porque no hemos establecido una tabla de datos. Así que voy a establecer esto a nuestra tabla de datos de ejemplo aquí. Ahora, cuando selecciono el nombre de la fila, se puede ver que nos da acceso a ambas filas existen dentro de nuestra tabla de datos de ejemplo. Podría configurar esto para decir hacha. Ahora, usando el nombre de fila en nuestro nodo de ruptura, podemos simplemente conectarlo directamente a nuestra fila Get Data Table. Nota, ahora hemos conseguido forma mucho más fácil de usar de decirle este nodo sobre qué elemento queremos obtener información de nuestra tabla de datos. Entonces si compilo, y ahora esperaríamos que nuestra cadena de impresión imprima el nombre porque esa es la forma en que le estamos diciendo que acceda. Si retrocedemos, podemos cambiar esto a la espada. Y ahora lo veremos imprimir el nombre de Apple al que lo cambiamos. Ahora, al igual que una nota al margen, si salimos de los planetas, puedes conectar esta variable a la fila de la tabla get data, nodo también. Pero no recomiendo hacer eso porque si estás conectando esto y cambias la tabla de datos a una tabla de datos que usara una estructura diferente a la que estamos usando aquí, podrías causar errores y problemasen sus proyectos. Así que normalmente recomendaría simplemente dejar esto desconectado o desconectado y luego dejar manualmente configurando la tabla de datos que estás usando aquí. Ahora hay otra nota de tabla de datos, así que si hacemos clic derecho y buscamos la tabla de datos, y buscaremos fila en C, eso es a. ¿Existe la fila de la tabla de datos? Ahora, esto esencialmente hace lo mismo que nuestra fila Get Data Table, pero no nos da la información almacenada en esa fila. Todo lo que hace es comprobar si el nombre de la fila existe dentro de la DataTable. Por lo que de nuevo, podríamos copiar y pegar estos nodos. Yo enchufé mi fila nombrelo, y pondré la tabla de datos a tabla de datos de ejemplo. Ahora y empieza a jugar con ella. Simplemente imprimiremos verdadero o falso. Si la tabla de datos que seleccionamos sí existe. Ahora, porque estamos usando nuestra fila selecciona una variable. sólo podemos seleccionar tablas de datos que existan todos modos,sólo podemos seleccionar tablas de datos que existan dentro de esta tabla de datos. Por lo que siempre va a devolver true cuando usamos este nodo para controlar qué fila queremos seleccionar. Pero tal vez estábamos usando una variable de nombre en su lugar. Y así podríamos poner un nombre aquí, digamos mochila. Y esta fila no existe nuestra tabla de datos. Entonces cuando le peguemos a Play, verás que imprime falso. Si vuelvo y cambio esto para decir actos que, y podemos darle a Play. Verás que está volviendo true porque esa fila sí existe dentro de nuestro ejemplo DataTable. Otro nodo es el, si eliminamos este código aquí sólo para que sea un poco más de espacio, moveré esto aquí arriba. Si hacemos clic con el botón derecho y buscamos la tabla de datos, se puede ver que tenemos que obtener los nombres de fila de la tabla de datos. Si creo este nodo, ves que establecemos una tabla de datos. Vamos a establecer la tabla de datos de ejemplo, y luego su salida es en realidad una matriz de nombres. Y esto dará salida a una matriz que contiene todos los nombres de las filas que existen dentro de nuestra tabla de datos de ejemplo. Entonces si conecto esto para comenzar a jugar, pasaremos por estos resultados. Por lo que este nodo se ejecutará para cada fila que existe dentro de nuestra matriz. Simplemente podemos hacer una cadena de impresión como esa. Ahora, esto imprimirá todos los nombres de las filas cuando comience el juego. Entonces si le damos a Play, se puede ver que está imprimiendo cera y está imprimiendo espada. Ahora. Por último, solo quiero explicar cómo funcionan las tablas de datos compuestos. Las tablas de datos compuestos nos permiten tomar múltiples tablas de datos y combinarlas para que podamos acceder a múltiples tablas de datos cuando seleccionamos una tabla de fechas específicas. Entonces lo que quiero decir con eso es si creamos otra tabla de datos, ahora, estas tablas de datos tienen que usar la misma estructura de voz. No podremos combinarlos juntos. Por lo que crearemos una nueva tabla de datos. Usaremos nuevamente la estructura de ejemplo de subrayado S. Y le pegaré Ok, voy a nombrar esto. esto le llamamos artículos de armas. Entonces por ejemplo, podrías tener diferentes tablas de datos para armas, consumibles, medicinas, cosas así si quisieras, si estuvieras haciendo artículos para decir, un juego RPG. Así que abre armas artículos IPython. Y sólo voy a crear un par de nuevas filas de chula esta pistola de tiro. Y voy a llamar a este un rifle. Pon el nombre en rifle. Rifle también. Y también la escopeta a arma de fuego. Ahora establece el peso a decir para, para la escopeta y seis para el rifle el daño se establecerá en 30, y chocolate más establece el daño a diez. Entonces ahora tenemos estas filas dentro de nuestra tabla de datos de elementos de armas. Ahora, si volvemos a nuestro ThirdPersonCharacter y volvemos al código que creamos antes. Ahora, esas filas están dentro de una tabla de datos diferente. Entonces si seleccionamos nuestro selector de filas aquí, ves que no puedo seleccionar esas filas porque actualmente estamos usando la tabla de datos de ejemplo. Y si tuviéramos que enchufar, digamos, un nombre de fila, y tuviéramos que enchufar esto y pusiéramos manualmente nombre de la fila para decir pistola de tiro. Cuando este código se ejecuta, en realidad no encontraría esta cuerda porque de nuevo, esa fila existe en nuestros artículos de armas, no dentro de nuestra tabla de datos de ejemplo. Por lo que no se encontraría. Ahora porque la tabla de datos de ejemplo y la tabla de datos de elementos de armas usan la misma estructura. Podemos combinarlos juntos usando una tabla de datos de concierto. Entonces iremos al navegador de contenido, hacemos clic derecho, vamos a miscelánea, y queremos crear una tabla de datos compuesta. Nuevamente, tenemos que escoger una estructura. Ahora bien, esta tiene que ser la misma estructura que usamos para ambos, por ejemplo, tabla de datos y tabla de datos de elementos de armas. Entonces selecciona el ejemplo struct hit, ¿de acuerdo? Y llamaremos a esto la lista maestra de elementos, por ejemplo. Eso lo abriremos y tenemos un nuevo editor. En realidad, no hay mucho que pueda hacer dentro de una tabla de datos compuesta. Podemos crear nuevas filas o cualquier cosa por el estilo. Lo que podemos hacer sin embargo es agregar tablas padre. Por lo que añadiremos un nuevo elemento. Y vamos a configurar esto a nuestros artículos de armas que no deberían ver. Después de hacer eso, ahora podemos ver nuestros artículos de armas dentro de nuestra tabla de datos compuestos. Y vamos a añadir otro elemento. Y vamos a establecer esto a nuestra tabla de datos de ejemplo. Se puede ver cuando hago eso, esos elementos que están dentro de nuestra tabla de datos de ejemplo también se agregaron dentro de nuestra lista maestra de elementos. Ahora, no podemos editar estos aquí, o básicamente podemos hacer es agregar nuevas tablas de datos y combinar las filas juntas en una tabla de datos compuesta. Así que ahora que tenemos todos estos elementos dentro de nuestra tabla de datos compuestos, si volvemos a nuestro personaje en tercera persona, en lugar de usar la tabla de datos de ejemplo aquí, sólo voy a desconectar el nombre de fila por el momento. Podemos establecer esto en la lista maestra de elementos. Esa es nuestra tabla de datos compuestos. Y ahora si vas al nombre de la fila, en realidad podemos seleccionar nuestra escopeta, rifle y estas flechas que existen en la tabla de datos de elementos de armas. O podemos seleccionar los actos y filas de espadas y ésas existen en nuestra tabla de datos de ejemplo. Esto nos permite combinar múltiples tablas de datos, siempre y cuando estén usando la misma estructura en una tabla de big data a la que podamos acceder dentro de nuestro blueprint. Eso es útil para organizar. Si tienes muchos datos que vas a estar almacenando dentro de tablas de datos. Y si vamos a decir nuestra tabla de estado de artículos de armas y agrego nuevas filas, llamaré a esto un cuchillo como ese. Y ahorramos. Si volvemos al plano de ThirdPersonCharacter, podemos hacer clic en el desplegable aquí y se puede ver que el cuchillo ahora está apareciendo y se actualizará automáticamente si agregamos o editamos la información y Evason nuestros artículos de armas, tabla de fechas o la tabla de datos de ejemplo. Por último, si vamos a nuestro selector de filas aquí, también podemos usar la tabla de datos compuestos aquí también. Así que si voy a la opción Tabla de datos, podemos establecer esto a lista maestra de elementos. Y ahora si compilamos y miramos nuestro nombre de fila, se puede ver que podemos acceder a todas las armas tanto de nuestra tabla de datos de ejemplo como de la tabla de datos de elementos de armas completas aquí también. Entonces podemos simplemente enchufar el nombre correcto. Y ahora podemos usar fácilmente nuestro selector de filas para seleccionar cualquiera de esas filas de cualquiera de nuestras tablas de datos. Nuevamente, no te preocupes por este error. Es porque no teníamos un nombre de fila establecido. Si compilo, se puede ver que el error desaparece. Entonces, solo para resumir, las tablas de datos son realmente buenas para almacenar mucha información que no necesita ser cambiada durante el juego. Si tienes información que sí necesita ser cambiada, entonces no puedes almacenarla dentro una tabla de datos porque no puedes cambiar la información de la tabla de fechas durante el juego. 27. Lecciones adicionales (Nodos de superposición): Oigan a todos. En esta lección vamos a estar hablando de los nodos superpuestos. Las notas superpuestas son una buena alternativa al uso de componentes de colisión de caja o esfera. Ahora una cosa muy común que veo con los principiantes es que tiendes a abrir sus niveles y están llenos componentes de colisión de caja y esfera. Ahora, estos pueden funcionar y son razonablemente fáciles de trabajar con ellos. Pero el problema es más adelante en tu proyecto cuando tienes tal vez proyectiles o rastros o vehículos tratando de moverse, estas cajas de colisión y esferas pueden interferir con esos sistemas funcionando correctamente, podría requerir que usted dé vueltas y cambie la configuración de colisión en cientos de componentes diferentes de colisión de caja y esfera. Por lo tanto, los nodos superpuestos nos dan una alternativa útil al uso de componentes Box y esfera. A veces podemos ir a nuestro Third PersonCharacter y voy a poner un ejemplo. Hagamos clic derecho y busquemos la entrada. Uno. Esta es una nota que como hemos usado antes, se ejecutará cuando presionemos uno en nuestro teclado. Y si hacemos clic derecho, podemos buscar solapamiento. Ya ves que aquí tenemos diferentes notas superpuestas. Voy a empezar con la superposición de cajas para actores. Entonces crearemos esa función. Ahora tenemos algunas entradas para este nodo. Tenemos posición de caja. Esta es la ubicación en la que se realizará la verificación de la casilla. Tenemos extensión de caja, que es lo grandes que son las cajas. Tenemos tipos de objetos. Por lo que estos son los tipos de objetos que se van a detectar solapamiento de caja. Si recuerdas de nuestra lección de trazo de líneas, buscamos make array. Podemos establecer qué tipos de objetos detectará este nodo. Podemos agregar múltiples entradas a esto también. Entonces queríamos detectar, vaya, estática, dinámica mundial. Si recuerdas cuando vamos a un objeto, digamos en un mundo como este rampa de aquí, si seleccionamos el componente de malla, se desplazará a los ajustes de colisión y verás que actualmente está configurado por defecto, pero lo voy a vender a la costumbre. Y si revisas el tipo de objeto, puedes ver que este está actualmente configurado como wild static. Por lo que nuestra caja superpuesta detectaría este objeto porque le estamos diciendo que queremos detectar tipos de objetos estáticos mundiales. A continuación tenemos nuestro filtro clase actor. Esto le dice a la superposición de la caja que solo queremos encontrar un tipo de actor tan rápido para establecer esto para decir personaje en tercera persona así. Nuestro nodo de superposición de libros ahora solo devolvería el blueprint de ThirdPersonCharacter. No olvides aclarar esto, lo contrario nuestro ejemplo más adelante no funcionará. Así que asegúrate de configurar esto en ninguno. Entonces, por último, tenemos actores que ignorar. Ahora esto es sólo una serie de actores que podemos introducir, decirle a nuestros libros se superponen que queremos ignorarlos. Así que podríamos arrastrar fuera de esto y hacer un make array. Podríamos arrastrarnos de esa tasa de hacer y buscar uno mismo. Y ahora le estamos diciendo a la caja solapamiento que queremos que ignore nuestro Third PersonCharacter y las salidas de este nodo o fuera actores. Se trata de una matriz de actores que la caja se superpone, se superpone. Y entonces tenemos un valor de retorno. Y esto es sólo un booleano que va a ser verdadero o falso si el nodo de superposición de cuadro se superpone nada. Entonces ahora vamos a poner un ejemplo. Obtendremos la ubicación del actor, y aquí es donde haremos nuestras comprobaciones de superposición de casillas. Por lo que vamos a conectar esto hasta la posición de la caja establecerá la extensión de la caja para decir 200 por 200 por 200. Establecemos los tipos de objeto. Dejaremos esto como estático y dinámico. Asegúrese de que el filtro de clase actor esté establecido en ninguno. De lo contrario no podrá detectar a ningún otro actor. Y vamos a dejar este auto enchufado al acceso para ignorar aquí también. Podríamos simplemente enchufar esto en nuestras notas aquí. Pero algo que me gusta usar cuando estoy usando nodos de actores de superposición de Box es un nodo de depuración. Entonces si hacemos clic derecho y buscamos depuración, lo siento, dibuja cuadro de depuración. Este nodo nos permite crear una caja visual en el mundo que podemos usar para la depuración. Entonces voy a enchufar esto a nuestro cuadro de Draw Debug. Y voy a enchufar esto en cajas superpuestas. Y para su centro, solo usaremos la ubicación del actor y la vamos a establecer en la misma medida que nuestra superposición de caja. Salsas a doscientas, doscientas, doscientas. Voy a establecer la duración en tres segundos y el grosor a uno. Al hacer esto, solo vamos a crear una caja visual y el nivel durante tres segundos en la misma ubicación y tamaño que nuestra caja se superpone. Para que podamos hacernos una idea del tamaño del área que estamos revisando para los actores superpuestos. Ahora, sólo me voy a arrastrar fuera de nuestros actores violando y voy a buscar longitud. Y sólo usaremos esto para detectar cuántos actores se superponían en realidad. Cuando ejecutamos nuestros libros se solapan actores nodo. Así que voy a conectar esto en una cadena de impresión como esta, y vamos a compilar. Ahora podemos probar esto. Entonces si presiono play y presiono uno, se puede ver que tenemos esta caja grande y se puede ver que nuestro texto está imprimiendo uno. Y eso es porque actualmente nuestros libros se superponen. Actores nota es sólo para lactar a un actor. Ese es el piso. Y la razón de eso es que le estamos diciendo que ignore nuestro carácter. Si corro por aquí y presiono uno, se puede ver que ha subido a tres porque estamos golpeando la rampa, esta plaza y el piso. Esta es sólo una forma fácil de detectar qué actores se superponen a un área determinada sin tener que crear un nuevo componente de colisión de caja o esfera. Ahora hay otras versiones de este nodo. Si golpeamos escape y volvemos a nuestra tercera zanahoria, Third PersonCharacter Blueprint y hacemos clic derecho y buscamos solapamiento. Se puede ver que tenemos una caja de componentes superpuestos. Ahora bien, esto funciona igual que nuestros actores de superposición de cajas. Simplemente busca componentes en su lugar. Por lo que en lugar de devolver a los actores, devolverá los componentes que superpone. Entonces, por ejemplo, si nuestro piso se superponía, nuestra caja superponía componentes comprueban. Volvería en lugar del acto del cubo para hacer referencia, devolverá la pila Mesh Component restaurantes en lugar de fuera de los componentes de salida están violando. Aparte de eso, todo es igual con este nodo. Puede establecer el tamaño de la posición, los tipos de objetos, etc. Ahora también tenemos diferentes formas para estos nodos superpuestos. Entonces podemos crear, digamos, un solapamiento de esfera. Se puede ver que tenemos nuestros actores de superposición de esferas y nodos de componentes de superposición de esferas. Y por último también está la cápsula se superponen nodos también. Para que puedan ver que tenemos actores de superposición de cápsulas y capturamos componentes superpuestos. Y estas son solo formas diferentes que comprobaríamos si hay aceptadores o componentes superpuestos. Entonces eso es todo por esta lección. Es una corta que solo quería hacer en estos nodos porque me parecen realmente útiles. Y ojalá puedan reducir el número de componentes de caja y esfera que tienes en tus niveles. 28. Lecciones adicionales (entradas): Oigan a todos, En esta lección les voy a estar hablando a través del sistema de entrada. Ahora, en Unreal Engine cinco, tenemos dos sistemas de entradas. Tenemos el original de Unreal Engine four, y tenemos el nuevo sistema de entrada mejorado que ahora está en Unreal Engine cinco. En esta sesión, te voy a estar hablando través del sistema de entrada original. Y la razón por la que estoy haciendo eso son muchos proyectos, al menos al momento de filmar esto, todavía usando ese sistema original. Entonces en nuestra próxima lección, te estaré hablando a través del nuevo sistema de entrada mejorado. Ahora, ¿qué quiero decir con sistema de entrada? Y sistema de entrada es como tomamos jugador presionando un botón en mi teclado o su mouse o un gamepad, realidad traducirlo en código que se ejecuta en nuestros planos. Ahora, ya hemos usado algunos nodos de entrada en nuestras lecciones anteriores. Si nos dirigimos al Third PersonCharacter y hago clic derecho y busco entrada. Uno por ejemplo, se puede ver que hemos estado usando el evento de una entrada, y ese es el evento que se ejecutará si pulsamos la tecla una en nuestro teclado. Si nos dirigimos al panel Detalles, en realidad podemos cambiar esta entrada para que funcione para que nos guste, podemos presionar este botón aquí y luego seleccionar la tecla que queremos que use. Para que pudiera presionar L, por ejemplo. Ahora este nodo se ejecutará cuando sea, siempre presionado. O podemos hacer clic en este desplegable aquí y podemos mirar a través de todas las diferentes entradas clave que el motor tiene incorporado. Ahora, este tipo de nodos son realmente útiles para probar cosas, depurar, simplemente obtener una entrada en un blueprint rápidamente. Pero no son particularmente útiles para juegos completos o juegos terminados. El motivo de eso es que la mayoría de los juegos modernos tienen un menú de encuadernación de teclas donde el jugador puede volver a enlazar teclas a cuatro acciones diferentes. Ahora bien, si estás usando estos nodos y un juego terminado, no podrás hacer eso. Y ahí es donde entra un sistema de entrada. Ahora bien, en esta lección, voy a estar hablando con ustedes sobre el sistema de entrada de ustedes antes. Y la razón de eso es una gran cantidad de proyectos que puedes abrir. Todavía estaremos usando el sistema de entrada de UE para. Por lo que es una buena idea simplemente llegar a los apretones con cómo funciona. Luego, en nuestra siguiente lección, echaremos un vistazo al nuevo sistema de entrada mejorado que viene con Unreal Engine five. Entonces, para empezar, veremos una de las entradas clave que viene con el personaje en tercera persona. Si nos desplazamos hacia abajo aquí y encontramos la acción de entrada de salto, se puede ver que en lugar de decir un nombre de clave, dice salto de acción de entrada. Ahora eso es porque esta acción de entrada está realmente definida en nuestro sistema de entrada. Y luego en el sistema de entrada asignamos claves. Entonces para encontrar este sistema, podemos ir a Edit Project Settings. Y luego aquí bajamos a la sección de entradas aquí, y eso está bajo la categoría de motores. Aquí puedes ver que tenemos acción y mapeos de acceso. Ahora bien, el mío ya está abierto, pero el tuyo podría verse un poco así. Damos clic en la flecha junto a los mapeos de acción. Se puede ver que tenemos la acción de entrada de salto. Y luego debajo de eso, si haces clic en la flecha junto a ella, puedes ver que el enlace de clave predeterminado para ello es la barra espaciadora. Y también tenemos un buy-in clave para el gamepad aquí también. Entonces, esencialmente lo que esto le está diciendo al motor es que queremos crear un mapping de acción. Ahora un mapeo de acciones es similar a nuestros eventos de entrada que hemos usado antes. Se puede presionar o soltar. Y lo estamos diciendo estamos creando un nuevo mapeo de acción llamado Jump. Y queremos que estas dos claves estén vinculadas a esa acción. Y por eso cuando jugamos en el mapa de tercera persona, si presiono Space, esta acción de entrada de salto correrá presionada. Y luego cuando libere espacio, liberado correrá y correrá el salto y dejará de saltar eventos. Ahora también podemos crear nuestras propias acciones de entrada aquí. Entonces, si vuelves a la configuración del proyecto, solo podemos hacer clic en este pequeño botón más aquí para crear una nueva acción de entrada. Puedo llamarlo algo así como disparar, por ejemplo, va a poner la clave a. Para que pueda configurar la clave de múltiples maneras y haga clic en este botón aquí, y luego haga clic en la clave que desee. Por lo que puedo simplemente botón izquierdo del ratón y verás que se recoge automáticamente para mí. O puedes mirar a través de todos los diferentes binds de teclas simplemente haciendo clic en esta flecha hacia abajo aquí y pasando por las opciones. Ahora hemos creado una nueva entrada de acción y su nombre es disparar. Y cuando presionemos el botón izquierdo del ratón, ese evento de zapatos se ejecutará. Si volvemos a nuestro Third PersonCharacter, haremos clic derecho y buscaremos entrada. Disparo de acción en C que bajo impactos que tenemos ahora son evento de rodaje. Y esto se ejecutará cada vez que presionemos nuestro botón izquierdo del ratón. Para que pueda agregar una cadena de impresión aquí. Y yo sólo pondré prensado. Copiaré y pegaré eso y lo pondré así. Entonces ahora cuando golpeamos play, se puede ver que cuando presiono el botón del mouse, se está registrando presionado, y cuando suelte, se está registrando liberado. Ahora lo bueno de este sistema es que puedes agregar múltiples claves para estar vinculado al mismo evento. Así que digamos que tu juego fue trabajado en escritorio y funcionó en consola y VR también. Puedes tener entradas para la VR, la tecla de salto, el juego pad ki, y eso podría estar todo debajo la categoría shoot si queremos agregar nuevas entradas. Por lo que sólo podemos dar clic en el pequeño plus en C, ahora puedo agregar una nueva clave. Podría decir prensa K por ejemplo. Ahora k también correrá ese evento de calzado así como el botón izquierdo del ratón. Si deseas eliminar alguno de estos, solo podemos hacer clic en el ícono del bote de basura aquí. Si deseas eliminar un mapeo de acciones completo, puedes simplemente hacer clic en la papelera junto al nombre del mapeo de acciones así. Ahora ten en cuenta si haces eso y todavía tienes el evento y la cosa si podemos sondear, ya verás que vamos a recibir un aviso. Y eso es sólo decirnos eso. mapeo ya no existe en la configuración de nuestro proyecto. Entonces borraremos esto por ahora porque ya no lo estamos usando y compilaremos para deshacernos de ese querer. A continuación tenemos mapeos de acceso. Entonces, si volvemos a Configuración del proyecto, se puede ver que tenemos mapeos de acceso. Hago clic en el pequeño desplegable aquí abajo. Se puede ver que tenemos opciones para el estado de ánimo hacia adelante y hacia atrás. Muévete a derecha e izquierda. Y luego tenemos las mismas opciones para gamepad y gamepad mirar hacia arriba y hacia abajo, así como la mirada del ratón hacia arriba y hacia abajo en la parte inferior aquí. Ahora los mapeos de acceso funcionan un poco diferente. Corren cada cuadro. Entonces lo que quiero decir con eso es si voy al movimiento hacia adelante y hacia atrás y solo agrego una cadena de impresión. Por lo que sólo agregamos una cadena de impresión aquí. Ya verás cuando golpee play, está imprimiendo cada fotograma. No estoy presionando ningún botón, no estoy haciendo nada en absoluto. Ese mapeo de acceso estará ejecutando cada fotograma individual. Y eso es lo mismo para todos los mapeos de acceso. Así que eso será lo mismo para nuestro movimiento derecha e izquierda, y también para nuestro gamepad, mira hacia arriba y hacia abajo así como nuestro mouse mira hacia arriba y hacia abajo. Los mapeos de acceso también proporcionan un valor de acceso. Ahora esto es esencialmente cuánto o cuánto de la entrada se está recibiendo. Así que si tomo mi valor del eje aquí, y yo estaba en realidad, vamos a eliminar la cadena de impresión aquí, y vamos a conectar una nueva cadena de impresión hasta nuestro turno, derecha e izquierda para el ratón, el sim. Y conectaré el valor x a mi cadena de impresión y compilaré. Entonces ahora puedes ver que no estoy moviendo mi mouse, por lo que el valor del eje es 0. Pero si empiezo a mover el mouse lento, se puede ver que la cantidad de acceso aumenta. Ahora, eso es esencialmente lo que le dice al motor lo mucho que estoy moviendo mi mouse, qué tan rápido lo estoy moviendo, y luego agrega ese valor al arco, la rotación de la cámara. Entonces si empiezo a mover mi mouse muy rápido, se puede ver que el valor empieza a subir mucho más arriba. Entonces esto es esencialmente lo que permite que los mapeos de acceso controlen nuestra cámara, la dirección en la que se mueve, así como nuestro personaje. Si volvemos a nuestro blueprint, se puede ver que nuestro valor de eje para avanzar y retroceder es un valor de eje. Y si hago una cadena de impresión aquí, conectamos esto hasta él. Compile. Y eliminaré esta cadena de impresión para que podamos ver el valor justo de nuestro movimiento hacia adelante y hacia atrás. Golpea play y ve actualmente es 0. Pero si empiezo a avanzar, el valor del eje ha ido directo a uno. Y si voy hacia atrás, se puede ver en realidad se ha ido a menos uno. Y eso es lo que le dice al motor si nos estamos moviendo hacia atrás o hacia adelante. Si x fuera de plano editor y vamos a Project Settings, y abrimos uno de estos Mappings de Acceso. Digamos por ejemplo, la búsqueda recortó el mouse. Se puede ver que actualmente no está configurado como. En realidad, se establece una tecla en la dirección del ratón. Entonces está ajustado al ratón Y. La escala es menos uno. Ahora la razón de eso es que es sólo la forma en que la cámara está trabajando en carril. Si fuera a poner esto a escala uno y darle a Play. Ahora cuando muevo el mouse hacia arriba, empiezo a mirar hacia abajo y mis controles en realidad están invertidos. Así que típicamente con los movimientos del ratón hacia arriba y hacia abajo, usaríamos una escala de menos uno para deshacernos de ese movimiento invertido de la cámara. Pero si tuviéramos que mirar, digamos, avanzar y retroceder, se puede ver que tenemos W y S. Ahora, w nos da una escala de uno que le dice al personaje al avanzar. S da una escala de menos uno, y eso es lo que le dice al personaje que nos estamos moviendo hacia atrás. Y luego tenemos algunos binds clave adicionales aquí. Estas son las dos teclas de flecha en su teclado, y luego tenemos el pulgar en un pad de juego también. Ahora una cosa importante a recordar acerca los eventos de entrada es la razón por la que estos se están ejecutando dentro de nuestro Third PersonCharacter es porque nuestro personaje de tercera persona es controlado por nuestro controlador de jugador. Si empezáramos a usar estos nodos en blueprints, ese controlado por nuestro controlador, no se ejecutarían. Ahora un blueprint en el que podemos usar estos eventos de entrada es nuestro controlador. Ahora, en la plantilla de tercera persona, no hay un control. Un plan creará uno nuevo rápidamente. Sólo voy a crear una Clase Blueprint, seleccionar controlador de jugador. Simplemente llamaré a este controlador de ejemplo. Así. Y si te acuerdas, necesitamos configurar nuestro mando y nuestro modo de juego. Entonces iré al modo de juego en tercera persona y buscaré la clase de controlador de jugador. Aquí solo cambiaremos esto a nuestro controlador de ejemplo, compilaremos y guardaremos. Ahora cuando lleguemos a play, estaremos usando nuestro controlador de ejemplo. Y abriré ese controlador. Simplemente arrastraré esto hasta arriba aquí, ve al Event Graph. Y ahora si busco decir salto, por ejemplo, se puede ver que puedo crear la acción de entrada de salto y esto en realidad funcionará muy bien. Y eso es porque estamos en el controlador, son las acciones de entrada funcionarán perfectamente bien dentro de nuestro controlador de jugador, porque el controlador del jugador es lo que maneja son acciones de entrada. A continuación, solo quería hablarte sobre algunos de los ajustes que encontrarás si seleccionas un nodo de entrada, tenemos consumir entrada, ejecutar cuando se pausa y anular el enlace padre. Entonces el primero consume entrada significa que si esto está marcado en lo que estamos usando una acción de entrada dentro de nuestro controlador. Y tuvimos ese mismo evento dentro de nuestro personaje jugador. La acción de salto en nuestro personaje en realidad no correrá. Y eso se debe a que nuestro controlador esencialmente está consumiendo esa entrada y no permitiendo que ningún otro blueprint se ejecute. Entonces si fuera a imprimir una cuerda aquí de nuestro evento de salto. Ahora cuando compilamos y presionamos Play, si presiono espacio, si vuelvo a mi personaje en tercera persona aquí, simplemente quitaremos este print strings para que podamos ver lo que estamos haciendo así, quecompilan eso. Y ahora cuando golpeamos Play, si presiono espacio, se puede ver que está imprimiendo hola, pero mis personajes, no hay suerte con saltar. Ahora eso es porque dentro de nuestro controlador de ejemplo, estamos consumiendo esa entrada. Pero si desmarco esto y puedo hacer estallar y darle a Play. Ahora cuando presiono espacio, se puede ver que tanto mi texto hola está corriendo como el personaje está saltando. Entonces ambos de esos eventos en mi controlador y el blueprint del personaje o corriendo ahora. Otra de las configuraciones, si seleccionamos aquí la producción de salto, es ejecutar una pausada. Puedes pausar el motor, o si abres un menú, por ejemplo, si esto está marcado, entonces la entrada aún podrá ejecutarse aunque el juego esté en pausa. Y luego, por último, anular el enlace padre. Digamos por ejemplo, nuestro controlador de ejemplo tenía un blueprint padre que era diferente al controlador del jugador. Entonces si teníamos esta opción marcada y ese blueprint padre también estaba usando la acción de entrada. Entonces básicamente le estamos diciendo al motor ignoró la entrada y nuestro blueprint padre, use el código que está conectado a nosotros. Si lo desmarcamos, entonces este nodo no se ejecutaría. El nodo en nuestro blueprint padre se ejecutaría. Por último, tenemos este otro pin aquí, y esto solo nos da una referencia a la tecla que se presionó que hizo correr este evento. Entonces tal vez tengas múltiples teclas que harían que el salto ocurriera y querías que sucediera algo diferente dependiendo de la tecla que presionara la persona, podríamos arrastrar y buscar igual. Y usando esta nota, se podría comprobar es la tecla que se presionó igualada a otra tecla. Entonces podríamos decir que es igual al espacio. Y este nodo comprobaría es la tecla que se presionó Barra espaciadora. Si lo es, entonces volvería verdad. También podemos obtener el nombre de la clave, por lo que podemos buscar con pantalla. Podemos usar getc key display name. Y esto sólo nos dirá en texto cuál el nombre de la tecla que se presionó que hizo el salto en la carrera de producción. Entonces eso va a ser todo por esta lección. En nuestra siguiente lección, veremos el nuevo sistema de entrada mejorado que viene con el motor cinco sin amarrar. 29. Lecciones adicionales (entradas mejoradas): Oigan a todos. En esta lección vamos a estar echando un vistazo al sistema de entrada mejorado que viene con Unreal Engine five. Entonces, para empezar, te mostraré cómo habilitarlo. En esta versión actual del motor, en realidad tengo que habilitar un plug-in. Entonces iré a Edit plugins y voy a buscar mejorar. Se puede ver entrada mejorada, que puedo asumir. Si el tuyo ya está marcado, entonces no necesitas hacer esto. Pero para mí, me lo voy a asumir. Se puede conseguir me da una advertencia aquí, sólo diciéndome que todavía está en beta. Por lo que sólo voy a golpear a Sí. Y necesitamos reiniciar el motor, así que lo haré ahora. Entonces ahora he reiniciado el motor y si revisamos el menú de plugins y buscamos mejorados, podemos ver que está marcado. Después vamos a ir a Editar y vamos a Ajustes del proyecto. Y luego aquí vamos a usar una búsqueda y vamos a buscar entrada, o lo siento, entrada por defecto. Ahora se puede ver el mío por defecto se establece en la entrada del jugador y el componente de entrada. Voy a cambiar estos a la entrada mejorada del jugador. Y el componente de entrada mejorado. Si el tuyo ya está ajustado a esos, entonces no necesitas hacer esto. Ahora el sistema de entrada es lo que nos permite ejecutar código cuando el jugador dice, presiona un botón en mi teclado o botón en mi gamepad, o mueve su mouse de cierta manera. Ahora en nuestra última lección, miramos el sistema de entrada que viene de Unreal Engine cuatro. Esto sigue presente en Unreal Engine five. Por lo que pasamos por los de nuestra última lección, si quieres comprobarlo. Pero en esta lección vamos a ver el nuevo sistema que lo ha implementado en Unreal Engine cinco. Ahora lo bueno de este nuevo sistema mejorado es que en realidad es compatible con versiones anteriores. Así que si volvemos a nuestro personaje en tercera persona aquí, todos estos eventos, estos todavía están utilizando el sistema de entrada más antiguo de algún lugar motor para estos eventos seguirá funcionando. Entonces si golpeo play, ahora que estoy usando el sistema de entrada mejorado, pero todavía puedo moverme. Todavía puedo mirar sobre estos insumos seguirán funcionando. Pero ahora en realidad podemos crear las nuevas entradas mejoradas, que haremos ahora, saldremos de la obra un editor. Y comenzaremos haciendo clic derecho en el navegador de contenido. Y vamos a ir a la opción de entrada aquí, y vamos a crear una nueva acción de entrada. Ahora bien, este es el equivalente a, si recuerdas de nuestra última lección de ir a la opción de entradas aquí y crear un nuevo mapeo de acciones. Esto es el equivalente a eso, pero ahora tenemos su propio plan. Por lo que sea que nombremos, este será el nombre de nuestro evento. Así que sólo voy a llamar a este ejemplo de entrada. No hay espacios. Así ejemplo de entrada como ese. Ahora si abrimos eso, sólo voy a arrastrar esto hasta arriba aquí. Ahora aquí es donde podemos establecer la configuración para nuestro evento de entrada de ejemplo. Entonces para empezar, tenemos el tipo de valor. Ahora bien, este es esencialmente el valor con el que la clave suministra nuestro código. Si se establece en booleano, entonces nuestra tecla está presionada o no presionada. Pero podemos cambiar esto para decir, un eje algún día. Entonces este es un solo flotador que representa un estado de nuestra entrada. Entonces si nuestro ratón, por ejemplo, se está moviendo a lo largo del eje x, entonces eso es de lado a lado. Este valor de flotación será negativo o positivo dependiendo de la dirección que nos movamos hacia él y luego la velocidad en la que lo movemos, defina qué tan grande es el número. Ahora también hay un 2D y un 3D. Estaré explicando el 2D un poco más tarde. El 3D es un poco más avanzado, así que no vamos a entrar en eso en esta lección. Entonces a continuación tenemos gatillos. Los disparadores definen lo que realmente hace que nuestra entrada de ejemplo se ejecute. Entonces si creo un nuevo input, puedes ver que ahora tengo un nuevo índice, y aquí puedo elegir entre unas cuantas opciones diferentes. Ahora, estos esencialmente le dicen al motor lo que tenemos que ver con esta clave se vincula para hacer ejecutar esta entrada de ejemplo. Por ejemplo, si lo configuramos para que toque, tenemos que pulsar la tecla. Este evento está obligado a, para hacerlo correr. Y si hacemos clic en la flecha hacia abajo aquí, tenemos algunas configuraciones para el tipo tap. Tenemos el umbral de tiempo de lanzamiento del grifo. Entonces esto básicamente significa que siempre y cuando presione una tecla y la suelte más rápido que 0.2 segundos, nuestro evento de entrada de ejemplo se ejecutará. Siguiente. Configuraremos un ejemplo en nuestro personaje en tercera persona para que podamos llamar a nuestra entrada de ejemplo. Pero primero en realidad necesitamos crear otro plano. Ahora, es posible que hayas notado que en este blueprint realmente podemos establecer una clave que queremos hacer ejecutar nuestra entrada de ejemplo. Ahora, hay otro plano que en realidad define eso. Tendremos que crear eso. Por lo que haremos clic derecho e iremos a la entrada. Entonces queremos contextos de mapeo de entrada. Voy a llamar contexto de mapeo de ejemplo mío . Y eso lo abriremos. Ahora aquí es donde definimos nuestros insumos. Entonces, por ejemplo, nuestro ejemplo de entrada. Entonces lo que podemos hacer es dar clic en el botón pequeño más aquí. Se puede ver que tenemos estas opciones. Podemos establecer una entrada. Entonces vamos a usar nuestro ejemplo y bomba. Entonces le estamos diciendo que este mapeo es para la entrada de ejemplo. Y luego aquí podemos establecer qué claves queremos ejecutar realmente esa entrada. Para que podamos hacer clic en el pequeño icono del teclado aquí y puedo presionar decir, L en mi teclado. O puede hacer clic en el menú desplegable aquí y seleccionar una clave y las opciones aquí. Entonces ahora le hemos dicho al motor que cuando presionamos hacia fuera, queremos que ejecute el evento input de ejemplo. Por lo que ahora podemos ir a nuestro ThirdPersonCharacter y podemos crear un nuevo evento. Podemos buscar, por ejemplo. Se puede ver que tenemos entrada de ejemplo. Si creo eso, se puede ver que obtenemos este nuevo nodo de entrada. Ahora, este nodo de entrada se va a ver diferente o tener diferentes salidas dependiendo de los disparadores que tengamos configurados en nuestra entrada de ejemplo. Por lo que actualmente tenemos configuración de tap. Por lo que sus entradas van a ser relevantes para la parte superior. Pero si fuera a mover esto y nos dirigimos de nuevo a nuestro TercerPersonaje Persona. Se puede ver que las salidas de nuestra nota de cambio. Ahora, estas salidas harán cosas diferentes dependiendo de los disparadores que hayas configurado dentro de tu entrada. Por lo que vamos a añadir de nuevo en nuestra entrada de tap o gatillo, lo siento, y ese es el que está en la parte inferior aquí. Y dejaremos la configuración por defecto. Por lo que vamos a guardar esto y podemos volver a ThirdPersonCharacter se activan aquí se ejecutará cada vez que primero presionemos el botón de toque hacia abajo. Entonces para nosotros eso está ahí fuera. Lo establecí en nuestros contextos de mapeo. Y el completado correrá cuando levantemos la llave. Entonces lo que podemos hacer es agregar una cadena de impresión aquí. Establecimos esto para que se active. Lo deletreas bien. Ahí vamos. Y voy a copiar y pegar esto. Conectaremos esto, lo completaremos y lo pondré completo así. Lo deletreas mal, pero ahí vamos. Así que ahora cuando compilo, esperaríamos que cuando toque hacia fuera más rápido de 0.2 segundos, estos se imprimirían, pero en realidad no lo eran. Y podemos ver esto si le pego play por tap out, no pasa nada. Ahora eso es porque también tenemos que hacer algunos cambios de código dentro de nuestro personaje. Entonces para hacer esto, voy a hacer un evento poseer. Y si recuerdas de nuestra lección de eventos, este evento se ejecutará cada vez que un controlador tome el control de este personaje. Entonces a partir de eso vamos a arrastrar fuera de nuestro nuevo controlador, sí costará también. Controlador de jugador. Y luego a partir de esto necesitamos obtener el subsistema de jugadores locales de entrada mejorada. Entonces a partir de eso necesitamos agregar un contexto de mapeo. Ahora, esto es esencialmente decirle al controlador del jugador que queremos usar este ejemplo de contexto de mapeo que configuramos overhead. Por lo tanto, necesitamos establecer nuestros contextos de mapeo al contexto de mapeo de ejemplo. Así que ahora cuando lo compilamos y golpeamos play, si toco hacia fuera, se puede ver que completa y activó nuestra impresión hacia fuera. Ahora el propósito de tener que establecer los contextos de mapeo te permite tener diferentes esquemas de control dependiendo de lo que quieras hacer. Entonces por ejemplo, es posible que tengas un personaje en tu juego y un vehículo. Ahora tal vez quieras que los controles de los personajes y los controles de los vehículos sean completamente diferentes. Entonces lo que podrías hacer es tener un contexto de mapeo para tu personaje y luego un segundo vehículo de combustible. Luego, en tu personaje, podrías establecer los contextos de mapeo usando el nodo agregar contextos de mapeo a tu contexto de mapeo de caracteres, que podría tener todas tus entradas para cuando tu jugadores que controlan el personaje. Entonces en tu vehículo, un plano, puedes tener el mismo código, pero eso podría establecer un contexto de mapeo de vehículos en su lugar. Y luego ese contexto de mapeo, podrías tener diferentes controles, tal vez para cambiar de marcha y cosas por el estilo, cosas que no necesitarías en un plano de personaje. Ahora esto es un poco más complicado que digamos, el sistema de entrada anterior que estoy arreglando para su uso. Pero este sistema es mucho más completo y una vez que lo dominas, hay mucho más que puedes hacer con él. Pero solo debes saber por ahora que si planeas usar el sistema de entrada mejorado, necesitarás este código en tu personaje para decirle al controlador del reproductor exactamente qué contextos de mapeo quieres usar. Y ten en cuenta que el contexto de mapeo es donde realmente le dices a los eventos de entrada lo que las claves pueden llamarlos. Ahora, es posible que hayas notado dentro de nuestros contextos de mapeo, podemos agregar múltiples claves. Entonces si quieres decir tener L y otra clave, ejecuta nuestro ejemplo y pon, podríamos hacer eso. Entonces podría configurar esto para decir x Ahora, si presiono Play y toque X, se puede ver que también se está imprimiendo. Si presiono hacia fuera, se puede ver que también está imprimiendo también. Si volvemos a nuestros contextos de mapeo, se puede ver que en realidad tenemos una opción de disparadores aquí también para cada una de las teclas. Ahora bien, si agregamos un disparador dentro de nuestra entrada de ejemplo, esto afectará a todas las claves que tengamos. Cualquier clave que agreguemos bajo nuestro ejemplo, input tendrá seguir las reglas de activación que configuramos en nuestra entrada de ejemplo. Pero tal vez no queremos tener eso en nuestro ejemplo de entrada. Queríamos que ciertas claves tuvieran que hacer ciertas cosas. Entonces tal vez por ejemplo, para que L trabaje con, quiera tener que tocarlo. Pero para que X funcione, tal vez necesitamos mantener pulsada la llave. Y si vamos, si hacemos clic en la opción desplegable aquí y vemos que tenemos ajustes para sostener esta presa clave. Entonces el principal es el umbral de tiempo de espera. Esto significa que tengo que mantener pulsado el botón durante 1 segundo antes de que se ejecute el código. Si golpeamos play ahora, si presiono X, no pasa nada hasta. Se pasó un segundo, y ahora mi gatillo en realidad está funcionando continuamente hasta que me solté de x Se puede ver completo, Simplemente ejecuta y se dispara, había dejado de correr. Pero si intento tocar mi x, no pasa nada. Si mantengo pulsado mi búho, no pasa nada porque si te acuerdas, configuramos la regla de tap para mi L. Así que si toco, puedes ver el evento que se estaba ejecutando ahora. Así que sólo para resumir para los disparadores, si salimos del editor de plano, si desea que los disparadores afecten a todas las teclas que pueden llamar a un evento, desea agregar los que están dentro del evento. Así que dentro de aquí, estableces los disparadores aquí que afectarán a todas las claves que asignaste a ese evento. En el contexto del mapeo. Si desea que las claves individuales tengan diferentes reglas de activación, puede hacerlo dentro los contextos de mapeo bajo la clave específica. Y por supuesto, si quieres agregar un gatillo, haces clic en el botón Agregar aquí. Se quiere quitar un gatillo. Sólo tienes que hacer clic en el icono de la papelera para eliminarlo. Ahora, eliminaremos la entrada x por ahora. También puede tener configuración de varios disparadores. Entonces si agregamos un gatillo y digo establecer esto para tocar, también puedo agregar un segundo, y podría establecer esto para que se mantenga. Por lo que ahora nuestro botón L funcionará si lo toco rápidamente o si lo mantengo pulsado por más de 1 segundo. Y podemos probar esto. Puedo pegarle a play. Y si presiono o si toco L rápidamente, se puede ver que está funcionando. O si lo mantengo pulsado y espero 1 segundo, se puede ver que ahora disparado se está ejecutando cada fotograma. Y si dejo ir, se pueden ver las carreras terminadas. Ahora no voy a pasar por todo tipo de gatillo porque hay bastantes. Y si alguna vez quieres saber qué hacen, una buena manera de hacerlo es simplemente pasar el ratón sobre ellos en este menú desplegable. Y en realidad te da una explicación razonablemente decente de lo que hace cada uno. Ahora es posible que hayas notado en nuestra nota de evento aquí que tenemos un valor de acción. Ahora, dependiendo del tipo de entrada que hayas usado en los contextos de mapeo, esto nos dará un valor que podemos usar para controlar el código. Entonces, debido a que solo estamos usando un alqueno, esto solo ejecutará uno cuando se presione la tecla hacia abajo y 0 cuando no se presione la tecla. Pero también podemos cambiar este valor dentro de nuestra entrada de ejemplo. Aquí podemos configurar esto para decir booleano en C que obtenemos esta notificación cada vez que cambiamos algo. Si volvemos al personaje en tercera persona, se puede ver que ahora se ha cambiado a un booleano. Y esto sólo sería cierto cuando se presiona nuestra tecla hacia abajo y falsa cuando se suelta. Ahora también podemos usar este valor para controlar cosas como están mirando dirección y nuestra dirección de movimiento. De manera similar a cómo el valor del eje en el sistema de entrada anterior controla nuestros controladores, su y pitch. Esas son las direcciones a las que va a estar mirando nuestra cámara. Ahora hay algunas maneras diferentes de hacer esto con el nuevo sistema. Te mostraré un par de formas de cómo hacerlo ahora. Entonces comenzaremos borrando este evento porque ya no estaremos usando eso. Y nos dirigiremos al navegador de contenidos. En realidad voy a cambiar el nombre de nuestra entrada de ejemplo. Yo sólo voy a cambiarle el nombre, digamos mouse arriba, abajo. Podemos abrir esto. Y voy a cambiar el tipo de valor a un eje uno D, Así que un flotador. Por lo que el valor de salida de nuestro evento en nuestro ThirdPersonCharacter será un flotador. Después nos dirigiremos a nuestros ejemplos de contextos de mapeo. Ahora nos desharemos de nuestros mapeos actuales y sólo voy a crear uno nuevo. Y vamos a poner esto a nuestro ratón arriba y abajo. Y voy a configurar esta entrada al ratón Y. Y el ratón Y es nuestro movimiento del ratón hacia arriba y hacia abajo. Entonces vamos a seleccionar eso. Así que ahora hemos puesto nuestro ratón arriba y abajo a un valor de flotación. Hemos configurado nuestro ratón Y para llamar a ese ratón arriba y abajo evento. Entonces vayamos a nuestro ThirdPersonCharacter y encontraremos la mirada hacia arriba y hacia abajo. Y voy a borrar esto porque ese es el viejo evento. Y vamos a reutilizar la nota de tono aquí. Entonces vamos a hacer ratón arriba o abajo. Se puede ver bajo eventos de acción mejorada, tenemos nuestro ratón hacia arriba hacia abajo. Desde aquí. Vamos a arrastrar activado a nuestro Add controller pitch input. Y esto correrá sólo cuando esté moviendo el ratón. Y tomará el valor de acción y conectará esto y lo compilaremos. Ahora recuerden, esto solo funciona porque tengo este código aquí arriba en la posesión que le dice a nuestro personaje que queremos usar nuestros contextos de mapeo de ejemplo, que es lo que hemos usado para asignar nuestro movimiento del ratón a nuestro evento. Entonces lo que haremos ahora es golpear play y voy a mover mi mouse hacia arriba y hacia abajo. Se puede ver que está funcionando, pero mis controles en realidad están invertidos. Entonces lo que necesito hacer es invertir los valores menos y positivos que se están suministrando desde mi mouse. Y la forma en que podemos hacer eso es que podemos usar modificadores. Por lo que irá a nuestro ratón arriba y abajo evento aquí. Y aquí tenemos una opción de modificadores. Ahora, los modificadores son un poco más avanzados, así que no te preocupes demasiado si no lo consigues de inmediato. Pero lo que nos permiten hacer es modificar el valor que está siendo suministrado por nuestra pulsación de tecla o el movimiento del ratón, por ejemplo. Por lo que añadiremos un nuevo modificador. Si hacemos clic en la opción aquí, tenemos algunas diferentes. Pero lo que queremos hacer es invertir nuestro valor de salida. Y el Negate aquí fue lo que hará eso. Entonces lo configuraremos para negar. Entonces ahora cuando golpeo play, si muevo el mouse hacia arriba, miro hacia arriba y si muevo el mouse hacia abajo, miro hacia abajo. Eso otra vez, es básicamente hacerlo para que cuando el ratón está emitiendo un valor positivo, entonces negar convierte eso en un valor negativo. Y luego al revés cuando el ratón suministra un valor menos, entonces la puerta lo convierte en un valor positivo, y eso es lo que le da a mi cámara el movimiento correcto. Por lo que ahora necesitamos un sitio a sitio. Ahora mi movimiento de lado a lado, sigue funcionando porque sigo usando ese viejo input aquí. Pero si borro esto y presiono Play ahora, solo puedo mirar hacia arriba y hacia abajo. No puedo mirar de lado a lado para nada. Por lo que necesitamos establecer un movimiento de lado a lado. Entonces haremos eso haciendo clic con el botón derecho. Irá a planos o lo siento, iremos a Entrada, acción de entrada, y llamaremos a este ratón izquierda, derecha. Y eso lo abriremos. Queremos establecer el valor de tipo al eje un día. Y luego tenemos que ir a nuestro ejemplo de contexto de mapeo. Y aquí, necesitamos agregar un nuevo mapeo. Por lo que estamos agregando un nuevo evento. Esencialmente. Queremos poner esto a nuestra izquierda y derecha. Tenemos que establecer una tecla ahí o el movimiento del ratón que haga correr este evento. Entonces queremos mouse x, así que ese es nuestro movimiento del ratón de lado a lado. Entonces seleccionaremos eso. Ahora en nuestro ratón hacia arriba y hacia abajo, usamos un Negate para invertir los valores que nos suministra. No necesitamos hacer eso con la izquierda y la derecha. Por lo que ahora sólo volveremos a nuestro ThirdPersonCharacter. Y de nuevo, haremos clic derecho y haremos tu mouse a la izquierda, derecha, o fue a la izquierda derecha. Tenemos el ratón a la izquierda, a la derecha, bajo eventos de acción mejorados. Y conectaremos nuestro disparado para agregar controlador. Y tomaremos nuestro valor de acción y conectaremos eso y compilaremos. Entonces ahora cuando voy a mi mapa de tercera persona y le pego a Play, puedo mirar de lado a lado y se está moviendo correctamente. Puedo mirar hacia arriba y hacia abajo. Ahora estamos utilizando el nuevo sistema de entrada mejorado para controlar el movimiento de nuestra cámara. Ahora el sistema de entrada mejorado en realidad tiene otra forma en que podemos configurar este movimiento de entrada del eje hacia arriba. Ahora, en lugar de tener que nodos individuales para esto, en realidad podríamos hacerlo con uno. La forma en que podríamos hacerlo es usando un flotador 2D en nuestro evento. Entonces lo que haremos ahora es eliminar el mouse arriba y abajo evento aquí. Sólo usaremos el ratón a izquierda y derecha. En realidad voy a renombrar esto por solo movimiento del mouse. Por lo que ahora podemos usar solo una acción de entrada para controlar. Ambos miran de lado a lado y arriba y abajo. Así que en nuestro movimiento del ratón, hemos establecido nuestro eje, establecemos nuestro acceso a 2D. Entonces eso significa que en lugar de un solo valor de flotación tendrá que un valor X y un Y. Entonces tenemos que ir a nuestro ejemplo de contexto de mapeo. Y nos desharemos de la de arriba aquí. Ya tenemos nuestro movimiento del ratón aquí porque teníamos antes acabamos renombrarlo y tenemos nuestro ratón X aquí. Pero voy a borrar que fueron simplemente crear completamente un nuevo mapeo. Por lo que vamos a hacer ratón moverlos. Por lo que ahora tenemos que elegir los movimientos del ratón que harán correr este evento de movimiento del ratón. Entonces iremos a la opción aquí. Buscaremos el primer ratón Y. Ahora si recuerdas nuestro ratón blanco como nuestro arriba y abajo, y necesitamos invertir ese valor. Entonces necesitamos un modificador, y necesitamos establecer este modificador para negar que invertirá el valle arriba y abajo. Entonces necesitamos un nuevo insumo. Entonces agrega una nueva entrada. Esto va a ser mouse x Ahora si recuerdas antes teníamos eventos individuales para mouse white y mouse x, ahora estamos haciendo ambos en el mismo evento. Por lo que ahora hemos añadido tanto nuestro ratón blanco como un ratón X entradas. Cuatro de ellos irán al ThirdPersonCharacter aquí. Y vamos a borrar estos eventos que teníamos para antes. Así que ahora, en lugar de tener dos eventos separados para cada uno de estos nodos que controlan arriba y abajo y el movimiento de lado a lado, haremos clic derecho y buscaremos el movimiento del ratón. Movimiento del ratón así. Y tenemos nuestro nuevo evento de movimiento del ratón que configuramos. Entonces ahora tomaremos disparado, conectaremos esto para controlar el pitch. Y conectaremos esto a tu así. Ahora puedes ver que tenemos un valor de acción, y esto es solo un vector 2D. Entonces, si arrastramos hacia fuera, podemos crear un nodo break y eso solo nos da acceso a esos valores de flujo X e Y. Por lo que usará estos valores para controlar nuestro movimiento de arriba y abajo y de lado a lado de la cámara. Por lo que nuestra x es siempre nuestro sitio a sitio. Entonces conectaremos esto a la entrada de tu controlador. Y la y está arriba y abajo. Así que conectaremos esto a nuestra entrada de paso del controlador. Y ahora podemos compilar. Y estamos listos para probar esto para que podamos golpear play. Y si muevo el mouse así decido que está funcionando bien. Pero si lo muevo hacia arriba y hacia abajo, sigue moviéndose de lado a lado. Podemos mover la cámara hacia arriba o hacia abajo. Ahora, la razón de esto es si volvemos a nuestro contexto de mapeo de ejemplo, el blanco del ratón y el MouseX ambos simplemente nos proporcionan un solo valor de flotación. Ahora, si vamos a nuestro evento, pueden ver que tenemos dos salidas de flujo. Ahora, estas dos entradas para nuestro ratón arriba y abajo y de lado a lado, o ambos están tratando de usar ese valor x. Pero no lo pueden usar los dos. Tenemos que decirle a uno de ellos que necesita usar la salida y. Entonces en nuestro contexto de mapeo, en los modificadores para nuestro ratón Y, vamos a agregar un nuevo modificador. Y vamos a establecer esto a los valores del eje de entrada de Suiza. Y si lees la punta de la herramienta, en realidad explica lo que hace. Dice útil para mapear una entrada 1D, que es lo que nuestro ratón Y es, es una entrada 1D en el eje y de una acción 2D. Entonces, si lo recuerdas, el movimiento del ratón es un eje 2D. Entonces nuestro switch va a mapear el valor del eje de nuestro Y mouse Y a ese segundo valor y. Entonces usaremos eso. Por lo que ahora nuestro movimiento de lado a lado estará usando el valor X aquí. Y nuestro movimiento hacia arriba y hacia abajo ahora estará usando el valor y debido a ese modificador que acabamos de agregar. Si golpeo play, muevo mi mouse de lado a lado hacia arriba y hacia abajo, y todo está funcionando correctamente. Así que eso es solo un par de ejemplos de cómo puedes usar las entradas de acceso con el nuevo sistema de entrada mejorado. Ahora hay otros tipos de modificadores que puedes aplicar a tus entradas clave si lo deseas, puedes agregarlos donde hayamos agregado en una puerta y valores de eje suizo o de entrada. No los estaré cubriendo en esta lección porque hay bastantes. Pero si alguna vez quieres averiguar lo que hacen, puedes simplemente pasar el mouse sobre él y te da una breve descripción de lo que hace cada uno. Ahora podemos aplicar modificadores a una entrada de un solo jugador, como hemos hecho aquí con nuestra entrada Y del ratón. Hemos agregado el negate y la entrada del switch. También puedes aplicar estos modificadores dentro de nuestro movimiento del ratón. Ahora cualquier modificador que agreguemos aquí afectará a todas las teclas que agreguemos a este movimiento del ratón dentro de nuestros contextos de mapeo. Por lo que es importante recordar que a veces querrás agregar modificaciones solo a una entrada como lo hemos hecho con el ratón Y, en lugar de simplemente aplicarlas al tipo de entrada, porque eso afectará a todas las claves que vincula a ese tipo. Así que solo para resumir, el sistema de entrada mejorado nos permite crear acciones de entrada como el movimiento del ratón. Entonces podemos crear contexto de mapeo, que es donde podemos establecer qué claves llamaremos nuestras nuevas acciones de entrada. Entonces podemos crear esas acciones de entrada dentro de nuestro personaje o controlar los planos. Entonces usando disparadores, podemos elegir cómo se tiene que presionar esa tecla para que el evento se active, luego las modificaciones nos permiten modificar el valor de acción que proporciona ese evento. Para que esos eventos funcionen, debemos asegurarnos de que usamos el contexto add mapping. Y podemos usar eso obteniendo el controlador del jugador, obteniendo el subsistema de entrada mejorada de jugadores locales. Y eso nos permite agregar un contexto de mapeo. Después establecemos qué contextos de mapeo queremos usar. Así que hemos estado usando el contexto de mapeo de ejemplo. Entonces eso es lo que se establece aquí. Si no tenemos este código, entonces los eventos de entradas que hemos estado usando no funcionarán. Entonces eso va a ser todo por esta lección. Esperemos que tenga una mejor comprensión de cómo funciona el sistema de entrada mejorado ahora y lo usaremos un poco más en nuestras futuras lecciones. 30. Lecciones adicionales (Etiquetas): Oigan a todos. En esta lección vamos a estar echando un vistazo etiquetas de actores y componentes. Ahora bien, si estabas siguiendo junto con nuestra lección anterior, todo lo que he hecho aquí es crear una nueva plantilla de tercera persona para que podamos empezar de nuevo. Por lo que comienza con las etiquetas son básicamente solo una matriz de variables de nombre que tanto los ejes como los componentes tienen incorporados. Y por eso, significa que podemos conseguir un acto como etiquetas o etiquetas componentes sin tener que costar a otro Blueprint. Utilice interfaces de blueprint. Entonces podemos usar algunos de los nodos que están integrados en el motor para comprobar a un actor si tiene una etiqueta. O podemos hacer algo como conseguir a todos los actores del mundo que tienen una etiqueta específica. Empezaremos yendo al Third PersonCharacter y te mostraré donde puedes agregar nuevas etiquetas. Yo sólo voy a arrastrar esto hasta arriba aquí. Y entonces nuestros valores predeterminados de clase solo van a buscar etiqueta. Y aquí se puede ver que tenemos una opción de etiquetas y es una matriz, y es sólo una matriz de nombres como hemos utilizado antes. Por lo que si hacemos clic en el botón Plus aquí, podemos agregar una nueva entrada. Puedo configurarlo para decir jugador. Podemos agregar nuevas entradas también si queremos simplemente haciendo clic en el botón más, si queremos eliminar entradas, simplemente podemos hacer clic en la flecha hacia abajo junto al cuadro de texto y presionar eliminar. Por lo que ahora hemos añadido una etiqueta a nuestro Third PersonCharacter y ese objetivo es plan. Ahora necesitamos un plano que vaya a leer estos textos. Entonces voy a crear un nuevo blueprint y el navegador de contenidos. Y seleccionaremos Actor y yo sólo voy a llamar a ese gatillo, abrir eso. Voy a agregar un componente de colisión de caja. Yo sólo subiré eso un poco aquí. Vamos a ir a detalles tales para oculto y desmarcar, oculto y juego solo para que podamos sentarnos y compilaremos. Ahora como lo hemos hecho antes, iremos al Event Graph. Voy a eliminar la reproducción inicial y los nodos tick, y en realidad vamos a utilizar el actor empezar a solapar nodo que ya está aquí. Ahora bien, si recuerdas, este nodo se ejecuta cada vez que algo se superpone a nuestro gatillo y nos da acceso al otro actor que solapó el gatillo. Ahora, normalmente si quisiera obtener información que está en mi Third PersonCharacter, tendría que arrastrarme y tengo un costo para mi personaje en tercera persona o configurar una Interfaz de Blueprint para recuperar esa información. Ahora, debido a que nuestras etiquetas en realidad están integradas en nuestro actor, no tenemos que hacer esto porque esto ya es un pin de actor. Para que podamos arrastrar hacia fuera y podamos acceder a nuestras etiquetas para que pueda buscar obtener impuestos. Y ya ves que puedo acceder a mi array de tags. Entonces esto se comporta igual que una matriz normal. Podemos alargar. Podemos usar un nodo get con él. Todo lo que podemos arrastrar y podemos recorrer todas las etiquetas que se encuentran en nuestro actor. Ahora act en realidad ha venido con algunas etiquetas, funciones específicas incorporadas para que podamos arrastrar hacia fuera y podamos buscar tiene etiqueta. Podemos usar el actor tiene tag node y esto solo comprueba es la etiqueta que establecemos aquí. ¿ O este accesorio tiene la etiqueta que colocamos aquí? Si lo hace, entonces eso volverá verdadero, y si no, volverá falso. Para que podamos probar esto. Ahora, puedo arrastrarme desde aquí. En realidad hará clic derecho y buscará cadena de impresión. Conectaremos esto hasta nuestro inicio a superponerse, y conectaré esto a nuestra salida booleana, compilaré, arrojaré uno de estos al mapa de aquí, que lo hace un poco más grande. Nuestra para re-escalar o para sacar a colación la herramienta de re-escala, haré un poco más grande. Golpea play. Ahora cuando me encuentro con mi cubo aquí, puedes ver que está volviendo falso porque en realidad no configuré el Typekit. Por lo que configuraremos esto para compilar y darle a Play. Y ahora cuando me topo con la custodia y veo que está volviendo verdad porque nuestro personaje jugador tiene esa etiqueta de jugador. Ahora, debido a que nuestra etiqueta es solo una matriz de nombres que podemos agregarle durante el juego también. Entonces si quisiéramos, podríamos arrastrarnos y hacer conseguir etiquetas. Y usando esta matriz PIM, podríamos arrastrar hacia fuera y usar el Add Node. Y podríamos agregar una nueva etiqueta a nuestro plan. Por lo que podríamos agregar say on fire tag. Y entonces borraremos estas notas aquí abajo por ahora. Entonces podríamos arrastrar hacia fuera de nuestras etiquetas otra vez y bucle. Así que recorremos todas las etiquetas actuales e imprimiremos cadena, las etiquetas actuales de los jugadores. Así que vamos a conectar esto hasta la cadena de impresión y el elemento de matriz a la cadena se compilará. Hit Play. Ahora cuando me topo con la caja aquí, Se va a agregar una nueva etiqueta a nuestra trama. Y luego se va a imprimir esos nombres de etiqueta. Justo así. Ahora también podemos agregar etiquetas a los componentes. Entonces, si salimos del avión, simplemente me siento dolido y voy a nuestro TercerPersonaje Persona. Nos desharemos de esta búsqueda por el momento, y seleccionaré algo así como el componente cápsula aquí. Entonces este es un componente y es la forma de cápsula que está en nuestro puerto de vista aquí. Y si con ella seleccioné buscar etiqueta en el panel Detalles en C, tenemos etiquetas de componentes. Ahora bien, estos funcionan exactamente igual que nuestro después de impuestos es solo que estas etiquetas específicas para este componente. Para que podamos agregar una nueva etiqueta, Oh cool, esta colisión. Y voy a compilar. Ahora si volvemos a nuestro gatillo, tendré que lanzar a un personaje usando mi otro pin de actor aquí. Porque si te acuerdas, el actor en realidad no contiene los componentes de la cápsula, así que no podré encontrarla. Pero si elenco al personaje. Así. Y eliminaremos el resto de este código. Entonces desde nuestro personaje, queremos obtener el componente cápsula. Y eso es aquí abajo, en la parte de abajo. Ahora a partir de esto podemos arrastrar hacia fuera y buscar tiene etiqueta. Se puede ver que tenemos un componente ha etiquetado nota aquí, y esto funciona exactamente igual que nuestra etiqueta o actor ha etiquetado nodo. Establecimos una etiqueta que queremos comprobar. Colisión. Devolverá true o false si componente cápsula de este personaje tiene esta etiqueta de colisión. Por lo que arrastrará hacia fuera y otra cadena de impresión y se conectará hasta aquí, presione Compilar. Y ahora cuando atropellamos nuestra caja aquí, se puede decir que está volviendo verdad. Por lo que las etiquetas son una forma muy útil de poder agregar un poco de información extra a cualquier actor. Entonces cualquier cosa que esté en el nivel o cualquier componente en esos actores. Un buen ejemplo de cómo las etiquetas pueden ser útiles es tal vez en el futuro se crea un sistema de IA. Y quieres que esa IA pueda decir si un actor es amistoso o enemigo. Eso lo puedes hacer usando etiquetas. Debido a que todos los actores y tu nivel tienen etiquetas incorporadas, podrías agregar esas etiquetas a cualquier objeto y ellos podrían leerlo. Ahora, los tanques también son útiles para conseguir actores o componentes. Entonces si aceptamos nuestro plan ya que es su cabello y volvemos a nuestro gatillo. Sólo voy a borrar estos nodos. Si lo recuerdas, tenemos el componente get por notas de clase. Entonces si lo busco, obtengo componente por clase, puedes ver que hemos usado este nodo antes y eso nos permite obtener un componente de un blueprint específico. Ahora, también tenemos los componentes get by tag node. Entonces, si creamos eso aquí, podemos obtener todos los componentes que están dentro de un blueprint con una etiqueta específica. Si recuerdas, cuando establecemos nuestra etiqueta dentro de nuestro Componente Cápsula, estas son las etiquetas que estará comprobando. Después emitirá todos los componentes que tienen esa etiqueta específica que establecemos. Por ejemplo, podría configurar esto a colisión así. Vamos a arrastrar hacia fuera y vamos a obtener la longitud de esta matriz. Y vamos a imprimir cadena, la longitud, arrastrar hacia fuera de aquí y hacer cadena de impresión así. Ahora cuando atropellemos el gatillo, deberíamos verlo imprimir uno. Ahora también podemos conseguir a los actores que tienen ataque. Entonces si volvemos a nuestro gatillo y hacemos clic derecho y tal qué actor con etiqueta. Se puede ver que tenemos el get all actors with tag node. Para que podamos crear eso. Yesto conseguirá a todos los actores de nuestro nivel que tengan una etiqueta específica. Ahora como advertencia, este es un nodo bastante pesado de rendimiento, por lo que no quieres estar usando esto en tecnología por ejemplo. También hay otro conseguir todos los actores que hemos etiquetado ahora, si hacemos clic derecho y tal va a conseguir todos los actores con etiqueta. Se puede ver que hay un gueto actores de clase con etiquetas. Entonces si creamos eso, esto hará lo mismo que el nodo aquí arriba, pero limitará su selección a un acto específico de tipo. Entonces tal vez tuvimos un montón de actores con una etiqueta enemiga, por ejemplo, pero sólo queríamos conseguir los que eran el Third PersonCharacter. A lo mejor has tenido muchos personajes que tenían la etiqueta enemiga, pero solo conseguimos uno para obtener nuestro Third PersonCharacter, podríamos establecer esto aquí. Ahora, esto sólo devolverá planos de personajes en tercera persona que tengan la etiqueta enemiga. Por lo que las etiquetas son una forma muy útil de agregar un poco de información a cualquier objeto en el mundo o cualquier componente. Entonces eso es todo por esta lección. Esperemos que entiendas ahora para qué se usan las etiquetas y también cómo funcionan en el motor. 31. Lecciones adicionales (actores de spawning): Oigan a todos. En esta lección te voy a estar hablando a través de actores de desove. Apoyar a los actores es cómo creamos nuevos objetos en el mundo durante el juego. Por lo que comenzará con la creación un nuevo actor que vamos a engendrar. Sólo voy a crear una clase de blueprint. Se lo pondré a un actor, y sólo voy a llamar a esta esfera de ejemplo. Y eso lo abriremos. Sólo voy a arrastrar esto hasta arriba aquí. Y voy a agregar un nuevo componente o búsqueda esfera y crearemos una forma de esfera. También voy a habilitar, si bajamos a la física aquí, simular física, eso es para que si la colocamos en el mundo, empiece a rodar y tenga física. Entonces ahora volveremos al mapa. Yo sólo voy a borrar este gatillo. Esto es solo de nuestra lección anterior. No necesitas preocuparte por eso si no lo tienes. E iremos a nuestro Third PersonCharacter. Y luego aquí voy a crear una nueva entrada de eventos. Entonces buscaremos el evento de entrada uno. Y si recuerdas, este nodo simplemente se ejecuta cada vez que presiono uno en mi teclado. Ahora para engendrar actores en el mundo, usamos el actor cuchara del nodo de clase. Ahora ya hemos usado esto un poco antes, pero en esta lección vamos a entrar en todo detalle sobre cómo funciona. Entonces partiendo de lo más alto, tenemos la clase. Este es el tipo de plano que estamos desovando en el mundo. Podrá seleccionar cualquiera de nuestros planos desde nuestro navegador de contenido. Si pinchamos hacia abajo de nuestra cadera, bonita búsqueda, por ejemplo, esfera. En C, encontramos nuestra esfera de ejemplo. Es un poco difícil de ver porque lo más destacado, pero es que si hago clic en esto, se puede ver que nuestra clase ahora es ejemplo de natación. Se puede ver que el nombre del nodo en realidad ha cambiado a spawn actor ejemplo esfera. Y eso realmente cambia el tipo de valor de retorno. Así que si nos desplazamos sobre eso, se puede ver que esto es ahora una referencia de objeto esfera de ejemplo, lo que significa que si tuviéramos variables, digamos en nuestro ejemplo allí, crearé una nueva variable rápidamente, que llamó a este ejemplo. Puedo sondear. Ahora si me arrasto desde el valor de retorno, sólo puedo obtener esa variable de ejemplo. No necesito lanzar mi esfera a partir de este valor de retorno porque ya le hemos dicho al nodo que estamos desovando ese tipo y está establecido el valor de retorno a esa referencia de esfera de ejemplo. Por lo que esto puede ser útil si tal vez tuvo funciones o eventos que desea que se enfríe tan pronto como se genere el blueprint. Entonces a continuación tenemos la transformada de desove. Esta es la ubicación en el mundo en la que se engendrará el actor. Si arrastramos hacia fuera, podemos usar la nota make transform aquí que nos permite establecer la ubicación, rotación y también la escala del actor. Ahora también podemos, si desconectamos esto, haga clic derecho en la transformación de spawn aquí y hacer Split Struct Pin. Y se puede ver que en realidad podemos acceder a la ubicación, rotación, y escala justo en el nodo aquí si queríamos. O podemos hacer clic derecho de nuevo y hacer recombinar, y eso los combinará de nuevo juntos en este lápiz de transformación. Ahora cuando estás engendrando a un actor, podría chocar o algo más en el mundo mientras intenta engendrar. Por lo que tenemos ajustes de manejo de colisiones. Ahora, por defecto será la configuración predeterminada del proyecto que se establece dentro de la configuración del proyecto. Entonces tenemos siempre spawn ignorar colisiones. Eso significa que no le importan las colisiones. Van a desovar en la ubicación que SAP. Hemos tratado de ajustar la ubicación pero siempre chocar. Eso significa que si está tratando de desovar en una ubicación que se superpone, otra cosa es colisión. Intentará ajustar un poco la ubicación para que no se superponga esa colisión. Entonces hemos tratado de ajustar la ubicación, no desove si sigue deslizándose. Entonces eso hace lo mismo. Trata de ajustar la ubicación que está desovando si hay colisión interfiriendo. Pero si no puede encontrar un lugar para desovar sin colisión, entonces no engendrará a este actor. Y entonces tenemos no desovar, que significa que el actor simplemente no va a desovar si choca con cualquier cosa. Para esto, siempre quiero que mi esfera desove. Entonces yo sólo voy a poner siempre spawn, ignorar colisiones. Ahora la pluma instigador es una referencia peón. Ahora, en realidad no necesitamos enchufar esto para que nuestro actor genere, pero esto sí nos permite decirle al actor esencialmente qué jugadores engendraron. Esto puede ser útil, digamos, tal vez estés desovando proyectiles de una pistola. Entonces querrías decirle a los proyectiles qué jugador los desove para que cuando esos proyectiles golpeen a otro jugador, por ejemplo, el de un jugador pueda entonces ver quién los estaba dañando. Hay otros usos para esto, por supuesto, no sólo para proyectiles, sino que eso es sólo un ejemplo. Entonces si hacemos clic en la flecha hacia abajo aquí, tenemos al dueño. Ahora de nuevo, este es un bolígrafo que no tienes que enchufar y que generalmente se usa para replicación y codificación multijugador. Pero en realidad nos permite establecer una variable dentro del actor. Y si vamos a nuestra esfera aquí, se puede buscar dueño. Y eso nos da la propiedad del plano. Ahora bien, si hemos establecido esto cuando estábamos desovando el plano, lo hará, este nodo volverá a donde sea que conectamos al pin propietario cuando lo engendramos, en realidad podemos acceder al instigador también. Entonces si vuelvo a mis ejemplos por ella, podemos hacer conseguir instigador y podemos conseguir esa variable también. Y esto volverá a donde sea que conectemos al pin instigador cuando engendremos ese plano. Esas son todas las entradas predeterminadas que vienen con este nodo. Pero en realidad podemos agregar nuestra propia si volvemos a nuestro ejemplo, así que aquí, y selecciono mi variable de ejemplo en estos ajustes para ello, podemos usar la opción expuesta en spawn. Ahora, antes de asumir esto, tenemos que tomar en instancia editable. Entonces podemos tomar en expos en el lugar. Y si compilamos y volvemos al blueprint de ThirdPersonCharacter, y lo compilaremos también. Deberíamos ver ese pin un pin. Ahora no me ha aparecido. Así que voy a hacer clic derecho en el nodo y hacer refrescar nodo. Se puede ver que aparecieron los pines. A veces esto sucede y solo necesitas refrescar el nodo. A veces eso cuando recompilas simplemente aparecerá la pluma. Es que, es algo aleatorio. Pero como se puede ver, ahora tenemos la entrada de la variable de ejemplo. Para que podamos establecer esto en verdadero o falso. Y eso en realidad se establecerá cuando los actores engendran ese valor inicial variable. Y lo hemos hecho con un booleano, pero puedes hacerlo con cualquier variable que quieras. Si quisiéramos decir tener una a flote y quisiéramos que esto se llamara, digamos, daño. Podríamos hacer eso y podríamos configurar esto a incent dijo que es carrete no expuesto en el componente spawn. Regresa a nuestro personaje en tercera persona. Se puede ver si puedo sondear, sigue sin aparecer, pero haré clic derecho en refrescar. Ahora. Ya ves que ahora tenemos una pluma de put dañina también. Entonces ahora estamos realmente listos para engendrar nuestra esfera. Entonces voy a conectar los prensados hasta nuestro ejemplo aquí. Y ahora necesitamos establecer una ubicación en la que queremos dividirla. Ahora quiero desovar mi esfera en la dirección en que mi cámara está mirando, digamos, tres metros de frente a mi personaje. Entonces lo que haremos es que haré clic derecho y sí obtengo rotación de control. Ahora esta es la rotación de nuestra cámara. Voy a arrastrar fuera de eso y haré el get rotation, rotation x vector, y esto consigue la dirección hacia adelante para nosotros, para nuestra cámara. Entonces multiplicas eso por, queremos cambiar esta pluma a un flotador. Entonces si lo recuerdas, hacemos clic derecho en él. Nosotros sí los convertimos y lo cambiamos a un flotador. Voy a hacer doble precisión. Entonces aquí es donde nos fijamos lo lejos hacia adelante queremos que nuestros objetos toquen. Entonces voy a hacer 300. Y esto es en centímetros, que mueven esto hacia atrás un poco. Entonces tenemos algo más de espacio. Y luego tenemos que arrastrar hacia fuera otra vez y hacer un add. Ahora necesitamos sumar la ubicación actual de nuestro actor, porque actualmente solo estamos moviendo una dirección Ford de 300 centímetros, pero no tenemos ubicación de partida. Entonces sí conseguiremos la localización del actor. Vamos a enchufar esto aquí. Ahora, esta ubicación emitida desde nuestro Nodo Agregar será nuestra ubicación de acceso. Pero Ford 300 centímetros en cualquier dirección nuestras cámaras mirando. Para que podamos enchufar esto ahora a nuestra ubicación aquí arriba. Ahora no tengo que hacer la rotación porque es justo. Y sólo voy a dejar la báscula a una por ahora para que se compile. Y ahora podemos probarlo. Voy a saltar al nivel. Le pegaré a play. Y si presiono uno, se puede ver que estamos desovando en nuestra esfera donde quiera que esté mirando, pero 300 centímetros por delante de nosotros. Entonces así es más o menos como engendras en nuevos actores en un mundo. A continuación, te mostraré cómo destruir actores. Entonces para eso, en realidad voy a reutilizar nuestro gatillo de nuestra última lección. Si no tienes esto o esto es una, podemos eliminar estos nodos y el código. Y aquí, todo esto es, es una caja de colisión que pusimos aquí, he dicho que oculto está ticked off, y eso es todo. Entonces tenemos un evento que empieza solapamiento aquí. Lo que vamos a hacer es que vamos a comprobar que el actor superpuesto sea un ejemplo. Si lo es, entonces lo destruiremos. Entonces podemos alargar y podemos o bien hacer costo a ejemplo, esfera como esta. Ahora cuesta una más útil para cuando realmente necesitamos obtener información de un plano. Porque en realidad no necesitamos obtener ninguna información de este blueprint que solo queremos comprobar, es un ejemplo en el que realmente podemos arrastrar y obtener clase como esta. Y esto consigue la clase de actores. Por lo que se obtiene qué tipo de blueprint que es de nuestro navegador de contenido. Y a partir de eso podemos arrastrar hacia fuera cuando en realidad podemos hacer iguales. Y podemos comprobar si es igual a la esfera de ejemplo. Y si lo es, entonces queremos destruirlo. Así que usaremos un nodo f así. Y nos arrastraremos de otro actor y sí destruiremos. Y hay un nodo llamado Destroy Actor y que mata o destruye así a nuestro actor en el mundo. Por lo que esto nos salva el casting. Son unos cuantos nodos extra, pero el casting sí requiere un poco de rendimiento. Entonces si no tenemos que hacerlo, entonces lo ideal es que no queremos lanzar. Entonces ahora queremos probar esto. Voy a ir al mapa de tercera persona y voy a sumar en nuestro gatillo. Lo pondré por aquí y sólo lo haré un poco más grande. Escale un poco. Y le pegaremos a play. Y nací en una esfera. Entonces desove por aquí. Y puedo darle una patada porque tenemos la física habilitada. Simplemente empújalo dentro de esa caja y verás que se destruye al instante. Ahora, hay otra forma de destruir a los actores. Si volvemos a nuestro gatillo, podemos eliminar este nodo Destroy Actor. Podemos alargar y podemos hacer establecer vida útil como esta. Ahora el nodo set de vida útil nos permite decirle a un actor que queremos que destruya después de cierto tiempo. Para que pueda configurar esto para decir uno. Ahora, 1 segundo después de que la esfera se superponga al gatillo, será destruida. Para que podamos probar esto y darle a Play. Puedo desovar en una esfera. Empujaré esto dentro de nuestra caja y verás que aún no se ha destruido y luego destruye después de un segundo. Podríamos cambiar este valor para decir tres solo para que sea un poco más obvio. Presiona una de nuevo, empuja esto. Se puede ver que en realidad se ha ido por el otro lado. Y luego destruye Porque pidió esperar tres segundos. Entonces eso es todo por esta lección. Ojalá ahora entiendas cómo engendrar y destruir actores en el mundo. 32. Lecciones adicionales (Organización de códigos): Oigan a todos, En esta lección les voy a estar hablando a través de algunas de las características de organización de código que están integradas en el motor. Ahora, acabo de juntar algún código aquí. Es sólo por un ejemplo, no tienes que copiar esto tú mismo. Es sólo para poder demostrar las diferentes características que podemos usar para organizar nuestro código. Entonces, para empezar, tenemos nodos de reencaminamiento. Ahora, si hago doble clic en una línea blanca aquí, podemos crear estos nodos de redireccionar. Ahora estos nos permiten controlar hacia dónde irá realmente la pluma. Y no tienen ningún propósito funcional. No afectan la forma en que se ejecuta el código. Todo lo que hacen es ayudarte a mantener tu código ordenado. Por lo que puede hacer doble clic en una línea blanca o una luz variable. Entonces, por ejemplo, una línea amarilla aquí abajo. Puedo hacer doble clic en eso y puedo crear nodos de redireccionar para eso. O puede hacer clic con el botón derecho, desplazarse hasta la parte inferior aquí, y puede usar la nota de redireccionamiento AD aquí que también crea un nuevo rotulador de redireccionamiento. Por lo que estos pueden ser útiles si quieres sortear algún código que está en el camino. Entonces por ejemplo, podría agregar una F sin propina. Y tal vez quería que este código se ejecutara si algo era cierto, pero quería algún código por aquí para ejecutarlo si no era cierto. Para que pudiera copiar pega esto y tú pones una C ahí. Entonces, en cambio, lo que podría hacer es arrastrar de falso a mi acto de engendro para notarlo, doble clic en esta línea blanca, arrastrar estos hacia abajo. Ahora tenemos bonito código de aspecto limpio. Este código se ejecutará si es cierto, entonces simplemente haremos una especie de zigzag alrededor de él y ejecutaremos este código si es falso. A continuación tenemos comentarios. Ahora los comentarios son realmente importantes para mantener tu código ordenado. Y también si estás trabajando con otras personas o comentarios son importantes para que puedan ver fácil y rápidamente tu código y ver qué partes del mismo hacen. Por lo que para crear un comentario, podemos resaltar algunos nodos y presionar la tecla C de tu teclado. Y eso creará un nuevo comentario. Podemos agregar algún texto a esto para que pudiera escribir crear player, HUD. Por lo que ahora solo puedo mirar este comentario. Sé que estos nodos de aquí crean la cabaña del jugador. Ahora podemos controlar de qué color son las casillas de comentarios. Entonces puedo cambiar eso por decir rojo. Puedo aumentar o disminuir el tamaño de la fuente con este valor aquí, puedo mostrar una burbuja. Entonces, si nos alejamos, puede ser un poco difícil ver el texto con los textos burbujeados de la muestra encendidos. Se puede ver que aquí tenemos esta pequeña burbuja que rebaja cuando nos alejamos. Y si seleccionamos nuevamente la casilla de comentarios, puedes ver que tenemos la burbuja de color que solo nos permite cambiar el color de la burbuja aquí. Entonces tenemos el modo de movimiento. Ahora, si movemos la caja con nodos dentro de ella, trae esos nodos con ella. Pero si queremos apagar esto, podemos cambiar esto para comentar. Y ahora sólo se moverá la casilla de comentarios. Si alguna vez deseas editar el texto, siempre puedes simplemente hacer doble clic en él de esta manera. O si lo seleccionas, también puedes cambiar el texto del comentario por aquí. Otra forma en la que puedes crear comentarios como si hicieras clic con el botón derecho, desplazarte hasta la parte inferior. hay una opción de añadir comentario Aquíhay una opción de añadir comentarioen la que puedes hacer clic y que solo nos crea un nuevo nodo de comentarios. También podemos cambiar el tamaño del nodo de comentarios simplemente arrastrando el borde en cualquier dirección que quieras y puedes redimensionarlo. También puedes usar cajas comunes dentro de cajas. Entonces si hago esto un poco más grande, si solo selecciono, digamos estos nodos, puedo agregar un nuevo comentario a eso. Y puedo agregar algunos textos que para que pueda hacer crear widget, por ejemplo. Otra cosa buena de los comentarios es si puedo hacer, si hago Control F, eso nos permite buscar en el blueprint frases clave. Si busco, digamos, crear jugador HUD, que es lo que está en mi comentario, puede ver que en realidad encuentra común y me dice lo que hay en ese comentario. Si hago doble clic en él, me llevará a esa casilla de comentarios. A continuación echaremos un vistazo a la nota colapsada. Entonces si alejamos aquí y seleccionamos este código, por ejemplo, si hago clic derecho en uno de los nodos, puedo seleccionar Contraer nodos. Si hago clic en eso, aquí obtenemos esta nueva nota que puedo nombrar. Entonces está fresco, este fuego, por ejemplo. Ahora, todo lo que se hace es tomar las notas que habíamos seleccionado y comprimirlas hacia abajo en un nodo aquí. Entonces si hago doble clic en esto, se puede ver que todos nuestros nodos aún existen. Están aquí y seguirán funcionando cuando presionemos uno, todavía se engendró una esfera. Es que ahora todos estos nodos están contenidos en este único nodo. Ahora podemos agregar entradas y salidas a nuestro nodo de colapso si quisiéramos, similar a una función o una macro. Entonces podríamos agregar una entrada, digamos una salida de pin de ejecución, y una salida de ejecución. También podríamos agregar una salida booleana, por ejemplo. Y si abrimos nuestro colapso saber T, Se puede ver que yo nodo de entrada ahora tiene esa entrada de ejecución. También tenemos esa salida de ejecución y nuestra pluma booleana. Ahora, a diferencia de una macro o una función, en realidad no tenemos que ejecutar estos pines para que se ejecute el código dentro del nodo de colapso. Porque nuestra prensa una nota aquí está dentro de nuestro nodo de colapso. Seguirá corriendo sin que ejecutemos estos pines fuera del nodo de colapso. Ahora personalmente, la forma en que me gusta usar estos es agrupar código juntos. Entonces, por ejemplo, tenemos todo este código aquí. Eso es más o menos sólo por el movimiento del personaje. Entonces podríamos hacer clic derecho, hacer nodo colapsado, y luego podría llamar a esto un movimiento. Ahora todo mi código de movimiento está en un solo lugar al que puedo ir, eso es todo aquí. Y tal vez tendría un nodo de colapso para mi mecánica de tiro y escalada y varias otras cosas. De esa manera no solo tienes toneladas de código y tu Event Graph. Si alguna vez desea deshacer tener su código en un gráfico de colapso, siempre podemos simplemente hacer clic derecho el gráfico colapsado y podemos hacer el nodo de expansión que realmente eliminará nuestros aplaudimientos y traer todo nuestro código de vuelta al Event Graph. Ahora es posible que hayas notado la otra opción de colapso. Entonces si hacemos clic derecho hay un colapso para funcionar y Colapso a Macro. Ahora ten en cuenta que estos eventos aquí no pueden existir dentro de una función o una macro. Así que si tuviera que hacer clic derecho en esto y hacer colapso función, verás que obtenemos un error, pero el código aquí en realidad podría existir dentro de una función. Entonces si selecciono eso y hago la función colapsada, se puede ver que crea esta nueva función, en realidad agrega automáticamente la entrada para nosotros también. Si abrimos eso, verás que nuestro código está ahí dentro. Si volvemos a nuestro gráfico de eventos aquí, también está la opción para múltiples Event Graph. Para que vean que sólo tenemos uno. Y si hacemos clic en la flecha hacia abajo aquí, en realidad podemos ver nuestra nota de colapso de fuego también nos da una lista de todos los eventos actuales en el gráfico de eventos. Podemos crear nuevas gráficas de eventos y crear una nueva. Podría llamar a este movimiento se por ejemplo. En nuestra nueva gráfica de eventos de movimiento, podríamos simplemente copiar y pegar o cortaré, así que haz Control X. Y pegaré esto en nuestro gráfico de movimiento. Y ahora todos estos nodos están en nuestra gráfica de movimiento. Todavía funcionan exactamente igual que si estuvieran en el Event Graph, pero ahora están dentro de una nueva gráfica. Podemos utilizar estos para, de nuevo organizar su código. Ahora también podemos organizar nuestro panel Mi Blueprint aquí. Entonces comenzaremos con variables. Si hacemos clic en una de nuestras variables aquí, tenemos algunas opciones. Entonces esta variable en realidad viene con una punta de herramienta porque viene con la plantilla de tercera persona. Si selecciono mi variable de salud, por ejemplo, en C, podemos establecer descripción. Entonces puedo configurar esto para decir los jugadores actuales, así se compilarán. Entonces ahora cuando cierro el cursor sobre mi variable aquí, dice que la salud actual de los jugadores. Y si voy a los impagos de clase y encuentro mi área de salud, pero que como pueden ver, si cierro sobre ella, dice la salud actual de los jugadores. También podemos categorizar nuestras variables. Entonces si selecciono mi variable de salud aquí de nuevo, y bajo a categoría, podemos establecer una nueva categoría. Por lo que actualmente podemos configurarlo a cámara o personaje por defecto, pero podemos crear otros nuevos. Entonces si solo selecciono el texto y elimino eso, podemos darle un nombre. Por lo que llamaré a esto la categoría de salud. Pulse Enter. Verás que ahora nuestra variable está en su propia categoría de salud. Y podemos arrastrar otras variables a esa categoría de salud con solo arrastrarla así. O si lo arrasto de nuevo, podemos cambiar la categoría aquí ahora para ayudar. Y simplemente sube variable a esa categoría para nosotros. Ahora bien, si vamos a nuestros incumplimientos de costos, verás que tendremos una nueva categoría para salud. Entonces compilaremos primero. Después iremos a los valores predeterminados de clase. Se puede ver que ahora tenemos una categoría de salud. Tenemos nuestra salud inicial y nuestra variable de salud tanto ahí. Ahora también podemos agregar subcategorías. Entonces si selecciono mi variable de salud aquí, y voy y hago clic en el texto, si hago clic para que todavía tengamos salud ahí. Pero voy a agregar una línea vertical. Ahora, esta es la llave en la esquina inferior izquierda por encima de la tecla de las ventanas. Podría estar en una ubicación diferente para otras distribuciones de teclado, pero ahí es donde está para mí. Si sostengo shift y hago una línea vertical, ahora puedo escribir otro nombre de subcategoría. Podría hacer, digamos a partir, por ejemplo, si pulso Enter, verás que ahora nuestra variable salud está dentro de la categoría salud, dentro de la categoría inicial. Entonces ahora tenemos una subcategoría. Ahora, también podemos hacer lo mismo para las funciones. Entonces si selecciono mi func nueva función aquí que creé cuando colapsé y nodos. Podemos decir una descripción para esa función. Entonces podría llamar a esto, esta es una función de prueba. Función. Ahora, al pasar el ratón sobre él, se puede ver que lee esto como una función de prueba. Entonces tenemos una punta de herramienta. Podemosestablecer una categoría de gorra. Así que puedes ver que en realidad tiene acceso a nuestras categorías de variables. Por lo que podría establecer esto para decir en la categoría de salud. Ahora lo tenemos dentro de una categoría de salud. Y podemos hacer lo mismo con las macros. Entonces si creo una nueva macro y la selecciono, se puede ver que puedo decir Categoría, digamos la categoría de la cámara por ejemplo, podemos cambiar su color también. Entonces si voy al Event Graph, arrastraremos eso adentro. Simplemente le agregaré algunas entradas rápidamente para que sea un poco más grande. Por lo que agrega algunas entradas. Ahora sí podemos cambiar el color. Entonces si selecciono esto, podemos cambiarlo para que sea como rojo. puedes ver ahora que tenemos título rojo, pero también podemos establecer una descripción si quisiéramos. Entonces esto es una prueba, ¿correcto? No es correcto. Si paso el ratón sobre eso, se puede ver que dice Esto es una macro de prueba. Ahora estas son útiles, sobre todo si estás trabajando con otras personas. Puede dar descripciones detalladas de lo que hacen las funciones, y las variables también lo hacen. También puede ser útil si estás trabajando en un proyecto grande por tu cuenta, porque puedes tener cientos o incluso miles de variables a través de muchos planos. Y podría olvidarse de lo que hace una variable o cómo funciona. Por lo que siempre es bueno tener una breve descripción de lo que hacen tus variables. Por último, podemos decir descripción del plano. Entonces, si subimos a la configuración de costos, podemos establecer la descripción del plano actual. Por lo que se puede ver en este momento dice Character Blueprint que contiene lógica de movimiento. Si vamos al Navegador de Contenido y colocamos el cursor sobre nuestro blueprint, puedes ver que obtenemos esa descripción cuando colocamos el cursor sobre él y el navegador de contenido, podemos cambiar esto a lo que quisiéramos. Podríamos cambiar esto para decir el, este es el personaje principal. Ahora cuando compilo, cierro el cursor sobre él y el navegador de contenido, puedes ver que este es el personaje principal. Así que eso es más o menos todas las formas principales que puede organizar el código en Unreal Engine, es muy importante mantener su código ordenado porque realmente puede reducir el tiempo que se necesita para arreglar un error o agrega una nueva función a tu proyecto. Y sobre todo si estás trabajando con otras personas, los comentarios y tooltips para tus funciones y variables son realmente importantes. Entonces eso va a ser todo por esta lección. Esperemos que hayas aprendido un poco más sobre cómo puedes mantener tu código de blueprint bonito y ordenado. 33. Lecciones adicionales (herramientas de depuración): Oigan a todos. En esta lección vamos a estar echando un vistazo a algunas de las herramientas de depuración de blueprint que vienen con el motor. Así que antes de empezar, he creado un nuevo proyecto de plantilla en tercera persona, solo para que tengamos un nuevo comienzo para esta lección. Ahora, una de las cosas que hace que los planos sean realmente poderosos es lo rápido que son para depurar. Porque podemos ver qué código se está ejecutando en tiempo real. Podemos comprobar los valores de las variables fácilmente mientras el juego sigue en ejecución. Y también podemos usar puntos de interrupción para esencialmente pausar el juego cuando se ejecuta cierta pieza de código. Entonces, para empezar, te mostraré cómo podemos ver qué código se está ejecutando mientras estamos jugando en editor. Entonces le pegaré a Play para entrar al editor del plan. Si presionamos F8, se puede ver que ahora tengo el control de mi mouse y puedo seleccionar cosas en mi navegador de contenido o alrededor en el editor. Entonces voy a abrir mi ThirdPersonCharacter aquí. Se puede ver que tenemos el editor abierto, pero no nos está mostrando qué código se está ejecutando actualmente. Ahora eso es porque tenemos que decirle qué plano queremos revisar. Entonces aquí arriba en el menú desplegable, tenemos los diferentes planos que existen en el nivel. Entonces solo hay un terceroPersonaPersonaje y yo nivelaré. Entonces sólo tenemos una opción. Entonces voy a seleccionar eso. Ahora. Si tus ventanas son más pequeñas, si hago las mías un poco más pequeñas así, puedes ver que no tengo el desplegable. Eso está bien. Simplemente puedes hacer clic en esta flechacita aquí. Y eso te dará las opciones que no caben en la barra de herramientas. Se puede ver que aquí también podemos seleccionar nuestro personaje. Por lo que ahora con nuestro personaje seleccionado, puedes ver que las líneas de ejecución en varios de nuestros nodos están iluminadas y eso es porque actualmente se están ejecutando. Ahora. Actualmente podemos ver que varios nodos se están ejecutando dentro de nuestro ThirdPersonCharacter. Y la razón de esto es que estos son nodos de entrada de acceso y ejecutan cada frame. Ahora además de poder ver qué código se está ejecutando, también podemos comprobar los valores de las variables si nos dirigimos a las entradas del mouse aquí y le echo un vistazo a la búsqueda recortada la entrada del mouse. Tenemos un valor de eje. Y si paso el ratón sobre eso, podemos ver el valor actual, que por el momento es 0. Y eso porque no estoy moviendo mi cámara en juego por el momento. Pero tal vez quiero ver cuál es este valor mientras en realidad estoy moviendo mi cámara por ahí. Entonces lo que puedo hacer es hacer clic derecho y hacer ver este valor. Y nos sale esta pequeña burbuja de discurso que dice el valor actual de esa pluma. Entonces si tomo el control de mi personaje con solo seleccionar la ventana gráfica, empiezo a mover mi cámara por ahí. Se puede ver que el valor en esa burbuja de voz se está actualizando. Entonces esa es una herramienta realmente útil para poder ver qué variables son mientras estamos jugando el juego. Ahora, sí tiene algunas limitaciones. Por lo general, no funcionará dentro de una función. Entonces, si estás trabajando dentro de una función, normalmente el valor del reloj no funcionará dentro de esa función. Sólo funcionará dentro de una gráfica de eventos o una macro. Ahora, es posible que también tengas múltiples del mismo blueprint y tu nivel y quieras ver qué código se está ejecutando en cada uno de esos blueprints. Entonces si X fuera de juego ahora y arrasto en un Third PersonCharacter y simplemente lo coloco por aquí. Entonces le pego a play y veo que actualmente nos está mostrando qué código se está ejecutando, pero sólo dentro del personaje que estamos controlando actualmente. Y si quisiéramos ver el código que se está ejecutando dentro de nuestro carácter alfa. Bueno, si vamos al menú desplegable ahora puedes ver que tenemos otro personaje aquí en nuestra lista de planos. Ahora, es posible que tengas cientos de planos en tu nivel, por lo que es difícil saber cuál esta lista es el plano que quieres revisar. Entonces lo que podemos hacer es mientras estamos expulsados, podemos seleccionar, o si presionamos F8, podemos seleccionar otro plano como nuestro personaje aquí. Regresa a nuestro ThirdPersonCharacter, haz clic en el menú desplegable. Se puede ver que en realidad tenemos este práctico seleccionado entre paréntesis, y eso nos dice cuál la lista hemos seleccionado en el nivel. Entonces podemos seleccionar eso y luego podemos ver el código que se está ejecutando para este Third PersonCharacter. Ahora bien, debido a que este personaje no está siendo controlado, ninguno de su código se está ejecutando actualmente. Entonces ahora avanzando, queremos echar un vistazo a los puntos de interrupción. Ahora si vuelvo a mi personaje engendrado aquí en el menú desplegable para que podamos ver que el código se está ejecutando. Sabemos que tenemos los planos correctos seleccionados. Lo que haremos es salir de planetas, salir y voy a borrar mi personaje aquí, así que borraré eso. Ahora. Vamos a crear una nota de inicio de reproducción. Y yo sólo voy a arrastrar hacia fuera y hacer una cadena de impresión. Y si hacemos clic con el botón derecho en este nodo, se puede ver que podemos agregar un punto de interrupción. Y si hacemos eso en C, nos sale este pequeño signo de exclamación aquí y vamos a compilar, sólo deshazte de ese signo de exclamación. Entonces este símbolo rojo significa que este nodo tiene un punto de interrupción. Ahora, los puntos de interrupción detienen el código o detienen el juego cuando se ejecuta el nodo. Entonces si le pego a play ahora, se puede ver que los juegos actualmente se pararon. Y nos está diciendo, Hey, este nodo con el punto de interrupción como corriendo. Ahora, esta es una herramienta realmente útil si quieres comprobar para ver si se está ejecutando un trozo de código. Ahora, si queremos reanudar la reproducción y el editor, solo podemos dar clic en este pequeño botón de reproducción aquí arriba y podemos tomar el control de nuestro personaje como de costumbre. Ahora, nuestros puntos de interrupción también tienen algunas otras características que podemos usar. Entonces si salimos de avión ahora, sólo voy a añadir algunos nodos para imprimir cadena o añadir una F. Y añadiremos un nodo flip-flop. Y a partir de eso añadiremos, digamos, un par de cadenas de impresiones en cada una de las salidas, así. Ahora, si tocamos a un editor, se puede ver que corre nuestro punto de interrupción. Ahora. Podemos retomar como lo hicimos antes. Todo lo que podemos usar el botón de fotograma siguiente, y que nos llevará a través de cada nodo de nuestro código. Entonces si presiono esto, se puede ver que corre el nodo de la rama. Si lo presiono de nuevo, nos llevará al nodo flip flop. Y la razón por la que la pluma verdadera se está ejecutando es porque nuestra condición en nuestro nodo de sucursal está marcado. Entonces es cierto. Ahora con los nodos flip-flop seleccionados, si vuelvo a hacer clic en el botón de fotograma siguiente, se puede ver que en realidad nos lleva a un plano completamente nuevo. Aquí tenemos estos códigos que en realidad no escribimos. La razón de eso es nuestro nodo flip-flop como una macro integrada en el motor. Entonces nos va a llevar a través sus nodos en su propio código. Entonces pasaremos por esto y podremos seleccionar para cada uno de estos. Ahora cuando llegamos al final y lo presiono de nuevo, nos lleva de vuelta a nuestro ThirdPersonCharacter fuera la entrada a del nodo flip-flop y ejecuta el nodo print string. Esta es otra característica realmente útil de los puntos de interrupción. Podemos pasar por nuestro código un nodo a la vez mientras el juego se está ejecutando para ver qué código se está ejecutando. Ahora, hay algunos otros controles para nuestros puntos de interrupción. Si hacemos nuestra ventana un poco más grande aquí puedes ver que tenemos algunas opciones adicionales. Entonces lo que voy a hacer es reiniciar nuestro editor de planes. Ahora hemos vuelto a nuestro punto de interrupción original. Ahora tenemos algunas opciones diferentes, así que tenemos paso al siguiente nodo para ser ejecutado. Esto funciona más o menos igual que nuestro cuadro único avanzado. Ahora, si presionamos esto y ves que nos mueve al siguiente nodo. Ahora, si vuelvo a presionar esto, pueden ver que nos lleva a nuestro nodo flip-flop. Ahora, tal vez en realidad no me importa lo que está pasando en este nodo es un nodo que está integrado en el motor. Sé que está funcionando. Así que tal vez solo quiero saltarme este nodo y el código dentro de él. Lo que podemos hacer es presionar este botón siguiente y eso en realidad simplemente saltará llevándonos a través del código dentro de ese nodo. Entonces solo podemos darle a eso y ver que no nos lleva a las macros estándar. Simplemente saltamos por encima de eso y podemos usar esto con funciones también. Entonces, si tienes una función en tu código y no quieres pasar por cada nodo que está dentro de la función, solo puedes usar este botón para saltarla y ver cuál es el resultado. También podemos usar esta pequeña lupa para llevarnos a los nodos actualmente seleccionados. Entonces si estaba mirando alrededor mi código y quería ver dónde estaba, solo podía hacer clic en esto y nos lleva hasta allí. Entonces así es como podemos navegar mientras usamos nuestros puntos de interrupción. Y si tu ventana es más pequeña, así que tus ventanas así, no olvides que siempre puedes encontrar estas configuraciones en el menú desplegable de aquí si tu barra de tareas es demasiado pequeña. A continuación, vamos a echar un vistazo la ventana del depurador de blueprint. Entonces si pasamos al desplegable de depuración y hacemos clic en el depurador de blueprint aquí puedes ver que tenemos este panel y esto nos da alguna información sobre el blueprint que actualmente tenemos seleccionado. Por lo que se puede ver si hago clic en la flecha hacia abajo aquí al lado de mi nombre de los planos, se puede ver que la variable que nos pusimos a ver, si vamos por aquí, este valor del eje también se enumera aquí. Entonces tal vez si has tenido muchos valores diferentes que estabas viendo, podrías abrir esta ventana y ver aparecer todos ellos aquí abajo. También podemos ver los puntos de quiebre. Entonces aquí es donde tenemos puntos de interrupción en el código que nos dice el nodo. Y si hacemos clic en él, en realidad nos llevará a ese nodo. Entonces tal vez si tienes un punto de quiebre en tu código y has olvidado dónde lo pones, siempre puedes simplemente dar clic en esto para llevarte a donde está ese punto de quiebre. Por último, tenemos el rastro de ejecución. Ahora esto nos dice lo que se está ejecutando actualmente en nuestro plan. Por lo que en este momento ya puedes ver que tenemos el evento empieza a jugar e imprimir cuerda. Eso se debe a que se está ejecutando el punto de interrupción. Por lo que todo nuestro código está actualmente congelado. Pero si hago clic en el botón Reanudar, verás que ahora tenemos nuestros eventos del eje de entrada, y estos se están ejecutando cada fotograma, por lo que estos se actualizarán continuamente. Ahora, si salimos de nuestro editor de planes y volvemos a pulsar Play, ahora se activa el punto de interrupción. Y si pasamos a la pila de llamadas aquí, realidad podemos ver qué hizo exactamente ese gatillo de punto de interrupción. Ahora, actualmente solo nos estamos quedando sin y comenzar lugar. Por lo que es bastante fácil de ver. Se puede ver que nos está diciendo en el ThirdPersonCharacter, el evento que comience a jugar en el Event Graph es lo que está desencadenando nuestro punto de interrupción. Pero es posible que tengas una situación en la que tal vez tengas un evento personalizado que ejecute algún código y ese cliente luego podría ejecutarse en muchos lugares diferentes. Tal vez otros planos también. Y tal vez ese código se está ejecutando cuando en realidad no quieres que lo haga, pero no sabes qué evento en qué blueprint lo está llamando a ejecutarse. Aquí es donde la pila de llamadas puede ser realmente útil. Entonces si salimos de editor de avión por ahora, pondré un ejemplo. Entonces si creo un nuevo respiradero de cliente, creando un evento personalizado, y llamaré a este ejemplo. Conectaré esto hasta nuestro código aquí. Y retomaremos tocar nota y llamaremos a ese evento, así que lo llamaré ejemplo. Ahora, tal vez también tenemos otros lugares que están llamando a nuestro evento de ejemplo también. Entonces si hago clic derecho y busco eventos de entrada uno, y voy a copiar y pegar esto. Y voy a establecer esta entrada a dos, por ejemplo, con sólo hacer clic en el pequeño botón del teclado aquí y luego presionar tubo. Y también llamaremos a ese evento desde estos insumos también, así. Así que copie y pegue estos en, y luego compilaremos. Entonces ahora cuando presionamos a Play para planear el editor, se puede ver que nuestro punto de interrupción se está ejecutando y ahora nos está diciendo el código que está llamando a ese punto de interrupción. Podemos ver que en el ThirdPersonCharacter, el evento comienza a jugar. Entonces, si nos trasladamos a nuestro evento comenzar juego se está ejecutando en el Event Graph y eso está enfriando el evento de ejemplo en nuestro gráfico de eventos. Y luego romperé punto como siendo llamado. Pero si reanudamos el juego y sólo tomaré el control de mi personaje. Se puede ver en el fondo ahí me estoy moviendo alrededor de la cámara. Si presiono uno, se puede ver que nuestro punto de interrupción se está ejecutando y ahora nos está diciendo que se está presionando la única entrada. Eso es genial. Y eso está en el Event Graph. Eso entonces está enfriando a nuestro cliente de ejemplo entonces, entonces eso es lo que está desencadenando nuestro punto de interrupción. Y luego lo mismo para si presiono también, puede ver que en nuestra pila de llamadas se cambia a dos en el Event Graph, enfriando el evento de ejemplo, y eso también está en el Event Graph. Ahora, esto también puede funcionar para funciones. Entonces, si agrega un punto de interrupción dentro de una función, entonces cada vez que se llame a eso, también aparecerá en la pila de llamadas qué eventos hicieron que se ejecutara esa función. Y esto es realmente útil en proyectos más grandes porque es posible que tengas funciones y eventos que se están llamando en muchos lugares diferentes. Y si ese código se está ejecutando cuando no quieres que sea, puede ser realmente difícil rastrear dónde exactamente se está enfriando. Entonces, usando una pila de llamadas y el punto de interrupción, puede encontrar muy rápidamente qué eventos están llamando realmente a esa función o evento. Ahora, lo último que encuentro realmente útil a la hora depurar código es el nodo de cadena de impresión. Ahora lo hemos estado usando mucho en nuestras lecciones anteriores, pero te voy a mostrar algunos de los usos para cuando estás depurando código. Entonces lo que haremos es salir de nuestra obra un editor, y solo voy a cerrar nuestro depurador de blueprint maximizará nuestro ThirdPersonCharacter y cerrará las macros estándar. Ahora, imprime cadenas o algo que uso todo el tiempo cuando estoy depurando código. Podemos agregarlos a las cadenas de eventos para saber cuándo se está ejecutando un evento, podemos usarlos para imprimir valores variables. También podemos usarlos solo para proporcionar información sobre algunos de nuestros ajustes. Entonces por ejemplo, digamos que tuve un inicio sanamente. Por lo que puedo llamar a esto inicio salud. Y podría tener un cheque y podría comenzar placode por ejemplo, que podría hacer es mayor que 0. Y podríamos hacer un nodo F. Conecta esto así. Entonces probablemente queremos que nuestra ayuda inicial sea siempre mayor que 0. Entonces lo que podemos hacer es si el signo de salud no es mayor que 0, podemos agregar una cadena de impresión y sólo podemos poner el inicio es 0. Ahora bien, si fuéramos a tocar un editor y estamos empezando con 0, si retomamos después de este punto de quiebre, se puede ver que nos está dando una advertencia diciendo: Oye, estás empezando la salud es 0. Por lo que puedes usar estos para darte advertencias sobre tal vez un ajuste no es correcto o algo que no se está configurando en absoluto. Esto también puede ser realmente útil si estás trabajando con otras personas. A lo mejor están ajustando un ajuste y lo cambian incorrectamente. Entonces cuando toquen un editor, puedes tener una configuración de advertencia que les dirá, oye, esta configuración es incorrecta, necesitas cambiarla. Ahora, voy a imprimir cadena también tiene algunas otras opciones. Entonces si hacemos clic en la flecha hacia abajo aquí, tenemos pantalla de impresora. Ahora, si esto está marcado, será visible en el juego en la pantalla del jugador. Tenemos que imprimir un registro. Ahora bien, si esto es cierto, también se agregará al registro de salida. que pueda encontrar la ventana de inicio de sesión de salida, luego baje al registro de salida aquí y marque eso. Se puede ver que tenemos nuestro registro de salida. Si toco un editor, ahora voy a quitar nuestro punto de interrupción aquí solo para que no se ejecute. Entonces, para eliminar un punto de interrupción, simplemente haga clic derecho en el nodo que tiene el punto de interrupción en él y simplemente seleccione Eliminar punto de interrupción. Ahora cuando golpeamos play, se puede ver que nuestro texto se está imprimiendo. Y si nos fijamos en el registro de salida, también tenemos bajo log blueprint mensajes de usuario. Tenemos esos mensajes de nuestras cadenas impresas. Ahora tenemos algunas otras configuraciones para nuestros nodos Print String. También tenemos el color del texto. Esto cambiará el color que aparece en la pantalla. Entonces tenemos duración. Estos son los segundos que aparecerá en la pantalla. Ahora es algo que me gusta hacer con mis nodos Print String es cuando los estoy usando alrededor de mi código. También creo una variable llamada show debug text. Y podemos sondear solo para obtener nuestra tienda de valor predeterminado. Ahora tiendo a conectar esto hasta la pantalla de la impresora e imprimir un registro aquí. Entonces ahora si quiero apagar todas mis cadenas de impresiones, tal vez estoy tomando capturas de pantalla o video o algo así. No quiero que se muestre mi cadena de impresión. Yo sólo puedo entrar en el plano. Puedo seleccionar mi show debug texts on ticket o tomarlo encendido, y eso encenderá o desactivará todas mis cadenas de impresiones, siempre y cuando las tenga, esta variable conectada hasta o mis cadenas de impresión como esta. También puedes simplemente seleccionar todo esto hacer colapsar para funcionar. Podemos llamar a esta función algo así como error. Textos como ese. Lo abriremos. Por lo que ahora aquí tenemos nuestra cadena de impresión con nuestro show debug text. Podemos arrastrar hacia fuera desde la cadena hasta el nodo de entrada para agregar un pin. Podemos hacer lo mismo con la duración y el color de los textos. Compile esto. Y ahora en nuestro Event Graph, tenemos nuestro nodo de texto de error. Podemos decir agregar un mensaje diciendo que el inicio es 0. Podemos establecer la duración, guardar tres segundos y los textos a leer. Y siempre y cuando nuestro texto de depuración de show esté marcado, si presiono play, se puede ver que nuestro texto está apareciendo aquí. Pero ahora, si quisiera ocultar todas mis cuerdas de huellas, podría desmarcar esto. Y si estuviera usando esta función en lugar de estos nodos Print String, así que tenía un, tal vez un mensaje aquí. Digamos ejemplo, corre. Y podríamos cambiar el color a azul, y sólo borraremos estas cadenas de impresiones. Por lo que ahora si nuestro show debug texts está ticked off estos ron blanco. Pero si lo tomamos, ahora podemos ver esos mensajes. Entonces eso va a ser todo por esta lección. Esperemos que ahora entiendas algunas de las herramientas que están integradas en el motor que te ayudan a depurar tu código. 34. Lecciones adicionales (cronogramas): Oigan a todos. En esta lección vamos a estar echando un vistazo al nodo de líneas de tiempo. Entonces, para empezar, solo voy a crear un nuevo plano en el que podamos caminar. Por lo que vamos a crear una clase de blueprint establecida para actor. Y yo sólo voy a llamar cubo mío. Y eso lo abriremos. Yo sólo voy a arrastrar el mío hasta arriba aquí e ir al Event Graph. Entonces solo para darte una breve explicación lo que hacen los nodos de la línea de tiempo, nos permiten cambiar tus valores lentamente con el tiempo. Son realmente buenos para animar cosas como, por ejemplo, una puerta. O si quieres que un actor se mueva de un lugar a otro, pero quieres hacerlo agradable y sin problemas. Entonces, para crear una nueva línea de tiempo, simplemente haremos clic derecho en nuestro Gráfico de eventos aquí y buscaremos la línea de tiempo. Y puedes ver que tenemos una opción para Add Timeline. Ahora, no puede agregar líneas de tiempo en funciones, y no puede agregar líneas de tiempo en componentes. Entonces eso es sólo algo a tener en cuenta cuando estás usando líneas de tiempo. Entonces haremos clic en Agregar Línea de Tiempo y ya puedes ver que aquí obtenemos este nuevo nodo y puedo nombrarlo. Por lo que sólo voy a llamar a mi ejemplo línea de tiempo. Así. Ahora, vamos a estar pasando por todas estas entradas y salidas en un momento. Pero lo que haremos es hacer doble clic en el nodo de la línea de tiempo, y eso abrirá esta nueva ventana que en realidad no hemos visto antes. Y aquí es donde establecemos qué valores queremos que nuestra línea de tiempo pueda cambiar. Lo que haremos es crear una nueva pista. Se puede ver que podemos seleccionar entre flotadores, vectores, eventos, y colores. Simplemente comenzaremos con un flotador simple, así que agregaremos una pista de flotación y lo podremos nombrar. Por lo que sólo voy a llamar a la mía Float, Float, salida así. Ahora aquí tenemos una línea de tiempo que esencialmente nos dice cuál será el valor de nuestra salida de flujo. Tiempo específico. Por lo que actualmente no hemos agregado ningún punto de datos aún. Entonces nuestro valor de flotación sólo va a ser 0 todo el tiempo que nuestra línea de tiempo se reproduzca. Pero si queremos sumar nuevos puntos, podemos, podemos sostener Shift y dar clic. Se puede ver que ahora tengo un nuevo punto en mi línea de tiempo aquí. Y aquí arriba podemos fijar el tiempo en que este punto está para arriba. Entonces voy a poner el mío a 0. Entonces eso es justo al principio de la línea de tiempo. Y entonces podemos establecer un valor. Si tuviera que configurar esto para decir uno, se puede ver que en realidad ya no puedo ver mi punto. Bueno, lo puedes hacer es dar clic en este pequeño botón de aquí, y eso traerá a la vista todos los puntos que hay en tu gráfica. Para que puedas ver mis puntos detrás de estos botones arriba ese valor uno y a la vez uno. Pero también podemos sumar puntos adicionales. Y esto es lo que nos permite cambiar nuestro valor con el tiempo. Entonces si vuelvo a hacer clic por aquí, pueden ver que he añadido un nuevo punto y tenemos un nuevo tiempo. Entonces voy a poner esto a uno. Voy a dejar el valor en uno, y seleccionaremos nuestro punto original por aquí, y voy a establecer su valor en 0. Ahora, puedes ver que cuando comience nuestra línea de tiempo, la primera está en 0, por lo que su valor será 0. Pero a medida que el tiempo avanza, puede ver en la parte superior aquí tenemos el Valle del tiempo, una vez que llegue al valor de uno, y ese es nuestro tiempo, el valor de salida de nuestra flotación será uno. Si volvemos a nuestro gráfico de eventos aquí, verás que en realidad tenemos una nueva salida en nuestro nodo, y esa es nuestra salida flotante. Y esto es lo que va a devolver ese valor de nuestra línea de tiempo. Ahora, actualmente nuestra línea de tiempo se ejecutará durante cinco segundos después de que se le diga que se ejecute. Y la razón de eso es aquí arriba dice longitud cinco. Ahora bien, si tuviera que cambiar esto para decir uno, se puede ver que nuestra línea de tiempo aquí se ha hecho un poco más pequeña. Y eso se debe a que el área resaltada es el tiempo que correrá para ello porque hemos grabado durante 1 segundo, se puede ver que ahora está parando 1 segundo. Entonces ahora esencialmente, cuando le decimos a nuestra línea de tiempo que se reproduzca, dará salida a un valor comienza en 0, que será un flotador. Y luego a medida que el tiempo avanza, se puede ver, si pasamos el ratón sobre, se puede ver que el valor aumenta a medida que pasa el tiempo. Y eso es porque nuestro segundo está por aquí a la una. Por lo que nos da un incremento lineal en el valor. Entonces ahora realmente aprenderemos cómo podemos ejecutar nuestra línea de tiempo si volvemos al Event Graph aquí, se puede ver que tenemos una obra de teatro y juego desde el principio. Y esto es lo que le dice a la línea de tiempo para jugar. Y por lo general se reproducirá desde el inicio de la línea de tiempo. Entonces cuando le decimos que juegue, comenzará desde el tiempo 0 y comenzará, nuestro valor es 0 valor. Entonces tenemos parada, que detendrá la línea de tiempo para el dinero y su punto actual. Hemos revertido, lo que invertirá la línea de tiempo corriendo en cualquier punto actual que sea ese. Entonces, por ejemplo, si nuestra línea de tiempo estaba a 0.2 segundos de correr y luego le dijimos que retrocediera. Se invertiría de 0.2 segundos de nuevo a 0. Entonces hemos invertido desde fin, lo que significa que la línea de tiempo se invertirá desde los puntos finales. Entonces las probabilidades son de 1 segundo, por lo que se revertiría de uno atrás a 0. Y luego, por último, tenemos el nuevo tiempo establecido. Y esto nos permite realmente decirle a la línea tiempo de qué hora exacta queremos que corra. Ahora, cuando nuestra línea de tiempo se está ejecutando realmente, lo que sucederá es que tenemos estos dos nodos de salida aquí. Ahora la actualización ejecutará cada fotograma que esté ejecutando la línea de tiempo. Entonces, si nuestra línea de tiempo está establecida para ejecutarse durante 1 segundo, que es actualmente, esta se ejecutará durante 1 segundo cada fotograma individual. Y luego una vez que la línea de tiempo haya terminado de ejecutarse, se ejecutará el PIM terminado. Ahora también tenemos una dirección. Ahora, nuestra línea de tiempo podría estar corriendo hacia adelante o hacia atrás. Para saber de qué manera se está ejecutando. Podemos arrastrar hacia fuera desde nuestra dirección y podemos usar una nota igual. Podemos usar anión igual. Y aquí sólo podemos comprobar ¿ va hacia adelante o va hacia atrás? Y eso solo devolvería un verdadero o falso dependiendo de nuestro valor. También podemos usar un interruptor para que podamos arrastrar hacia fuera y buscar interruptor. Ya ves que podemos crear un nodo de conmutación que saldrá hacia adelante o hacia atrás dependiendo de cuál sea o hacia atrás dependiendo de cuál nuestra dirección actual para nuestra línea de tiempo. Luego, por último, tenemos nuestro valor de salida de fluido. Y como he dicho antes, esto aumentará lentamente con el tiempo a medida que se reproduzca nuestra línea de tiempo debido a estos dos puntos que tenemos en nuestra gráfica. Entonces lo que haremos ahora es poner un ejemplo de cómo funciona esto. Por lo que sólo correremos play desde Begin Play. Y voy a agregar una cadena de impresión hasta nuestra actualización. Así que ahora nuestra cadena de impresión, cada fotograma que está reproduciendo nuestra línea de tiempo generará el valor de flotación actual. Entonces si le damos a Compilar, vuelva a nuestro mapa. Voy a arrastrar en el cubo porque actualmente en realidad no tengo uno a mi nivel. Si le damos a Play, se puede ver que ahora va aumentando gradualmente de 0 a uno. Ahora te mostraré cómo podemos mover realmente el cubo usando este valor. Entonces volveremos a nuestro cubo. En realidad voy a ir a la ventana gráfica y solo agregaré un componente de cubo para que podamos verlo en el mundo y compilaremos, volvamos al Event Graph. Entonces ahora queremos realmente mover nuestro cubo. Lo que haremos es usar un nodo de ubicación de actor de conjunto. Y a partir de eso vamos a hacer una ubicación principal o hacer vector así. Entonces sólo voy a estar incrementando el valor Z. Ahora bien, podríamos, en nuestra nota de línea de tiempo aquí, realidad establecer este valor a lo que queramos que nuestro cubo aumente. Para que pudiera configurar esto para decir 300. Y podemos dar clic en este botoncito para que sólo quepa los puntos y verticalmente. Y volveremos a nuestra gráfica de renta. Podríamos enchufar esto directamente a nuestro valor z aquí, enchufa la actualización a esto. Y queremos que los actores tengan ubicación actual. A partir de eso, usaremos un nodo break. Ahora, todo lo que estamos haciendo aquí es que estamos obteniendo sus ubicaciones actuales y y x porque queremos que esas permanezcan iguales, pero luego la estamos incrementando z location. Entonces si golpeamos play ahora, verás que los cubos se mueven lentamente hacia arriba como nuestro lugar de la línea de tiempo. Si quisiéramos, podríamos hacer esto en un poco más lento para poder abrir mi línea de tiempo aquí. Podría establecer la longitud para decir cuatro segundos. Ahora, tenemos que cambiar nuestro último punto aquí. Por lo que tendremos que cambiar es tiempo a cuatro segundos. Por lo que ahora nuestro cubo o poco a poco se mueven hacia arriba durante cuatro segundos. Así que dale a Play. puede ver ahora que se mueve hacia arriba mucho más lento de lo que era antes. Ahora otra forma en que podemos usar nuestra variable float para cambiar la ubicación, y eso es un poco más práctico si cambiamos nuestro valor n. Entonces lo que voy a hacer es dar clic en el Zoom Para Ajustar Horizontal. Entonces eso solo trae la línea de tiempo. Para mostrar todos nuestros puntos. Puedo seleccionar nuestro punto aquí, y en realidad voy a cambiar el valor de nuevo a uno. Entonces ahora nuestro primer valor es 0 y nuestro último valor es uno. Y haremos el Zoom To Fit Vertical también, que podamos ver que eso sucede ahí. Por lo que ahora volveremos a la Gráfica de Eventos. Y en lugar de simplemente decirle directamente al cubo o flujo de salida va a ser que es alto. Podemos usar esto para mover r en cubos entre dos ubicaciones. Por lo que eliminará este código aquí por ahora. Y nos largaremos de nuestra nueva ubicación y buscaremos laboratorio. Si recuerdas esto de nuestra lección de vectores, este nodo nos permite ir gradualmente desde la ubicación a, ubicación B, y esa cantidad es determinada por el Alfa. Por lo que 0 sería sólo la salida de este nodo sería el valor a. Y si esto se estableciera para decir 0.5, entonces sería un valor entre las ubicaciones a y b. Y si ésta fuera una, entonces solo sería la ubicación B completa la que se está devolviendo. Y si lo recuerdas, nuestro valor de flotación ahora sale comenzando en 0 y terminando en uno a los cuatro segundos. Por lo que podemos usar esto para controlar nuestro ganglio linfático para mover nuestro cubo entre dos ubicaciones diferentes. Entonces lo que podemos hacer ahora es crear algunas variables activas. Entonces sólo voy a llamar a este actor de inicio. Y vamos a establecer esto a un tipo actor. Seleccione que dos aquí abajo, referencia de objeto, y luego vamos a duplicar esto o simplemente hacer clic derecho y hacer duplicado. Llamaremos así a este actor y nos enfrentaremos a estos hielos para que podamos editarlos en el nivel. Por nuestro actor estatal. Queremos obtener su ubicación. Y conectaremos esto al valor a. Entonces haremos lo mismo con nuestro inductor. Llegar a la ubicación. Vamos a conectar esto en el valor b aquí y vamos a compilar esto. Entonces ahora iremos a nuestro nivel y podremos crear un nuevo actor. Entonces solo voy a crear una clase de blueprint. Lo llamaremos actor y llamaremos a este waypoint, por ejemplo. Así, colocará uno en el nivel aquí y otro aquí. Y en realidad voy a seleccionar a los dos con solo sostener Control. Y los moveré hacia arriba en el aire para que podamos verlas un poco más fácil. Entonces ahora cuando golpeemos play, ¿qué pasará si seleccionamos nuestro cubo? Tenemos que decirle a los actores de inicio y fin. Entonces le pondré mi inicio a este tipo de aquí y el final al otro waypoint. Y ahora cuando golpeo play o cubo o al instante aparezco sobre él este punto de manera y poco a poco me o al instante aparezco sobre él muevo a ese waypoint final. Entonces si le damos a Play, se puede ver que se está moviendo lentamente entre esos dos waypoints. Eso está pasando porque si te acuerdas, nuestro valor de flotación va de 0 a uno. Y luego me fui nodo es conseguir son una locación que es nuestra ubicación de actores estelares. Y poco a poco, poco a poco moviendo eso hasta el final la ubicación de los actores, que es el valor b. Y luego le estamos diciendo a nuestro actor que se mueva entre esos dos puntos. Así que esta es una mejor manera de controlar y la ubicación de los actores usando un nodo de línea de tiempo en lugar de simplemente poner manualmente la ubicación dentro de la línea de tiempo. Ahora también podemos agregar diferentes tipos de salidas variables a nuestra línea de tiempo. Si lo abrimos y vamos a rastrear, se puede ver que en realidad podemos agregar una trampa vectorial. Entonces voy a dar clic en eso. Yaverán que ahora tenemos una nueva gráfica aquí abajo. Sólo voy a dar clic en la flecha al lado de nuestra salida de flotación aquí solo para ocultarlo para que podamos ver nuestro nuevo track un poco mejor. Voy a nombrar esto también. O si haces clic derecho y seleccionas Renombrar, podemos nombrar esto a salida vectorial así. Y si compilamos y vamos al Event Graph, se puede ver que ahora tenemos una salida vectorial en nuestro nodo timeline. Ahora esto funciona exactamente igual que lo hizo nuestro valor de flotación, es solo que tenemos valores de flotación libre siendo controlados en esta gráfica, uno para nuestra z, y, y x Así que si quisiéramos, podríamos gradualmente sale un vector de nuestra nota de línea de tiempo que comienza en un valor y termina y otro, igual que hicimos con nuestro flotador. Y si queremos sumar nuevos puntos, podemos Shift-click que agrega un nuevo punto aquí. Ahora si muevo esto, ver que esto está en realidad en el valor x, pero nuestra Y y Z es no tienen un punto y siguen en 0. Así que si queremos trabajar en solo uno de estos valores, digamos que quería simplemente agregar un valor a la z. podemos ocultar la y y la x, y podemos Shift-clic en nuestra z. y ahora podemos establecer un valor z. A lo mejor ahora quería agregar un valor y. Puedo ocultar mi valor z y mostrar el valor y. Y ya pueden ver que ahora puedo moverme sobre este punto. Y esto sólo hace que sea un poco más fácil si tienes todos estos puntos es visible, puede llegar a ser un poco confuso. Entonces ahora los tengo a todos visibles. Puedo cambiar estos puntos como me gusta, y podríamos agregar otro valor 12 y aquí. Y podemos mover esto. Y podríamos hacer lo mismo por nuestro valor z. Ahora, los valores iniciales para cada una de estas salidas. Y si lo recuerdas, un vector es solo flotadores libres combinados. Entonces, si lo rompemos, usa el nodo vector break. Se puede ver que tenemos una X, Y, y Z. Cualesquiera que sean los valores en los que nos sentamos aquí para x, y, y z, valores de línea de tiempo, eso es lo que se generará en ese momento específico en nuestra línea de tiempo. Y podemos usar este vector de salida igual que cualquier otro vector. Entonces, si quisiera, en realidad podría enchufar esto a mi nodo lap, por ejemplo, en el punto final. Así que ahora cuando compilamos, en lugar de ir al waypoint final, Se va a ir a cualquiera que sea la ubicación de salida es de nuestra línea de tiempo. Si recuerda que la ubicación de salida en realidad cambiará porque tenemos estos puntos aquí que están cambiando los valores x, y y z dependiendo de la hora. Entonces, si golpeamos Play, veremos que nuestro cubo realmente se movió desde la ubicación de inicio. Va hacia 0, por lo que va a encaminarse hacia esa dirección. Ahora, hay otras salidas que nuestra línea de tiempo puede hacer. Así que si volvemos a nuestra nota de línea de tiempo aquí y la abrimos, realidad podemos tener salida y evento en ciertos momentos en que se está ejecutando. Entonces si agregamos una nueva pista aquí, sólo voy a agregar una pista de ventilación. Ahora voy a ocultar mi salida vectorial solo hacer clic en la flechita aquí. Y cambiaremos el nombre de nuestra pista de eventos a la salida de eventos. Así. Ahora, al igual que nuestros tipos de salida anteriores para Shift-clic, podemos agregar un punto a la línea de tiempo. Pero la única diferencia está aquí. Nosotros no, el valor aquí en realidad no importa. Todo lo que importa es el tiempo. Entonces si configuro esto para decir 1.5, si cambiamos click de nuevo, podemos agregar otro punto y podemos tener esta corrida en digamos, 2.5. Así que ahora lo que sucederá es la salida del evento en nuestro nodo timeline se ejecutará en 1.5 segundos y luego 2.5 segundos. Y si volvemos a nuestro evento gra, ves que ahora tenemos una nueva salida de evento. Entonces si agregamos una cadena de impresión a esto, y veremos este hola ahora imprimir en esos dos momentos en que nuestra línea de tiempo se está ejecutando. Entonces tenemos uno en 1.5 y luego otro 2.5. Entonces el último tipo de salida para nuestra línea de tiempo, si volvemos a ese nodo, ocultará nuestras salidas de eventos haciendo clic en la flecha junto a él. De nuevo, agregaremos una nueva pista y podremos añadir la pista de color. Ahora esto nos permite emitir un color en un momento determinado. Por lo que de nuevo, como antes, podemos desplazar clic en este color aquí abajo para agregar un nuevo punto. Entonces acabo de agregar un nuevo punto aquí y podemos moverlos como nos gusta ahora, porque estos son blancos, En realidad no está cambiando el valor. Pero si hago clic derecho en esto en la parte superior, podemos elegir un color. Y puedo configurar esto para que diga rojo, por ejemplo. Ahora, a unos 2.5 segundos, el color de salida será rojo. Pero podemos mover esto y podemos cambiar lo severamente que cambia el color dependiendo de estos otros valores. Si movemos estos por ahí y vemos ahora a 2.5 segundos obtenemos un color rojo claro. Si queremos, podemos cambiar los predeterminados que venían con nuestra línea de tiempo para que podamos hacer clic derecho esta, elegir un color diferente. Podemos cambiar esto para decir, un azul así. Y ahora puedes ver que aquí tenemos un color azul que se saldrá a 0.5 segundos. Pero a medida que pasa el tiempo, poco a poco cambia a un color rosáceo violáceo y luego se va a rojo. A diferencia de antes. Si volvemos a nuestra línea de tiempo, se puede ver que ahora tenemos un nuevo output. Yo no le di nombre, así que aquí le daremos un nombre rápidamente. Yo lo llamaré color. Si volvemos al Event Graph, puedes ver que ahora tenemos acceso a nuestro tipo de variable de color, y puedes conectarlo cualquier otra entrada de color que te guste. Entonces, si quisiéramos, en realidad podríamos enchufar esto a nuestra cadena de impresión. Podemos enchufar el color al color del texto aquí, por ejemplo, solo presiona play y deberíamos ver algunos colores diferentes para nuestros textos. Se puede ver como el morado y ahora es como un rojo. Así que esos son todos los tipos de salidas que puede hacer nuestra línea de tiempo. Por lo que realmente puedes usar las líneas para hacer un montón de cosas diferentes. Ahora, tal vez querías que tu línea de tiempo en realidad solo vaya de ida y vuelta para hacer un bucle. Te puedo mostrar cómo puedes configurar eso. Entonces, lo que haremos es volver a usar nuestra ubicación de inductores aquí para nuestra entrada B. Y nos llevaremos la pluma terminada. Y en realidad, nos arrastraremos desde todas las direcciones y buscaremos switch. Cuando se enciende la línea de tiempo la dirección conectará esto hasta terminado. Entonces ahora queremos poder controlar lo que va a hacer nuestra línea de tiempo, pero no queremos tener que enchufar estos a las entradas aquí. Entonces lo que realmente puedes hacer es usar una variable para controlar esta línea de tiempo. Si vamos a los componentes aquí abajo, puedes ver que tenemos cronología de ejemplo. Podemos conseguir esa variable. Y en realidad podemos usar esto para controlar nuestra línea de tiempo. Así que digamos que más adelante en nuestro código queríamos que nuestra línea de tiempo se reproduzca, pero sin tener que enchufar esta entrada, podemos usar esta variable. Podemos alargar y podemos buscar el juego. Ya ves que podemos llamar a una función llamada play. Y esto realmente hará que nuestra línea de tiempo se reproduzca. Para hacer que nuestra línea de tiempo retroceda y adelante, lo que podemos hacer es usar lo contrario. Entonces si arrastramos hacia fuera, buscamos reversa. Podemos usar la opción inversa. Entonces, si actualmente está jugando hacia adelante, queremos que luego juegue al revés una vez que esté terminado. Y luego si va hacia atrás, queremos que se reproduzca desde el principio. Entonces sólo haremos el juego. Bueno, podemos hacer jugar desde el principio así. Por lo que ahora nuestro cubo se va a mover de la ubicación del actor estrella al final y luego de vuelta al final, al inicio. Y simplemente seguiría looping y haciendo eso. Por lo que eliminaremos esta nota. Ya no estamos usando eso . Entonces compilaremos y le pegaremos a Play. Podemos ver nuestros codos moviéndose desde el principio hasta el final. Y ahora está retrocediendo del final al principio. Y esto sólo va a seguir haciendo esto ahora de ida y vuelta. Por último, veremos al dramaturgo. Ahora el dramaturgo controla qué tan rápido se va a reproducir la línea de tiempo. Por lo que ahora mismo nuestra línea de tiempo está establecida en cuatro segundos. Ese es el tiempo que tardará en jugar. La tasa de juego está actualmente establecida uno porque ese es el valor predeterminado. Ahora bien, si aumentamos dos al dramaturgo, eso haría que el tiempo que corro sea el doble de rápido. Entonces te mostraré cómo podemos hacer esto. Podemos tomar nuestra variable de línea de tiempo de ejemplo, arrastrar hacia fuera y hacer establecer tasa. Por lo que ahora podemos configurar la sala de juegos. Entonces tal vez quiero que esto corra el doble de rápido. Entonces, si conectamos esto aquí arriba para jugar, y jugamos ahora, verán que está funcionando mucho más rápido de lo que era antes. Si lo aumentamos de nuevo para decir cuatro, correrá cuatro veces más rápido. Por lo que ahora nuestra línea de tiempo en realidad se completará en 1 segundo, pesar de que dentro de la longitud es de cuatro, porque le estamos diciendo que juegue cuatro veces más rápido. Entonces si golpeamos play ahora verás que está completando eso ahora en 1 segundo. Ahora, hay algunas otras configuraciones por las que quería pasar rápidamente dentro del nodo de la línea de tiempo. Entonces, si volvemos a nuestro plan de colas y abrimos nuestra línea de tiempo. Aquí tenemos algunas bandas en la parte superior que podemos usar para controlar lo que hace nuestra línea de tiempo. Entonces, para empezar, tenemos reproducción automática, y si encendemos esto, básicamente significa que en realidad no necesitamos ejecutar el play pen para que nuestra línea de tiempo se frote. Simplemente correrá al inicio del juego o cada vez que desove nuestra Cuba. Entonces si enchufo el pin de play y le pegamos a play, ahora, se puede ver que se está reproduciendo automáticamente, aunque en realidad no se lo estoy diciendo. También hay una opción de bucle. Si volvemos a nuestro cubo y luego a nuestra línea de tiempo, se puede ver que hay un botón de bucle. Ahora bien, esto no hará lo mismo que lo que hemos hecho aquí abajo, donde una vez el cubo llega a la ubicación final y luego vuelve a la ubicación de inicio. Este bucle solo hará que la línea de tiempo comience desde el principio cada vez. Entonces si encendemos esto , desenchufaré mi terminado y compilamos y le pegamos a Play. Verás que llega al final y luego solo empieza de nuevo desde nuestra ubicación de inicio. Entonces ese es un par de oxígeno que podría encontrar útil si estás usando líneas de tiempo en el futuro. Ahora también podemos cambiar la forma en que nuestros valores y nuestras gráficas aquí van el uno hacia el otro. Entonces, si selecciono ambos puntos aquí, solo sosteniendo Control, puedo seleccionar ambos. Si hago clic derecho, Hay algunas opciones diferentes para la interpolación. Entonces si lo pongo para decir auto, y ves que ahora, en lugar de esta recta que va entre los valores, tenemos una curva lo que significa que el valor de inicio aumentará lentamente cada vez más rápido. Y luego disminuirá lentamente cada vez más rápido hasta que llegue a su valor objetivo. Podemos usar estos pequeños mangos aquí para controlar la rapidez o la lentitud con que el valor se acercará también al valor objetivo. Entonces si selecciono mi punto aquí, muévelo hacia arriba así. Tengo valor va a aumentar lentamente que más rápido y más rápido hasta que llegue a este punto donde en realidad será más alto que nuestro valor n, porque se puede ver la línea va por encima de ella, pero entonces volverá a bajar a nuestro valor V1. Ahora hay algunas opciones diferentes. Cuando destacamos estos puntos, se puede elegir entre auto usuario, break, lineal y constante. Tan constante por ejemplo, sólo una línea recta hasta el punto y luego va instantáneamente a ese valor. Podemos usar lineal, que es el predeterminado. Va desde ese punto hasta el punto final exactamente a la misma velocidad todo el tiempo. Podemos usar estos ajustes dentro de nuestra salida vectorial aquí. Así que puedes ver si selecciono ambos estos puntos aquí, en realidad ya he configurado en auto, pero podemos volver a ponerlo en lineal por ejemplo. O si lo desea, podemos llevarlo de vuelta a auto. Podemos controlar esos puntos como lo hicimos antes con nuestra flotación. Y podemos hacer esto con cada uno de nuestros valores x, y, y z también. Entonces podríamos hacer lo mismo con nuestro valor y, por ejemplo. Podríamos ajustar estos para realmente aumentar o disminuir como queramos. Entonces eso es todo por nuestra lección de líneas de tiempo. Ojalá tengas una mejor comprensión de cómo funcionan ahora y para qué puedes usarlos en tus proyectos en el futuro. 35. Lecciones adicionales (sockets): Oigan a todos. En esta lección vamos a estar echando un vistazo a los zócalos. Sockets o cómo podemos unir actores a otros actores o componentes a otros componentes. Ahora podemos agregar zócalos a mallas esqueléticas. Entonces eso son mallas que pueden animar como por ejemplo, el maniquí que hemos estado usando para nuestro personaje. O podemos agregar sockets a mallas estáticas. Entonces esas son medidas como los cubos que hemos estado usando. Entonces, para empezar, te mostraré cómo podemos agregar un nuevo socket a un esqueleto. Por lo que vamos a pasar a la carpeta Personajes aquí, luego a maniquíes mallas. Y entonces aquí se puede ver que tenemos nuestras mallas esqueléticas de maniquí y también el esqueleto que usan los maniquíes. Abriremos el maniquí SK. Aquí adentro. Se puede ver en el lado izquierdo tenemos una lista de todos los huesos que son esqueleto incluye. Ahora, aquí es donde seleccionamos un hueso específico al que queremos agregarle un alveolo. Digamos, por ejemplo, que estábamos agregando un sombrero a nuestro personaje. Vamos a querer que el sombrero siga al hueso de la cabeza. Por lo que se desplazará a través y encontrará el hueso de la cabeza que debe estar cerca de la parte inferior aquí. Si sigo adelante. Aquí vamos. Tenemos los dos huesos del cuello y luego el hueso de la cabeza. Entonces si seleccionamos el hueso de la cabeza, haga clic derecho y sí le agregamos alvéolo, eso nos agregará un nuevo alveolo al hueso de la cabeza. Si nos dirigimos al panel Detalles, puedes ver que podemos renombrar este socket. Voy a llamar así a mi zócalo de sombrero. Ahora con el socket seleccionado, se puede ver que tengo la opción de rotarlo aquí. Y si presiono W mientras estoy seleccionado en la ventana gráfica, también puedo mover el zócalo. El socket es actualmente si miras por aquí en el panel Detalles en ceros son 0 ubicación. Eso significa que está en la ubicación exacta del hueso de la cabeza, pero podemos mover esto para que podamos subir esto. Por lo que ahora nuestro zócalo está por encima de nuestro hueso de la cabeza. Lo que eso significa es incluso cuando los personajes que animan este zócalo se mantendrán a esta distancia lejos del hueso de la cabeza. Y esto es útil porque si estamos adjuntando un sombrero a este zócalo, quisiéramos que siguiera junto con el hueso de la cabeza incluso cuando los personajes animaran. Ahora si quisiéramos previsualizar cómo se vería cuando está unido a un socket. Podemos hacer eso. Así que podemos hacer clic derecho en nuestra toma del corazón aquí, bajar a Agregar activo de vista previa y en realidad podemos seleccionar una malla para unir a nuestro socket. Ahora ten en cuenta que esto es solo vista previa. Entonces aunque adjuntemos algo aquí ahora mismo, no lo veremos en juego. Esto es solo para previsualización cuando estamos viendo animaciones o en nuestro editor esquelético. Para mí, voy a seleccionar sólo el, seleccionar el cilindro aquí. Y se puede ver que mi cilindro está girado de manera equivocada. Entonces voy a rotar mi zócalo y se puede ver en tiempo real o el cilindro gira. Ahora, obviamente esto no es un sombrero, es sólo un cilindro, pero vamos a estar usando esto como ejemplo. Y podemos ver cómo se verá nuestro cilindro mientras está unido a nuestro zócalo. Entonces ahora si vamos a ver una animación que usa este esqueleto, en realidad veremos esta vista previa y veremos que se mueve junto con la animación. Entonces si volvemos al hit del navegador de contenido, voy a ir a la carpeta maniquíes. Entonces las animaciones irán al dinero. Y echaremos un vistazo al salto, por ejemplo. Haremos doble clic en eso y traeré esa animación hasta aquí. Se puede ver que mientras nuestra animación de salto está jugando, R hat sigue siguiendo junto con nuestro hueso de la cabeza. Ahora, volviendo a nuestro esqueleto de maniquíes, si queríamos deshacernos de esta vista previa, siempre podemos simplemente hacer clic derecho, eliminar todos los activos adjuntos y eso solo nos deshará de todos los avances . Podemos, si queremos agregar múltiples zócalos al mismo hueso. Entonces si quisiéramos otro zócalo que tal vez tuviera una ubicación diferente para tal vez un tipo diferente de sombrero. Podríamos hacer eso también. Simplemente hacemos clic con el botón derecho Agregar un nuevo zócalo, y eso nos permitiría agregar un alveolo adicional a nuestro hueso de la cabeza. Si alguna vez deseas eliminar un socket, puedes hacer clic derecho en él y seleccionar la opción Eliminar aquí. Ahora también podemos agregar sockets a mallas estáticas. Entonces si volvemos al navegador de contenidos aquí, sólo voy a pasar a la carpeta de prototipado de nivel y dos mallas. Acabamos de conseguir algunas mallas de pila simples aquí. Pero si abrimos el cubicado con champú, por ejemplo, aquí tenemos algunos de los detalles sobre la malla y la malla en la ventanilla. Y si subimos al panel de Windows aquí, debería haber un administrador de socket y sus mentes marcaron. Si el tuyo no lo es, querrás hacer clic en él. Y puedes ver eso para mí, está por aquí. Y esto nos permite agregar nuevos zócalos a nuestra malla estática. Por lo que simplemente hacemos clic en este pequeño botón más aquí. Podemos nombrar nuestro socket. Sólo voy a llamar a mi socket otra vez. Así. A diferencia de antes, podemos posicionar nuestro zócalo. Podríamos decir montadas aquí. Y ahora, dondequiera que se mueva esta malla, este zócalo estará a 90 centímetros de su centro incluso durante el juego. A diferencia del esqueleto, también podemos agregar una vista previa. Entonces si bajamos al conjunto de opciones, podemos hacer clic en Avanzado y decir una malla de pila anterior para que podamos seleccionar el cilindro que teníamos antes o el cilindro aquí y ver que tenemos eso mismas mallas que teníamos antes. Y podemos previsualizar cómo se vería cuando en realidad se acopla al socket. Así que ahora ya sabes cómo crear zócalos y agregarlos a mallas esqueléticas y mallas estáticas. Ahora te voy a mostrar cómo podemos realmente usar ese socket durante el juego y adjuntarle cosas. Por lo que volverá a nuestro Navegador de Contenido, a la carpeta Personajes, o a la carpeta de contenido. Después ve a planos de tercera persona y abriremos nuestro Blueprint de Personajes Terceros. Ahora tengo algunas variables extra y una función aquí de una de nuestras lecciones anteriores. Si no lo haces, no te preocupes por eso, no vamos a estar usando esos de todos modos. Entonces antes de empezar a desovar actores y unirlos a los sockets, primero voy a mostrarte algunos de los nodos más utilizados con sockets. Por lo tanto, primero comenzaremos con obtener nuestra malla de personajes de nuestro panel de componentes. Y si lo recuerdas, solo podemos hacer doble clic en esto para abrir la ventana gráfica. Esta es nuestra malla animada en nuestro personaje. Así que volviendo al Event Graph, me acercaré aquí. Podemos agarrar nuestro componente de malla. Si arrastramos fuera de eso y buscamos obtener la ubicación del socket, se puede ver que obtenemos esta nota aquí. Esto nos permite proporcionar un nombre de socket como r hat socket. Y si esta malla, así que si nuestra malla de caracteres aquí tiene ese socket usando ese nombre, devolverá una ubicación mundial para ese socket. Ahora también podemos usar este nodo get socket location con mallas estáticas. Entonces si agregué una nueva malla estática, que haciendo esto como ejemplo porque nuestro personaje no tiene un componente de malla escalonada. Voy a añadir eso en. Y si arrasto eso a nuestro gráfico de eventos aquí, también puedo enchufar esto a esta nota. Y ahora si la malla de pila que hemos configurado para este componente tiene un socket, obtendremos su ubicación mundial actual. Ahora, hay algunas otras notas que funcionan así. Podemos arrastrar hacia fuera de nuestra malla y obtener rotación del zócalo. Esto nos dará la rotación mundial de cualquier nombre de socket que coloquemos aquí que esté en nuestra malla de personaje. O podemos eliminar estos nodos, podemos arrastrar hacia fuera y buscar obtendrá socket transform, y eso conseguirá la transformación de cualquier nombre de socket que establecemos aquí. Y si recuerdas de nuestra lección de transformación, podemos simplemente arrastrar desde aquí, usar un nodo break y eso nos da acceso a la ubicación, rotación y escala del socket. Ahora esto también nos da una opción de espacio de transformación. Ahora bien, si esto está configurado en RTS world, eso significa que obtendrá la rotación mundial, ubicación y la escala de cualquier nombre de socket que coloquemos aquí. Suponiendo que nuestra entrada de malla sí tiene ese socket. Ahora si hacemos clic en los espacios de transformación, unas cuantas opciones diferentes, podemos seleccionar actor. Ahora, esto conseguirá que los sockets se transformen relación con la ubicación central de los actores. Y lo que quiero decir con eso, si vamos a la ventanilla, si seleccionamos nuestro componente de malla de estaca que agregamos, si lo muevo por aquí e imagino que este es el zócalo. El actor de sockets transformada relativa sería esta ubicación que tenemos aquí. Entonces si esto fuera un socket y obtuviéramos transformada de ese socket usando la opción actor aquí, devolvería la ubicación proporcionada aquí. Ahora, la siguiente opción si volvemos a nuestro nodo de transformación es el componente. Tenga en cuenta que ahora esto obtendrá la transformación de sockets en relación con el componente al que está unido. Entonces si de nuevo, si vuelvo a nuestra ventana gráfica y nos imaginamos que la malla de pila aquí es un socket en lugar de un componente. Si tuviera que adjuntar esto a esta medida, pueden ver que nuestra ubicación realmente ha cambiado. Ahora este es su componente transformar. Si lo tomo de vuelta y lo vuelvo a colocar al componente de la cápsula, ver que la ubicación es diferente porque esta es la transformada del actor. Y si lo movemos de nuevo a componente, se ve que este es ahora el componente transform. Así que de nuevo, si nuestro socket o lo siento si nuestra malla de pila era un socket y tuviéramos que obtener su ubicación utilizando el espacio de componentes, devolvería este valor aquí una vez que se une a algo así como la malla Componente. Y luego, por último, si volvemos a nuestro Transformar ahora tenemos el espacio del padre Bowman. Y si volvemos a nuestro maniquí aquí, seleccionamos nuestro hueso. Su espacio óseo padre sería el valor que aquí hemos establecido. Ahora bien, no te preocupes demasiado si te pareció un poco confuso. La mayoría de las veces cuando estás usando este nodo, simplemente estarás usando la opción World de todos modos, porque esa suele ser la más útil, pudiendo obtener la ubicación mundial del socket. Ahora, hay un par de otras notas que son útiles cuando se trabaja con sockets. Por lo que vamos a eliminar estos nodos ahora y voy a arrastrar hacia fuera de nuestra variable de componente de malla, lo buscaré. ¿ Existe socket? Y esto solo comprobará, ¿ existe el nombre del socket que proporcionamos en la malla o la malla estática que conectamos al hocico y luego devuelve un valor verdadero o falso. Si lo hace. También podemos obtener una lista o una matriz de todos los nombres de socket existen en un componente en particular. Para que podamos arrastrar hacia fuera y buscar get socket, obtener todos los nombres de socket. Y esto sólo nos proporcionará una serie de nombres. Y estos serán todos los nombres de todos los zócalos en esta malla de pila específica. Y esto funcionará de nuevo con nuestra malla esquelética también. Simplemente podemos enchufar eso como nuestros nodos anteriores. Entonces ahora en realidad vamos a adjuntar algo a un socket durante el juego. Por lo que comenzaremos simplemente borrando estas notas y golpeando compile. Vamos a ir al Navegador de Contenido. Voy a crear un nuevo actor que se adhiera a nuestro personaje. Entonces haremos clic derecho en clase Blueprint. Vamos a crear un actor, voy a llamar al mío BP subrayado sombrero, o abrir eso. Y luego aquí solo voy a agregar un nuevo Componente de Malla Estática como ese. Y lo configuraremos. Malla. Así que hemos tenido por aquí abrir el desplegable de malla de pila. Y voy a configurar esto al cilindro que hemos estado usando antes, así, compilará y guardará esto. Después nos dirigiremos de nuevo a nuestro ThirdPersonCharacter. Y voy a hacer clic derecho y buscar evento de entrada. Y usaremos un evento de entrada uno. Entonces si recuerdas este nodos se ejecuta cada vez que presiono uno en mi teclado. Entonces lo primero que vamos a hacer cuando presionemos uno es spawn en el nuevo actor de sombreros. Entonces me arrastraré de presionado y desove social activo de clase. Pondremos la clase a r sombrero así. Ahora, porque vamos a unir inmediatamente nuestro sombrero al zócalo de cabeza de nuestro personaje. Podríamos salirnos con la suya con solo arrastrar desde aquí usando un nodo de transformación y simplemente desovar el sombrero a 0 en el mundo. Y entonces al instante se apegará a la cabeza de nuestro personaje de todos modos. Pero lo que pasa con esto es a veces para un par de marcos, podrías ver el sombrero aparecer en el centro del mundo y luego de repente encajar en el zócalo. Entonces, lo que me gusta hacer es obtener los sockets de ubicación actual spawn están en esa ubicación y luego adjuntarlo. Así que en lugar de usar el nodo de transformación, vamos a obtener la ubicación de los sockets. Por lo que voy a conseguir la malla se va arrastrar hacia fuera y sí conseguir socket. Usaremos la transformada de socket get. Pondremos nuestros sockets naming y esto tiene que ser exactamente el mismo el socket que creamos en nuestro esqueleto. Por lo que si recuerdas cuando lo llamamos hat socket, necesitamos usar el nombre exacto de formas que no encontrarán nuestro zócalo de sombrero de futbol. Vamos a dejar esto en RTS world porque queremos que el mundo se transforme. Y sólo vamos a arrastrar esto hacia fuera, conectar esto en spawn transform así establecerá el manejo de colisión para siempre desovar ignorar colisión, porque sólo queremos que se genere en esta ubicación. No queremos que intente ajustar nuestro extra de ninguna manera. Así que ahora vamos a establecer r hat actor a una nueva variable sólo para que podamos editarla si queremos más tarde arrastrar hacia fuera, vamos a hacer promueve una variable para crear una nueva variable para nosotros. Voy a llamar así a este sombrero. Ahora, tenemos un sombrero que va a desovar en nuestra ubicación de socket cuando lo volvamos a jugar. Entonces si podemos Pablo golpear play y si presiono uno, se puede ver que nuestro corazón se está desovando encima de mi cabeza. Pero si me muevo en C, se queda ahí porque aún no lo hemos apegado a nuestro personaje. Sólo le estamos diciendo que desove en la ubicación de ese socket. Por lo que saldrá de editor de plano y se dirigirá de nuevo al Third PersonCharacter aquí. A continuación, en realidad vamos a unir nuestro sombrero a nuestro personaje. Entonces, para hacer eso, arrastraremos hacia fuera desde el componente de malla hasta aquí, crearemos una nueva variable de puré, arrastraremos hacia fuera. Voy a buscarlo. Adjuntar. Ahora hay dos notas adjuntas que tenemos adjuntar actor a componente, que es lo que vamos a estar usando hoy porque estamos uniendo todo el actor corazón a un componente, que es nuestro componente de malla. Pero también podemos unir componentes a otros componentes. Entonces, por ejemplo, si dentro del sombrero R, sosteníamos un componente que queríamos unir a la malla, pero no queríamos unir todo el actor de sombrero a nuestra malla. Podríamos usar que adjuntar componentes, componente. Pero por ahora, solo usaremos adjuntar actor a componente. Y conectaremos esto hasta el nodo set. Ahora tenemos un objetivo, y este es el actor que en realidad vamos a estar uniendo a nuestra malla, que es el padre. Entonces vamos a enchufar eso en el blanco aquí. Entonces necesitamos establecer el nombre del socket. Ahora este va a ser el zócalo del sombrero. Nuevamente, esto siempre tiene que ser exactamente lo mismo que el socket que creamos en nuestro esqueleto. De lo contrario no unirá al actor al futbol. A continuación, tenemos las reglas de ubicación, rotación y escala. Ahora bien, esto es lo que le va a hacer el motor al actor de corazón cuando en realidad lo acople al puré. Ahora, por defecto es mantener relativo, y te mostraré lo que eso hace en el gameplay. Entonces si le pego play, presiono uno. Ya ven, ni siquiera puedo ver mi sombrero aquí. Pero si presiono F1, miro hacia abajo. Se puede ver que los sombreros en realidad por ahí, está unido al zócalo, pero tiene una distancia muy lejana. Y básicamente esa es la distancia que está el zócalo del World Center, que está por aquí. Entonces si corro mi personaje por aquí y presiono uno, ahora, deberíamos ver el Sombrero mucho más cerca del personaje. Esta es la distancia relativa que el zócalo está lejos del centro del mundo. Ahora, el siguiente, si volvemos a nuestro Third PersonCharacter aquí, es keep world, que si ponemos todos estos hacia arriba hacia el sombrero, se conectará al socket. La distancia de distancia es actualmente del zócalo. Ahora, si usamos esto y presionamos uno ahora, en realidad ves que está justo encima de la cabeza de nuestro personaje y se mantiene conectado al conjunto de caracteres. Pero si tuviera que volver a mi personaje y bajo retraso, digamos dos segundos. Si le pego play ahora y presiono uno y me muevo por aquí. Se puede ver que ahora está conectada porque se está moviendo con la animación, pero es esa distancia que estábamos lejos de ella cuando la engendramos. Luego, por último, si volvemos a Third PersonCharacter, podemos cambiar esto para ajustar al objetivo. Y eso solo hará que nuestro corazón encaje directamente al zócalo. Por lo que de nuevo, si podemos sondear, nos desharemos de este retraso aquí y le pegaremos a Play. Si presiono uno, pueden ver que nuestros sombreros se adhieren al zócalo y se queda ahí sin importar lo que hagamos. Y si en realidad agrego en ese retraso así. Ahora antes, si presionamos uno y luego nos alejamos, se mantendría esa distancia lejos de nosotros libro. Una vez que dos segundos que arriba, simplemente se ajusta directamente a la toma como es de esperar que lo haga. Ahora tal vez quieras separar a un actor de otro actor, lo cual te mostraré cómo hacerlo ahora, si volvemos al personaje en tercera persona aquí, voy a agregar un nuevo input events. Entonces buscaremos el evento de entrada, y lo agregaré para los eventos de entrada 0, por ejemplo. Aquí arriba, vamos a conseguir nuestra variable sombreros que creamos antes que se está configurando cuando desove el sombrero, podemos arrastrar hacia fuera y podemos buscar separar. Y podemos usar la opción de despegarse de actina aquí. Y ejecutaremos esto cuando nuestro 0 esté presionado. Ahora el valor por defecto es mantener relativo. Ahora bien, esto hará lo mismo que cuando coloquemos el sombrero. Mantendrá la ubicación relativa del sombrero del centro del mundo, cual no suele ser muy útil. Por lo que la mayoría de las veces estarás cambiando esto para mantener el mundo así. Por lo que cuando r hat se desprenda, se quedará en el lugar que fue cuando le dijimos que se despegara. Entonces si le pego Compile ahora, le pego play, presionaré un sombrero de spawner. ¿ Todavía tenemos ese retraso? Entonces si vuelvo a nuestro código aquí, simplemente quitaremos eso. Por lo que compilará, golpeó Play. Cuando presiono uno, se puede ver que nuestro corazón está apegado a nuestro personaje como lo era antes que pueda saltar y sigue ahí. Si presiono 0, se puede ver que ya no se mueve con nuestro personaje. Y es mantener esa ubicación exacta que estaba cuando presioné 0 para despegarlo. Ahora por último, hay un par de otras notas que tal vez quieras usar al usar archivo adjunto. Entonces si volvemos a nuestro Third PersonCharacter aquí, podemos arrastrarnos desde r hat y sí nos apegamos. Y esto en realidad nos va a conseguir el actor adjunto. Entonces, si usamos este nodo mientras estamos unidos a nuestro personaje, devolvería una referencia a nuestro personaje. También podemos arrastrar hacia fuera y sí nos apegamos. Y esto nos dará a los actores adscritos. Por lo que esto nos da una matriz de todos los actores que están apegados al sombrero actualmente. Un ejemplo de cómo esto podría ser útil es tal vez cuando tu personaje muere y destruyes su cuerpo, quieres destruir todas las cosas que podrían estar apegadas a él. Esta podría ser una buena manera de conseguir a todos los actores que están apegados a tu personaje y destruir a todos ellos también. Entonces el último, si arrastramos hacia fuera y buscamos de nuevo se adjunta, puede ver que hay get attached parents socket name. Y esto te dirá a qué socket R hat está conectado actualmente si está conectado a un socket. Ahora si quieres encontrar alguno de estos nodos por los que hemos pasado, siempre puedes simplemente arrastrar hacia fuera desde un componente como la malla aquí. Si voy a hacer un nuevo componente de malla aquí arriba, arrastre hacia fuera, puede buscar adjuntar para encontrar estos nodos adjuntos. Puede buscar socket para encontrar los nodos de socket. Y también puedes buscar consigue apegado para obtener estos modos adjuntos. Ahora, una última cosa que sí quería mencionar antes de terminar esta lección es que sí necesitas tener cuidado y unir actores a tu personaje porque pueden interferir con la colisión de tus personajes. Y esto puede hacer que tu personaje salga volando al aire o tenga problemas moverse porque ese actor que le has para moverse porque ese actor que le has pegado está bloqueando su colisión. Una cosa para asegurarte cuando lo haces adjuntar cosas a tu personaje es esta una buena idea para ir a través de cualquiera de sus componentes? Tengo colisión como un sombrero r. Aquí tenemos nuestro componente de malla apilada. Bajamos y encontramos los presets de colisión. Actualmente está configurado para bloquear o dinámico, lo que incluye a nuestro personaje. Por lo que siempre es una buena idea cambiar esto a la costumbre y asegurarse de que **** está configurado para ignorar para que r hat no interfiera en absoluto con la colisión de nuestros personajes. Entonces eso es todo para nuestra lección de sockets. Esperemos que ahora entiendas cómo funcionan y cómo puedes usarlos en tus futuros proyectos. 36. Lecciones adicionales (componente de movimiento): Oigan a todos. En esta lección vamos a estar echando un vistazo al Componente de Movimiento de Personajes. Y para aquellos de ustedes que estaban siguiendo a lo largo de nuestras lecciones anteriores, acabo de crear una nueva plantilla de tercera persona que podamos empezar desde fresco para esta lección. Ahora, el componente de movimiento de personajes está integrado en cualquier tipo de plano de personaje. Por lo que aquí dentro de nuestro Plano de PersonalThirdPersonCharacter, se puede ver en el panel Componentes, tenemos el Componente de Movimiento de Caracteres. Ahora bien, el componente de movimiento del personaje es lo que permite que nuestro personaje se mueva realmente. Y también nos proporciona montones de ajustes adicionales que podemos usar para ajustar cómo se mueve nuestro personaje y qué tipo de movimiento está haciendo. Así que si seguimos adelante y seleccionamos el Componente de Movimiento de Caracteres, puedes ver encima en el panel Detalles, tenemos todos los ajustes para ese componente. Si no tienes el panel Componentes o el panel Detalles, siempre puedes encenderlos simplemente subiendo al menú desplegable de ventanas aquí y seleccionando en el panel Detalles y también la Panelde componentes aquí. Ahora no vamos a pasar por todos los ajustes para el componente de movimiento porque hay bastantes de ellos, pero vamos a estar pasando por los principales y voy a estar explicando lo que hacen y cómo puedes ajustarlos. Si alguna vez olvidas lo que hace un ajuste, siempre puedes simplemente pasar el mouse sobre él y te da un consejo de herramienta razonablemente bueno sobre lo que hace ese ajuste específico. Entonces, para empezar, tenemos la escala de gravedad. Ahora bien, esta es la cantidad de gravedad que se aplica a nuestro personaje. Rápido para establecer esto en algo mucho más alto, como cinco, y lo compilaremos y le pegaremos a play. Cuando salto, se puede ver mi personaje en realidad no salta muy alto. Y eso es porque estamos aplicando cinco veces la gravedad normal a nuestro personaje. Ahora ten en cuenta que este valor de gravedad sólo afecta al personaje, no a otros objetos en el mundo. Después, volviendo a nuestro Third PersonCharacter y seleccionando el movimiento del personaje, tenemos la aceleración máxima. Ahora esta es la rapidez con la que acelerará el personaje hasta su velocidad máxima de movimiento. Cuanto mayor sea este valor, más rápido será el personaje a esa aceleración, y cuanto menor, menor será. A continuación tenemos el factor de fricción de rotura. Ahora cuanto más alto sea este valor, más rápido se detendrá el carácter cuando soltemos todas las teclas de entrada de movimiento. A continuación tenemos la media altura agachada. Ahora bien, esta es la altura que tendrá nuestro componente cápsula cuando nuestro personaje esté agachado. Y si vamos a nuestra ventana gráfica, puedes ver nuestro Componente Cápsula aquí. Ahora nuestro componente cápsula es lo que los textos, lo que nuestro personaje se está topando. Ahora, cuando estás agachado, normalmente querrías que esto fuera más corto porque tu personaje está agachado, y eso es lo que te permitiría moverte debajo de objetos inferiores. Entonces ahora regresaremos al Event Graph y voy a configurar un ejemplo rápido de cómo podemos decirle al componente de movimiento que estamos agachados. Así que si nos movemos aquí arriba, voy a crear un nuevo evento de entrada, registro de búsqueda de eventos de entrada C. Y sólo voy a desplazarme hacia arriba y tratar de encontrar esa entrada. Entonces eso está aquí para mí. Yo sólo voy a configurarlo para que cuando presione C, nuestro personaje Will Crouch. Y cuando realmente veo a nuestro personaje caminar en cuclillas, ahora ten en cuenta, nuestro personaje en realidad no tocará una animación agachada porque no hemos configurado el lado de animación de esto. Pero lo que vamos a estar haciendo es decirle al componente de movimiento que queremos que utilice la configuración de agacharse para decirle a nuestro componente de movimiento que estamos agachados arrastrará hacia fuera de Preston búsqueda de agacharse. Y seleccionaremos la función agacharse aquí. Y luego nos arrastraremos de liberados y buscaremos y nos agacharemos así. Ahora bien, estas son funciones que están integradas en los planos de los personajes. Si tratas de usar estas funciones y dices, solo un acto aleatorio de blueprint, no serías capaz de encontrar estas funciones. Ahora hay otra configuración que necesitamos activar y que en realidad está dentro de nuestro componente de movimiento de personajes que necesitamos decirle que nuestro personaje puede agacharse en el buscador sólo vamos a buscar puede agacharse. Y verás bajo capacidades de movimiento, puede agacharse en realidad ha tictac apagado. Entonces nos vamos a llevar ese. Ahora podemos probar esto en juego, así que solo compilamos y dirígete al mapa en tercera persona y le pegaremos al play. Ahora antes de golpear C, sólo voy a presionar la tecla Tilde, que es la tecla del lado izquierdo del wonky. Voy a buscar show space collision. Me golpean Enter. Por lo que ahora podemos ver toda la colisión en nuestro nivel, incluyendo nuestra colisión cápsula, que se puede ver es ese contorno rojo de nuestro personaje. Ahora si sostengo C y veo que mis cápsulas ahora se hicieron más pequeñas, Esa es nuestra semivida de las cápsulas, que es de 40 centímetros. Y si intento moverme y veo que mi personaje en realidad también se mueve más lento y mi cámara se mueve hacia abajo. Ahora, todo esto está sucediendo porque le hemos dicho al componente de movimiento que vamos al modo de movimiento agachado. Por lo que ahora si nos dirigimos de nuevo al tercer plano PersonCharacter y seleccionamos aquí el componente de movimiento. Y si buscamos agacharnos y barra de búsqueda aquí arriba, podemos encontrar los otros ajustes agachados. Por lo que tenemos la velocidad máxima de caminata agachada. Ahora bien, esto es lo rápido que se mueve el personaje mientras se agacha, y ese valor es en centímetros por segundo. Ahora también tenemos un ajuste llamado puede caminar fuera de los libros mayores al agacharse. Si esto es despega, te puedo mostrar lo que eso hace. Golpearemos el juego, correremos a nuestra cornisa aquí. Y si sostengo asiento agachado en C, no me permitirá caminar fuera del borde mientras estoy agachado. Ahora bien, si tuviéramos que habilitar ese ajuste, nos permitiría caminar fuera de los bordes mientras nos agachamos. Por lo que a continuación nos desharemos de la búsqueda de multitudes y continuaremos a través de los ajustes generales. Ahora tenemos el modo de movimiento de tierra por defecto y el modo de movimiento de agua predeterminado. Ahora, modos de movimiento o cómo le decimos al componente de movimiento qué ajustes queremos que use. Entonces, por defecto, cuando estamos en tierra, le estamos diciendo que queremos usar los ajustes de caminata que encontramos aquí abajo. Cuando en el agua queremos utilizar los ajustes de natación que se encuentran más abajo. Ahora cuando el componente de movimiento está en el modo de natación, no comenzará repentinamente a usar animaciones de natación. Las animaciones se manejan por separado. Lo que sí hace es decirle al componente de movimiento que queremos usar los ajustes de natación en lugar de decir, los ajustes para caminar. Ahora, pasando a los ajustes para caminar, tenemos la altura máxima del paso. Ahora esto es lo alto de una ventaja que tu personaje no podría intensificar sin tener que saltar. Ahora por defecto, esto es de 45 centímetros, pero tal vez tenías una escalera y el personaje no puede simplemente subir a pie normalmente, tendrías que saltar. Es posible que tengas que aumentar un poco este valor para permitir que el personaje suba una altura más alta. A continuación tenemos el ángulo de piso transitable. Ahora bien, así es como empinado de una pendiente puede subir nuestro personaje. Si quieres que tu personaje camine por pendientes más pronunciadas, necesitarías aumentar este valor. A continuación tenemos nuestra velocidad máxima de caminata. Ahora esta es la velocidad máxima nuestro personaje irá mientras camina. Entonces si queremos que nuestro personaje camine más rápido, habíamos aumentado este valor y si queríamos que caminaran más lento con disminuidos, entonces tenemos la velocidad máxima de caminata para agachados. Esto ya lo hemos explicado antes. Esta es la velocidad que nuestro personaje se moverá mientras se agacha. Entonces tenemos el Min, velocidad de caminata analógica. Y esto se usa para si tienes un balde, un gamepad stick. Esta es la velocidad mínima que tu personaje puede ir con la entrada del stick de entrada. A continuación, tenemos la deceleración de frenado caminando. Ahora esta es la cantidad de fuerza de desaceleración que se aplica al personaje cuando ya no estás caminando en una dirección. Por lo que cuanto mayor sea este valor, más rápido se ralentizará tu personaje. A continuación tenemos la puede caminar fuera de repisas. Si esto es cierto, se comporta como R puede caminar de libros mayores cuando está agachado, permite que nuestro personaje camine por la cornisa al caminar. Y si esto es falso, nuestro personaje no podrá salirse de los libros mayores. Ahora, desplazándose hacia abajo, iremos a la configuración de salto aquí. Ahora tenemos los saltos, la velocidad. Esta es la cantidad de fuerza que se aplica cuando un personaje realmente salta. Entonces si tuviéramos que establecer esto es algo realmente alto como los 2000s. Y podemos jalar, si golpeamos play y saltamos nuestros personajes ahora saltando muy alto. Ahora, volviendo al Third PersonCharacter y seleccionando nuestro movimiento de personaje hip, tenemos algunos otros ajustes para nuestro Jumping. No voy a pasar por todos ellos, pero algunos de los principales son el control aéreo. Ahora bien, esto es cuánto control el jugador sobre la dirección que se mueve tu personaje tendrá el jugador sobre la dirección que se mueve tu personaje, cuanto mayor sea este valor, más control tendrá. Ahora, moviéndose hacia abajo, no vamos a estar cubriendo los ajustes de red en esta lección porque están mucho más avanzados de lo que esta lección va a cubrir. Pero si seguimos bajando, encontrarás los ajustes de natación. Y aquí puedes establecer la velocidad máxima de nado. Podemos establecer cosas como flotabilidad. Y estos solo son relevantes si tu personaje está en la modalidad de natación. Entonces tenemos vuelo. Nuevamente. Podemos establecer la velocidad máxima de flujo. Esta es la velocidad que el personaje se moverá mientras esté en el modo de movimiento de vuelo. Ahora, bajando a los ajustes de rotación del movimiento del personaje, puedes ver que tenemos una velocidad de rotación. Esta es la rapidez con la que girará el personaje para enfrentar la dirección en la que está destinado a enfrentar. Entonces si yo fuera a configurar esto de 500 a 50, y compilamos y golpeamos play. Ahora, si miro en la dirección aquí y presiono W, se puede ver a mi personaje girando lentamente hacia esa dirección. Ese escenario es como controlamos. Qué tan rápido es el carácter gira. Ahora también tenemos un par de otros ajustes de rotación aquí. Ahora tenemos orientar la rotación al movimiento, lo que significa que el personaje se enfrentará a la dirección en la que nos movemos. Si apagamos esto y caemos y golpeamos play, y vemos que si empiezo a moverme en esta dirección, nuestro personaje continua mirando hacia adelante porque ya no estamos girando hacia nuestra dirección de movimiento. Ahora en nuestro componente de movimiento, también tenemos otro ajuste llamado use controller desired rotation. Ahora bien, si encendemos eso, nuestro personaje se enfrentará a la dirección que enfrentan nuestras cámaras. Ahora fijamos nuestra tasa de rotación en 50. Voy a volver a subir esto a 500. Y si compilamos y le pegamos a Play, se puede ver que ahora cada vez que mueva mi cámara, nuestro personaje se volteará para hacer frente a la dirección. Ahora se puede ver si me detuve de mi personaje rápidamente, nuestro personaje tiene un poco de retraso. Ahora eso es por la velocidad de rotación. Entonces podríamos disminuir o aumentar este valor para hacer que nuestro personaje gire más rápido hacia esa dirección. Ahora, algo a tener en cuenta, hemos utilizado la rotación deseada del controlador es que no funciona si también tienes la rotación orientada al movimiento marcada. Si ambos están marcados aquí o usan el controlador, rotación deseada no funcionará. Por lo que esos son la mayoría de los ajustes principales que estarás ajustando y el Componente de Movimiento de Personaje. Pero también podemos ajustarlos en juego. Entonces, si queremos acceder a lo que son actualmente estos valores, todos los cambian. Siempre podemos conseguir que nuestro componente de movimiento de personajes se arrastre y podemos buscar un valor en particular. Digamos por ejemplo, estábamos haciendo un sistema sprint y queremos que cambie la velocidad máxima de movimiento de nuestros personajes. Podríamos buscar la velocidad máxima de caminata establecida, y eso nos da acceso tanto a nuestra velocidad máxima de caminata como a nuestra velocidad máxima de caminata agachada también, donde usamos la velocidad máxima de caminata. Voy a establecer la velocidad máxima de caminata para decir 1500. Y copiaremos y pegaremos este nodo, conectaremos su backup objetivo a nuestro movimiento de personajes aquí. Y vamos a crear un nuevo input. Por lo que buscará entrada, luego desplazará, creará una entrada de desplazamiento a la izquierda. Cuando se presiona, queremos que nuestra velocidad máxima de caminata aumente a 1500 y cuando se libere la cambiará a decir, 600. Entonces ahora cuando compilamos y le pego a Play, si camino sin presionar shift, tenemos nuestra velocidad normal de caminata. Y si mantengo el turno hacia abajo, se puede ver nuestro personaje se pone mucho más rápido. Ahora volviendo al plano de personajes de ThirdPersonCharacter, también podemos cambiar en qué modo de movimiento o personaje se encuentra. Así que de nuevo, si conseguimos el movimiento de nuestro personaje, podemos arrastrar hacia fuera y simplemente hacer establecer el modo de movimiento. Y podemos usar la función de modo de movimiento SAT aquí para cambiar el modo de movimiento actual de nuestro personaje. Por lo que podríamos configurarlo a caer o nadar dependiendo del modo de movimiento en el que queremos que esté actualmente nuestro personaje. Ahora bien, si lo recuerdas, habilitamos podemos agacharnos en nuestro componente de movimiento, pero en realidad también puedes activar y desactivar otros modos de movimiento. Entonces si nos desplazamos a la derecha hacia abajo aquí, debería estar bajo el movimiento naff. Podemos soltar, haga clic en el menú desplegable para las capacidades de movimiento. Entonces aquí puedes ver que en realidad podemos habilitar y deshabilitar todos los diferentes tipos de modos de movimiento a los que tu personaje puede entrar. Ahora también podemos acceder si estos están o no habilitados o desactivados en nuestro código. que podamos buscar can agacharse por ejemplo. Eso nos permitirá comprobar ¿puede nuestro personaje agacharse actualmente? Ahora usando nuestra variable de movimiento de caracteres, también podemos ajustar cualquiera de nuestros otros ajustes. Por lo que podríamos arrastrar hacia fuera y buscar conjuntos, utilizar el controlador de rotación deseada. Y podríamos encender o apagar esto dependiendo de lo que estemos haciendo en nuestro código. También podemos aumentar o disminuir o tasa de rotación. Así que podemos buscar rotación, renta, y podemos establecer una tasa de rotación que queremos usar en lugar de tener que establecerla dentrode establecerla dentro nuestra configuración de rotación de movimiento de caracteres aquí. Ahora hay ajustes que no hemos cubierto en esta lección puramente porque hay muchos de ellos y algunos de ellos son mucho más avanzados y bastante específicos para ciertas necesidades. Pero puedes encontrar bajo la mayoría de las categorías y opción avanzada la cual te dará acceso a alguna información adicional. Y si quieres saber lo que hacen estas variables, siempre puedes simplemente pasar el cursor sobre. Te da una explicación bastante buena cuanto a lo que hacen. Los últimos ajustes que vamos a cubrir están en realidad en los valores predeterminados de clase del personaje. Por lo tanto, si hacemos clic en los valores predeterminados de clase y nos desplazamos hacia arriba aquí, debe encontrar el control de uso de las opciones de rotación, cabeceo, guiñada y rollo aquí. Ahora, al igual que el controlador de usuario deseado ajuste de rotación que tenemos en el movimiento del personaje, estos hacen que el personaje se enfrenta la dirección que la cámara está apuntando. Pero la diferencia está con estos ajustes, si estos están habilitados, el personaje enfrentará esa dirección al instante. No toma en cuenta la velocidad de rotación que tenemos dentro de nuestro Componente de Movimiento de Carácter. Si nos desplazamos hacia abajo de nuevo a los ajustes de rotación, ignorará esta velocidad de rotación. Si apagamos nuestra rotación deseada del controlador de uso, y nos dirigimos de nuevo a nuestros valores predeterminados de clase, desplácese hacia arriba. En realidad podemos habilitar estos ajustes para ver cómo funcionan en el juego. Por lo que para empezar sólo permitirá la rotación Europa. Entonces eso es de lado a lado. Vamos a compilar, dale a Play. Ya se puede ver ahora cuando giro mi cámara, el personaje se enfrenta instantáneamente a esa dirección. Ahora, normalmente para un personaje basado en tierra como nuestro Third PersonCharacter aquí, solo usarías el, tu opción, pero puedes habilitar los otros ajustes en los valores predeterminados de clase. Si nos desplazamos hacia abajo para encontrarlos, pueden ver que tenemos pitch and roll. Ahora bien, si habilitamos ambos y pulsamos Compile, verás cuando golpeemos play, podemos apuntar a nuestro personaje en cualquier dirección a la que esté enfrentando nuestra cámara. Pero de nuevo, normalmente no usarías esas dos configuraciones para un personaje basado en tierra como este. Ahora, por último, al igual que nuestras variables en nuestro componente de movimiento de caracteres, podemos establecer las que utilizan el código para que podamos hacer clic derecho, podemos buscar establecerá la rotación del controlador. Podemos usar set, usar control de rotación, pitch, roll y guiñada. Y podemos ajustar esos ajustes usando código. Entonces eso va a ser todo por esta lección. Hemos cubierto la mayoría de los ajustes más utilizados con el componente de movimiento de personajes. Entonces ojalá ahora entiendas cómo funciona eso y cómo puedes ajustar cómo se mueven tus personajes. 37. Lecciones adicionales (efectos de audio): Oigan a todos. En esta lección vamos a estar echando un vistazo a cómo podemos reproducir sonidos usando los nodos Blueprint. Ahora, Unreal Engine cinco tiene que sistemas de sonido. Actualmente se cuenta con el sistema de cue de sonido y el sistema de sonido Meta. Y ambos sistemas usan los mismos nodos Blueprint para reproducir realmente los sonidos. Y por eso vamos a estar echándoles un vistazo a ambos en esta lección de hoy. Ahora, el sistema de sonido Meta está actualmente en beta, lo que significa que necesitamos habilitarlo. Entonces nos dirigiremos a la opción de edición, iremos a plugins, y vamos a buscar la materia. vamos a asumir la opción del metal. Si el tuyo ya está marcado , entonces eso es genial. Ya lo tienes habilitado. Si no, que va a tomarlo, vamos a dar clic en sí, y luego necesitamos reiniciar el motor rápidamente. Por lo que ahora estoy de vuelta en el motor y he habilitado el sistema de sonido del metro. Ahora todavía podemos usar el sistema de sonido de cola también. Acabamos de habilitar el sistema de metro también. Y lo que podemos hacer para asegurarnos de que esté habilitado es Haga clic con el botón derecho en el Navegador de contenido aquí podemos ir a la opción de sonido y asegurarnos de que tenemos la opción de fuente de sonido Meta aquí. Ahora solo voy a explicar la principal diferencia entre las señales sonoras, los sonidos de metal y las ondas sonoras. Entonces lo que vamos a hacer es ir a la carpeta del motor. Y si no tienes eso, puedes ir a Configuración y luego ir a la categoría de contenido y asegurarte de que el contenido del motor de espectáculos esté marcado. Y eso debería mostrar esta carpeta aquí. Ahora, con la carpeta del motor seleccionada, vamos a agregar un nuevo filtro, bajaremos a sonar. Vamos a encontrar la opción de onda sonora que debería estar aquí abajo. Nos encargaremos de eso. Y ahora actualmente estamos viendo todas las ondas sonoras que están incorporadas al motor. Si colocamos el cursor sobre uno, en realidad podemos tocarlo. Entonces, si le pego, deberías poder escuchar ese sonido. Y la onda sonora es básicamente el archivo de sonido que obtendrás al importar un nuevo sonido al motor. Pensar en las ondas sonoras es sólo un archivo de sonido básico. En realidad no tiene muchas opciones de personalización. Abre una de estas ondas sonoras ahora que nos traen a mi otra pantalla aquí, puedes ver que aquí tenemos algunos ajustes. Mayormente bajo sonido es lo que estarías ajustando. Hay ajustes adicionales, pero no los vamos a cubrir en esta lección puramente porque son un poco más avanzados. Pero puedes hacer cosas como ajustar el tono de volumen y también puedes activar o desactivar el looping para esta onda de sonido. Pero pasado eso, aquí no hay un montón de opciones para personalizar el sonido. Ahora aquí es donde entran las señales sonoras y el sistema de sonido Mehta. Por lo que cerrará nuestra onda de sonido por ahora y regresará al navegador de contenidos. Y nos vamos a deshacer de nuestras caderas filtrantes. Por lo que eliminaremos onda sonora, agregaremos un nuevo filtro y vamos a buscar los sonidos que salgan. Entonces queremos la opción de cue de sonidos aquí. Y ahora se pueden ver todas las señales sonoras que están integradas en el motor, como las ondas sonoras. Para que podamos pasar el ratón sobre uno y golpear el play y escuchar el sonido, ese sonido cue o play. Si hacemos doble clic en un cue de sonido, podemos abrir el editor de cue de sonido. Ahora, no voy a estar pasando por todas las cosas que puedes hacer en un editor de cue de sonido porque hay muchas de ellas. Si haces clic con el botón derecho, verás hay muchos nodos diferentes que hacen cosas diferentes para el control del sonido. Pero esencialmente lo que hace un taco de sonido es que toma un sonido de onda. Entonces, si seleccionamos esta nota aquí, se puede ver que en realidad está representando la onda fallida compilada. Y eso lo podemos cambiar si quisiéramos. Y luego emite ese sonido al nodo de salida. Cualquier sonido que hayamos enchufado a esta salida es lo que se reproducirá cada vez que toquemos nuestra cue de sonido fallida de compilación. Ahora, si quisiéramos, en realidad podríamos tener múltiples sonidos de onda en un solo taco de sonido. Y la forma en que podemos hacer eso como si hiciéramos clic derecho en la búsqueda de jugador de olas. Podemos seleccionar ese nuevo nodo y establecer nueva onda que queremos colocar para que podamos hacer compilar el éxito. Ahora, tal vez queríamos, cada vez que le dijimos a esta señal sonora que la tocara para escoger aleatoriamente entre dos ondas sonoras diferentes. Podríamos hacer eso con solo arrastrar la búsqueda al azar. Y podríamos conectar ambas ondas sonoras en esta carga aleatoria, luego la salida en nuestro nodo de salida. Y ahora cada vez que toquemos esta Q, escogerá aleatoriamente uno de estos sonidos así. Ahora hay algunas cosas aquí a la izquierda. Ahí está el volumen multiplicarlo y el tono se multiplican. Y esto afectará a todas las olas que hay en este cubo. Entonces en lugar de tener que ir a cada ola que nuestros usuarios de cola, podríamos simplemente controlar el volumen y el tono aquí. Ahora tenemos los ajustes de atentuación. Ahora bien, no voy a estar cubriendo esto a detalle en esta lección porque están un poco más avanzados. Pero básicamente los planos de ajuste de atentuación solo contienen un montón de configuraciones que controlan qué tan lejos viaja un sonido y también cuánto disminuye el volumen del sonido a lo largo de una distancia. Si quieres ver esas configuraciones que están incluidas, ese blueprint puedes asumir esta opción aquí. Y en realidad te mostraré todos esos ajustes. No voy a pasar por estos porque hay muchos y son bastante complejos. Si quieres aprender más sobre estos épicos en realidad tiene alguna documentación realmente buena sobre la atentuación de sonido. Por lo que ahora hemos cubierto las diferencias básicas entre una onda de sonido y una cue sonora. Ahora, las ondas sonoras de nuevo, son sólo el archivo básico de sonido que importas para el motor. Y luego suenan señales. Podemoshacer cosas como recoger al azar ondas sonoras. Podemos ajustar cosas como el pitch a través de estos nodos aquí. Ahora, por último, sólo voy a explicar cómo creamos una cue sonora. Entonces lo que podemos hacer es si vamos a nuestro navegador de contenidos aquí, voy a deshacerme de mi filtro de cue de sonido solo hacer clic derecho y haciendo sonido cue eliminado. Y añadiremos un nuevo filtro. Y vamos a ir a los sonidos y nos limitaremos a asumir los sonidos. Y esto nos va a mostrar todos los tipos de sonido. Entonces nos encargamos de esto y vamos a encontrar unas ondas sonoras. Entonces tenemos nuestro obturador de la cámara aquí. Ahora para crear una nueva cue de sonido, puedes simplemente hacer clic derecho en una onda de sonido. Y aquí, puedes subir a crear cubo y puedes dar clic en esto, y eso nos creará un nuevo cue de sonido. Si abrimos ese nuevo taco de sonido, ya verás, si lo traigo a la pantalla. puede ver que en realidad tiene una onda de obturación de cámara. Y eso es en lo que hicimos clic derecho en el Navegador de contenido. Y se conecta a nuestra salida para nosotros dentro de nuestro nuevo obturador de cámara q. Si subimos a la carpeta Characters aquí, solo me voy a deshacer de estos filtros, simplemente haga clic derecho y luego haga eliminar todos los filtros. Entonces también podemos crear señales sonoras haciendo clic derecho. Y aquí ir al sonido y podrás encontrar el taco de sonido. Y lo que eso hará es simplemente crear un taco de sonido vacío para nosotros. Entonces, si abrimos esto, verías que en realidad no hay entrada aquí porque no le dijimos qué onda queremos que use. Y si quieres agregar una ola, puedes simplemente hacer clic derecho y buscar wave, wave player. Y puedes configurar un taco de sonido aquí y conectarlo a la salida. Entonces a continuación vamos a pasar al sistema de sonido metal. Y el sistema de sonido metálico simplemente reemplaza al sistema de cue de sonido. Entonces si nos dirigimos al navegador de contenidos, voy a hacer clic derecho en ir a sonidos y vamos a crear una nueva fuente de sonido metro. Ahora bien, este es el equivalente de nuestra señal sonora aquí. Entonces lo que haremos es crear una nueva fuente de sonido de medida. Llamaremos así a este nuevo sonido, y lo abriremos. Por lo que ahora tenemos una nueva interfaz de usuario. Se ve un poco similar a nuestro sistema de colas, pero tiene algunas diferencias. En primer lugar, tenemos una entrada aquí, y este tipo de trabajos como ejecución pendens hacen dentro de los planos. Esto correrá cuando se le diga a nuestro sonido de metro que se reproduzca. Y luego tenemos un acabado. Entonces queremos ejecutar esto una vez que hayamos terminado de ejecutar nuestro código y gallina, entonces tenemos esta salida y esto es a lo que conectamos para nuestro sonido. Ahora actualmente dice nuestro jitomate, porque nuestro ajuste para nuestro sonido Meta en realidad está ajustado a mono. Si desea cambiar esto, lo que normalmente probablemente lo haga, desea hacer clic en este menú desplegable y seleccionar estéreo. Y ahora puedes ver que tenemos una opción para nuestras salidas izquierda y derecha. Ahora, a diferencia del sistema de cue de sonido, no voy a entrar en súper profundidad con este sistema porque si haces clic derecho, verás que hay montones y montones de funciones. Es un sistema muy grande. Pero lo que haremos es crear un nuevo plan Wave. Entonces, si haces clic derecho y buscas la onda Claire, podemos usar este nodo para reproducir nuestros sonidos de onda. Se puede ver que tenemos un play y stop inputs. Y de nuevo, estos funcionan como entradas de ejecución en un nodo blueprint. Es así como sostuvimos esta nota para reproducir un sonido o para dejar de tocar un sonido. Podemos establecer una ola de activos. Entonces aquí es donde establecemos nuestro sonido de onda que queremos que se reproduzca. Para que pudiéramos escoger, digamos, archivo compilado. Podemos establecer una hora de inicio. Entonces si quisiéramos, podríamos iniciar el sonido en otro momento distinto al 0. Podemos cambiar el terreno de juego. Podemos configurarlo en bucle. Podemos establecer la hora en que inicia el bucle. Y podemos establecer cuántas veces o cuánto tiempo, lo siento, el bucle lo hará. Bucle para. La duración del bucle se establece en menos uno. Eso sólo significa que si la flauta está activada, se repetirá para siempre. Ahora, este nodo tiene muchas salidas y no vamos a estar cubriendo todas ellas, pero sí cubriremos cómo reproducir realmente este sonido. Entonces desde nuestra entrada, queremos ejecutar nuestra obra de teatro en nuestra ola Claire, esto es lo que le dice que empiece a tocar un sonido. Y luego de nuestras salidas que queremos, estoy acabado, y lo conectaremos a nuestro sonido de metal en terminado aquí. Eso es lo que les dice a un sonido que nuestra onda ha terminado de tocar. Entonces tenemos este tomacorriente y francamente, y vamos a enchufar esos en nuestras salidas aquí. Por nuestro sonido de metal. Esto es lo que proporciona una salida de audio izquierda y derecha para nuestro sonido. Entonces ahora si le pegamos a play, deberíamos escuchar un sonido. Ahora, la diferencia con los metazoanos es que tenemos estos pines de ejecución en los nodos. Y aquí, lo que podríamos hacer en lugar de simplemente ejecutar el nodo de salida sin terminar, es que si quisiéramos, podríamos tener múltiples sonidos reproduciendo uno tras otro. Para que podamos copiar a nuestro jugador de olas aquí, pegarlo aquí abajo. Ahora, cuando termine nuestro primer sonido, tal vez queramos que se reproduzca otro sonido para poder conectar este pin up terminado demasiado educado. Insertamos un nuevo sonido o lo configuramos para decir compilar éxito. Pero ahora queremos conectar nuestra izquierda y nuestras partes a estos pines de salida realmente podamos escuchar el sonido. Pero si los reemplazamos, se puede ver que desconecta nuestros primeros. Entonces lo que necesitamos ahora es una mezcladora. Por lo que haremos clic derecho y buscaremos mezclador. ves que tenemos muchas mezclas diferentes dependiendo de cuántas entradas tenga, vamos a usar un mezclador estéreo. Entonces haremos mezcla estéreo o dos. Eso significa que podemos enchufar nuestra izquierda y nuestra derecha desde aquí, y nuestra izquierda y nuestra derecha desde aquí. Y nos dará sólo una salida para izquierda, para derecha. Entonces desde nuestro acabado en nuestra segunda trama de onda conectaremos esto hasta la salida. Entonces ahora lo que va a pasar es cuando le digamos a nuestra medicina que juegue, va a jugar se compilan, fallan. Una vez que haya terminado de jugar, se jugará se compilan el éxito. Y va a emitir el audio izquierdo y derecho de ambos nodos al mezclador y luego emitir el resultado a nuestro sonido metal. Y podemos probar esto con solo golpear Play. Se puede ver que ambos sonidos se reproducen uno tras otro. Entonces ese es solo un ejemplo sencillo de las cosas que puedes hacer con el nuevo sistema de sonido del metro. Ahora, hay algunos otros ajustes. Si vamos a la configuración de la fuente aquí, puede ver que podemos establecer un ajuste de certificación al igual que nuestras señales de sonido. Y de nuevo, este es el plano que controla la distancia a la que se puede escuchar el sonido y cuánto disminuye el volumen del sonido a lo largo de una distancia. Así que a continuación en realidad voy a estar mostrándote cómo podemos reproducir todos estos diferentes tipos de sonido usando planos. Entonces lo que haremos es ir a nuestro ThirdPersonCharacter, diríjase de nuevo a nuestra carpeta de contenido aquí. Sólo voy a ocultar la carpeta de contenido para nuestro motor. Iremos a la carpeta en tercera persona, abriremos planos, e iremos al ThirdPersonCharacter. Y si no te has dado cuenta ya, he creado un nuevo proyecto en tercera persona a partir de nuestros últimos proyectos son así que tenemos un nuevo comienzo aquí. Entonces ahora sólo vamos a configurar ejemplo de cómo podemos tocar algunos sonidos. Por lo que voy a agregar el nodo de juego juego se arrastrará hacia fuera de esto y hacer un temporizador por eventos. Delevento chulo. Vamos a crear un evento personalizado. Llamaremos a esto el sonido de M. Y simplemente ordenaremos esto rápidamente. Y voy a hacer este bucle, digamos cada dos segundos y vamos a tomar en bucle también. Por lo que ahora hay cuatro nodos principales para reproducir sonidos. Si nos arrastramos fuera de nuestro evento sonoro aquí y la búsqueda tocará sonido. Y ya ves que tenemos reproducir sonido, 2D y reproducir sonido en locación. La diferencia entre estos es reproducir sonido. Un 2D es realmente útil para cosas como sonidos de interfaz de usuario. Simplemente lo reproduce en la computadora de los jugadores locales. No reproduce el sonido en un lugar específico del mundo. Entonces tenemos reproducir sonido en la ubicación, que reproduce un sonido en un lugar específico del mundo. Por lo que comenzaremos con el lugar el martes. Aquí puedes ver que podemos establecer un sonido. Esto en realidad puede ser una onda de sonido, un taco de sonido, o un sonido de metal. Entonces, si buscamos nuestro asunto, pueden ver que podemos configurarlo a nuestro nuevo sonido masker. Podemos establecer en cola de sonido agudo o podemos configurar a una onda sonora. Ahora, es una buena práctica usar señales de sonido o sonidos Meta puramente porque solo tienes más control sobre cómo se ejecutan esas. Pero por ahora, sólo voy a usar nuestros nuevos sonidos Meta. Por lo que he buscado nuevo sonido de metro y lo seleccionaremos de nuevo. Podrías seleccionar una Q si quisieras. Corría exactamente igual que nuestro sonido de metro. Se compilará y golpeará play. Y deberíamos escuchar ese sonido tocar. Y es pagar ambos sonidos. Porque si te acuerdas, en nuestro sonido metal, encadenamos esos dos sonidos juntos. Ahora, volviendo a nuestro Third PersonCharacter, haremos clic en este pequeño desplegable aquí y nos da algunas configuraciones que podemos usar para controlar este sonido que se está reproduciendo. Podemos cambiar el volumen y el tono. Podemos establecer una hora de inicio. Entonces tal vez tenías un sonido muy largo y querías que empezara a los cinco segundos, podrías poner cinco aquí, y ese es el momento en podrías poner cinco aquí, que el sonido dejaría de sonar. Tenemos configuraciones de concurrencia. Ahora bien, esto es algo así como el plano de la atentuación. Pero este tipo de blueprint contiene los ajustes de cuántos de este sonido se pueden reproducir al mismo tiempo. No voy a entrar en ello en esta lección porque es un poco más avanzado, pero para eso se usa eso y eso es lo mismo para ser dueño de actor aquí, los dos se usan para concurrencia. Pero por ahora sólo podemos dejar esos en blanco y nuestro sonido sonará muy bien. Por lo que a continuación vamos a echar un vistazo a la ubicación del sonido de reproducción ahora. Por lo que nos desharemos de nuestro lugar el martes. Sólo compilar, arrastrar hacia fuera de nuestro sonido aquí y buscar el sonido de Platón en. No tocaremos sonido en locación. Ahora este nodo va a tener algunas opciones extra. Entonces podemos decir sonido. Esta vez escogeremos, digamos, nuestra cola de obturación de cámaras por ejemplo. Podemos decir ubicación. Entonces sólo voy a usar la ubicación de nuestros personajes. Por lo que usamos obtener la ubicación del actor. Conecta eso a la clavija de ubicación. Y si compilamos, deberíamos escuchar ese sonido reproducirse cada dos segundos. Justoasí. Si nos dirigimos de nuevo a nuestro blueprint en tercera persona, si hacemos clic en la flecha hacia abajo aquí, verás que tenemos algunas opciones nuevas así como algunas de las mismas de nuestro nodo anterior. Podemos establecer una rotación si queremos. También podemos cambiar el tono del volumen y los tiempos de inicio como antes. Pero ahora tenemos una opción para el ajuste de atentuación. Ahora bien, si dejas este espacio en blanco, usará el ajuste de atentuación que has establecido dentro del cubo. Así que si lo recuerdas establecido aquí, ahora, esto es como una especie de opciones de anulación. Entonces tal vez esta vez cuando tocas el sonido, querías usar diferentes ajustes de distancia para saber hasta dónde se puede escuchar el sonido. Así que esto es algo así como una configuración de anulación. Por lo general, si está utilizando la activación de sonido, en realidad desea configurarlos dentro las señales de sonido en lugar de los nodos aquí. Entonces como antes, tenemos los ajustes de concurrencia y nuestros pines de actor propietario aquí también. Ahora, tanto los nodos que hemos estado usando hasta ahora, me acaban de colocar hasta los nodos y son geniales por solo tocar un sonido y olvidarlo. Pero tal vez queramos poder reproducir un sonido y pausar ese sonido o lupus o repetirlo. Así que hay algunos otros nodos que podemos utilizar para que si arrastramos hacia fuera de nuestro sonido ahora y buscar el sonido de spawn en C que tenemos spawn sonido 2D, spawn sonido en la ubicación y spawn sonido adjunto. Ahora no voy a estar cubriendo el sonido de spawn 2D porque básicamente es el mismo que nuestra nota 2D anterior. Pero lo que haremos es usar la localización de sonda de spawn. Ahora si creamos esto, se puede ver que tenemos todas las mismas opciones que teníamos antes, aparte de que tenemos una nueva llamada auto destroy. Lo que esto significa es que una vez que el sonido que configuramos haya terminado de reproducirse, destruirá automáticamente este componente sonoro. lo que dependiendo de lo que estés planeando hacer con estos sonidos, es posible que quieras desactivar esto. A lo mejor planeas repetirlo o detenerlo y luego volverlo a reproducir más tarde. Probablemente querrías desactivar este ajuste. Ahora puedes ver que también tenemos una salida, y esta es una salida de componente de audio, y esto es lo que podemos usar para controlar su sonido. Entonces, si nos arrastramos, podemos promover esto a una variable. Por lo que podemos seleccionar la opción Promociona Variable que creará una nueva variable llamada componente de audio. Y podemos poner un nombre. Entonces lo configuraremos para que diga un componente de sonido como ese. Y ahora usando esta variable de componente de sonido, podemos llamar a muchas funciones diferentes para controlar realmente el sonido que hemos establecido. Entonces si obtenemos nuestra variable de componente de sonido aquí, nos arrastramos hacia fuera, podemos hacer cosas como pausar nosotros mismos para que podamos buscar Set Pause. Y podemos establecer si el sonido está pausado o no o si queríamos cambiar el volumen de nuestro sonido, podríamos arrastrar hacia fuera y sí establecer el volumen. Podríamos cambiar el volumen, multiplicar usando este nodo. Y una vez que terminamos con nuestro componente sonoro, tal vez solo queríamos destruirlo. Podemos simplemente arrastrar hacia fuera la búsqueda de destruir, y podríamos usar el nodo de componente destruir aquí. Ahora en realidad hay bastantes ajustes que podemos usar con nuestro componente de sonido. Si arrastra hacia fuera y busca audio, en realidad puede encontrar todas las funciones relacionadas con el audio que se pueden usar con nuestro componente de sonido. Ahora el siguiente nodo que cubriremos es el sonido adjunto a nodo. Entonces si eliminamos este código por ahora, moveremos esto un poco más arriba así que tenemos un poco más de espacio. Nos arrastraremos de nuestro evento sonoro y buscaremos el sonido de spawn. Y queremos el sonido de spawn adjunta nota aquí. Ahora en lugar de una ubicación, en realidad nos da un componente que podemos unirnos. Esto es útil para cosas como tal vez tuvieras un auto, si tuvieras ruido en el motor de un auto, en realidad querrías que eso siguiera al auto por ahí. Por lo que querrías adjuntar ese sonido a un componente. Podríamos adjuntarlo a decir, el componente de malla de nuestro personaje aquí. Podríamos enchufar eso y ahora el sonido seguirá junto con nuestro componente de malla. Y por supuesto podemos configurar nuestro sonido para que pudiéramos configurar esto para decir sea el clic en el botón Q aquí. Ahora si hacemos clic en la flecha hacia abajo aquí en nuestro nodo spawn adjunto en realidad nos da algunas opciones nuevas. Yo sólo voy a subir estos. Entonces tenemos un poco más espaciador. Podemos configurar un socket para conectar nuestro sonido también. Así que si nuestra malla tuviera que decir, un zócalo en su cabeza, podemos establecer el nombre del socket aquí y me suena realmente unido a ese zócalo y seguir junto con nuestra malla. A continuación, tenemos la configuración de ubicación y rotación. Ahora bien, estos hacen algo diferente dependiendo de la configuración del tipo de ubicación aquí. Entonces, si esto se establece para mantener el desplazamiento relativo, y diríamos establecer nuestro valor Z en 50. Bueno actualmente nuestro sonido se está uniendo a nuestra malla. Entonces si vamos a nuestra ventanilla, soy mallas ubicación está justo aquí y este punto de pivote. Entonces debido a que hemos añadido 15, el sonido z r se uniría a la malla, pero sería aproximadamente esta altura, 50 centímetros por encima de la ubicación de las mallas. A continuación, si volvemos a nuestro nodo, tenemos la opción de mantener la posición girada. Ahora bien, si dejara esto a decir, los ceros son 0, el sonido r engendraría en el centro del mundo y luego se uniría a nuestra malla de personaje. Ahora, dependiendo de lo lejos estuviera nuestra malla de carácter del centro del mundo, segura, por ejemplo, estaba 500 centímetros en dirección x. El sonido siempre se mantendría 500 centímetros en la dirección x de nuestro personaje, pero seguiría junto con nuestro personaje a medida que se movía. Luego, por último, tenemos las dos opciones de complemento. Ahora, hay dos de estos. No importa cuál selecciones para los sonidos. Tan ajustado al blanco sólo significará que el sonido está unido a las raíces de las mallas. Así que aquí mismo en nuestra malla, otra nueva configuración que tiene este nodo es el stop cuando está unido a destruido. Y eso básicamente significa que nuestro sonido, si esto está marcado, dejaremos de jugar cuando nuestra malla se destruya. Si esto está ticked off que el sonido r seguirá jugando incluso si la malla se destruye. Entonces debajo de eso acabamos de conseguir todos los mismos ajustes que teníamos para nuestros nodos anteriores por los que ya he pasado. Y por supuesto, tenemos un nodo de salida del componente de audio. Y podemos configurar nuestra variable de componente de audio que creamos anteriormente. Y podemos usar todas esas mismas funciones que acabo de mostrarte con esta variable de componente de sonido. Ahora también podemos agregar componentes de audio a los planos. Por lo que si nos dirigimos al panel Componentes y buscamos audio, se puede ver que en realidad dice Audio y luego en soportes de la cámara obturador cue. Para mí, la razón por la que está haciendo eso es si voy al Navegador de Contenido, en realidad lo tengo seleccionado. Entonces si desselecciono eso, volvemos a nuestro componente aquí y busco audio. Simplemente deberíamos ver el nombre del audio para que podamos dar clic en eso. Eso crea un nuevo componente de audio. Y ese componente se adjunta a nuestro personaje automáticamente. Y encima en el panel Detalles, puedes configurar todas las cosas que hemos estado diciendo en estos nodos antes, podemos establecer el sonido que queremos usar. Y esto puede ser una ola, una cola, o un sonido de metal. Para que pudiéramos elegir nuestro nuevo sonido de metro. Y eso funcionará muy bien con nuestros nuevos componentes de audio. Podemos establecer cosas como el volumen, el tono, podemos ajustar los ajustes de accionamiento. Y podemos controlar este componente de audio la misma manera que controlamos a nuestro componente de audio aquí abajo. Podemos arrastrar hacia fuera, podemos pausarlo, por ejemplo. Podemos quitarlo si quisiéramos. Nos vendría bien un destruir. Y se comporta exactamente igual que nuestra variable de componente de sonido que usamos anteriormente. Por lo que ahora podemos probar este componente de audio hacia fuera. Yo sólo voy a desconectar este código aquí para que no esté reproduciendo nada. Y si lo compilamos y le pegamos a Play, verás que nuestro sonido de audio se reproduce en el Stan Lee porque ese componente el Stan Lee porque ese componenteforma parte de nuestro personaje. Ahora, tal vez no quieras que el sonido se reproduzca al instante, quieres reproducirlo más adelante, lo que podríamos hacer es volver a nuestro Third PersonCharacter, seleccionar nuestro componente de audio, desplázate hacia abajo hasta el auto activar y marcar eso apagado. Ahora, cuando compilamos y golpeamos play, nuestro sonido no se reproduce. Pero podríamos agregar algún código para activar ese componente. Por lo que podríamos hacer clic derecho en la búsqueda de entrada. Podemos buscar decir, entrada evento uno. Y cuando presiono uno de mis teclados, quiero activar mis sonidos para que podamos sacar el componente de audio arrastrar y hacer activar y usar la nota de activar aquí. Conecta eso a nuestro prensado. Y ahora podemos compilar y golpear play. Y cuando presiono uno, suena suena. Ahora puedo reactivar eso cada vez que quiera con solo presionar uno. Eso cubre más o menos las principales formas en las que puedes tocar sonidos usando planos. Ahora también podemos reproducir sonidos dentro de animaciones. Entonces lo que haremos es sacarnos X fuera de plan editor. Voy a volver a subir a la carpeta de contenido aquí, a la Carpeta de Personajes, luego a los maniquíes, luego a las animaciones. Quinn, aquí vamos a abrir una carrera para la animación. Y aquí puedes ver que tenemos un bar notificado. Ahora, las notificaciones son básicamente piezas de código que se pueden ejecutar en un momento específico en una animación. Entonces, si hacemos clic derecho en nuestra barra de notificación, podemos agregar una nueva notificada y hay algunas incorporadas aquí, pero vamos a estar usando el sonido de reproducción. Si agregamos eso, podemos arrastrar esto a cualquier punto que queramos en la animación, digamos aquí mismo. Y ahora, cada vez que la animación llegue a reproducirse, en este punto, tocará el sonido que nos sentamos. Y aquí arriba en el panel Detalles es donde nos podemos poner. Entonces esto puede ser de nuevo, un sonido de onda, un taco de sonido o el nuevo medidor suena. Para que podamos seleccionar esta celda a nuestro obturador de cámara, o podríamos configurarlo a nuestro nuevo sonido de metro. Y eso sólo jugará bien. También tenemos ajustes para cosas como el tono de volumen, y podemos activar si el sonido sigue o no la malla. Esto puede ser bastante importante si estás haciendo un sonido que quieres seguir junto con el personaje, querrías asumir esto. Ahora cuando nos arrastramos a nuestro sonido de metro aquí, veamos. Jugaré cada vez que la animación llegue a ese punto. También podemos agregar sonido múltiple, notifica para que podamos hacer clic derecho y otro golpe haga clic en reproducir sonido. Y ahora tenemos un lugar adicional y notificar. Podemos agregar un sonido totalmente diferente, digamos el disparo de la cámara agudo. Entonces ahora cuando llegamos a ese punto, teníamos esa cámara filmada en juego. Y luego cuando llegamos a este punto, están destinados a sonar las reproducciones. Entonces ahora en realidad estamos listos para probar esto en juego. Nos dirigiremos a nuestro mapa y le pegaremos a play. Por lo que ahora cuando corro hacia adelante, deberíamos escuchar nuestros sonidos tocar en el momento de la animación que nos sentamos ahí como. Entonces, eso va a ser más o menos por esta lección. Esperemos que ahora entiendas un poco más sobre cómo podemos reproducir sonidos y el motor usando planos y también avisa animación. Al igual que una nota al margen, tal vez te estés preguntando si deberías usar señales sonoras o sonidos metta. Eso va a depender de cuando estés viendo este video. Actualmente, los sonidos de metal está en beta, y por eso tenemos que ir al menú de plugins y habilitarlo. Pero si estás viendo esta lección y ya no dice Beta junto al plugin de sonidos de metal, probablemente deberías estar usando el sistema de sonido metro. 38. Lecciones adicionales (efectos de partículas): Oigan a todos. En esta lección vamos a estar aprendiendo cómo generar efectos de partículas del Niágara usando planos. Así que antes de empezar para aquellos de ustedes que estaban siguiendo en la lección anterior, he creado una nueva plantilla en tercera persona, solo para que tengamos un nuevo comienzo para esta lección. Ahora, la plantilla de tercera persona en realidad no incluye ningún efecto de partículas del Niágara para que utilicemos. Entonces vamos a usar uno gratuito del mercado. Voy a estar usando Niagara step VFX pack de side arm studio es completamente gratis así que puedes simplemente recogerlo en el mercado, seleccionar Agregar al proyecto, y luego seleccionar tu proyecto y lo hará descarga automáticamente todo por ti. Por lo que una vez que haya terminado de descargarse, deberías encontrar una nueva carpeta y tu navegador de contenido al que podamos ir. Y aquí estarán todos esos efectos de partículas que acabamos de descargar. Entonces iremos a la carpeta Niagara Effects e iremos a sistemas de partículas. Y entonces aquí puedes ver que tenemos todos nuestros efectos de partículas del Niágara. Ahora podemos seleccionar uno de estos para echar un vistazo más de cerca. Voy a abrir el restos de tierra, por ejemplo. Y sólo traeré esto de mi otra pantalla. Puede tardar un momento en compilarse, así que solo déjalo hacer eso antes de que podamos ver una vista previa. Ahora el mío terminó de compilar. Si me acerco un poco, se puede ver que tenemos una partícula de tierra perfecta jugando aquí. Ahora no vamos a estar cubriendo Editor del Niágara en esta lección puramente porque es un sistema enorme que podría tener todo un curso simplemente enfocado alrededor de él. Pero lo que estaremos haciendo es que usaremos estos nuevos efectos que hemos importado a nuestro proyecto y estaremos desovando durante el juego. Entonces empezaremos por ir al personaje en tercera persona. Así que nos dirigiremos a nuestra carpeta en tercera persona, luego los planos de ThirdPersonCharacter y heredaremos, que va a configurar un temporizador en Begin Play para generar nuestro efecto de partícula. Entonces haremos clic derecho. Entonces solo olvídate para empezar a jugar. Arrastra desde aquí y haremos temporizador por ellos. Nos arrastraremos desde el pin del evento y buscaremos un evento personalizado. Y llamaremos así a este efecto engendro. Y lo configuraremos para que desove cada 1 segundo. Y queremos que esto se vuelva en bucle. Entonces me voy a encargar de looper. Ahora, hay algunos nodos diferentes que pueden engendrar efectos de partículas del Niágara. Nos vamos a estar enfocando en los dos principales en esta lección. Así que si arrastramos fuera del efecto spawn y buscamos el sistema de spawn, se puede ver que tenemos cuatro nodos, pero vamos a estar echando un vistazo al sistema de spawn en la ubicación y al sistema de spawn adjunto. Ahora la diferencia entre estos dos, observe que el sistema de desove en la ubicación solo generará nuestro efecto en una ubicación dada y se quedará allí. Mientras que el sistema de desove conectado, podemos usar eso para unir nuestro efecto de partícula a algo. Y si eso se mueve, seguirá junto con ese objeto. Entonces comenzaremos con el sistema de spawn en la nota de ubicación y crearemos. Ahora partiendo de la parte superior tenemos plantilla de sistema. Este es el efecto Niágara que vamos a engendrar usando este nodo. Para que podamos dar clic en esto. Se puede ver que tengo todos mis efectos de nuestro paquete de activos de paso. Para que podamos seleccionar uno de estos. Voy a seleccionar digamos, el efecto hierba aquí. Y eso quiere decir que ahora cuando ejecutemos este nodo, éste engendrará el efecto de partícula de hierba. Puede que desee compilar algunos shaders, solo déjelo hacer eso. Entonces a continuación tenemos la ubicación. Ahora esta es la ubicación en la que generará nuestro efecto de partículas. Tenemos la rotación, esta es la rotación, será desovar eso. Y entonces tenemos la escala también. Ahora tenemos auto destruir. Ahora lo que eso hará es que destruirá nuestro componente de efecto de partículas cuando termine de reproducir su efecto de partículas. Así que normalmente probablemente querrías tener esto encendido. También tenemos auto activate, lo que básicamente significa que cuando desove el efecto de partícula, automáticamente comenzará a reproducirse. Y tenemos el método de pooling. Ahora, el pooling es cuando el motor básicamente almacena una carga de efectos de partículas desactivadas. Y luego cuando le decimos que desove un efecto de partícula, en lugar de crear uno nuevo, puede reutilizar uno desactivado. Ahora para este ejemplo, que puede dejar esto como ninguno. Entonces ahora vamos a desovar nuestro efecto de partículas en las ubicaciones de nuestros personajes. Entonces sólo vamos a conseguir la ubicación del actor. Y conectaremos eso directamente a nuestra variable de ubicación aquí. Voy a dejar la rotación y la escala como están. Ahora podemos compilar y probar esto. Entonces le pegaremos a play. Y si nos fijamos en nuestro centro de personajes aquí porque esa es la ubicación de nuestros personajes como actores, se puede ver que tenemos un efecto de partícula reproduce cada 1 segundo. Ahora bien, si empiezo a moverme, verás que los efectos de partículas se quedan donde estaba cuando se engendró. En realidad no está apegado a nuestro personaje. Entonces lo que podemos hacer ahora es echar un vistazo al nodo adjunto. En su lugar. Eliminará nuestro sistema de spawn en la ubicación. Y vamos a arrastrar hacia fuera desde el efecto de spawn y buscar el sistema de spawn. Queremos usar el sistema de spawn adjunto. Ahora, esto tiene muchos de los mismos ajustes que nuestro nodo anterior, pero en realidad tiene algunos nuevos también. Así que a partir de arriba, podemos establecer nuestro efecto Niagara y la plantilla del sistema. Podemos escoger una diferente esta vez quizá las hojas. También podemos proporcionar un componente apegado a. Ahora bien, esto es lo que nos permite especificar a qué componente queremos unir nuestro efecto de partícula. Podríamos agarrar el componente de malla aquí, y podemos conectarlo directamente a los dos componentes conectados. Esto hará que nuestro efecto de partícula se adhiera a nuestro componente de malla. Ahora bien, si nuestro Componente Mesh tuviera zócalos, podríamos especificar el nombre del socket aquí y eso causaría que los efectos de partículas se unieran a ese socket. Ahora tenemos la ubicación y la rotación. Estos harán algo diferente dependiendo de en qué se establezca nuestro tipo de ubicación. Si está configurado para mantener el desplazamiento relativo, entonces si nos dirigimos a la ventana gráfica, si tuviéramos que establecer ese valor, digamos 250 en la Z, lo que sucedería es que nuestros efectos de partículas se generarían en el 0 ubicaciónde nuestra malla. Entonces ese es el punto aquí donde está el pivote. Agregaría 50% a su altura. Por lo que aún estaría unido a la malla, pero estaría 50 por encima del punto de pivote de las mallas. A continuación se encuentra la opción de mantener la posición girada. Entonces, si cambiamos esto a la configuración de posición del teclado, lo que sucederá ahora es la ubicación que establecemos aquí es donde se generarán los efectos de partículas. Y luego lo sujetamos a la malla. Entonces, si tus personajes dicen que 500 centímetros del centro del mundo, entonces el efecto de partícula se uniría al personaje a 500 centímetros de distancia. Y mantendría esa distancia de 500 centímetros del personaje al que está apegado. Por último, tenemos el broche de presión al blanco. Ahora, esto hará que el efecto de partícula rompa a lo que sea que lo estemos uniendo. Entonces, si lo estamos uniendo a nuestra malla, se uniría directamente a su punto de pivote aquí. Entonces, para este ejemplo, vamos a mantener nuestro conjunto para ajustar al objetivo para que nuestro efecto de partícula desove exactamente en nuestra malla de personaje. Y después de eso, acabamos de conseguir los mismos ajustes que teníamos antes. Tenemos auto destroy, un auto activate y luego tenemos el método de pooling también. Voy a asumir también destruido porque en realidad quiero que mi efecto de partícula destruya después de que termine de jugar. Por lo que ahora podemos probar esto otra vez. Podemos golpear play y se puede ver que nuestro efecto de partícula está jugando en nuestra ubicación de malla ahora, lugar de en el centro de nuestro personaje. Ahora, es posible que desee poder controlar qué efecto de partícula se va a reproducir dependiendo de una variable. Así que lo que podemos hacer es volver a nuestro personaje en tercera persona aquí, y vamos a crear una nueva variable que podemos conectar a nuestra plantilla del sistema para decirle al nodo qué tipo de efectos que queremos jugar. Entonces vamos a crear una nueva variable, voy a llamar efecto mío. Podemos cambiar el tipo de variable al sistema Niagara. Queremos referencia de objeto del sistema Niagara, luego compilaremos y ahora en la clase por defecto. Por lo que puedes ver podemos seleccionar cualquiera de nuestros efectos Niagara. Puedo picar decir, hielo por ejemplo. Entonces simplemente arrastraremos esto y lo conectaremos a nuestra plantilla de sistema y lo compilaremos antes de volver a probar, solo vamos a dejar que los shaders terminen de compilar. Ahora eso está terminado. Paraque podamos darle a Play. Se puede ver que ahora podemos ver nuestro efecto de partículas de hielo jugando en lugar de nuestras hojas. Ahora todos los efectos de partículas que hemos estado usando bastante cortos, pero tal vez en el futuro estés trabajando con uno que se reproduce durante mucho tiempo en cierto momento, tal vez quieras destruirlo para lo que sea razón. Bueno, eso también lo puedes hacer. Si nos dirigimos de nuevo al Third PersonCharacter, tenemos una salida aquí, y este es un componente del sistema de partículas del Niágara. Y esto nos permite controlar lo que queremos que haga este sistema de partículas después de haberlo engendrado. Para que podamos arrastrar hacia fuera, podemos usar la opción Variable promotora que acaba de crear una nueva variable con el tipo de componente del sistema de partículas Niagara, como puedes ver aquí, solo voy a llamar al mío y engendró un efecto así. Y vamos a compilar. Entonces usando esta variable podemos acceder a algunas funciones útiles. Entonces si me sale la variable, podemos arrastrar hacia fuera y podemos usar la pausa. Podemos usar set post. Y esto nos permite pausar el efecto de partícula o desactivarlo dependiendo de qué valores booleanos te sentaste en la nota aquí, podemos obtener si es o no actualmente ports. Por lo que podemos hacer ponernos en pausa debido a que de este tipo de reportes vamos hacer se pausa y eso volverá si el efecto de partícula está pausado o no actualmente. Y entonces si queremos destruir los efectos de partículas, sólo podemos arrastrar hacia fuera la búsqueda de Destroy. Podemos usar el nodo destruir componente aquí. Ahora también podemos agregar efectos de partículas como componentes en lugar de tener que desovarlos con un nodo. Entonces si digo quería agregar un efecto de partícula a mi malla aquí, podría ir a agregar búsqueda de Niágara. Podríamos agregarle un componente del sistema de partículas del Niágara. Con ese sistema de partículas seleccionado, se puede ver por aquí, podemos establecer un sistema de partículas que queremos usar. Entonces dicen la grava por ejemplo, si vamos a nuestra ventanilla en C que cuando entré a la vista, pero nos dio un rápido adelanto. Pero podemos establecer la ubicación y en realidad nos muestra cómo se verá cuando esté jugando en esa ubicación. Esto se comportará de la misma manera que un efecto de partícula adjunto. Por lo que esto está unido ahora a nuestro componente de malla. Entonces donde quiera que vaya el componente mallado, nuestro efecto de partícula seguirá. Y también podemos usar este componente la misma manera en nuestra gráfica de eventos. Entonces, si conseguimos nuestro componente Niagara, podemos enchufar esto en decir, el componente destruido. Si quisiéramos destruir ese componente. También podemos usar esos nodos de poros que acabo mostrarte con nuestro componente Niagara también. Ahora otra forma podemos generar efectos de partículas como usar el sistema de animación. Entonces si nos dirigimos a una animación ahora, voy a ir a personajes, maniquíes que dos animaciones. Y vamos a ir a la carpeta Quinn porque eso es lo que es nuestro personaje. Y abriremos aquí la animación de Rumford. Ahora, inhala, podemos agregar notificaciones que son algo así como bits de código que se ejecutan en cierto punto de una animación. Estos nos permiten reproducir sonidos o efectos de partículas mientras nuestra animación se está reproduciendo en el momento exacto en que queremos reproducir una partícula o un efecto de sonido. Entonces, lo que podemos hacer es hacer clic derecho en nuestra línea de tiempo de notificación aquí. Ve a Agregar notificado, y podrás ver que tenemos algunas notificaciones incorporadas aquí. Ahora vamos a estar usando la obra efecto de partículas Niágara. Entonces seleccionaremos eso y eso nos crea un nuevo efecto de partícula notificado. Y podemos arrastrar esto para que se reproduzca en cualquier momento que queramos durante la animación. Para que pudiera poner el mío a decir 40 aquí. Con eso notifica seleccionado. Se puede ver aquí arriba podemos configurar cualquier sistema Niagara. Para que pudiera establecer que esto fuera, digamos, nuestro efecto de partículas. Ahora, si pasamos a nuestra notificación aquí, deberían ver un par de efecto de partículas de suciedad. Ahora bien, si el tuyo no lo hace, puedes obtener un pequeño pop-up diciendo que está compilando shaders, solo permitas que termine de hacer eso y luego deberías ver tus efectos de partículas jugar así. Ahora actualmente el efecto de partícula reproduce la raíz de los personajes, que está justo aquí abajo. Pero si quisiéramos, podríamos establecer una ubicación diferente. Entonces podríamos usar el desplazamiento de ubicación aquí para sumar digamos, un 50 y la altura. Por lo que ahora cuando tocamos los efectos de partículas, se puede ver que está más hasta las rodillas del personaje. Ahora. También podemos establecer el desplazamiento de rotación, que es la rotación de efectos de partículas. Y también podemos establecer la escala. También podemos unir el efecto de partícula a un alveolo o a un hueso. Entonces, por ejemplo, si quisiera que mi efecto de partícula de suciedad se adhiriera a la cabeza, podríamos fijar la cabeza hueso cadera, seleccionar la cabeza. Y voy a establecer el desplazamiento de ubicación a 0 y la z Así que ahora cuando ejecutemos el efecto de partículas, verán que el efecto de partículas ahora se está ejecutando en la ubicación del hueso de la cabeza. También podemos agregar múltiples efectos de partículas. Si quisiéramos, podríamos simplemente hacer clic derecho en Agregar, notificarlo y podemos agregar otro Niagara notificar. Y aquí podemos configurar esto a otra ubicación. Podemos establecer un efecto de partícula diferente para salvar los efectos de partículas de hielo. Y podemos tener a ambos juegan en esta animación y ver que actualmente se está reproduciendo aquí abajo. Ahora, solo un consejo rápido al trabajar con notifica. Si acabas de tener una barra aquí, se puede obstruir bastante si tienes muchas notificaciones y una animación. Entonces lo que puedes hacer es hacer clic en el desplegable aquí para agregar la pista de notificación. No solo te da una nueva pista de notificación que puedes agregar notifica como otro efecto de partícula por ejemplo. Y funcionará exactamente igual que agregarlos a la primera pista. Simplemente te ayuda a organizarlos un poco mejor. Entonces ahora tenemos todos estos poderosos efectos en nuestra animación. En realidad podemos comprobar para ver si estos están jugando en juego. Entonces lo que haremos es ahorrar, volveremos a nuestro personaje en tercera persona aquí. Y en realidad voy a eliminar el componente Niagara que acabamos agregar y vamos a desconectar. Empiezo a jugar nodo. Así que ahora nuestro ThirdPersonCharacter no está generando ningún efecto de partículas en absoluto. Y podemos probar esto out and game. Entonces ahora cuando golpeemos play, deberíamos poder correr y ver esos efectos de partículas que agregamos a nuestra animación. Se pueden ver los otros efectos de partículas que se están reproduciendo y nuestros efectos de partículas ICER también se están reproduciendo. Un poco difícil de ver, pero se puede ver corriendo por ahí abajo a los pies. Así que eso es solo una visión general básica de cómo generar y agregar efectos de partículas del Niágara a las animaciones. Si estás interesado en VFX y cómo crear nuevos efectos de partículas con el sistema Niagara, definitivamente te recomiendo revisar cursos que están específicamente enfocados en ese sistema. 39. Widgets (descripción general): Oigan a todos. En esta sección del curso, vamos a estar echando un vistazo a los widgets. Ahora, widgets o el tipo de blueprint que usamos para agregar UI a la pantalla de nuestros jugadores, cosas como sistemas de menús, sistemas inventario, barras de salud. Todos esos se harían típicamente con widgets. Ahora, que es un sistema bastante grande por sí solos. Probablemente podrías hacer un curso completo solo para widgets. Entonces en esta sección sólo vamos a estar pasando por algunos de los conceptos básicos. Aprenderás cómo crear nuevos widgets, cómo editar sus diseños, cómo enlazar cosas como variables y funciones. Para empezar en esta lección, solo vamos a estar echando un vistazo al widget UI Layout. También vamos a estar aprendiendo cómo crear realmente un widget y luego agregarlo a la pantalla del jugador. Entonces empieza con, vamos a crear un nuevo widget. Para ello, solo vamos a hacer clic derecho en nuestro navegador de contenido, luego buscar la Interfaz de Usuario, salir y bajar a Widget Blueprint. Y vamos a seleccionar el widget de usuario común aquí. Y lo vamos a nombrar bp subrayado, HUD, así. Ahora necesitamos escribir realmente algún código para desovar que estén calientes y luego agregarlo a la pantalla de nuestro reproductor. Así que voy a estar haciendo esto en el plano de personajes de tercera persona, que nos traen de mi otra pantalla aquí. Ahora, puedes hacer esto dentro del mando del jugador también si quieres. Simplemente lo estoy haciendo dentro del ThirdPersonCharacter porque ese es el blueprint que tengo en esta plantilla. Entonces lo que haremos es hacer clic derecho y buscarlo para empezar a jugar. Y a partir de eso vamos a arrastrar hacia fuera y vamos a buscar Crear Widget. Y eso nos va a dar este nuevo nodo de aquí. Y es un nodo específico diseñado para generar widgets. Entonces lo primero que vamos a hacer es establecer una clase y vamos a seleccionar nuestro nuevo BP HUD que acabamos de crear. Ahora también necesitamos proporcionar un Jugador poseedor, y este es un tipo de controlador de jugador. Entonces lo que haremos es hacer clic derecho y buscar el controlador de jugador gap. Simplemente podemos enchufar esto directamente a nuestra oración de apertura. Entonces ahora estamos desovando o BP HUD, pero en realidad no lo estamos agregando a la pantalla del jugador todavía. Entonces lo que tenemos que hacer primero es crear una variable para almacenar una referencia a nuestro HUD. Así que si queremos acceder a ella más tarde, podemos simplemente arrastrar hacia fuera desde el valor de retorno, clic promueve variable, y eso va a crear una nueva variable HUD BP santo. Yo sólo voy a llamar al mío HUD. Y podemos arrastrar esto hasta aquí. Ahora. Vamos a arrastrar hacia fuera desde la salida del nodo set y vamos a buscar Add to Viewport. Y ahora este nodo se va a sumar a la ventanilla de nuestros jugadores. Ahora en Begin Play, creamos nuestro bp HUD, dijo que es Poseer Jugador para que nuestros jugadores controlen. Establecemos la variable HUD si queremos acceder a ella más adelante. Y luego agregamos nuestra cabeza a nuestra pantalla de jugador. Pero si le pegamos a play ahora, en realidad no veríamos nada. Y eso es porque nuestro bp HUD está vacío. Entonces nos dirigimos para allá ahora. Compilaremos esto y abriremos nuestro bp HUD. Ahora estamos dentro de nuestra vista de diseñador bp HUD. Y aquí es donde en realidad diseñamos cómo van a verse nuestros widgets. Ahora, aquí arriba a la izquierda, tenemos el paladar, y aquí es donde encontrarás todos los tipos de widgets incorporados que vienen con el motor. Tenemos cosas como botones, imágenes, barras de progreso y muchas otras que estaremos analizando en futuras lecciones. Ahora esencialmente crear nuevos widgets para nuestro HUD se realiza mediante el uso de los widgets incorporados que vienen con el motor, cosas como la barra de progreso en los tipos de widget de imagen. Los personalizamos para que se comporten de la manera que queramos. Entonces, si quisiéramos barra de salud, normalmente usamos nuestra barra de progreso y la personalizaríamos para que se comportara como una barra de salud. O si estamos construyendo un sistema de menús, tal vez podríamos usar el widget de botones y el widget de imagen y usarlos en combinación para abrir nuevos menús y cambiar la configuración, por ejemplo. Entonces esa es nuestra sección de paleta aquí. También tenemos la sección de biblioteca. Esto es nuevo y Unreal Engine cinco. Esta es una especie de vista más fácil de usar de la vista del paladar. Se puede ver que en realidad tiene las mismas opciones aquí. Simplemente te da un pequeño adelanto en el ícono aquí. Entonces es un poco más fácil ver lo que hacen estos widgets individuales. Y más adelante cuando creamos nuestros propios widgets en realidad encontraremos aquellos bajo el creado por el usuario. Entonces si hago clic en ese desplegable, puedes ver que no hay, no hay ningún widget aquí aparte de este incorporado. Pero cuando creamos nuestros propios widgets, en realidad podemos encontrarlos aquí y usarlos dentro de nuestros otros widgets. Se puede utilizar ya sea el paladar o la vista de biblioteca como preferencia completamente personal. Ahora, pasando a la jerarquía aquí también, podemos ver los widgets actuales que están en el widget de la barra lateral ahora actualmente el aleatorio porque no hemos colocado ninguna m. pero si fuera a decir agarrar esto texto y solo deja caer eso, puedes ver que ahora tenemos un libro de texto que está apareciendo. Podemos usar estos ajustes aquí para cambiar su visibilidad. Ahora, esto es útil si tal vez más adelante, tienes muchos widgets pasando y mayoría de las veces no serán visibles al mismo tiempo. Puedes ocultarlos así para que sea más fácil trabajar en el widget. A continuación están los widgets de bind. Ahora, esto tiene más que ver con animaciones de widgets y no vamos a estar cubriendo la animación en este curso solo puramente porque es un poco más avanzado. Y lo que vamos a estar cubriendo. A continuación, tenemos nuestro panel Detalles. Ahora porque tengo mi cuadro de texto seleccionado aquí en nuestro panel de jerarquía nos está dando la configuración para nuestros textos. Entonces por ejemplo, lo que podría cambiar lo que dice el texto. Por lo que podría decir, Hola, Esta es una prueba y actualiza nuestros textos. Podemos establecer cosas como el color, pero si estuviéramos usando otra cosa, si elimino mis textos aquí y agregué una imagen, puede ver cuando selecciono nuestra imagen, en realidad obtenemos diferentes configuraciones. Y eso nos permite establecer cosas como una imagen del tamaño de nuestra imagen, y cosas así. Si en algún momento alguna de estas ventanas está cerrada, puedes ir a la pestaña de Windows justo aquí y puedes subir cualquiera de ellas aquí arriba. A continuación tenemos la vista gráfica. Ahora aquí es donde ponemos código que se va a ejecutar que sea relevante para nuestro widget. Si nos dirigimos a la vista gráfica ahora, debes notar que se ve más o menos igual que los editores de blueprint con los que hemos estado trabajando. Tienes tu panel de blueprint de mike. Aquí tienes las funciones, macros, variables y despachadores de eventos. Tenemos nuestro panel Detalles, que dependiendo de lo que seleccione, si creo una nueva variable, por ejemplo, se puede ver que nos da todos los detalles de nuestras variables como usted esperaría que lo hiciera. Y por supuesto, si arrasto esta variable cuando podemos obtenerla y configurarla, podemos ejecutar código normalmente como si esto fuera un blueprint normal. Ahora sí tenemos un par de avisos diferentes, así que tenemos el constructo de eventos que puedes ver. Está algo grisáceo. Ahora, si eliminamos esto y simplemente lo buscamos, podemos buscar Event Construct. Simplemente puedes crearlo normalmente. Ahora, esto funciona más o menos como un empezar a jugar a cabo se ejecuta cada vez que se crea nuestro widget. Ahora también tenemos preconstruido este evento. Esto en realidad será uno cada vez que podamos sacar el plano. Entonces para darles un ejemplo, Tal vez podríamos ocultar nuestra imagen que otra semana la suba. Se nota que en realidad tenemos una variable de imagen aquí en nuestras variables. Y esto se refiere a la imagen que agregamos al plano. Y la razón por la que tenemos tan accesible en nuestro Event Graph es si volvemos a nuestro diseñador, seleccionamos la imagen. Se puede ver que aquí está marcado para es variable. Así que eso significa que podemos acceder a este código de fruta de imagen a través de una variable. Entonces lo que haremos es agarrar esa imagen, arrastraremos una solo para establecer visibilidad. Conectaremos esto a nuestro preconstruido así. Entonces cuando puedo sacarlo, podemos ver que está configurado en Visible. Entonces si voy con mi diseñador, podemos ver nuestra imagen. Es sólo una imagen en blanco en este momento. Pero si volvemos al Event Graph y cambio esto a oculto, ahora cuando compilo, vuelvo al diseñador, se puede ver que ya no es visible porque lo configuramos en oculto, y ese evento realmente se ejecuta cada vez que compilamos nuestro código. Ahora, nuestros widgets realmente pueden enfriar el código dentro de nuestro gráfico de eventos. Entonces lo que podemos hacer es volver con nuestro diseñador aquí. Voy a borrar la imagen por ahora y vamos a tomar un botón y arrastrarlo a nuestro Hud. Puedes arrastrarlo directamente aquí o puedes arrastrarlo hacia abajo a la jerarquía. Hace lo mismo. Por lo que sólo lo arrastraremos con nuestros botones seleccionados en el panel Detalles. Si nos desplazamos hacia abajo, tenemos algunas de estas opciones de eventos. Ahora si hacemos clic en este botón más, en realidad nos creará un nuevo evento y el gráfico de eventos. Entonces tal vez quiero que este botón ejecute algún código. Cuando se hace clic, podemos hacer clic en este pequeño botón más aquí, y eso realmente nos crea un nuevo evento dentro del gráfico de eventos. Ahora, este evento se ejecutará cada vez que presionemos ese botón durante el juego. Ahora, algo a tener en cuenta al codificar en widgets, es una buena práctica no poner código de juego dentro de un widget. En realidad, solo deberías tener tu widget para mostrar información y luego tomar entrada de, digamos, cosas como pulsaciones de botones. Y luego ese widget debería decirle a otros planos, como actores de blueprint o blueprint de tu personaje lo que se presionó, en realidad no deberías estar haciendo nada de tu código de juego dentro de un widget . Entonces por ejemplo, si este botón mató a mi personaje, por ejemplo, podríamos simplemente hacer clic con el botón derecho en la búsqueda, olvidar jugador, personaje, arrastrar desde aquí y ejecutar Destroy Actor. Ahora, cuando presiono ese botón, destruiría mi personaje y esto funcionaría bien. Pero no es particularmente buena práctica hacer esto. Lo que realmente debes hacer es que nosotros también deberíamos costar. O un personaje en tercera persona como este eliminará el nodo de actor destruido. Y luego dentro de nuestro ThirdPersonCharacter, en realidad deberíamos tener unos eventos separados. Entonces crearé un nuevo cliente. Entonces podemos llamar a este jugador asesino. Entonces esto correría Destruye Actor. Así. Volveríamos a nuestro HUD, arrastrábamos de nuestro ThirdPersonCharacter y llamaríamos a que los eventos llamarían kill player. Entonces ahora nuestro widget no es en realidad el blueprint que está ejecutando el código de juego. Es solo tomar la entrada ButtonClicked. Es decirle al ThirdPersonCharacter, Hey, necesitas dirigir este evento. Ahora, esto no importa demasiado para codificar en juegos para un solo jugador. Pero más adelante, si quieres ramificarte en la codificación multijugador, esta es una práctica muy importante a seguir. No quieres que los widgets ejecuten realmente ningún código de juego, solo para decirle al código de juego dentro de otros planos lo que ha sucedido. Ahora. Por último, si realmente compilamos nuestro HUD, verás que obtenemos algunos errores. Eso solo porque eliminamos nuestra imagen en la Vista del Diseñador y la reemplazamos con el botón. Y si subimos aquí arriba, en realidad todavía tenemos una referencia a esa vieja imagen. Entonces lo que podemos hacer es simplemente eliminar estos nodos, compilar, y eso va a deshacerse de las flechas. Ahora hemos terminado para esta lección. En nuestra siguiente lección, vamos a echar un vistazo más de cerca a la Vista del Diseñador y luego cómo podemos controlar el diseño de nuestro widget. 40. Widgets (diseños): Oigan a todos. En esta lección vamos a estar aprendiendo cómo podemos controlar realmente un diseño de widgets. Entonces, para empezar, en nuestra última lección, creamos este BP HUD y agregamos algún código a nuestro ThirdPersonCharacter, que básicamente crea ese HUD y luego lo agrega a la pantalla de nuestros jugadores en Begin Play. Ahora también agregamos en nuestra última lección al BP tiene un widget de botón. Ahora actualmente eso está ocupando la totalidad de nuestro bp HUD. Entonces lo que vamos a hacer es seleccionarlo en la jerarquía litro. Entonces vamos a compilar y eso nos va a dar una advertencia. Entonces nos dirigiremos a la vista gráfica, que va a eliminar este código aquí. Y la razón por la que estamos recibiendo esta advertencia es porque se supone que este evento se ejecuta cuando se presiona el botón que acabamos de eliminar y ya no existe. Entonces por eso ahora estamos recibiendo esa advertencia, borraremos esto y compilaremos. Ahora vamos a dirigirnos al diseño de vista y en realidad vamos a echar un vistazo a algunos de los tipos de panel de widgets. Entonces nos dirigiremos al toque de paleta aquí, y voy a seleccionar panel. Y aquí tenemos algunos tipos diferentes de paneles, y estos son útiles para controlar layouts con widgets. Pero vamos a empezar con el panel de lona. Así que sólo vamos a arrastrar esto en la parte superior de nuestra jerarquía de widgets aquí y simplemente liberar eso. Y ahora tenemos un panel de lona. Y se puede pensar en un panel de lona. Es como una representación de toda la pantalla de los jugadores. Si tuviéramos que añadir algo así como un botón aquí, y podemos simplemente arrastrarlo y soltarlo en nuestro panel de lienzo. Si compilamos y pulsamos play, deberíamos ver nuestro botón aquí en la pantalla de nuestros jugadores. Por lo que ahora vamos a X fuera de plano editor y nos dirigimos de nuevo a nuestro hardware. Ahora bien, te habrás dado cuenta que tenemos este botón aquí abajo que podemos arrastrar y que nos permite cambiar el tamaño de nuestra ventanilla aquí. Ahora bien, es importante tener en cuenta que todo lo que esto está haciendo es cambiar la vista previa de nuestro widget para que podamos la vista previa de nuestro widget para que podamosver cómo se vería nuestro HUD, digamos en esta resolución, o tal vez un resolución como aquí abajo. Pero esto en realidad no está cambiando el tamaño de nuestro widget. Todo esto está haciendo es cambiar la vista previa. Podemos ver cómo se ven realmente nuestros widgets en tamaños de pantalla específicos. Otra forma de hacerlo es con la opción de tamaño de pantalla aquí, y esto solo te da un montón de previsualizaciones para diferentes dispositivos. Por lo tanto, si estás trabajando en un dispositivo móvil, podrías elegir un dispositivo aquí para obtener una vista previa de su resolución de pantalla exacta. Pero para la mayoría de la gente, probablemente vas a estar usando un monitor de diez ADP. Para que podamos dirigirnos a los monitores y seleccionar el monitor de 21.5 a 24 pulgadas. Y eso en realidad va a cambiarlo a diez ATP para nosotros. Y se puede ver esa resolución aquí abajo. Ahora, nuestro panel de lona es en realidad un poco especial en comparación con nuestros otros paneles. Cuando arrastramos cosas como botones o imágenes en él, realidad podemos arrastrarlos y moverlos a diferentes lugares con el interior del panel del lienzo, también podemos redimensionarlos. Entonces si quiero hacer mi botón más grande, sólo puedo arrastrarlo hacia fuera y hacerlo más grande. Ahora porque tengo mi botón seleccionado y es un hijo de nuestro panel de lona. Y lo que quiero decir con niño es que está contenido directamente dentro de nuestro panel de lona. Como puedes ver aquí debajo de nuestro panel de lona, tenemos nuestro botón, que es un hijo del panel de lona. Ahora por eso, también tenemos algunos ajustes en nuestros botones, detalles que le son exclusivos cuando está dentro de un panel de lona. Para empezar, tenemos anclas y te explicaré un poco sobre eso en un momento. Pero también tenemos la posición x Entonces esta es una posesión lado a lado, posesión y, que es es posición de arriba y abajo, entonces tenemos su tamaño. Entonces este es su tamaño y ancho y su tamaño y altura. Ahora, nuestro ancla es básicamente el punto central para este widget. Entonces si yo fuera a poner esto a 0 en la x y 0 en la y. verás que sube a nuestra esquina superior izquierda porque actualmente ahí es donde está anclajes. Pero si iba a cambiar este ancla para decir el centro, se puede ver que es posición x e y. en realidad ha subido. Y eso es porque ahora es 0 posición estaría en el centro de la pantalla. Así que si fuera a establecer esto a 0 de nuevo, verás que widget en realidad va al centro de la pantalla. Ahora, la alineación es algo así como la posición del punto de pivote para nuestro widget. Por lo que actualmente 00 significa que va a estar en la esquina superior izquierda. Si cambio esto a 0.50.5 o centro de nuestro widget ahora está en su centro. Y es por eso que el widget ahora se ha movido a la posición central, pesar de que su posición x e y sigue siendo 0. Entonces tenemos el tamaño al contenido, que explicaré más adelante en la lección. Tenemos el orden z, que básicamente controla si tenemos dos widgets superpuestos entre sí, el que tenga el orden de ver más alto estará en la parte superior. Entonces si agarro otro botón aquí, tendré que hacer zoom para verlo. Si arrasto esto sobre la parte superior de nuestro widget, puedes ver que en realidad está sobre la parte superior de nuestro widget inferior. Pero si selecciono mi widget inferior y aumento este a uno, se puede ver que ahora va por encima de esto. Somos jet porque es el orden es 0. Ahora, bajando en el panel Detalles, tenemos algunas opciones de apariencia, y estas van a diferir dependiendo del widget que tengas actualmente. Entonces porque estamos en un botón, si damos cuenta del estilo, verás que tenemos opciones para normal flotado y presionado. Ahora bien, así es como se va a ver el botón cuando simplemente es normal, no le está pasando nada. Luego cuando el mouse se cierne sobre arriba y luego cuando en realidad se está presionando hacia abajo. Y si abrimos una de estas, digamos la opción normal, podemos cambiar cosas como la imagen o el tinte, o si se dibuja como una caja redondeada o simplemente una caja normal. Y eso ya lo ves. Ya no tiene las esquinas redondeadas, o podemos cambiarla como tensa. Para que pudiera cambiar esto para decir ser rojo. Y ya puedes ver que ahora está resaltado en rojo. Ahora como puedes ver, hay muchas opciones diferentes y cada tipo de widget tiene diferentes opciones. Entonces no voy a pasar por todos estos escenarios. Si quieres saber qué hacen, puedes pasar el ratón sobre ellos y te da una pequeña punta de herramienta. O simplemente puedes tener una jugada sobre cambiar colores y tamaños y cosas por el estilo. Pero al igual que una visión general, cuando seleccionas un widget, aquí es donde encontrarás todos sus ajustes de cómo se ve realmente. Así que a continuación vamos a eliminar realmente estos botones aquí. Vamos a echar un vistazo a algunas de las otras opciones de panel que tenemos. Entonces vamos a empezar con una caja vertical. Entonces si sólo arrastramos eso adentro, voy a alejar un poco más. Ahora, como pueden ver, esto es sólo un widget vacío. No hay apariencia visual para nosotros. Pero lo que podemos hacer es agregarle otros widgets. Si me desplazo hacia arriba y agarro, digamos el texto, puedo o bien simplemente arrastrarlo encima del cuadro vertical aquí o podemos soltarlo sobre él en la jerarquía. Para que podamos soltarlo. puede ver que ahora se agregan nuestros textos para nosotros aquí. Ahora, porque no hemos agregado nuestros textos al panel de lienzo. Cuando lo selecciono, no puedo moverlo ni redimensionarlo. Al igual que si agregué algunos textos directamente al panel canvas. Y la razón de eso es nuestra caja vertical es lo que toma el control del tamaño de nuestro texto va a ser su posición. Entonces si tuviéramos que añadir otro texto a nuestro cuadro vertical, veamos que ahora empieza a apilarlos verticalmente. Y esta es la característica clave de una caja vertical. A medida que le añadamos nuevos widgets, los agregará en una pila vertical. Ahora, si seleccionamos nuestro cuadro vertical aquí, se puede ver que actualmente es de este tamaño. Si lo movemos, todavía podemos moverlo en nuestro panel de lienzo porque está unido al panel de lienzo, mientras que el texto se adjunta dentro del cuadro vertical. Pero si nos fijamos en una caja de herramientas, en realidad no es del mismo tamaño que nuestros textos. Textos como filtraciones fuera de ella. Ahora, aquí es donde se activa el tamaño de la opción de contenido. Si me llevo esto, se puede ver que ahora mi caja vertical se ha hecho más grande y ahora es del tamaño de lo que metamos dentro de ella. Por lo que esta es la característica principal del contenido del sitio. Cualquier widget que tenga widgets hijos dentro de él. Si marca esta opción para ese widget, se redimensionará a sí mismo para ser el tamaño de los widgets que estén dentro de él, como nuestra caja vertical. Ahora, si seleccionamos algunos de los textos que actualmente están dentro de nuestro cuadro vertical y nos desplazamos hacia arriba aquí verás que ahora tenemos configuraciones que se llaman gráfica de caja vertical. Eso es en lugar de la ranura del panel canvas que teníamos cuando pusimos nuestro texto justo directamente dentro del panel canvas. Ahora bien, estos son algunos de los controles que podemos usar para ajustar nuestros textos mientras está dentro de una caja vertical. Entonces, para empezar, tenemos relleno. El relleno es básicamente cuánto espacio hay entre nuestros textos y el exterior de la caja vertical. Entonces si cambiamos esto por decir diez, lo que hará es que le dará a nuestros textos diez pixeles entre su borde y el borde de las cajas verticales que puedes ver aquí. Ahora lo ha hecho en todas las direcciones para este texto porque acabo de poner diez en el hit superior. Pero si hacemos clic en la flecha hacia abajo, en realidad podemos especificar izquierda, derecha, superior e inferior. A continuación tenemos el tamaño y las alineaciones. Ahora actualmente, nuestra caja vertical simplemente cambiará su tamaño a lo que esté dentro de ella. Ahora, para probar realmente la configuración, vamos a tener que desactivar eso. Entonces vamos a desactivar el tamaño del contenido y vamos a hacer nuestro cuadro de texto más grande. Entonces ahora en realidad es más grande de lo que nuestros textos necesitan. Entonces, si selecciono mi texto aquí, actualmente, está configurado para ocupar todo el espacio vertical y horizontalmente que pueda. Entonces lo que podemos hacer es que si quisiera que mi texto estuviera centrado, podríamos configurarlo en una alineación central, y ahora está centrado en el medio de nuestra caja vertical. Si cambio el tamaño de mi caja, se puede ver que cambia de centro. O podemos seleccionar nuestro texto de nuevo y configurarlo para que esté alineado a la derecha. Y eso significará que el texto ahora se adjunta al lado derecho de nuestra caja vertical. A continuación, también tenemos la alineación vertical, y esto nos permite controlar la posición vertical de nuestro texto. Ahora actualmente está configurado para llenarse verticalmente, pero también tenemos su tamaño establecido en auto. Por lo que el texto sólo va a usar tanto espacio como necesite verticalmente. Pero digamos que quería que mi texto estuviera más en el centro de nuestra caja vertical. Lo que podemos hacer es decirle a nuestro tamaño que se debe llenar. Y esto significa que nuestro texto básicamente le está diciendo a la caja vertical que quiere usar tanto espacio como pueda. Entonces podemos usar nuestra alineación vertical. Podríamos establecer esto para decir centro, y que estará centrado en el espacio que tiene disponible. Ahora, estos ajustes pueden ser un poco confusos para empezar, y una gran parte del tiempo solo tienes que jugar con ellos para obtener el resultado que estás buscando. Pero pueden ser realmente útiles cuando se trabaja en cosas como cajas verticales. Y el comportamiento de estos ajustes van a depender del widget que haya seleccionado. Así que si tenemos que agarrar un botón y soltar esto dentro de la caja vertical aquí, se puede ver que en realidad se está extendiendo al tamaño completo que tiene disponible en el ancho. Y la razón de eso es por nuestras alineaciones. Ahora, si tuviera que poner mi alineación horizontal al centro, verás que mi botón en realidad se vuelve mucho más pequeño. Y eso es porque si vamos a Estilo en el desplegable normal aquí, nuestro tamaño de imagen se establece en 32 por 32. Entonces si iba a aumentar esto, puede ver que mi botón en realidad se hace más grande. O si iba a aumentarlo en el valor X, puede ver que se alarga. Y si fuera a poner mi talla aquí arriba para llenar, ves que mi botón se hace mucho más grande. Ahora no está ocupando todo el espacio disponible porque nuestro texto aquí arriba también está configurado para llenar. Entonces si tuviera que configurar esto en auto y ver que ahora mi caja está empujando todos estos textos fuera de su camino y está ocupando tanto espacio como pueda verticalmente. Y eso es porque nuestra vertical está establecida para llenarse verticalmente para que nosotros tomemos el relleno horizontalmente, verás ahora un botón ocupa todo este espacio. Y al igual que una nota al margen, si estás cambiando el tamaño de un botón en su estilo normal, probablemente querrás hacer lo mismo tanto para flotar para presionar porque tienes que recordar que al pasar el cursor sobre un botón, comenzará a usar estos ajustes. Y si tu talla es diferente de tu tamaño normal, entonces tu botón se va a encogerse cada vez que pases el cursor sobre él. No te preocupes demasiado si esos ajustes se te han pasado por encima de la cabeza, la mejor manera de aprender widgets es simplemente jugar con ellos, tratar de hacer pequeñas cosas y conseguir que funcionen y se presenten de la forma en que desea mediante el uso de estos botones aquí. Y también los ajustes de relleno y alineación que tienes disponibles seleccionando el widget individual. Ahora hemos estado usando el panel vertical, pero también hay unos paneles horizontales. Entonces si vamos a nuestra opción de paneles, puedes ver que tenemos la caja horizontal. Y si arrastramos esto adentro, esto se comporta más o menos exactamente igual que nuestra caja vertical, pero en cambio es horizontal. Entonces si agarro, digamos, un widget de texto, simplemente arrastramos eso a nuestra caja horizontal. puede ver que lo ha añadido dentro de nuestra caja horizontal aquí abajo. Si fuera a agregar otra a nuestra caja horizontal, se puede ver que la ha agregado, pero ahora las está moviendo horizontalmente en lugar de verticalmente. Ahora, lo genial de estos paneles es que podemos usarlos juntos. Entonces si alejamos un poco aquí, voy a borrar todos estos en mi caja vertical. Y vamos a agregar una caja horizontal dentro de la caja vertical. Entonces bajaremos dos paneles, buscaremos una caja horizontal. Y vamos a meter esto dentro nuestra caja vertical así. Ahora, dentro de nuestra caja horizontal podemos agregar algo así como textos, agregaremos algunos textos. Y tal vez yo también quiero una imagen. Entonces si imaginamos que esto era tal vez una lista de artículos, querríamos los ítems Imagen y luego algunos textos para su nombre. Por lo que añadiremos una imagen también a nuestra caja horizontal así. Ahora, podemos cambiar el orden en que están estos, dentro de nuestra caja horizontal. Podemos seleccionarlas y puedes usar estas pequeñas flechas solo para moverlas. O en el panel de jerarquía, sólo podemos arrastrarlo. Y obtenemos esta pequeña línea azul que nos dice si la estamos moviendo para poder moverla por encima de nuestro texto. Y ahora está por encima de nuestro texto o frente a nuestros textos para la caja horizontal. Ahora di que en realidad no me gustó la forma en que se ve esto. Quería algo de espacio o tal vez quería mi caja de texto al otro lado de nuestro panel aquí. Selecciono mi texto. Podríamos configurarlo para que se llene y lo voy a configurar para alinear a la derecha horizontalmente. Y ahora mi texto está por aquí y mis imágenes siguen del lado izquierdo. Por lo que ahora podríamos copiar y pegar o caja horizontal. Entonces lo seleccionaremos, haremos Control C, luego seleccionaremos nuestra caja vertical y haremos Control V. Y ahora podemos pegar en un par de nuestras cajas verticales. Ya puedes ver ahora tenemos una lista de caja horizontal dentro de nuestra caja vertical. Y entonces esas cajas horizontales tienen nuestras imágenes y nuestros textos. Para que podamos seleccionar nuestro texto y cambiarlos. Podríamos cambiar esto por decir espada, esto a oro, y esto a bebida saludable, por ejemplo. Ahora tenemos una lista vertical de cajas horizontales que luego tienen esta información en su interior. Ahora, tal vez queríamos cambiar la distancia desde el borde de nuestra caja horizontal hasta el borde de la caja vertical. Podemos hacer eso usando nuestro acolchado. Para que podamos configurar nuestros acolchados, digamos diez. Y eso en realidad nos dará algo de espacio entre nuestras diferentes entradas y también los bordes de nuestra caja vertical. Para que pudiéramos hacer esto con cada uno. Podemos establecer esto a diez también. Y luego lo mismo con esto, sólo para ordenar un poco así. Ahora si quisiéramos, podríamos establecer una imagen para estos. Entonces si selecciono una de las imágenes aquí, podemos establecer una imagen. Ahora sólo tengo las imágenes que vienen con el motor. Entonces vamos, usaremos, digamos éste. Eso en realidad es establecer nuestra imagen que podríamos sentarnos y tener 12 aquí para que podamos desplazarnos hacia abajo, encontrar una imagen diferente, tal vez este icono de Android, se puede ver. Ahora podemos establecer imágenes para cada una de nuestras filas aquí. Otra forma en que podemos usar el relleno es en realidad dentro, digamos, de una caja vertical aquí. A lo mejor quería que mi texto fuera de este lado, pero quería un poco de espacio entre la imagen y el texto. Lo que podríamos hacer es cambiar esto de nuevo a auto, así que está por este lado. Entonces podríamos o bien usar relleno. Para que pudiera abrir relleno en un acolchado izquierdo de digamos, 50. Y ya ven ahora nuestro texto está a 50 centímetros, por lo que a 50 pixeles de nuestra imagen. O si nos deshacemos de esto rápidamente, podemos usar un widget espaciador. Entonces, si buscamos espacio, podemos usar un widget espaciador y podemos caer esto en, entre nuestra imagen y nuestros textos en la jerarquía. Simplemente, selecciona el espaciador y aquí estableceremos su tamaño. Queremos que la x sea la horizontal, entonces fuimos incrementos para decir 100, y eso nos da un 100 pixeles entre nuestra imagen y nuestra espada. Ahora, hasta ahora hemos estado mirando paneles y paneles en su mayor parte pueden tener hijos ilimitados. Por lo que podemos agregar tantos widgets como queramos a nuestro panel de lienzo o a nuestra caja vertical o a la caja horizontal. Pero algunos widgets no tienen esa libertad. Si nos deshacemos de nuestra búsqueda aquí y agregamos, digamos, un botón, podemos agregar un niño a un botón. Entonces si agarro, digamos, algunos textos, puedo arrastrar esto arriba aquí para agregarlo como niño o simplemente soltarlo en el botón en el panel de jerarquía. Y ya puedes ver ahora que tenemos el texto y eso es un hijo de nuestro botón. Pero si yo fuera a agarrar, digamos, algunos textos más, en realidad ya no puedo agregar eso a nuestro botón porque nuestro botón sólo puede tener un hijo. Entonces una buena manera de evitar esto es si quitamos los textos de nuestro botón, podemos usar un panel como nuestra caja horizontal. Podemos agregar eso a nuestro botón. Y ahora nuestra caja horizontal como hijo del botón. Pero podemos agregar tantos niños como queramos, la caja horizontal. Para que pudiéramos agarrar, digamos, algún texto, agregarle eso a nuestro botón, también podríamos agarrar una imagen. Por lo que podemos agregar eso a nuestro botón. Ahora, actualmente se está filtrando de un botón. Pero lo que podemos hacer es seleccionar el botón, podemos redimensionarlo para que nuestro contenido se quede dentro del botón. O si lo recuerdas, podemos hacer clic en Tamaño al contenido. Button en realidad solo se redimensionará a cualquier espacio que necesite para el contenido dentro de él. Entonces esta es una manera realmente fácil. Puedes hacer widgets que solo pueden tener un hijo, tener tantos hijos como quieras con solo usar las cajas del panel de aquí abajo. Ahora una cosa que puede ser desafiante con trabajar con estas cajas de panel es decir que quería que mis textos o esta entrada aquí en nuestra caja vertical fueran más grandes. No hay opción de tamaño que solo podamos controlar. Pero lo que podemos hacer es envolver elementos individuales con una caja de tamaño. Entonces digamos, yo quería que esta imagen fuera en realidad mucho más grande. Lo que podríamos hacer es seleccionar nuestra imagen aquí. Podríamos envolverlo haciendo clic derecho, hacer rap con. Y básicamente esto solo significa que estamos diciendo que la imagen esté contenida en otro widget. Entonces vamos a seleccionar, digamos, la caja de tamaño. Y ahora nuestra imagen que puedes ver está dentro de una caja de tamaño. Esa caja de tamaño todavía está dentro de nuestra caja vertical es sólo una especie de poner nuestra imagen en esa caja de tamaño para nosotros. Podemos hacer esto con nuestras cajas también. Entonces si selecciono mi imagen aquí, por ejemplo, podríamos envolver esto con digamos, una caja vertical si quisiéramos. Puedes ver que tenemos caja vertical u horizontal o cualquiera de estas opciones que tienes aquí. Volviendo a nuestra caja de tamaño que acabamos de crear. Se puede ver que aquí tenemos algunas opciones de tamaño. Entonces lo que podemos hacer es seleccionar estas opciones para activar las anulaciones de tamaño. Si entro un texto aquí, así lo dicen 100 por 100. Se puede ver que ahora está forzando a esta imagen a ser de ese tamaño. Por lo que esto puede ser realmente útil cuando se trabaja con cajas verticales porque a veces solo se quiere forzar a un widget a tener un cierto tamaño. Y los controles aquí pueden ser un poco restrictivos. Entonces usando una caja de tamaño, podemos simplemente forzar un tamaño específico. Aquí también hay algunas otras opciones. Entonces si desmarcamos o anulamos las opciones, y la razón por la que las estoy tomando es porque estas básicamente solo obligan al widget a ser de este tamaño. Ninguna de estas opciones será mejor si tienes estas tectónicas. Entonces sólo vamos a quitárselos por ahora. También podemos establecer un tamaño mínimo y máximo. Y esto básicamente nos dice que queremos que nuestro widget al menos sea decir, 50 por 50. Pero puede redimensionarse hasta decir, otro sitio. Eso dicen 200 por 200. Ya ves actualmente son 50 porque nuestras imágenes solo una imagen pequeña. Pero si nuestra imagen fuera más grande, en realidad haría uso de ese espacio adicional de hasta 200 pixeles. Y entonces la imagen no se pondría más grande que 200 porque decimos tamaño máximo. Ahora por el momento acabamos agregar widgets manualmente arrastrando hombres a nuestro panel de lienzo o a nuestra caja vertical, por ejemplo. Pero en nuestra siguiente lección, realidad vamos a estar aprendiendo cómo podemos crear widgets usando código, agregarlos a estas cajas. También estaremos mirando la caja de pergaminos, así que sólo traeré eso aquí. Y básicamente la forma en que funciona la caja de desplazamiento es una vez que los widgets dentro de él, los niños dentro de él se hacen más grandes que su tamaño actual, obtendrán una barra de desplazamiento aquí, en realidad podrán desplazarse a través de el contenido dentro de la caja de desplazamiento. 41. Widgets (creación de Widgets): Oigan a todos. En esta lección vamos a estar aprendiendo cómo crear widgets usando código, en lugar de tener que arrastrar y soltar manualmente estos widgets en nuestro panel aquí. También vamos a estar mirando la caja de desplazamiento. Ahora, lo explicaría un poco en nuestra última lección. Pero esencialmente, cuando el contenido de nuestra caja de desplazamiento se hace más grande de lo que realmente es la caja, nos dará una pequeña barra de desplazamiento que podemos usar para desplazarse por su contenido. Entonces, para empezar, lo que vamos a hacer es crear una tabla de datos que va a contener alguna información sobre algunos elementos. Y luego vamos a tener nuestro código de widget crear un listado para cada uno de esos artículos, y vamos a almacenarlos dentro de nuestra caja de desplazamiento aquí. Entonces, para empezar, vamos a ir al Navegador de Contenido y vamos a crear un nuevo widget. Y este va a ser un widget personalizado que en realidad vamos a desovar y utilizado para mostrar nuestros elementos de información. Por lo que haremos clic derecho, iremos a la opción de interfaz de usuario y crearemos un nuevo widget. Vamos a seleccionar widget de usuario. Y vamos a llamar a este BP en el listado de artículos de puntuación así. Y haremos doble clic en él para abrir. Y yo sólo voy a arrastrar el mío hasta la cima aquí así. Ahora la diferencia con la creación este widget en comparación con nuestro HUD, que es que en realidad no vamos a usar un panel de lienzo porque nuestro widget de listado de artículos se va a agregar a otro panel . De manera similar a como hemos hecho nuestras imágenes y nuestros textos, el listado de artículos no va a ocupar toda nuestra pantalla de jugadores. Entonces no vamos a usar un panel canvas, en realidad solo vamos a usar directamente una caja horizontal para empezar. Entonces yo sólo voy a agarrar una caja horizontal , pon eso aquí. Eso nos va a permitir trazar con las cosas en dirección horizontal. Podemos agarrar una imagen para que encontremos la opción de imagen. Bueno, agregaré algunos textos para el jugador o el nombre del ítem, y también agregaré otro texto. A lo mejor tendremos un valor de costo. En este momento esto se ve un poco extraño porque si te acuerdas, seguimos previsualizando esto es si los widgets que se están agregando a una pantalla de 120 por diez ATP. Pero lo que podemos hacer para darnos un poco de vista previa es ir al tamaño de pantalla o a la pantalla completa aquí a la costumbre. Y esto nos permite en realidad solo introducir manualmente un tamaño de píxel para nuestro widget. Ahora recuerden, esto es sólo para previsualizar. Este no es en realidad el tamaño de nuestro widget. Entonces esto solo nos da una idea de cómo se verá el widget en un cierto tamaño. Voy a poner el mío para decir 350. Y el largo, o tal vez lo hagamos 400 y el largo, tal vez AT, y el ancho. Así que ahora tenemos un poco mejor idea de cómo van a parecer nuestros widgets una vez que lo agreguemos a un cuadro de desplazamiento, como hicimos en el video de diseño, puedes pasar un poco de tiempo moviendo estos alrededor, añadiendo espacios, cambiando las fuentes o colores si lo deseas. Voy a poner mi costo para que sea en contra de este lado, así que lo voy a configurar para que se alinee al lado derecho y vamos a tomar en película. Por lo que ahora nuestro texto está de este lado de nuestro widget. Ahora, también vamos a necesitar cambiar estos valores de widgets en código. Entonces lo que vamos a hacer es que vamos a seleccionar cada uno de nuestros widgets aquí y vamos a renombrarlos. Por lo que voy a cambiar el nombre de imagen a Ícono Elemento. Y tenemos es variable activada, lo cual es bueno porque necesitaremos acceder a nuestra imagen en el Event Graph. Ahora si seleccionamos nuestro libro de texto, puedes ver que en realidad no tiene ese TikTok. Entonces vamos a asumir eso. Y voy a configurar este al nombre del artículo. Y éste se llevará esto también, y llamaremos a este artículo costo. Así que ahora si nos dirigimos a nuestra vista gráfica y compilamos, verás que ahora tenemos variables para cada uno de nuestros tipos de widgets. Usando estos, en realidad podemos simplemente obtenerlos como variables y podemos establecer información sobre ellos. Por lo que si quería cambiar nuestro texto de costo de artículo, puedo hacer establecer texto. Podemos usar el nodo set text, y esto realmente me permite cambiar el texto que está siendo mostrado por nuestro texto de costo de artículo. Ahora solo eliminaremos estos nodos porque en realidad necesitamos configurar nuestra tabla de datos. Por lo que guardaremos nuestro listado de artículos por ahora y volveremos al navegador de contenido. Antes de crear una tabla de datos, necesitamos crear una estructura primero para que esa tabla de datos la use. Entonces haremos clic derecho e iremos a planos Luego estructura. Y yo sólo voy a llamar al mío S punto de subrayado. Y eso lo abriremos. Y aquí vamos a añadir algunas variables nuevas. Entonces agregaré una nueva variable. Al primero, le llamaremos nombre. Cambiaremos esto para que sea un valor de texto. Por lo que este será el nombre de nuestro artículo. Podríamos establecer un costo, así que llamaremos a este costo, y lo establecemos en un entero. Y podríamos agregar otro valor, digamos para una textura, buscará textura 2D. Y queremos la textura 2D aquí, referencia de objeto. Yo sólo voy a llamar a este icono de esa manera. Y vamos a guardar esto. Ahora vamos a volver a nuestro navegador de contenido y vamos a crear una nueva tabla de datos utilizando nuestra estructura de elementos de subrayado S. Así que haremos clic derecho, vamos a la opción miscelánea aquí, seleccione la tabla de datos, y luego vamos a seleccionar nuestro elemento S en el menú desplegable aquí y presionar Ok, luego llamaremos a nuestra lista de elementos de tabla de datos así. Por lo que ahora necesitamos abrir la lista de artículos y realmente agregarle algunos elementos. Entonces eso lo abriremos. Y añadiremos algunas filas nuevas. Entonces agregaré una nueva fila. Llamaré a esto decir espada. Espada, espada. Y vamos a establecer el nombre para ordenar. Fijaremos el costo para decir cinco. Ahora no tengo ningún íconos para los artículos, pero podemos usar algunas texturas solo aleatorias. Entonces tal vez escoja la textura de la cámara para esta. Bueno, no tuve una fila. Llamaremos a esto decir deletreado que mal otra vez. Entonces esta es la ACS. A continuación, vamos a establecer el nombre para nuestra fila AKS dos actos también. Establecemos el costo de decir, 20 establecerá otra textura. Entonces yo sólo escogeré esta cara verde. Agregaremos otro, y voy a configurar esto para que sea hola, bebe. Volví a deletrear eso mal. Bebe así. Y de nuevo, fijaremos el nombre para ayudar a beber, fijaremos el precio a decir, o el costo a dos. Y escogeremos otra imagen. Entonces escogeré, digamos, el ícono de Android aquí. Esoservirá por ahora. Agregaremos un poco más para que podamos hacer que nuestro scroll box funcione un poco más adelante. Pero por ahora eso hará eso. Regresaremos a nuestro widget de listado de artículos. Ahora tenemos que crear una función que en realidad va a configurar este listado y establecer nuestro icono de costo de artículo y nombres para este widget. Entonces para hacer eso, voy a crear una nueva función. Yo sólo voy a llamar a este listado de configuración. Vamos a agregar una entrada, así que seleccionaremos el nodo de entrada aquí. Y debajo de entradas añadiremos una nueva entrada. Y voy a poner esto a F punto de subrayado. Ahora, esa es la estructura que usamos para nuestra tabla de datos. Si lo recuerdas, podremos ingresar una struct item a esta función. Así que lo configuraremos a eso y establecemos el nombre en elemento. Ahora, vamos a usar la información de esta entrada de estructura para establecer realmente nuestros widgets. Si arrastramos hacia fuera, podemos romper nuestra estructura de artículo y podemos acceder al nombre costó un icono. Así que para empezar, vamos a agarrar el nombre del elemento Widget, Obtener esa variable, y luego arrastrar hacia fuera y hacer establecer el texto. Y haremos el nodo SetText. Conecta eso a nuestra entrada. Y vamos a tomar el nombre y enchufar eso al texto. Entonces obtendremos el costo del artículo. Haz lo mismo. Así que establece texto, consigue ese nodo. Conecta eso a nuestro SetText anterior, y tomamos el costo. Podemos enchufar eso directamente a nuestros textos también. Nos dará este nodo que acaba de convertir un entero en texto. Y luego, por último, vamos a establecer el icono. Así que vamos a agarrar icono de elemento y vamos a arrastrar hacia fuera de esto y hacer conjunto pincel. Queremos establecer pincel de textura como esa. Y esto nos permite básicamente simplemente decir cuál es nuestro widget de imagen, qué textura querías usar. Entonces yo sólo voy a agarrar nuestro icono aquí, conectar hasta textura. Así que ahora cuando ejecutemos esta función, vamos a establecer el costo del nombre del artículo y el icono o a donde sea struct que proporcionamos a la entrada. Entonces ahora podemos compilar y guardar esto y volveremos a nuestro HUD. Ahora, tengo la caja de desplazamiento de nuestras lecciones anteriores. Entonces en realidad voy a hacer esto un poco más grande porque es bastante pequeño por el momento. Entonces es sólo un poco más grande ahí. Y también vamos a agregar una caja vertical a nuestra caja de desplazamiento. Ahora, podríamos simplemente agregar nuestros widgets directamente a la caja de desplazamiento. Pero el problema con eso es que podrías obtener algunos problemas de escalado y también hay algunas opciones que te faltarán. Entonces si nos desplazamos hacia abajo, voy a agarrar una caja vertical y agregarle eso al cuadro de desplazamiento aquí. Ahora, si yo fuera sólo, por ejemplo, decir agarrar un botón y agregarlo a la caja de desplazamiento. Si selecciono ese botón, se puede ver que en realidad nos faltan esas opciones de llenado y auto. En tanto que si agrego eso a la caja vertical, se puede ver que recuperamos esas opciones. Entonces por eso en realidad voy a estar agregando, podemos eliminar este botón. Ahora. En realidad voy a estar agregando nuestros widgets a la caja vertical en lugar de directamente en el cuadro de desplazamiento. Pero no te preocupes, la caja de desplazamiento seguirá comportándose como debería una vez que nuestra caja vertical dentro la caja de desplazamiento se vuelva demasiado grande para que la caja desplazamiento obtendrá una pequeña barra de desplazamiento y podremos desplazarnos através del contenido. Por ahora, necesitamos poder acceder a este cuadro vertical en nuestro código. Por lo que vamos a hacer como lo hicimos antes en el listado de artículos, vamos a seleccionar el cuadro vertical que hemos agregado al cuadro de desplazamiento. Y vamos a decir su nombre a la lista de artículos. Y tenemos que asumir es variable y luego vamos a compilar. Entonces vamos a dirigirnos al modo gráfico y vamos a usar el nodo constructo ahora, el tuyo podría estar en gris. El mío no es porque lo moví antes, pero dije que está en gris. Eso está bien. Todavía se puede arrastrar hacia fuera de ella y funciona bien. Entonces, lo que haremos es primero que tengamos que obtener todas las entradas de nuestra lista de artículos. Por lo que vamos a hacer clic derecho y hacer obtener la tabla de datos. Y queremos obtener los nombres de fila de la tabla de datos. Y esto nos permite establecer una tabla de datos y nos dará todos los nombres de fila de nuestra lista de elementos. Por lo que nos dará todos estos nombres aquí. Así que a continuación nos dirigiremos de nuevo al capó y vamos a establecer nuestra tabla de datos a Lista de elementos, conectaremos esto hasta nuestro Constructo de Eventos. Entonces desde los nombres outro, vamos a hacer un bucle. Así que arrastraré hacia fuera y buscaré bucle. Ahora, en realidad tuve un bug mientras filmaba esta lección donde mi loop nodos uno subiendo. Entonces si tienes ese problema donde estos no están aquí, puedes ir al Navegador de Contenido, buscar la carpeta del motor. Si no está ahí, puedes mostrarlo yendo a ajustes. Da clic en Mostrar contenido del motor, luego ve al motor, busca estándar. Y quieres macros estándar, solo abre eso. Y luego si vuelves al widget a tu Bahía de Hudson, arrastra hacia fuera, deberías poder encontrarlos. Esperemos que no te llegue este bug, pero por si acaso lo haces, así es como lo arreglé. Entonces solo haz eso. Ahora, ojalá tengas estos nodos de bucle apareciendo. Así que sólo voy a buscar bucle y queremos hacer un bucle foreach. Y eso va a recorrer todas las diferentes entradas de nuestra tabla de datos. Y usando el nombre de la fila, vamos a obtener los datos u obtener la estructura de nuestra lista de elementos. Entonces vamos a hacer conseguir tabla de datos. No obtendremos fila de tabla de datos. Pondremos la tabla de datos a la lista de elementos. Y se puede ver que tenemos el nombre de nuestro rol. Así que sólo vamos a enchufar eso en elemento de matriz porque si recuerdas, esto nos está proporcionando todos los nombres de fila. Por lo que cada vez que esto se ejecute, nos dará uno de los nombres de fila de nuestra lista de artículos. Conectaremos esto hasta el cuerpo del bucle. Entonces vamos a crear nuestro widget de listado de artículos. Entonces haremos crear widget. Vamos a configurar la clase a nuestro listado de artículos Jugador propietario. Podemos simplemente arrastrar hacia fuera y obtener Owning Player porque estamos dentro de un widget, solo podemos suministrar nuestro nuevo widget. Tenemos nuestros widgets actuales Owning Player. Después nos conectaremos hasta fila encontrada para crear nodo widget. A continuación, desde el valor de retorno, queremos configurar este nuevo widget de listado de artículos. Para ello, vamos a usar esa función de configuración que acabamos de crear. Por lo que tal se montó. Y queremos la función de lista de configuración entonces que puede agarrar la fila o el outro de nuestra lista de artículos y conectar eso hasta configurar el listado. Luego, por último, necesitamos agregar realmente un nuevo widget que hemos creado aquí a nuestra lista de artículos. Entonces voy a agarrar la lista de artículos. Y vamos a arrastrar hacia fuera de eso y hacer Agregar niño. Queremos que nuestro niño a la caja vertical conectará esto hasta nuestro listado de configuración aquí. Y luego para el contenido necesitamos el widget que estamos agregando a la lista de elementos. Así que solo agarraremos el valor de retorno y nos conectaremos a contenido como ese. Así que ahora solo para resumir el código que acabamos de escribir, lo que sucede cuando se crea el widget es que obtiene todos los nombres de fila de nuestra lista de elementos. Entonces obtendré estas tres filas de nuestra lista de artículos. Después recorrerá cada uno de ellos. Entonces este código aquí que tenemos resaltado 13 veces. Y cada vez que se ejecute, se ejecutará con un nombre de fila diferente de nuestra lista de artículos. Eso significa que obtendremos la información de estructura diferente de nuestra lista de artículos. Y eso configura o crea un nuevo widget de listado y le da una información diferente para cada listado de widgets que creamos. Y luego para cada uno, los agregamos al widget de lista de elementos que agregamos a nuestro cuadro de desplazamiento y aquí. Entonces ahora en realidad podemos probar esto en juego. Sólo voy a eliminar estos viejos widgets así que agregamos en nuestra lección anterior. Entonces solo seleccionaré el cuadro vertical aquí, eliminaré eso, eliminaré el botón. Seleccionaremos este cuadro horizontal aquí. Borra eso y eliminaremos este cuadro de texto solo para que podamos ver nuestro cuadro de desplazamiento un poco más fácil. Voy a mover la caja de desplazamiento justo arriba a la esquina superior izquierda de ahí. Por lo que compilará eso. Y ahora en realidad estamos listos para probar esto, así que le pegaremos a Play. Y ahora puedes ver que en realidad tenemos todos los artículos que agregamos a nuestra lista de artículos en nuestra pantalla. Y eso se está haciendo todo vía código. Ahora actualmente no tenemos la pequeña barra de desplazamiento porque solo hay tres entradas, por lo que no ocupa suficiente espacio para que realmente la barra de desplazamiento exista. Pero lo que podemos hacer es si salimos de editor de avión, sólo podemos ir a la Lista de Artículos. Podrías agregar artículos individuales si quisieras. Pero yo sólo voy a tomar decir el hacha aquí y vamos a duplicar eso un par de veces y luego hacer lo mismo con la bebida saludable, que es duplicar eso unas cuantas veces. Ahora cuando golpeamos play, esperemos que sí tengamos esa barra de desplazamiento. Ahora actualmente no puedo interactuar con la barra de desplazamiento. Y eso se debe a que nuestro mouse está bloqueado a la cámara de nuestros jugadores. Así que a continuación te mostraré cómo podemos configurar un poco de código que nos permita liberar nuestro mouse del control de la cámara para que podamos interactuar realmente con nuestros diferentes elementos de UI. Entonces, para empezar, iremos al plano de nuestro personaje. Entonces solo iré a, nos desharemos de esta búsqueda, iremos a la carpeta de contenido para la persona, luego planos. E iremos al ThirdPersonCharacter y abriremos eso. Ahora todavía tenemos algún código de lecciones anteriores. Obviamente tenemos aquí el código que en realidad crea nuestro HUD y agrega eso a la pantalla. Entonces sí queremos quedarnos con eso. Y podemos borrar este código de kill player porque ya no estoy usando eso. Entonces lo que vamos a hacer es agregar una entrada, así que haré clic derecho y buscaré el evento de entrada. Yo haría un turno. Dejasteturno. Así que cada vez que presionemos Left Shift alternará entre controlar la cámara de nuestros personajes y luego tener nuestro mouse realmente libre para interactuar con la interfaz de usuario. Entonces para empezar primero, necesitamos llegar a donde sea que en nuestro mouse esté controlando actualmente la cámara o no. Entonces sí conseguiremos controlador de jugador. A partir de eso, arrastraremos hacia fuera y obtendremos Mostrar cursor del ratón. Esto será verdadero o falso independientemente de que el cursor del ratón esté visible actualmente o no . Entonces haremos una F. Eso nos permitirá controlar qué código ejecutamos si el cursor del ratón está actualmente visible de lo que queremos ocultarlo. Entonces haremos o copiaremos, conseguiré controlador de jugador. Vamos a arrastrar hacia fuera de eso y hacer establecer el modo de entrada. Y queremos configurar el modo de entrada al juego sólo porque estamos cambiando. Si el cursor del ratón está visible actualmente, estamos cambiando al modo de ganancia, por lo que solo queremos controlar nuestra cámara. Entonces nos conectaremos hasta true. Y luego también queremos ocultar nuestro cursor del ratón. Así que vamos a arrastrar hacia fuera y hacer mostrar cursor del ratón. Y queremos que esto sea falso así. Entonces si nuestro cursor del ratón no es visible actualmente de lo que queremos establecer su visible. Pero primero queremos configurarlo para ganar modo y UI. Así que vamos a hacer establecer el modo de entrada, juego y sabía por qué la razón por la que estamos usando juego y UI y no solo UI es si tuviéramos que configurarlo a solo UI, ninguna de nuestras entradas y nuestro personaje funcionaría más. Entonces, si tuviéramos que pulsar de nuevo el turno izquierdo, en realidad no seríamos capaces de salir del modo Y porque este nodo no se ejecutaría. Entonces en su lugar usamos el modo set input, game y gy. Y conectaremos esto hasta falso. Y luego vamos a obtener nuestra variable que realmente creamos en una lección anterior. Se puede ver que el código aquí abajo, aquí es justo donde creamos el HUD. Lo configuramos en una variable y luego lo agregamos a nuestra ventana gráfica. Así que vamos a usar esa variable para establecer el widget y enfocar así. Luego, por último, queremos mostrar nuestro cursor. Así que voy a arrastrar hacia fuera de obtener controlador de jugador de nuevo para establecer mostrar cursor del ratón. Queremos tomar eso y conectar eso hasta nuestra salida aquí. Entonces ahora todo esto está configurado cuando presionamos Shift, liberará nuestro mouse del control de la cámara y nos permitirá controlar la IU. Y luego cuando lo presionemos de nuevo, recuperará el control de la cámara de nuestros jugadores. Para que podamos compilar esto y probar esto. Le pegaremos a play. Por lo que actualmente estoy controlando mi cámara. Si le doy a Shift, se puede ver que ahora tengo mi mouse. Ya no estoy controlando la cámara. En realidad puedo usar nuestra pequeña barra de desplazamiento aquí también para desplazarme por todas las diferentes entradas. Ahora, en esta lección, todo lo que hemos hecho es usar la caja horizontal para agregar a nuestro cuadro de desplazamiento. Pero si quisiéramos, podríamos editar el widget de listado de artículos tanto como tú quieras. Para que pudiéramos ir con el diseñador. A lo mejor quería que esto fuera en realidad un botón. Lo que podemos hacer es hacer clic derecho en el Boxer horizontal. Podríamos hacer rap con y seleccionamos un botón. Entonces podríamos tenerlo para que cuando se presiona este botón, ejecute algún código. Por lo que podemos seleccionar el botón aquí, desplazarse hacia abajo a la parte inferior, y hacer unclicked. Eso nos crea un nuevo evento. Así que cada vez que se presiona este botón de anuncios , se imprimirá un. podríamos hacer una cadena de impresión, y podemos tener esta cadena de impresión imprimir el valor actual del nombre del elemento por lo que podría obtener ItemName, no obtener texto. Usaríamos el getText. Apúntalo. Por lo que ahora cada vez que pinchemos en este botón, el nombre del artículo imprimiráel nombre del artículo en el que hemos pulsado. Entonces nos dirigiremos al juego, dale a Play. Y ahora puedes ver que estos son botones. Por lo que actualmente tengo el control de mi cámara. Si presiono Shift, tengo mi mouse ahora, ahora cuando hago clic en estos, puedes ver que en realidad está imprimiendo el nombre del artículo. Entonces eso es todo por esta lección. Esperemos que ahora entiendas cómo puedes realmente crear widgets y luego agregar esos widgets usando código. 42. Widgets (uniones): Oigan a todos. En esta lección vamos a estar echando un vistazo a los bindings de widgets ahora, que nos permiten controlar ciertas propiedades de nuestros widgets usando variables o funciones. Entonces, para ponerles un ejemplo, si arrastro aquí una imagen y simplemente la haré un poco más grande. Si miras en el lado derecho del panel Detalles, verás esta opción de enlace para algunas de las diferentes propiedades que tiene nuestra imagen. Ahora bien, estos son en realidad ajustes que podemos controlar ya sea con una variable o una función. Entonces un buen ejemplo de esto es la opción de visibilidad aquí. Ahora, esto básicamente solo establece si el widget es visible o no. Entonces si la dejamos como verdura, podemos pausarla y darle a play. Ya veremos que aquí tenemos nuestra imagen. Y si volvemos al capó y pongo la visibilidad a compilación oculta y luego le pegamos a Play. puede ver que ya no es visible. Pero también podemos controlar esa configuración con una variable. Por lo que si volvemos a nuestro HUD, seleccionamos nuestra imagen aquí, pueden ver que tenemos una opción de enlace junto a la visibilidad. Y en este momento solo tenemos la opción Crear Vinculante, y eso lo explicaré en un minuto. Pero si vamos a nuestra vista gráfica aquí y creamos una nueva variable, y esto solo se va a llamar, lo llamaremos visibilidad de imagen. Y vamos a establecer su tipo a estado, perdón, visibilidad pizarra. Por lo que queremos visibilidad de Eastlake. Este es el tipo de variable que necesitamos usar cuando estamos enlazando a un ajuste de visibilidad. Entonces lo haré como componente. Y si ves aquí abajo, el valor por defecto es realidad la misma configuración que tenemos en nuestra vista de diseño si hago clic el desplegable para visibilidad aquí. Ahora que hemos creado esa variable, en realidad podemos vincularla a esta imagen es visibilidad. Por lo que podemos golpear bind y se ve que ahora podemos ver esa variable aquí. Si selecciono eso ahora, nuestra imagen ahora está usando esa configuración de variable para determinar si es visible. Y se puede ver que esto en realidad se ha desvanecido. Ahora, si vamos al Event Graph y seleccionamos esa variable que creamos, Actualmente está configurado en Visible. Entonces si le damos a Play, verás que es visible. Y si retrocedemos y ponemos esa variable ahora a escondida en C, eso ahora está oculta. Y eso nos permite controlar esa visibilidad de las imágenes con solo usar esa variable. Y podemos cambiar esa variable, tenemos gusto, así que por ejemplo, podríamos configurarla, podríamos ponerla a decir, escondida después de cierta cantidad de tiempo. Entonces podríamos agregar, digamos un retraso aquí. Después de dos segundos, voy a poner nuestra imagen a escondida. Y vamos a establecer el valor predeterminado a visibilidad para que sea visible al inicio. Después de dos segundos habrá configurado en oculto. Si le damos a Play, verás que es visible ahora, y después de dos segundos se oculta. Ahora también podemos controlar otras propiedades de nuestros widgets usando variables. Entonces, si volvemos a nuestro HUD, diríjase a la Vista de Diseño y tenemos seleccionada nuestra imagen. Se puede ver que también podemos unir una variable al pincel. Así que podemos usar una variable para controlar todos estos ajustes aquí. Entonces si vamos a la gráfica y creo una nueva variable, voy a llamar a mi configuración de pincel así. Vamos a cambiar el tipo a pincel de pizarra. Y aquí vamos a escoger la opción superior. Y si compilamos, verás que estas opciones aquí realmente coinciden con lo que tenemos en el diseño de vista para nuestra configuración de pincel de imagen. Y si hacemos clic en el enlace, también podemos establecer esa variable de configuración del pincel aquí también. Por lo que ahora podemos controlar nuestros ajustes de pincel de imágenes usando esa variable que acabamos de crear. Entonces si seleccionamos Ajustes de pincel y luego aquí podemos escoger nueva imagen. Por ejemplo, voy a escoger esta cara verde. Y si compilamos y le pegamos a Play, verás que ahora estamos usando esa cara verde. Y aún así fue desaparecer apagado a dos segundos. Porque si lo recuerdas, aquí tenemos nuestra variable de visibilidad, y eso es lo que controla la visibilidad de nuestras imágenes. Así que puedes tener múltiples enlaces para las diferentes configuraciones aquí, para el mismo widget también. Ahora hasta ahora solo hemos estado usando variables para controlar estos enlaces, pero en realidad puedes usar funciones también. Así que si vamos a decir la opción de visibilidad aquí, si simplemente hacemos clic en el enlace y si alguna vez quieres eliminar un enlace, puedes simplemente hacer clic en esto y hacer eliminar el enlace, y eso lo restablecerá de nuevo a usar este ajuste aquí. Por lo que ahora solo está configurado en oculto. Entonces si fuera a golpear a Play, ya verás que simplemente está escondido. E incluso después de dos segundos no cambiará porque ahora estamos usando esta configuración de visibilidad aquí otra vez, y no la variable. Pero también podemos usar funciones. Así que si hacemos clic en la opción aquí y hacemos clic en Crear enlace, esto realmente creará una nueva función y todavía estamos dentro de nuestro bp HUD aquí se puede ver el valor de retorno será cualquiera que sea el enlace requiere. Porque estamos usando la opción de visibilidad. Nos da una salida de visibilidad de nuestro nodo. Si fuera a crear uno para nuestro pincel, por ejemplo, si quito esta encuadernación, entonces crea una nueva encuadernación. Verás que ahora el valor de retorno es un ligero valor de pincel porque esa es la variable que requiere para este enlace. Pero por ahora, sólo voy a volver a ajustar eso a nuestra variable de ajuste del cepillo aquí. Por lo que va a utilizar esa variable que hemos creado anteriormente de nuevo por aquí y volviendo a nuestra nueva función. Entonces, si vamos a funciones, verás que ahora tenemos una opción de obtener visibilidad. Y esta es la función que creamos cuando creamos este enlace aquí. Ahora podemos agregar código aquí como normal para controlar cuál va a ser la visibilidad. Entonces por ejemplo, podríamos hacer conseguir controlador de jugador. A partir de eso podríamos hacer conseguir ratón, obtendrá, Mostrar, cursor del ratón. Y podríamos alargar de nuestro valor de retorno, te dan una bofetada. Clavija. Mostrar cursor del ratón en el indexador. Entonces si el cursor del ratón de la demostración es cierto, entonces voy a poner nuestra imagen a visible. Y si es falso, entonces vamos a configurarlo en oculto. Si recuerdas en nuestra lección anterior en el ThirdPersonCharacter, configuramos aquí este código, que básicamente nos permite cambiar control de la cámara o controlar el mouse. Entonces ahora cuando golpeamos play, se puede ver, no puedo ver en absoluto al inmaduro, pero estoy tomando el control de mi cámara. Pero si le doy a Shift, se puede ver ahora que tengo mi mouse y mi imagen en realidad se muestra. Y si vuelvo a golpear Shift, se puede ver que ahora está oculto. Y la razón por la que está haciendo eso, es porque en nuestro HUD, esta función se está ejecutando para determinar la visibilidad de nuestras imágenes. Eso es decir si el cursor del ratón es visible o si esta variable es verdadera, entonces la configuramos a visible. Y si es falso, lo pone en oculto. Ahora hay otro ejemplo que quería darte y eso es usar la barra de progreso. Ahora las barras de progreso se usan típicamente para cosas como barras de salud y barras de hambre o pantalla de carga y barras. Entonces lo que haremos es dirigirnos a la vista de diseño y obtendremos la barra de progreso de la tarima. Arrastrar eso en. Voy a hacer el mío un poco más largo así. Ahora tenemos algunos ajustes para cosas como el estilo que controlan cómo se ve. Pero aquí sólo nos vamos a centrar en el valor porcentual. Y si esto es 0, significa que la barra de progreso está vacía. Y si es uno, se puede ver a medida que lo subo, ahora está lleno. Entonces nuestro porcentaje siempre va a ser un valor entre 01 y eso determina qué tan llena está realmente la barra de progreso. Ahora también podemos usar un bind para esta propiedad. Por lo que se puede ver que tenemos la opción de enlace aquí, por lo que puede o bien establecer una variable o función para controlar este valor. Ahora, actualmente al momento de filmar, realidad hay un bug en el motor donde no puedes vincular esto a una variable y darte un ejemplo. Normalmente sería capaz de vincular este valor a una variable flotante. Entonces si voy y creo una nueva variable de flotación en C, dices cantidad y la configuras en un flotador como ese. Y sólo vamos a compilar. Sivuelvo a la vista de diseño y hago clic en la opción de enlace aquí, se puede ver que nuestro flujo no está aquí y debería estar. Si tu variable está aquí, entonces eso es genial. Estás usando una versión más nueva del motor y el error ha sido corregido, por lo que no tienes que preocuparte por esto. Pero si no lo tienes aquí y aún no se ha arreglado, hay otra forma de sortear esto, y eso es solo usar la función. Así que en lugar de simplemente seleccionar la variable, podemos simplemente hacer crear enlace. Y aquí se puede ver que el valor de retorno es un flotador. Y sólo podemos tomar nuestra variable de cantidad, enchufar eso en el valor de retorno. Y ahora podemos usar este flotador para controlar la cantidad. Entonces puedo configurarlo para que diga 0.2. Podemos darle a Compile y después darle a Play. puede ver que ahora está en 0.2 en la barra de progreso. Ahora podemos configurar otro widget que controle la variable de cantidad que acabamos de crear, y que en realidad actualizará nuestra barra de progreso aquí. Entonces si salimos fuera de juego, ve al HUD. Podemos agregar adentro, digamos un slider aquí. Y haremos esto un poco más grande. Voy a cambiar este punto de anclaje a la parte superior derecha porque ese es el punto al que está más cerca. Entonces cambiaré el ancla a eso. Y podemos cambiar el estilo sólo para ser un poco más grandes. Entonces haré que el grosor de la bola diga por solo para que sea un poco más fácil de ver en juego. Entonces compilaremos. Y aquí abajo se puede ver que tenemos un valor propio cambiado. Y si hacemos clic en el botón Plus, eso nos creará un evento que nos permita establecer una variable usando lo que sea que la diapositiva esté actualmente establecida para ser simplemente agarrar nuestra variable de cantidad aquí, conecte esto. Y ahora cuando movemos nuestro slider en juego, se puede ver que está por aquí. Si pulso Shift para entrar al modo mouse aquí puedes ver que nuestra imagen sigue apareciendo. No podemos arrastrar un slider y se puede ver que nuestra barra de progreso en realidad se está actualizando con nuestro deslizador. Eso es más o menos por cómo puedes vincular variables y funciones a las propiedades del widget. Si nos dirigimos de nuevo al corazón aquí, sólo voy a salir de los planetas para ir a la vista de Gráfico si alguna vez quieres encontrar alguna de la función bind. Por lo que hemos creado, cuando hemos clic en la opción de enlace y hecho crear enlace, usted puede encontrar aquellos bajo la pestaña de funciones. Al igual que cualquier función normal. El motor simplemente da automáticamente estos nombres para que puedas renombrarlos si quieres. Y también puedes eliminarlos si no los estás usando, solo ten cuidado. Si eliminas uno que estás usando en un enlace de widget, te dará un error, así que solo ten cuidado con eso. Eso es todo por esta lección. Esperemos que ahora entiendas un poco más sobre cómo funcionan los enlaces y widgets y cómo puedes usarlos en tus futuros proyectos. 43. Widgets (bordes, superposiciones y rejas): Oigan a todos. En esta lección vamos a estar echando un vistazo a algunos tipos de widgets más. Vamos a echar un vistazo a la superposición de borde y el panel de rejilla uniforme. Pero antes de empezar, solo vamos a limpiar un poco nuestro proyecto de nuestra última lección. Así que solo voy a seleccionar estos tres widgets aquí, eliminarlos, dirígete al Event Graph. Voy a tomar mi nodo constructo, conecta eso hasta este nodo aquí. Entonces eliminaremos estos nodos que no estamos usando también borraremos este slider. Y si compilamos, todo debería estar bien. Ahora volviendo al diseño de vista, lo primero que vamos a ver es el panel de rejilla uniforme. Si arrastramos eso adentro. Y yo sólo voy a hacer el mío un poco más grande aquí. Este panel funciona de manera similar a la caja horizontal. La caja vertical. La única diferencia es que puede tener hijos tanto verticales como horizontales. Entonces, para darles un ejemplo rápido, si solo agarro, digamos, una imagen aquí y la agrego al panel de rejilla uniforme. Ya lo puedes ver. Está en la esquina superior izquierda. Voy a agregar una imagen adicional aquí. Ya ves que sigue, ambos siguen en esta esquina superior izquierda. Pero dices que si selecciono una de ellas, en realidad obtengo estas flechas y las puedo posicionar en diferentes ubicaciones, ya sea hacia abajo u horizontalmente así. Ahora también podemos controlar esto encima en el panel Detalles aquí puedes ver que actualmente este widget Fila está configurado uno y su columna está establecida en 0. Pero si yo fuera a poner la columna para decir tres, Se puede ver que luego la mueve a la tercera columna. Ahora, a diferencia de las cajas horizontales y verticales, también se puede cambiar la alineación. Entonces aquí arriba en el panel Detalles, si quisiéramos decir B en la esquina inferior derecha, podríamos hacerlo usando estas opciones de alineación. Ahora también podemos agregar widgets a nuestro panel de cuadrícula uniforme usando código. Y aquí es donde se vuelven realmente poderosos porque podemos usar paneles de rejilla uniformes para crear cosas como inventarios o listas más avanzadas. Entonces, para darte un ejemplo de cómo harías eso, voy a crear un nuevo widget que también podemos usar el borde y overlay n Así que nos dirigiremos al Navegador de Contenido. Sólo voy a hacer clic en el botón Agregar, ir a Interfaz de usuario que Widget Blueprint seleccionará usar un widget y se irá hacia abajo. Y nos fuimos a casa y S2, BP y Scott ranura rejilla. Y eso lo abriremos. Yo sólo voy a arrastrar el mío hasta la cima aquí así. Entonces, para empezar, vamos a agregar el widget de borde a la jerarquía, así como así. Con ella seleccionada, puede ver la configuración de nuestro borde sobre en el panel Detalles. Y aquí es donde podemos establecer cosas como si quisiéramos usar una imagen y esto básicamente solo convertirá nuestra frontera en una imagen. También podemos establecer el color. Entonces, por ejemplo, si quisiera que fuera gris, simplemente podría convertir el color aquí a un gris más oscuro como ese. Y también nos da opciones de acolchado. Por lo que esto afectará a cualquier niño que agreguemos a esta frontera. Ahora las fronteras sólo pueden tener un hijo. Hay bastante útiles para actuar como una especie de fondos o contenedores para otros widgets. Y uno de esos widgets es el overlay. Entonces si agarramos el overlay y añadimos eso a nuestra frontera así, ahora, si quisiera agregar otro niño a la frontera, no puedo. Entonces si agarro la imagen, puedes ver que no me deja agregarla al borde, pero nuestra superposición puede tener tantos hijos como queramos. Entonces vamos a agregar nuestra imagen a nuestra superposición así. Ahora, con la superposición seleccionada, puedes ver que realmente no tiene ninguna de sus propias configuraciones. Y eso es porque en realidad no hace nada visual. Todo lo que hace es permitirnos agregarle múltiples widgets. Y esos widgets se superpondrán entre sí para que no se moverán en una dirección horizontal o vertical diferente. Estaban todos apilados uno encima del otro. Así que antes de empezar a diseñar este widget, vamos a cambiar el tamaño de nuestra vista previa aquí porque actualmente es 1920 por 1080, que es demasiado grande. Entonces vamos a cambiar la opción de pantalla completa aquí a deseada así. Ahora, lo que esto hace es básicamente simplemente le dice al widget que ocupe tanto espacio como el contenido dentro de él lo hace. Entonces en este momento es muy pequeña porque nuestra imagen sólo ocupa una cantidad muy pequeña de espacio. Pero si seleccionamos nuestro widget de imagen y configuramos la imagen a otra cosa. Entonces voy a escoger esta carita verde. Se puede ver que se hace más grande porque nuestra imagen es más grande de lo que podríamos aumentar este tamaño si quisiéramos, digamos 128 por 128 así. Ahora puedes notar si acercas que la parte superior está más cerca del borde y el lateral. Y eso porque si volvemos a nuestra frontera, el acolchado se establece en 42. Y si hacemos clic en el desplegable, se puede ver que los valores izquierdo y derecho o cuatro píxeles. Entonces están a cuatro pixeles del borde para nuestra imagen. Y luego la parte superior e inferior son dos. Entonces si quisiéramos que todo esto fuera igual, podríamos hacer eso. Entonces voy a poner el mío a decir diez así. Entonces solo tenemos un espacio de diez píxeles entre nuestro borde y ese widget de superposición que está contenido dentro de nuestro borde. Por lo que ahora tenemos nuestra imagen de icono aquí. Vamos a agregar algunos textos también. Así que agarraremos un poco de texto y agregaremos eso a nuestra superposición. Observa que solo se superpone encima de nuestra imagen. Ahora, nuestro texto es bastante grande por el momento, así que voy a seleccionarlo y solo cambia el tamaño de la fuente hacia abajo para decir 16 o tal vez 40. Así. Voy a cambiar el texto para sólo decir 99, por ejemplo. Y lo configuraremos para que se alinee con la esquina superior derecha, así que usaremos la línea derecha y luego lo haremos, en realidad solo lo dejaremos como línea superior. Por lo que ahora está en la esquina derecha. Ahora, tal vez queríamos agregar, digamos, una barra de progreso a nuestra ranura de cuadrícula. Podemos hacer eso. Así que agarraremos nuestra barra de progreso en eso a la superposición también. Ahora quiero esto en el centro de abajo aquí. Entonces voy a seleccionar la alineación central y luego la alineación inferior, así. Ahora podemos cambiar el tamaño de nuestra barra de progreso usando una caja de tamaño. Entonces si hacemos clic derecho en él y podemos hacer rap con, entonces hacer rap con caja de tamaño. Esto nos va a permitir definir realmente el tamaño exacto que queremos que supere nuestra barra de progreso. Entonces podemos cambiar el ancho y la altura, establecer el ancho a algo así como 95, y la altura a tal vez diez. Y ahora tenemos una barra de progreso añadida a nuestra superposición. Esos son los tamaños exactos que queremos usar. Ahora, a lo mejor quiero empujarlo un poco hacia arriba desde abajo aquí. Podríamos usar el relleno para hacer eso. Con nuestra caja de tamaño seleccionada. Podemos hacer clic en el desplegable de relleno y rellenarlo de las bombas, digamos, cinco pixeles así. Así que ahora tenemos nuestro widget de ranura de cuadrícula todo diseñado usando una superposición solo nos permite superponer todos estos diferentes widgets en el mismo espacio mientras nos da control del relleno y la alineación ajustes. Así que ahora vamos a compilar y vamos a agregar realmente estas ranuras de rejilla a nuestra rejilla uniforme dentro de nuestra campana usando código. Entonces, antes de hacer eso, vamos a eliminar estas imágenes que agregamos a la cuadrícula uniforme. Con nuestra rejilla uniforme, en realidad la vamos a seleccionar. Vamos a llamar a esta grilla. Ahora. Tenemos que asumir es variable que podamos acceder a esta cuadrícula en el código, compilaremos y nos dirigiremos a la vista gráfica. Entonces, para empezar, moveremos este código hacia arriba y fuera del camino. Y vamos a agregar una secuencia ahora solo para que podamos tener ambas piezas de código uno. Así que esto ejecutará este código primero y luego agregaremos el resto de nuestro código aquí abajo. Entonces comenzaremos arrastrando hacia fuera y buscando for-loop. Queremos la opción for-loop aquí abajo. Y esto nos permite básicamente simplemente especificar el índice de inicio y fin, que controla cuántas veces se ejecutará realmente el cuerpo del bucle. Entonces voy a establecer mi último índice. ¿ Dices nueve? Entonces esto ahora se ejecutará diez veces porque 0 es uno esencialmente. Así que por cada vez que se ejecute este bucle, queremos crear cualquier widget. Así que vamos a arrastrar fuera del cuerpo del bucle y hacer Crear Widget así. Entonces, como antes necesitamos conseguir un lugar dueño. Entonces simplemente arrastraré hacia fuera y sí consigo Owning Player. Ahora solo proporcionaremos el Jugador Propietario de HUD. Y luego tenemos que establecer la clase, así que vamos a establecer esto a la ranura de la rejilla. Entonces necesitamos obtener nuestro panel de cuadrícula y vamos a agregar este nuevo widget a nuestro panel de cuadrícula. Ahora porque los hijos de una rejilla uniforme pueden tener una fila y una columna que define qué tan lejos, vertical y horizontalmente hay. Vamos a necesitar hacer algunas matemáticas para determinar dónde deben colocarse nuestras nuevas ranuras de cuadrícula. Por lo que se arrastrará hacia fuera desde el panel de rejilla. ¿ Agregarías niño a rejilla uniforme? Y conectaremos esto hasta el widget create de ahí. Ahora el contenido solo va a ser el nuevo widget que creamos, pero también tenemos una n fila y luego en columna, ahora queremos regarme cómo funciona esto. Entonces lo que vamos a hacer es primero almacenar el índice. Así que sólo voy a arrastrar hacia fuera desde el valor del índice en nuestro for-loop y hacer promover variable. Yo sólo lo voy a mantener llamado índice. Y conectaremos esto hasta nuestro bucle aquí así. Ahora también necesitamos saber cuántas columnas de ancho va a estar nuestro panel de rejilla. Entonces vamos a crear una nueva variable para eso. Voy a llamar a mis columnas así. Y va a ser un entero. Así que sólo establecerlo en entero, luego vamos a compilar. Y luego tenemos que decir valor predeterminado. Entonces voy a poner el mío a tres. Entonces, para empezar, nuestro panel de cuadrícula tendrá tres widgets de ancho. Ahora usando nuestros valores de índice y columna, podemos determinar en qué ranuras de cuadrícula de fila y columna deben estar. Agarrará nuestro índice y vamos a dividir esto por nuestras columnas. Así que divide, conecta en hasta n fila. Y queremos dividir esto por nuestras columnas así. Ahora la razón por la que esto funciona es porque cuando dividimos el índice por las columnas, si este valor de índice está por debajo del valor de la columna. Entonces si esto es uno o dos, el retorno siempre será 0 porque dos divididos por tres es 0, porque estos son enteros. Por lo que hay números enteros sólo hasta que este índice esté libre. Esto, el valor de retorno del nodo r divide será 0. Por lo que eso significa que nuestros widgets permanecerán en la altura vertical 0 hasta que este índice salga libre. Y entonces este nodo en realidad devolverá uno porque tres dividido por tres es uno. Entonces eso en realidad moverá nuestro widget ahora hacia abajo en la siguiente fila vertical. Entonces tenemos las columnas. Y esto en realidad funciona de una manera similar. Entonces copiaremos estas dos variables y arrastraremos fuera de mi índice y haremos el símbolo de porcentaje. Entonces ese es el símbolo de porcentaje, cadera. Ahora, este es el modo. Entonces lo que esto hace esencialmente es aún dividir estos dos valores entre sí. Pero en lugar de darnos el resultado, nos da el resto. Entonces si conectamos esto hasta columnas, si te imaginas que el índice es uno y las columnas es libre. Bueno, si los estuviéramos dividiendo, el resultado sería 0. Pero como estamos consiguiendo el resto, el resto será uno. Si nuestro índice es dos y nuestras columnas son tres, y nuestro resto será dos. Y esto es lo que empuja nuestro widget a lo largo del eje horizontal. Ahora en realidad hemos terminado nuestra configuración para desovar nuestras rejillas y luego agregarlas al widget de cuadrícula uniforme para que podamos compararlo y realmente ver cómo se ve esto en el juego. Entonces le pegaremos a play. Vean que ahora tenemos nuestra grilla. Se puede ver que son tres web y luego está agregando diez widgets. Entonces tenemos nueve y luego diez en el fondo aquí. Ahora actualmente hay un poco aplastada porque nuestra rejilla uniforme real es demasiado pequeña para caber todos estos widgets sentido. Así que lo que podemos hacer es simplemente volver a nuestro HUD, ir al diseño de vista, y con nuestra cuadrícula uniforme seleccionada, podemos simplemente tomar el tamaño al contenido en C, se ha vuelto muy pequeño porque actualmente no tiene ningún contenido. Pero cuando compilamos, le pegamos a Play. Verás que ahora todos nuestros widgets tienen el tamaño correcto. Si quisiéramos, podríamos volver a nuestro HUD. Podríamos cambiar el valor de las columnas agradable y fácilmente con sólo cambiar el valor, bueno decir cinco. Y luego cuando compile y le pegue a Play, verás que ahora es de cinco de ancho. Ahora quizás querías un poco de espacio entre tus widgets que están dentro la cuadrícula. Podríamos hacer eso también. Para que podamos regresar al HUD. A continuación, en el diseño de vista, seleccione el panel de rejilla. Y aquí en realidad podemos establecer el relleno de ranura. Entonces podemos poner esto a decir cinco. Y tendremos cinco pixeles ahora entre orden a hijos de la cuadrícula uniforme. Entonces volveremos a golpear play. Se puede ver que ahora tenemos un bonito hueco entre esos widgets. Si recuerdas, al igual que nuestra lista, podemos cambiar estos para que sean botones. Actualmente son solo imágenes estáticas, pero podemos cambiarlas para que sean botones como hicimos con nuestra lista vertical aquí también. Así que si nos dirigimos de nuevo a nuestra ranura de rejilla, podemos envolver nuestra superposición aquí en un botón, así que iremos wrap with du button. Se puede ver que ahora tenemos un botón y como seguimos usando el borde como fondo, se puede ver que el botón en realidad tiene esa brecha de diez píxeles. Entonces, si queríamos deshacernos de eso, solo podemos seleccionar nuestro botón, hacer relleno y establecer esto en 0. Y ven que ahora nuestro botón en realidad va directo al borde de nuestra frontera. Pero todavía tenemos un poco de relleno extraño en los lados de nuestro widget. Y eso porque si seleccionamos un botón aquí y nos desplazamos hacia abajo, lo encontrarás en el yo creo que está instalado. Sí. Si abrimos el estilo, verás que tenemos acolchado normal y relleno prensa ahora porque aquí tenemos 12. Si abrimos esto, verás a la izquierda y a la derecha, tenemos 12 patrón y eso es lo que nos está dando esa gran brecha. Si queremos cambiar esto para que sea parejo en todos los lados, solo podemos cambiar este número de arriba aquí, digamos cinco, y luego haremos lo mismo con el relleno de prensa también. Cambia eso a cinco y luego compilaremos. Verás que ahora tenemos la cantidad correcta de relleno de cada borde de nuestro widget. Ahora hemos agregado un botón a nuestro widget de ranura de cuadrícula. Podemos tener código corriendo cuando se presiona ese botón para que podamos desplazarnos hacia abajo hasta la parte inferior aquí, tenemos nuestros botones seleccionados. Podemos agregar un onclick eventos, así podemos agregar eso. Y cuando lo recogemos, podemos ejecutar algún código. Por lo que sólo agregaré una cadena de impresión aquí. Ahora, cuando compilemos esto y presionemos Play, verás que tenemos nuestras ranuras de cuadrícula que están resaltadas como lo hace un botón. Y si los presiono, se puede ver que esa cadena de impresión se está ejecutando. Ahora, nuestro panel de rejilla uniforme también puede funcionar en una caja de desplazamiento. Si salimos de los planetas para golpear de cabeza hacia el hub, entonces si seleccionamos nuestro panel de cuadrícula y hacemos clic derecho, hacemos rap con y queremos que el cuadro de desplazamiento así. Ahora, nuestra caja de desplazamiento, en realidad queremos establecer un tamaño, porque si tenemos hasta el tamaño, contenido en realidad nunca traerá a colación esa pequeña barra de desplazamiento porque simplemente seguirá haciéndose más grande. Por lo que queremos desmarcar esto y queremos escoger una talla. Entonces voy a hacer el mío un poco más ancho así, pero voy a hacerlo más corto. Así que conseguimos que nuestra barra de desplazamiento suban. Entonces compilaremos. Y solo queremos asegurarnos de que nuestro panel de rejilla esté configurado para que se llene horizontalmente y se llene verticalmente. Entonces le pegaremos a play. Deberíamosver que aquí tenemos nuestra caja de desplazamiento vertical. Y podemos, si presiono shift, podemos desplazarnos por nuestra grilla así. Ahora, tal vez querías agregar un fondo a este cuadro de desplazamiento. Eso lo podemos hacer usando fronteras. Entonces, si salimos ahora y volvemos a nuestro HUD, podemos seleccionar nuestra casilla de desplazamiento y envolverla con un borde. Entonces haremos frontera. Por lo que ahora nuestra caja de desplazamiento está contenida dentro del borde. Si nos acercamos, en realidad se puede ver que tiene algo de ese relleno raro pasando. Entonces si seleccionamos nuestra frontera aquí y encontramos el relleno, yo sólo voy a establecer el mío para que en realidad lo venderá a decir diez. Ahora nos dará una linda frontera grande. Y después cambiaremos el color. Entonces con nuestro borde seleccionado, podemos bajar a la configuración del pincel. Y de nuevo, puedes establecer una imagen aquí si quisieras. Yo sólo voy a usar el color del pincel. Y podemos establecer esto para decir sea este color rojo aquí. Ahora cuando compilemos y golpeemos Play, verás que ahora tenemos ese bonito color de fondo que seleccionamos y aún podemos desplazarnos por nuestra lista muy bien. Entonces eso es todo por esta lección. Esperemos que ahora entiendas un poco más acerca de los tres de estos tipos de widgets. 44. Widgets (Arrastre y suelte): Oigan a todos. En esta lección vamos a estar echando un vistazo a las operaciones de arrastrar y soltar usando widgets. Ahora bien, si no seguiste a lo largo de nuestra lección anterior, creamos esta grilla aquí. Tenemos estos diferentes widgets y lo ponemos dentro de una caja de Scroll. Recomiendo encarecidamente ir y seguir esa última lección, porque en realidad vamos a estar usando estos widgets para nuestro arrastrar y soltar. Así que solo para empezar, en realidad voy a hacer esto un poco más grande, así que tenemos un poco más de espacio con el que trabajar. Entonces iremos al capó y sólo voy a agarrar nuestra caja de pergaminos o realmente lo siento, nuestra frontera aquí, lo que va a hacer esto un poco más grande así. Entonces vamos a entrar a la vista de Gráfico, y voy a agregar algunas ranuras más también. Entonces vamos a establecer esto para decir 19. Por lo que tendremos 20 slots esta vez en su lugar, podemos probar esto, pulsa Play. Puedes ver que tenemos todas nuestras ranuras aquí y nuestra barra de desplazamiento también funciona correctamente. Así que ahora podemos X fuera del editor de plano y vamos a ir a nuestro widget de ranura de cuadrícula, luego diríjase al modo gráfico. Ahora por aquí en las funciones, realidad tenemos algunas funciones que podemos anular. Y estas son funciones son todos los widgets tienen incorporados. Como puedes ver, hay muchas. No vamos a pasar por todas estas porque algunas de ellas están un poco más avanzadas. Pero si pasas el cursor sobre ellos, obtienes un pequeño tip de herramienta que dice de qué son responsables estas funciones. Y hay algunos que son útiles para familiarizarse. Entonces tenemos cosas como el botón del ratón hacia abajo. Así que esto se va a ejecutar si presionas el botón del ratón hacia abajo mientras tu mouse se cierne sobre el widget y el juego, tenemos cosas como las funciones de arrastre por aquí. Los vamos a usar hoy para crear un sistema de arrastrar y soltar. También hay funciones para en mouse enter and or mouse leave. Y eso es, esos se van a ejecutar cada vez que nuestro mouse se cierne sobre nuestro widget y luego deja de flotar sobre nuestro widget. Pero vamos a empezar con el y arrastre detectado. Y esta va a ser la función que detecte cuando mantenemos pulsado el mouse mientras está sobre este widget y empezamos a moverlo. Ahí es cuando detecta un arrastre y esta función se equivocará. Así que vamos a hacer clic en esto para anular esa función. Y aquí tenemos algunas entradas y salidas. Así que solo para cubrir rápidamente estas entradas, tienes mi geometría y esto básicamente te da información sobre posición de tu mouse relativa a la ubicación de la pantalla y cosas por el estilo. Probablemente no estarás usando esto con demasiada frecuencia. Pero lo que puede estar usando mucho más a menudo es el evento puntero. Esto nos permite conseguir cosas como es el botón del ratón hacia abajo por ejemplo. Y podemos usar esto ahora para comprobar qué botón del ratón presionó realmente hacia abajo cuando se detectó el medicamento, porque en realidad podemos arrastrar con ambos botones de extremo izquierdo, derecho y medio del ratón. Entonces si sólo quisiéramos que este código se ejecutara para, digamos, el botón izquierdo del ratón, entonces nos gustaría comprobar es el botón de clics, el botón izquierdo del ratón. Y todo lo que hice fue hacer clic en el botoncito allí y luego hacer clic en el botón izquierdo del mouse para configurarlo en el botón izquierdo del mouse. También podemos usar este evento puntero para obtener el nombre del botón que se presionó hacia abajo. Por lo que podríamos hacer conseguir el botón que afecta. Y a partir de aquí podemos hacer consigue mostrar, y podemos obtener el nombre para mostrar la clave. Y esto sólo nos dirá qué llave exactamente fue empujada hacia abajo cuando se detectó este medicamento. Pero por hoy, sólo vamos a estar usando el botón del ratón hacia abajo. Así que solo resalte estos y elimine estos, y voy a hacerlo para que este código sólo se ejecute cuando dejamos arrastrar el botón del ratón. Así que voy a agregar un si aquí, conecta esto hasta nuestro nodo de inicio aquí. Y luego vamos a conectar el resto del código hasta nuestro verdadero. Por lo que ahora estamos listos para usar realmente las notas de operación Crear arrastrar y soltar, vamos a hacer clic derecho y buscar Crear, Crear, arrastrar. Y queremos una operación de arrastrar y soltar así. Y conectaremos esto a lo verdadero así. Ahora, podemos usar un widget existente, pero en realidad voy a crear un nuevo widget que va a ser utilizado para básicamente seguir nuestro mouse cuando arrastramos y soltamos. Entonces vamos a crear un nuevo widget. Entonces compilaremos y guardaremos esto por ahora. Y haremos clic derecho en el Navegador de contenido, vaya a Interfaz de usuario. Hacer Widget Blueprint. Usa un widget y desplázate hacia abajo y nombraremos este BP. Mover widget así. Y eso lo abriremos, lo que sea. Yo sólo voy a arrastrar el mío hasta la cima aquí así. Ahora, cuando en realidad arrastramos desde nuestro widget de ranura de cuadrícula, este va a ser el widget que se creará y seguirá nuestro mouse a medida que movemos el mouse. Entonces vamos a querer, digamos, una imagen para esto. Entonces comenzaremos con una superposición. Por lo que va a agarrar una superposición, poner eso aquí, luego voy a agarrar una imagen. El motivo por el que estoy empezando con una superposición es sólo para que podamos tener múltiples widgets, como una imagen y algún texto por ejemplo. Por lo que vamos a agarrar algo de texto también, que es zoom en aquí. Ahora voy a configurar mi tamaño de vista previa al deseado para que podamos ver exactamente qué tan grande va a ser nuestro widget. Voy a cambiar la imagen para decir 64 por 64. Lo vamos a configurar para que sea, que sea esta carita roja. En cambio, cambiaremos nuestros textos para que sean un poco más pequeños, así que haremos como 14. Ahora nuestra imagen sigue siendo bastante. Ahí vamos. Queremos volver a cambiar su tamaño. Lo cambiamos a 64 por 64, así, y haremos nuestros textos un poco más pequeños, aún así, como 12. Y lo configuraremos para que sólo esté escribiendo, por ejemplo. Ahora quiero que mi texto esté en la esquina derecha, por lo que usará la alineación correcta. Y eso me parece bien. De nuevo, esto es solo un ejemplo rápido, solo mostrándote cómo podemos configurar un widget y luego arrastrarlo. Ahora nos dirigiremos de nuevo a nuestra ranura de rejilla. Y en el on drag detectado, en realidad necesitamos crear ese widget que acabamos de hacer. Y luego suministraremos eso a nuestra operación de arrastrar y soltar. Por lo que moverá estos a lo largo un poco. Y vamos a arrastrar hacia fuera y buscar crear widget. Y queremos poner al Jugador Propietario a la clase propietaria. Entonces buscaremos poseer Player, conectaremos eso y configuraremos la clase al widget de movimiento que acabamos de crear. Luego, a continuación, tomaremos nuestro valor de retorno de nuestra nota Crear Widget y conectaremos eso al visual de arrastre predeterminado. Y conectaremos nuestra operación Crear arrastrar y soltar al nodo devuelto. Y queremos utilizar el valor de retorno para proporcionar la operación a la devolución. Nota aquí. Ahora sí tenemos algunos pines adicionales en nuestra nota de operación de arrastrar y soltar aquí tenemos una clase. No voy a cubrir eso porque eso es mayormente C plus plus cosas y prácticamente siempre estarás usando la predeterminada de todos modos, puedes agregar algunas etiquetas. Por lo que al igual que en nuestra lección de etiquetas, podrías agregar un par de etiquetas diferentes a esto. Y luego en el otro extremo, cuando en realidad soltemos nuestro widget, digamos que otro widget podrá leer esas etiquetas. Y luego tenemos carga útil. Ahora la carga útil puede ser cualquier objeto que desee. Puede ser actor o lo que sea. Y ese objeto se puede usar para almacenar variables o funciones. Y de nuevo, tendremos acceso a esto en cualquier widget en el que soltemos la operación. Entonces podrías, si estás pasando información de este widget al widget en el que lo soltamos. Podrías incluir algunas etiquetas o incluso un objeto que solo tenga una tonelada de información que luego puedes leer en ese otro widget. Ahora por ahora, no vamos a estar usando estos porque están un poco más avanzados. Pero también tenemos una opción de pivote. Ahora esto es básicamente justo donde se bloqueará el widget cuando esté en nuestro mouse. Entonces si su centro, significa que nuestro mouse, si se quedó quieto, el widget estará alrededor de nuestro mouse con el mouse en el centro. Y a medida que lo arrastramos, el ratón siempre se quedará en el centro de nuestro movimiento, que a medida que nos movemos. Y aquí hay algunas opciones diferentes entre las que puedes elegir. Yo sólo voy a mantener mi centro de salud centro. Y luego tienes algunos offsets para que puedas agregar algunos offsets de píxeles. Entonces tal vez querías que el mouse estuviera en el centro del widget de movimiento, pero querías agregar, digamos, un desplazamiento de diez píxeles a la izquierda. Podrías hacer eso usando estos valores. Ahora actualmente este código no se ejecutará nunca. Y eso es porque en realidad necesitamos decirle al widget cuando hay algo siendo arrastrado. Entonces para hacer eso, en realidad necesitamos ir a la anulación y tenemos que bajar al botón del mouse hacia abajo. Ahora, esto se ejecutará cada vez que se presione el botón del ratón hacia abajo en la parte superior de nuestro widget. Entonces, para empezar, primero queremos comprobar qué botón del ratón se ha pulsado. Por lo que vamos a arrastrar fuera de aquí y hacer conseguir que afecte el botón. Y a partir de eso podemos realmente arrastrar hacia fuera y hacer los iguales. Y esto nos permite comprobar es este botón igual al botón que establecemos aquí. Así que sólo voy a hacer clic en el pequeño botón del teclado aquí y luego el ratón izquierdo. Por lo que lo establece en el botón izquierdo del ratón. Y añadiremos un nodo if. Por lo que va a hacer si así. Ahora podemos tener, si quisieras, si agregas código para el que quieres que se ejecute cuando el botón izquierdo del ratón haga clic en nuestra ranura de cuadrícula. Y el diferente código que se ejecuta cuando escribimos clic con el ratón, querrías agregar esto aquí que pudiéramos copiar y pegar este nodo, conectarlo hasta el botón de efectuar, y entonces podemos cambiar esto a ratón blanco. Entonces podríamos tener otro si, si se pulsaba el botón izquierdo del ratón que ejecutaría el verdadero pin aquí. Y si se apretó el botón derecho del ratón y la tropa, y aquí estamos borrachos. Y entonces podrías tener un código diferente dependiendo de cuál se presiona. Ahora porque solo quiero que mi operación de arrastrar y soltar se ejecute cuando salgamos con el botón izquierdo del ratón, vamos a estar agregando ese código aquí. Entonces vamos a arrastrar hacia fuera de true y vamos a buscar drag detect. Queremos detectar droga si se presiona, entonces necesitamos los eventos de puntero. Así que sólo vamos a agarrar el evento del ratón y conectar hasta el puntero de m. y luego la tecla de drogas, que va a hacer clic en el teclado y luego haga clic izquierdo para configurarlo al botón izquierdo del ratón como eso. Y este nodo es básicamente sólo va a detectar, es el ratón arrastrando actualmente nuestro widget. Y si lo es, queremos pasar eso al nodo devuelto y el valor de retorno al valor de retorno. Y esto es en realidad lo que va a causar están en arrastrar la función de texto para ejecutar y luego tener todo el código que hemos añadido aquí ejecutar también. Así que volviendo a usted con el botón del mouse hacia abajo, siempre queremos que todos los pines devuelvan un valor aquí que es importante para manejo del mouse y cosas por el estilo. Entonces lo que haremos es simplemente copiar una nota escrita, pegarla aquí abajo. Y tal vez cuando hacemos clic derecho en mi mouse en el widget, lo siento, queremos que suceda algo más, así que solo agregaré say, print string aquí. Podemos enchufar esto al valor de retorno, y luego copiará esto y pegará esto aquí abajo. Entonces si no es ni el izquierdo ni el botón derecho del ratón, tal vez sea el botón central del mouse, por ejemplo. Simplemente no queremos que pase nada. Ahora no queremos dejar estos pines de valor de retorno vacíos así. Tenemos que proporcionar un manejado o no manejado. Entonces si arrastramos hacia fuera y buscamos manejados, ahora, si devolvemos un handle que básicamente le dice al motor, Hey, hemos manejado la entrada del mouse. No dejes que otros widgets lo manejen. Así que no corras más eventos porque se ha pulsado el mouse. Así que podríamos usar eso para decir, este código en nuestro botón derecho del ratón pulsado, pero tal vez no para el nodo de aquí abajo. Para que podamos arrastrar y hacer sin manejar. Y eso solo le dice al motor, Hey, no hemos hecho nada con la entrada del mouse. Si algo más quiere usar esa entrada que permitírselo. Por lo que usamos no manejados aquí. Por lo que debería verse así. Ahora en realidad hay un cambio que necesitamos hacer diseñador. Entonces si nos dirigimos allá atrás, si lo recuerdas, agregamos un botón que básicamente estamos usando como fondo que nos permitió presionar este widget. Ahora necesitamos quitar este botón. Y la razón de eso es que los botones anulan el código que hemos agregado aquí. Así que si tuviéramos que estar presionando hacia abajo en este botón o en el botón del ratón hacia abajo, realidad no correríamos porque el widget de botón maneja eso en su lugar. Entonces, para quitar ese botón, en realidad es una forma muy fácil de hacer esto. Podemos simplemente hacer clic derecho en el widget de botón aquí y podemos bajar para reemplazar con, y hay una opción para reemplazar con niño. Y básicamente lo que hace eso es simplemente borra el botón y luego le decimos al overlay que lo reemplace. Por lo que vamos a ir a reemplazar por reemplazado con niño. Y puedes ver que nuestro botón se ha ido y estamos de vuelta a la superposición con todos sus widgets en su lugar. Ahora si lo desea, puede agregar un poco más de relleno de nuevo a la superposición. Entonces sólo voy a sumar digamos un cinco o diez en realidad, se ve un poco mejor. Tenemos un poco más de relleno ahora entre la superposición en el borde. Así que ahora podemos compilarlo y en realidad podemos probar esto. Acabamos de recibir una advertencia porque he eliminado ese botón. Simplemente podemos ir al Event Graph y se puede ver que todavía tenemos un evento de ese botón, así que solo podemos resaltarlo, eliminarlos, y ya no tendremos una advertencia. Entonces ahora en realidad podemos ir a jugar a probar esto. Por lo que le pegaremos a Play. Se puede ver que tenemos nuestros widgets están un poco apretados porque las cajas de desplazamiento un poco demasiado pequeñas, pero eso está bien. No tenemos que preocuparnos por eso en este momento. Si hacemos clic y arrastramos en uno de estos, se puede ver que en realidad nos aparece nuestro widget. Y tengo el control de mi cámara en este momento. Pero si le doy a Shift, se ve que puedo arrastrar y si lo dejo, desaparece. Ahora, actualmente no estamos haciendo nada con esta información de operación de arrastrar y soltar, pero ahora en realidad podemos arrastrar fuera de cualquiera de estos widgets. Y nos da nuestro pequeño widget de movimiento aquí también. Y si trato de arrastrar desde mi botón derecho del ratón, se puede ver que en realidad obtenemos que hola textos imprimir. Por lo que se está imprimiendo hola porque agregamos esa cadena de impresión hola al evento de botón de prensa. Entonces ahora tenemos configuración de arrastre. Queremos poder pasar información entre estos diferentes widgets. Entonces lo que haremos es exhalar planetas y volver a la cuadrícula de cadera lenta. Y vamos a crear una nueva variable, y llamaremos a esto tiene ítem. Y lo vamos a dejar como un tipo booleano y vamos a compilar. Entonces vamos a dirigirnos al diseñador y vamos a poner nuestro ícono carita aquí para que se oculte si el booleano es falso. Entonces iremos a la visibilidad aquí abajo, usaremos un aglutinante. Entonces sí crearemos encuadernación. Y aquí dentro vamos a regresar, si el artículo es falso, devolvemos que está oculto. Por lo que vamos a arrastrar hacia fuera desde el valor de giro. Hacer un selecto US tiene artículo como el índice. Y si el artículo es falso, queremos estar ocultos. Si es cierto, queremos que sea visible. Entonces podemos compilar eso. Ahora, si volvemos a jugar el juego, puedes ver que todos nuestros íconos de carita en realidad faltan ahora porque todos ellos por defecto no tienen ningún artículo. Entonces vamos a dirigirnos a nuestro HUD y en realidad vamos a cambiar el código aquí que la primera ranura siempre tenga su elemento tiene establecido en true. Por lo que vamos a arrastrar fuera de aquí y hacer una F. Queremos comprobar es el índice igual a 0. Y nos conectaremos hasta condicionar. Y si es falso, que conectan eso hasta aquí. Y si es cierto, queremos obtener el valor de retorno de nuestro nodo Crear Widget. Y queremos hacer set tiene artículo y vamos a configurarlo a true. Después conectaremos el extremo hasta de nuevo al nodo Add child así. Entonces todo lo que estamos haciendo aquí es que estamos revisando, ¿es este el primer índice del bucle? Si lo es, entonces configuramos que tiene item a true. Y si podemos tirar de esto y darle a Play, verás que ahora nuestra primera ranura tiene un ícono de carita, pero los demás no. Ahora a continuación queremos comprobar antes de hacer la operación de arrastre, ¿la sal de la que realmente estamos arrastrando tiene el elemento. Entonces vamos a X fuera de la cadera, volveremos a nuestra ranura de cuadrícula, e iremos al on mouse para tocar, arrastrar los textos, agregaremos un nuevo cheque, solo moveremos esto fuera del camino. Vamos a arrastrar y hacer si queremos comprobar si tiene artículo es cierto, entonces vamos a permitir que se cree la cooperación seca. Y si no, no haremos nada. Y podemos probar esto rápidamente también. Entonces le pegaremos a play y le pegaré a Shift para soltar mi mouse. Y se puede ver si arrastro de este tipo, en realidad no crea una cooperación seca. Pero si arrasto de este bazote, lo hace. A continuación, en realidad necesitamos almacenar una referencia a la ranura original de la que arrastramos. Porque cuando lo soltemos en otra ranura que no tiene el artículo, vamos a necesitar actualizar la ranura anterior que sí tenía el artículo para decirle que ya no tiene ese artículo. Por lo que necesitamos una referencia a esta ranura original. Entonces para hacer eso, actuaremos fuera de juego y vamos a pasar a la apuesta Move, luego al gráfico de eventos, y vamos a crear una nueva variable. Llamaremos a este viejo widget. Y vamos a establecer su tipo para que sea el widget de ranura de cuadrícula que creamos. Entonces ese es el mismo en el que hemos estado trabajando. Y lo establecemos en una referencia de objeto. Y vamos a tomar en el pequeño ojo aquí sólo para que sea instancia editable y vamos a compilar. Entonces vamos a volver al slop de rejilla. Aquí en el arrastre detecta, queremos establecer esa variable para el nuevo widget de movimiento que acabamos de crear. Entonces aquí podemos arrastrar hacia fuera, podemos hacer set viejo widget. Queremos configurar este viejo widget para que sea uno mismo porque estamos configurando nuestro yo para que sea el widget más antiguo. Entonces nos arrastraremos de eso y nos haremos uno mismo. Y conectaremos esto así, y luego compilaremos. Así que ahora necesitamos una función que se va a ejecutar cuando en realidad soltamos o arrastramos en la parte superior de nuestra ranura de cuadrícula. Así que nos dirigiremos a la anulación y queremos encontrar la función de caída aquí y vamos a crear eso. Ahora puedes ver que tenemos esas mismas entradas que teníamos para nuestras funciones anteriores, pero tenemos una nueva ahora llamada operación. Y esta es básicamente toda la información que proporcionamos desde el on drag detectamos toda la información que brindamos aquí podemos acceder ahora en el on drop. Entonces si arrastro hacia fuera y busco visual de arrastre, se puede ver que puedo obtener una referencia al visual de la droga, y esta es una referencia al widget que hemos enchufado aquí. Entonces usando eso, en realidad podemos arrastrar el costo al widget de movimiento porque el nuestro es un widget de movimiento. Si recuerdas cuando lo pusimos en la droga, este es el widget de movimiento. Entonces vamos a costar a eso. Y usando ese costo, en realidad podemos acceder al viejo widget, consigue viejo widget. Y eso nos da una referencia al widget del que originalmente arrastramos. Ahora también podemos acceder a las etiquetas y la carga útil para que podamos arrastrar fuera de la operación y hacer obtener etiquetas. Y eso nos da la variable tags y también las plaquetas. Si obtenemos carga útil, también podemos agregar acceso a esa referencia de objeto que podemos proporcionar aquí en el nodo Crear operación de arrastrar y soltar. Así que ahora volviendo a la función On drop, podemos eliminar estas variables porque en realidad no vamos a usarlas. Entonces se va a establecer los viejos widgets tiene elemento. Por lo que buscará set tiene item. Tenemos que establecer que en false porque ya no tiene el artículo que necesitamos para establecer R tiene item a true, también tiene item. Vamos a poner eso en verdad, así. Y conectaremos esto hasta que el valor de retorno asuma el valor de retorno porque hemos procesado nuestro código. Entonces qué vamos a hacer, cierto, y queremos conectar esto hasta nuestro costo aquí. Entonces podemos compilar esto y podemos probar esto. Entonces si vamos al mapa, dale a Play, voy a darle a Shift para soltar mi mouse. Si empiezo a arrastrar, pueden ver que tenemos funcionando nuestra operación de arrastrar y soltar. Si lo libero en otro calcetín y veo que ese slots ahora visible y tiene su elemento establecido true y el anterior se establece en falso. Podemos hacer esto con cualquiera de nuestras ranuras aquí, arrastrando esta nueva operación a los demás widgets. Si agarro mi widget y lo libero por aquí, digamos por ejemplo, sobre estos otros widgets, puedes ver que en realidad no pasa nada porque no hemos configurado funciones de caída para estos otros widgets. Entonces no va a pasar nada cuando en realidad liberemos la operación caída encima de ellos. Entonces eso es más o menos para esta lección. Esperemos que ahora entienda cómo puede crear operaciones de arrastrar y soltar con widgets y también cómo puede transferir información de un widget a otro usando el arrastre visual o la referencia del objeto de carga útil. 45. Planes de animación (descripción general): Oigan a todos. En esta sección del curso, vamos a estar echando un vistazo a los planos de animación. Ahora, Animation Blueprint. Entonces, ¿cómo le decimos a una Malla Esquelética qué animaciones queremos que reproduzca? Ahora, una malla esquelética suele ser una malla que ha sido amañada a un esqueleto en un programa de modelado 3D. Entonces una vez en el motor, podemos hacer que ese esqueleto reproduzca una animación y eso a su vez provoca que la malla se anime. Ahora en esta lección, solo te voy a llevar a través un resumen rápido del editor de Animation Blueprint, así como de la configuración de animación que viene con la plantilla de tercera persona. Ahora, antes de empezar, es posible que algunos de ustedes hayan estado siguiendo en las lecciones anteriores. Todo lo que he hecho aquí es crear una nueva plantilla en tercera persona. Por lo que tenemos un inicio limpio para esta sección del curso. Entonces, para empezar, vamos a dirigirnos al Animation Blueprint, que está dentro de la carpeta del personaje, luego maniquíes, animaciones. Se puede ver que tenemos un dinero y Quinn Animation Blueprint. Entonces en esta lección vamos a estar usando el dinero Animation Blueprint. Y la razón de eso es que el plano de animación de Quinn en realidad usa el dinero como sus planos padre. Por lo que toda la funcionalidad está en realidad dentro de nuestro dinero Animation Blueprint. Entonces eso lo abriremos. Y yo sólo voy a arrastrar el mío hasta la barra superior aquí así. Ahora ya puedes ver que actualmente estoy jugando a un editor, así que solo voy a dar clic en el pequeño botón de parada de aquí para detener eso. Y ahora hemos abierto nuestro plano de animación. Se puede ver que tenemos el Event Graph. Si el tuyo no está abierto, siempre puedes abrirlo aquí en la pestaña de arriba. O puedes hacer doble clic en el gráfico de eventos aquí para abrir nuestra animación. El gráfico de eventos es igual que cualquier otro gráfico de eventos que hayas usado y otros planos. Tenemos nuestro código aquí en nuestro gráfico de eventos. Tenemos nuestro panel Mi Blueprint donde podemos crear y encontrar nuestras funciones, variables, despachadores de eventos y macros. Ahora, el propósito principal de nuestro Event Graph dentro del Art Animation Blueprint es establecer variables que luego se usan dentro de nuestro gráfico Anim. Entonces para abrir eso, nos dirigiremos al panel Mi Blueprint aquí y doble clic y soy gráfica y eso nos llevará a nuestra gráfica Anim. Ahora bien, esto en realidad ha cambiado bastante desde la versión cuatro de Unreal Engine. Por lo que puede notar algunas diferencias si has usado en el motor ML para antes, pero vamos a empezar con sólo ir a la máquina de estado de locomoción aquí. Entonces haremos doble clic en eso. Se puede ver que tenemos un estado y estos son donde podemos configurar animaciones para que se reproduzca. Entonces tenemos un estado ocioso y luego tenemos un estado walk slash run. Si abrimos nuestro estado de inactividad, se puede ver que tenemos una animación aquí usando un reproductor de secuencia de animación Eso es en realidad la salida de una animación ociosa. Podemos ver qué animación está jugando en realidad por el nombre del nodo en la parte superior aquí. O si lo seleccionamos, podemos ir a secuencia y pasar el cursor sobre la entrada y se puede ver que dice MM, subrayado inactivo. También podemos dar clic en este pequeño navegar en el botón Navegador de contenido que nos llevará a la animación que se está utilizando allí. Podemos ver que esta es la animación que en realidad se está reproduciendo cada vez que nuestros personajes en este estado ocioso. Ahora, volviendo a nuestra máquina de locomoción, pueden ver que podemos hacer clic en la locomoción aquí arriba en la barra superior. Ahora en realidad llévanos allá atrás. También tenemos un estado walk slash run. Ahora si hacemos doble clic en eso para abrirlo, se puede ver que en realidad tenemos un tipo diferente de nodo que se está utilizando para reproducir animación, señor. Este es un nodo de espacio de mezcla y nos permite introducir una variable como un flotador, por ejemplo, y tener diferentes animaciones jugar dependiendo de ese valor de flujo diferente. Así que si seleccionamos este nodo y nos dirigimos a la secuencia o la opción de espacio de mezcla, lo siento, podemos ver que actualmente está configurado para BSIMM walk run, y este es el espacio de mezcla para nuestro caminar y correr animaciones. Podemos ir a eso ahora haciendo clic en el botón Browse to Content. Eso nos llevará al espacio de mezcla. Y si abrimos eso aquí arriba, ahora los espacios de mezcla nos permiten agregar múltiples animaciones juntas y hacerlas transición sin problemas entre sí usando una variable. Por lo que puedes ver aquí abajo tenemos un valor de velocidad que comienza en 0. Esta es la animación que se reproducirá cuando nuestro valor de velocidad sea 0. Y si sostengo Control y empiezo a mover el mouse, se puede ver que la velocidad de vista previa en realidad aumenta y empezamos a aumentar la velocidad de caminata de nuestras animaciones hasta llegar a este punto. Ahora este punto aquí está actualmente fijado para el caminar hacia adelante. Por lo que se puede ver cuando muevo el punto de vista previa aquí, nuestros personajes jugando una animación de paseo hacia adelante. A medida que lo sigo incrementando, empezamos a obtener esta animación en ejecución. Y a medida que lleguemos al final, se puede ver actualmente está configurado para la carrera, y eso es lo que nos jugarán cuando estemos fuera a la velocidad 500. Por lo que podemos usar esto para una transición sin problemas entre las animaciones de caminar y correr. Cuando regresamos a nuestro Blueprint de Animación, controlando qué animación se está reproduciendo en nuestro lado, nuestro espacio de mezcla usando esta variable de velocidad de desplazamiento que luego se conecta a este espacio de mezcla nodo. Y dependiendo de la velocidad que tengamos, saldrá una animación diferente a nuestra pose de salida aquí. Volviendo a nuestra gráfica Anim. Y yo sólo voy a dar clic en ellos. Agarra la barra superior aquí. Cualquier animación que salga de nuestra locomoción es entonces ingresada en este efectivo de locomoción. Ahora esto básicamente guarda la animación actual que está siendo producida por nuestra locomoción, para que podamos usarla más adelante. Ahora volviendo a la máquina del estado de locomoción, se puede ver que tenemos estas flechas que van entre nuestros dos estados. Ahora estas son reglas de transición y así es como comprobamos si deberíamos estar en estado ocioso. O el estado walk slash run. Así que si nos desplazamos sobre uno, se puede ver que tenemos esta variable que aparece en la punta de la herramienta. Y es básicamente sólo decir que esta regla se establece en la variable debe mover. Entonces, si esa variable es verdadera, entonces haremos la transición de nuestro estado ocioso a walk slash run. Y luego si me pasa el ratón por encima de la inferior aquí, es que lo mismo debe mover variable pero con un no. Entonces si esa variable es falsa, entonces haremos la transición de vuelta de Walk slash run al ídolo. Y podemos hacer doble clic en estos para ver realmente el código. puede ver que es sólo una variable conectada al resultado. Y entonces podemos hacer lo mismo con el código para el rol que va de andar al estado ocioso. Entonces si hacemos doble clic en eso, puedes ver que tenemos esa misma variable con un nodo de nudo y luego eso está enchufado al resultado. Ahora esto debería mover variable se establece dentro nuestro gráfico de eventos usando algún código y vamos a mirar en eso un poco más adelante. Pero si nos dirigimos de nuevo a la locomoción utilizando estos dos estados y estas dos reglas, elegimos si nuestro personaje debe o no estar jugando una animación ociosa o una animación a pie o corriendo. A continuación, sacamos ese valor del estado de locomoción al cajero de locomoción. Para que podamos usar esa animación más adelante. Ahora en nuestro gráfico Anim aquí, si pasamos al lado derecho, tenemos este nodo pose de salida. Ahora bien, esta es la animación que realidad veremos en el juego. Entonces cualquiera que sea la animación que se conecte aquí es lo que veremos cuando estemos jugando nuestro juego. Ahora, actualmente, estos dos nodos de aquí arriba no están realmente conectados a ninguna de esta cadena de aquí abajo. Pero si abrimos nuestra máquina de estado principal aquí, ahora nuestra máquina de estado de estados principales es exactamente la misma que nuestra máquina de estado de locomoción. Hacenlo mismo. Es sólo que nuestros principales estados, máquina de estado tiene diferentes estados insider. Y si echamos un vistazo al estado de locomoción aquí, si hacemos doble clic en eso, se puede ver que estamos usando una locomoción de pose de efectivo. Ahora esta es la pose de efectivo que establecemos en nuestra gráfica Anim. Entonces, si miras aquí arriba, lo estamos configurando aquí, y luego lo estamos usando en este estado de locomoción dentro nuestra máquina principal de estados. Así es como estos nodos de aquí arriba están realmente conectados al resto del código. Ahora, volviendo a la máquina principal del estado, se puede ver que tenemos algunos estados aquí arriba que en realidad no están conectados a nuestro estado aquí abajo. Ahora, la razón de eso está en Unreal Engine cinco, tenemos estos nuevos alias de estado, nodos, y estos nos permiten conectar estados sin tener realmente reglas que se conecten a ellos. Ahora tenemos dos alias aquí. Tenemos los dos cayendo y los dos aterrizan. Ahora puedes decir que es un alias por el pequeño ícono que hay en el lado izquierdo. El modo en que funcionan estos es si selecciono los dos alias que caen, por ejemplo, se puede ver por aquí en el panel lateral derecho, tenemos la locomoción en estados terrestres, tectónica. Ahora, tendrás una casilla para cada estado que exista en tu máquina estatal. Entonces tenemos uno para locomoción, que está aquí, salto que está aquí arriba, bucle completo que está aquí, y luego tierra que tiene aquí. Ahora si tuviéramos estados adicionales, también estarían listados también. Ahora, porque la locomoción y la tierra de ambos textos en este nodo correrán todas las reglas conectadas a él mientras estemos en la locomoción o en estos estados terrestres. Lo que significa que estas dos reglas aquí se correrán cada cuadro si actualmente estamos jugando el estado de locomoción o el estado de tierra. Y es lo mismo para el nodo terrestre R2 aquí. Este también es un alias y se puede ver que tiene el salto for-loop marcado, lo que significa que si estamos en el estado de salto o en el estado for-loop, entonces esta regla estará ejecutando cada frame. Y si en algún momento esa regla se hace realidad mientras estamos en cualquiera de estos estados. Entonces los dos terrenos nos transitarán de cualquiera de estos estados a nuestro paisaje. Y así es como estos estados de aquí arriba están conectados con los estados de aquí abajo. Ahora, sólo para cubrir las reglas que están pasando aquí mientras en estado de locomoción se está ejecutando y esto estará corriendo siempre que nuestro personaje esté ocioso o caminando o corriendo. Y eso porque si recuerdas, estamos usando ese caché de locomoción, que ha sido establecido por la máquina del estado de locomoción. Y eso tiene nuestras animaciones ociosas y nuestras caminatas slash run estando ahí sentadas. Entonces mientras ese estado de locomoción aquí está corriendo, las dos caídas estarán corriendo todas sus conexiones para ver si alguna de estas reglas es cierta. Y si en algún momento empezamos a caer, es caer se hace realidad, haremos la transición de la locomoción al for-loop. Y si estamos cayendo y hay una velocidad mayor a un 100 en la z. así que si estamos cayendo más allá de cierta velocidad, realidad usaremos el estado de animación de salto en lugar de simplemente ir al for-loop. Y entonces en realidad tenemos una regla que va entre nuestro salto y nuestro for-loop. Y esto solo comprueba, es nuestra animación de salto casi terminada. Y si lo es, entonces nos hará la transición de nuestro salto a nuestro for-loop. Y la razón por la que hace eso es porque tenemos esta opción marcada aquí, que básicamente solo comprueba es la animación que estamos comprobando. Casi terminado. Si lo es, entonces haremos la transición al estado que lo estamos comprobando. Ahora, en cualquier momento cuando estamos jugando o saltando o una animación for loop se queda. Esto a tierra también estará corriendo. Estará comprobando es, ¿es falso caer? Si lo es, entonces eso nos hará la transición de Eva, el for-loop, o salto a tierra, y luego de la tierra a nuestra locomoción de nuevo. Así que esos son los fundamentos de cómo funcionan en realidad nuestros principales estados, la máquina de estado. Si nos dirigimos de nuevo a nuestra gráfica Anim ahora. Salida donde sea la animación que estemos reproduciendo actualmente en nuestra máquina de estado. Entonces, si solo estamos en nuestro estado de locomoción, esto dará salida a nuestra animación de locomoción. Si dijéramos caer, jugaría nuestro for-loop. Entonces esa sería la salida que entraría en esto, que es una ranura de montaje. Ahora, tendremos toda una lección sobre montajes en el futuro. Pero esto es sólo una ranura que nos permite jugar un montaje. El montaje nos permite superponer una animación encima de nuestras animaciones de movimiento. Pero si actualmente no se está reproduciendo ningún montaje, todo lo que sucederá es que nuestras animaciones de movimiento irán a la ranura de montaje. Comprueba si se está reproduciendo un montaje. Si no, entonces simplemente pasa y no se hacen cambios. A menos que esté tocando un montaje. Entonces eso va de nuestra ranura de montaje a nuestra plataforma de control. Ahora, no voy a estar yendo demasiado en la plataforma de control en este curso puramente porque es un sistema masivo por sí solo, que podría tener un curso completamente separado, pero podemos ver que la plataforma de control está funcionando. Entonces seleccionaremos el nodo. Y en el panel Detalles desplácese hacia abajo, puede ver que tenemos una clase de plataforma de control. Aquí. Está ajustado al pie básico del maniquí IK. Y podemos encontrar esto haciendo clic en el navegador Browse to asset and content. Y podemos abrir ese control Rick, y se puede ver todo el código que está siendo manejado por esa plataforma de control. Ahora otra vez, no voy a estar pasando por todos estos nodos porque la plataforma de control es un sistema bastante avanzado. Pero básicamente lo que hace esto es que hace nuestra colocación del pie por nosotros. Te puedo dar un ejemplo rápido de lo que quiero decir. Entonces tocaremos a un editor. Y si atropello a esta rampa y me pongo uno en los pies en alto, se puede ver que el pie en realidad aumenta su altura porque la altura del suelo es más alta en ese punto. Eso es solo una visión general rápida de lo que hace la plataforma de control en este plano aquí. Y todo este código está sucediendo dentro de esta nota de plataforma de control aquí. Por lo que toma en nuestras animaciones de movimiento, aplica esas nuevas posiciones de pie para la altura del suelo. Y luego eso lo saca en nuestros posts de salida aquí para nuestra animación final que vemos en juego. Ahora que hemos estado pasando por el gráfico Anim, es posible que hayas notado algunas variables como R está cayendo variable aquí, toda la velocidad de tierra dentro del estado de carrera de barra de paseo. Estas son solo variables normales que luego se establecían dentro de nuestro gráfico de eventos. Para que podamos usarlos en nuestra gráfica Anim. Entonces si nos dirigimos al Event Graph ahora con solo hacer clic en eso en el panel Mi Blueprint, como pueden ver, estamos diciendo algunas de esas variables que usamos en la gráfica Anim. Entonces tenemos nuestra velocidad de tierra aquí, eso es solo obtener la velocidad de nuestro componente de movimiento. Después convertimos eso en un flotador y lo ajustamos a la velocidad del suelo. Tenemos otra variable llamada should move, que determina si debemos ser un estado de animación ídolo o nuestro estado de animación walk slash run. Y luego tenemos r está cayendo variable aquí abajo, que sólo utiliza los componentes de movimiento es variable descendente que está incorporado. Y luego tomamos eso y lo ponemos a la variable is falling. Y estos están todos establecidos por el evento de aquí llamado evento Blueprint update animation. Esto ejecutará cada frame y actualizará estas variables según sea necesario. Entonces aquí arriba tenemos el blueprint inicializar animación. Ahora esto se correrá de forma similar a un start play notas. Por lo que esto se ejecutará cuando comience el juego o cuando se cree nuestro blueprint de animación. Eso sólo consigue el actor propietario, que suele ser el plano del personaje. Causamos a la variable de carácter del blueprint del carácter. Y luego también obtenemos su componente en movimiento de caracteres y lo establecemos como una variable para que podamos usarlo aquí abajo para establecer estas variables. Ahora te mostraremos dónde establecemos en realidad qué Animation Blueprint usan nuestros personajes. Nos dirigiremos al ThirdPersonCharacter. Entonces para hacer eso, iremos al Navegador de Contenido, luego a planos en tercera persona se abrirá el Blueprint Third PersonCharacter. Después podemos seleccionar el componente de malla por aquí en el panel Componentes. Y si hacemos doble clic en él, nos llevará a la ventanilla. Ahora sobrecalentamiento y el panel Detalles. Siempre y cuando el modo de animación esté configurado para usar el blueprint de animación, debes tener esta opción Anime Class. Y se puede ver aquí que actualmente está configurado para el ocho BP Quinn Animation Blueprint. Por lo que si querías cambiar eso, solo tienes que hacer clic en el desplegable aquí y encontrar tu nuevo Blueprint de Animación. Hay bastantes que están integrados en el motor, pero normalmente no estarás usando ninguno de estos. Usarías decir por ejemplo, nuestro plano de animación de dinero o nuestro Quinn uno aquí. Entonces, por último, como nota al margen, tal vez en el futuro creas un personaje de PNJ que en realidad no se mueve a ninguna parte, y solo quieres que reproduzca una sola animación. Puedes hacerlo seleccionando el modo de animación aquí para usar el activo de animación. Y luego puedes establecer una sola animación que quieras que reproduzca sin tener que tener un plano de animación completo. Pero para los personajes de los jugadores, prácticamente siempre vas a querer que esto se establezca para usar el blueprint de animación. Y quieres asegurarte de que la Clase Anime esté definitivamente establecida en tu plan de animación. Entonces para nosotros, esa es la ABP Quinn aquí. Entonces eso es todo por esta lección. No te preocupes demasiado si no lo entiendes todo. En nuestras próximas lecciones, vamos a entrar en cada sistema con mucho más detalle. 46. Planes de animación (Montages): Oigan a todos. En esta lección vamos a estar echando un vistazo a los montajes de animación. Montajes de animación, o cómo le decimos a nuestro blueprint de animación, la animación específica que queremos que reproduzca. Entonces, por ejemplo, si tu personaje fuera a recargar o balancear un arma cuerpo a cuerpo, usarías montajes de animación para reproducir esas animaciones. Ahora en esta lección sobre algunas de nuestras futuras lecciones, voy a estar usando animaciones que en realidad no están incluidas en la plantilla de tercera persona. En la descripción de la clase, pondré un enlace para descargar las animaciones que utilizo en esta lección y también nuestras futuras lecciones. Una vez que hayas descargado y extraído esos archivos, deberías terminar con una carpeta que se vea así. Ahora vamos a agregar estos archivos a nuestros proyectos. Por lo que vamos a hacer clic en el editor aquí, haga clic derecho en nuestra carpeta de contenido e ir a mostrar en Explorer. Esto nos mostrará una carpeta de contenido. Y queremos mover nuestras animaciones de lecciones aquí a la carpeta de contenido así. Ahora puedes ver que eso se muestra dentro de nuestro navegador de contenido. Ahora, si lo abrimos, si las animaciones no están ahí, no te preocupes. Todo lo que necesitas hacer es cerrar y luego volver a abrir el proyecto. Por lo que ahora he reiniciado mi proyecto. Y se puede ver dentro de las animaciones de la lección, todas nuestras animaciones se están mostrando correctamente ahora. Ahora sólo vamos a estar usando una de estas animaciones en esta lección. Esa va a ser la animación de recarga. Entonces si en la carpeta de animaciones de lecciones buscas recargar, verás que tenemos una animación de recarga. Ahora vamos a usar esto para crear un montaje. Para ello, haremos clic derecho y subiremos a Crear, luego seleccionaremos Crear y un montaje. Y sólo vamos a mantener el mismo nombre. Por lo que sólo voy a presionar Enter. Ahora tenemos un nuevo montaje. Ahora bien, si abrimos nuestro montaje de animación, se puede ver que en realidad se ve bastante similar a una secuencia de animación. Yo sólo voy a arrastrar el mío hasta aquí arriba así. Ahora la principal diferencia es que tenemos esta ranura de montaje y una toma de montaje es cómo le decimos al Animation Blueprint qué montaje queremos jugar. Entonces, si nos dirigimos a nuestro plano de animación de dinero, si recuerdas que está en los personajes, nos desharemos de esta búsqueda, iremos a la animación de maniquíes y abriremos un dinero de BP. Entonces dentro de nuestro gráfico Anim, si te acuerdas, tenemos esta ranura y actualmente está establecida en ranura predeterminada. Ahora bien, si echamos un vistazo atrás a nuestro montaje de recarga, esto también está configurado como swap predeterminado. Ahora esto significa que si tuviéramos que jugar nuestro montaje de recarga, I Animation Blueprint lo podría reproducir. Ahora actualmente nuestro montaje y nuestra ranura de montaje dentro de nuestro plano, o ambos usando la misma pendiente. Pero si seleccionamos la ranura aquí en el panel Detalles, puede hacer clic en el abajo y ver que en realidad hay bastantes tipos diferentes incluidos con la plantilla de tercera persona. Ahora bien, si tuviéramos que cambiar esta ranura para usar una ranura diferente y jugar, nuestro montaje. El montaje ya no se jugaría porque tendría una ranura diferente a la ranura de aquí. Ahora la razón principal por la que podemos tener múltiples slots es porque en realidad puedes tener un personaje jugando más de un montaje al mismo tiempo. Pero cada ranura sólo puede jugar un montaje. Entonces es por eso que podemos tener múltiples slots y tener montajes asignados a diferentes slots. Pero para esta lección, sólo vamos a estar apegándonos a las ranuras predeterminadas. Por lo tanto, asegúrese de mantener este conjunto de diapositivas en la opción predeterminada hip. Y de vuelta en nuestro montaje se asegura de que la ranura predeterminada y el nombre de la ranura estén marcados aquí. Entonces ahora en realidad vamos a escribir algún código para reproducir nuestro montaje. Así que nos dirigiremos al Navegador de Contenido, iremos a la carpeta de blueprint en tercera persona, luego abriremos el Blueprint de ThirdPersonCharacter. Y aquí podemos agregar un poco de código que le diga nuestra malla de personajes que realmente reproduzca un montaje. Entonces haremos clic derecho. Voy a buscar el evento de entrada uno, y crearemos esa entrada de ellos. Entonces vamos a agarrar nuestro componente de malla aquí, arrastrar fuera de eso y buscar el montaje de juego. Y eso nos va a crear este nuevo nodo aquí. Ahora te llevaré a través de algunas de las entradas y salidas de este nodo. Empezar con, tenemos montaje para jugar. Aquí es donde le decimos qué montaje queremos tocar. Entonces vamos a seleccionar nuestro montaje de recarga aquí. Tenemos al dramaturgo. Entonces, si esto se establece en uno, la animación se reproducirá a su velocidad normal. Pero si nos pusiéramos a decir a la animación se reproduciría el doble de rápido. A continuación tenemos posición de inicio ahora esto te permite establecer la hora exacta en la que quieres que el montaje comience a reproducirse. Entonces, por ejemplo, si tuvieras un montaje largo de 10 segundos y quisieras comenzar a los dos segundos, entonces pondrías la posición inicial en dos. A continuación, tenemos la sección de inicio. Ahora voy a explicar esto un poco más adelante en la lección. Entonces nos saltaremos esto por ahora. Entonces para las salidas tenemos la salida de ejecución normal. Esto se ejecutará tan pronto como el nodo haya terminado de ejecutarse. Entonces tenemos inconclusos. Ahora esto realmente se ejecutará cuando termine la animación. Entonces tenemos en blend out. Ahora una cosa genial de los montajes es que se mezclan dentro y fuera cuando los tocamos. De modo que obtienes una transición suave de la animación original que estabas jugando al montaje. Y luego cuando el montaje esté casi terminado, hará la transición hacia atrás a tu animación original. Y este blend out se ejecutará cuando la animación comience la transición hacia fuera. Cubre un poco más sobre las transiciones en un momento, pero siguiendo adelante, nos hemos interrumpido. Y esto correrá si cancelamos o dejamos de tocar nuestro montaje. Y voy a explicar cómo podemos hacer eso un poco más adelante en la lección. Entonces, por último, tenemos algunas salidas de ejecución de notificación y un nombre de notificación. No voy a estar cubriendo notifica en esta lección porque en realidad tendremos una lección entera solo para notifica. Entonces vamos a saltarnos esto por ahora. Así que ahora terminaremos de configurar nuestro código para reproducir realmente tu animación. En realidad voy a crear una nueva variable. A esto lo llamaremos recarga. Simplemente voy a usar esto para que si enviamos spam a la entrada, no reinicie nuestro montaje una y otra vez. Entonces lo que haremos es que primero comprobaremos que está recargando verdadero. Y si no es cierto, entonces configuraremos la recarga en true así. Y conectaremos esto hasta el montaje de la obra. Entonces queremos establecer la recarga en false. Cuando IVR, se termina de reproducir la animación de recarga o se interrumpe así. Ahora estamos listos para probar realmente esto, así que compilaremos y le pegaremos a Play. Y ahora cuando presiono uno en mi teclado, en realidad no pasa nada. Ahora la razón de eso es cuando importamos en nuestras animaciones de lección, realidad vinieron con su propio esqueleto. Ahora bien, a pesar de que ambos esqueletos son exactamente iguales, ahora hay dos activos de esqueleto en nuestro proyecto, uno que usan nuestros personajes, uno que nuestras nuevas animaciones están usando. Si exhalamos, tenemos editor llano y vamos a las animaciones de la lección, abrimos maniquí, luego ir a mallas. Ya verás que tenemos maniquí SK. Ahora este es el esqueleto o menos que la animación. Entonces usando, pero si vamos a la carpeta Characters, luego a mannequins mallas, verás que tenemos otro maniquí SK. Ahora este es el esqueleto que son personajes que usan mallas. Es por esto que nuestras animaciones sobre el juego, pero hay una nueva característica y ropa interior en Jim cinco llamados esqueletos compatibles. Entonces si vamos al esqueleto aquí dentro de nuestra carpeta de personajes, abrimos eso, vamos a las ventanas y queremos encontrar los detalles del activo y asumir eso. Ahora aquí puedes encontrar esqueletos compatibles. Entonces vamos a agregar una nueva entrada. Aquí vamos a seleccionar el desplegable. Vamos a encontrar el esqueleto que está en nuestra lección de animación. Entonces si pasas el cursor sobre, puedes ver que dice menos que animaciones, maniquíes recortados cortan mallas. Entonces vamos a dar clic en ese. Entonces vamos a ahorrar. Ahora todas las animaciones que funcionan para nuestra lección. Esqueleto de animación trabajará con nuestro personaje. Entonces si volvemos al nivel aquí, dale a play. Ahora cuando presione uno, verán nuestros montajes tocando muy bien. Si me spam uno, se puede ver que en realidad no va a volver a jugar el a montaje hasta que terminamos de jugar el montaje original. Y eso por el booleano que montamos para detener que eso sucediera. Ahora una cosa que podrías notar es mientras estamos tocando el montaje, o los pies en realidad no se mueven con nuestro cuerpo. Todo está tocando ese montaje. Ahora, en nuestra siguiente lección, vamos a ver en la mezcla de huesos y eso nos permite separar partes del cuerpo unas de otras. Entonces, por ejemplo, mientras jugamos nuestra animación de recarga, podemos tener las piernas. Podrán reproducir las animaciones de movimiento y estaremos cubriendo eso en la siguiente lección. Ahora otra cosa que podrías notar es que si nos acercamos a la rampa aquí, puedes ver que mis piernas arriba en la rampa. Y si presiono uno, se puede ver que las piernas siguen levantadas y la rampa, pesar de que ese montaje se está apoderando de todo el cuerpo. Ahora la razón por la que esto está sucediendo es porque nuestro montaje aquí se juega antes de que se aplique la plataforma de control. Por lo que aquí se juega el montaje. Después aplicamos la plataforma de control, que se ocupa de la colocación del pie, y luego sacamos la pose final. Entonces es por eso que nuestras animaciones de movimiento están siendo tomadas por el montaje, pero la colocación del pie no lo es. Entonces si yo fuera a mover mi ranura por defecto aquí por un momento, dos, frente a mi plataforma de control así. Y conecta todo esto. Ahora cuando compilo, le pego a Play, si atropello a la rampa, se puede ver que mi colocación de pie sigue funcionando, pero si presiono uno, se puede ver que deja de funcionar mientras estoy tocando un montaje. Por lo que sólo volverá a nuestro Blueprint de Animación y establecerá esta copia de seguridad como fue. Entonces solo moverá esto hacia adelante por aquí, conectará esto y conectará nuestro respaldo de montaje aquí. Así. Si alguna vez quiso agregar una nueva ranura de montaje a su gráfico anim, puede simplemente hacer clic derecho en la búsqueda de ranura, desplazarse hacia arriba aquí. Puede usar ranura predeterminada de ranura, luego seleccionarla. Y si querías usar un nombre de ranura diferente, puedes cambiarlo aquí arriba. Pero por ahora sólo podemos eliminar ese nodo y compilar nuestro gráfico de animación. Ahora, los montajes también tienen otras características. Podemos agregar múltiples animaciones a un montaje. Entonces por aquí, tenemos el navegador de activos. Si no tienes el tuyo que siempre puedes subir a Window y asumir el navegador de activos aquí. Ahora, usando el navegador de activos podemos arrastrar en animaciones para usar con nuestro montaje. Entonces por ejemplo, podríamos usar el rifle son cadera ociosa lejos. Sólo arrastraremos eso. Ahora puedes ver que tenemos ambas animaciones en nuestro montaje. Ahora actualmente ambos están configurados para usar la sección por defecto. Entonces lo que va a pasar es la recarga o el juego del rifle, y entonces nuestra animación ociosa del rifle se jugará. Pero al usar secciones, en realidad podemos dividir nuestro montaje en diferentes secciones y reproducirlas de manera diferente. Entonces para hacer esto, podemos hacer clic derecho en la barra en la parte superior aquí y hacer clic en nueva selección de montaje. Y podríamos llamar a esto una sección de bucle. Ahora obtenemos esta línea morada y en realidad podemos elegir dónde comienza esta sección. Entonces si pongo esto decir aquí, nuestra sección ahora para la sección de bucle es toda esta área aquí. Y entonces nuestra sección por defecto es toda esta área aquí. Ahora actualmente todo lo que sucederá es nuestra sección predeterminada se reproduzca y luego se reproduzca nuestra sección de bucle. Pero si nos dirigimos a las secciones de montaje aquí, se puede ver que tenemos algunos controles sobre cómo podemos jugar estas diferentes secciones. Ahora de nuevo, si no tienes estas secciones de montaje, puedes subir a Windows y marcar eso aquí. En este momento, puedes ver que actualmente está reproduciendo la sección predeterminada. Después pasará a la siguiente sección, que es nuestra sección de bucle. Yo sólo voy a hacer mi ventana un poco más grande aquí. Se puede ver que el botón en realidad ahora está en el lugar correcto. Ahora bien, si quisiéramos, podríamos tener estas secciones completamente separadas. Si hacemos clic en esta flecha de aquí y hacemos eliminar enlace, puedes ver que ahora estas son dos secciones separadas, por lo que solo nuestra sección por defecto la jugaremos ahora. Porque le hemos dicho que no haga nada después de que termine de tocar. Ahora si quisiéramos que volviera a reproducir nuestra sección loop siendo click this little box and do loop section. Y ahora se va a reproducir nuestra sección de bucle después de que la sección por defecto esté terminada. Ahora también podemos hacer bucles de secciones. Así que si hacemos clic en este cuadro junto a nuestra sección de bucle aquí, podemos seleccionar la sección de bucle de nuevo, y eso hará que nuestra sección de bucle aquí sólo bucle una y otra vez. Así que una vez que nuestra sección de bucle por defecto termine, vamos a jugar y esto sólo va seguir bucle una y otra vez. Como puedes ver ahora. Ahora esto en realidad puede ser útil para diferentes cosas. Digamos por ejemplo, que estabas haciendo una animación de recarga para una escopeta. Ahora, por lo general se pueden cargar balas individuales en una escopeta. Entonces tal vez cuando estás jugando recargas, sólo faltan dos balas de la escopeta. Solo querrías que la sección de bucle se ejecutara dos veces por poner la bala dos veces. Pero tal vez a veces cuando el personaje se recarga, necesitan meter seis balas. Por lo que ahora necesitas una sección de bucle para correr seis veces. Ahora podemos hacer esto con la sección de bucle y usando blueprints para controlar cuántas veces se ejecuta. Así que si nos dirigimos de nuevo al Third PersonCharacter, te mostraré algunos de los nodos que podemos usar para controlar realmente las diferentes secciones que son montaje se va a reproducir. Entonces volveremos al personaje en tercera persona aquí y empezaremos con, si lo recuerdas, tenemos estas sección de inicio. Ahora, si quisiéramos, podríamos simplemente tener nuestro montaje jugar esa sección de bucle de inmediato en lugar de jugar primero la sección por defecto, podríamos bucle sección aquí. Ahora si lo compilamos y jugamos, ya ni siquiera reproduciría la recarga. Por lo que presionará uno y se puede ver que simplemente salta esa sección por defecto e ir directamente a nuestra sección de bucle. Entonces podemos regresar a nuestro ThirdPersonCharacter aquí. Ahora para tener acceso a nuestras diferentes funciones de montaje, necesitamos obtener una referencia a nuestro blueprint de animación. Para ello, arrastraremos desde los componentes de malla, buscaremos, por ejemplo, y usaremos el nodo get anime instance. Ahora, esto nos da una referencia al Blueprint de Animación que estamos usando. Entonces para nosotros ese es el dinero de la ABP. Ahora bien, si me arrasto, en realidad solo puedo obtener variables que existen en este blueprint. Para ello, necesitaríamos costar a ello. Por lo que podríamos costar dinero a ABP. Entonces a partir de eso podríamos obtener variables que se almacenan dentro de eso o funciones si quisiéramos. Por ejemplo, get debe moverse. Esa es una variable que existe dentro nuestro plano de animación aquí. Pero para controlar nuestros montajes, en realidad no necesitamos costar porque estas funciones están integradas en todos los planos de animación. Por lo que podemos eliminar estas funciones por ahora, y podemos arrastrar hacia fuera desde el valor de retorno y buscar el montaje. Y esto nos dará acceso a todas las diferentes funciones que se pueden utilizar para controlar los montajes. Ahora uno de los nodos más utilizados con secciones es el salto a la nota de sección. Entonces si creamos eso, se puede ver que obtenemos una entrada de nombre de sección. Entonces aquí es donde pondríamos a qué sección queremos que cambie nuestro montaje. También podemos especificar un montaje. Ahora bien, si aquí no especificamos un montaje, lo que sucederá es si tienes varios montajes jugando al mismo tiempo, y todos tienen los mismos nombres de sección. Cambiará todos sus montajes a esa sección que le ponemos. Ahora si solo quieres que le pase a un montaje, digamos nuestra recarga de rifle, solo especificaríamos el montaje lo, queremos que suceda también, para que podamos seleccionarlo aquí. Y ahora sólo cambiaremos esta sección para este montaje. Para que pudiéramos montar una demostración rápida. Si hacemos clic con el botón derecho en busca de entrada. Agregaremos eso y llevaremos el enchufe presionado esto al montaje saltó a sección. Y vamos a cambiar esto a default. Por defecto así. Ahora cuando compilamos y presionamos Play, si presiono uno para jugar, nuestro montaje puede ver que solo está saltando directamente a la sección de bucle. Pero si presiono también, tú en C, realidad ahora está reproduciendo la sección por defecto. Ahora hay muchas otras cosas que podemos hacer con estas funciones. Entonces si nos dirigimos de nuevo al Third PersonCharacter y eliminamos este montaje, saltamos a la sección. Podemos arrastrar hacia fuera y buscar al tacto. No voy a estar pasando por todas estas. La mayoría de ellos son bastante autoexplicativos. Y si necesitas una punta de herramienta, simplemente pasa el cursor sobre y te da una explicación bastante buena de lo que hacen. Pero uno importante es detener el montaje. Y esto nos permite decirle a un montaje que deje de tocar. Entonces si hacemos clic en detener el montaje aquí, obtenemos un nodo que nos permite establecer el tiempo de salida de mezcla. Entonces tal vez solo quieres que el montaje se detenga al instante aquí. Podrías establecer esto en 0 y el montaje se detendrá por completo al instante. O tal vez querías que se difuminara lentamente. Podrías poner un tiempo aquí y poco a poco se irá mezclando de ese montaje. Ahora otra vez, se puede establecer un montaje aquí. Si no lo haces, simplemente detendrá todos tus montajes que se están reproduciendo actualmente. Si lo haces, solo puedes especificar qué montaje quieres que se detenga. Entonces si conectamos esto hasta nuestras dos entradas aquí, le hemos dicho que detenga el montaje de recarga. Entonces compilaremos, le pegaremos a Play, presionaremos uno para tocar ese montaje. Y si presiono para, it, al instante se detiene plan de montaje. Ahora, por último, quería mostrarte cómo puedes ajustar los tiempos de mezcla y mezcla para tus montajes. Para que podamos probar esto. Vamos a ir a nuestro montaje aquí, y en realidad voy a eliminar nuestra sección de bucle y eliminar esta animación también. Así que tenemos la recarga ahora jugando por aquí en nuestros detalles de activos. Y de nuevo, si no tienes esto, solo puedes ir a Window y encontrar detalles de activos para tomarlo. Tenemos los tiempos de mezcla y mezcla. Ahora bien, cuanto más altos sean estos valores, más tardará la animación en mezclarlos completamente y luego se difuminen completamente. Entonces si tuviera que configurar estos para decir 00 así, volveremos a nuestra plantilla de tercera persona aquí. Sólo me voy a deshacer de esta sección de estilismo. Y no vamos a detener el montaje, que es un poco dejar que termine por sí solo. Entonces le pegaremos a play. Y si presiono uno, verán que empieza al instante. No hay transición una herramienta, y termina al instante también. Entonces presionaremos uno y verás que termina y empieza muy rápido. Pero si queremos transiciones más suaves en nuestra animación, podemos aumentar estos valores. Así que diga 0.30.3 aquí también. Si retrocedemos, presionamos Play, y ahora cuando presiono uno, verás que transita mucho más suavemente hacia y desde la animación. Entonces estas son configuraciones que probablemente usarás bastante con montajes, porque si tienes un montaje rápido, posible que desees que los tiempos de transición de entrada y salida sean más cortos. Y si tienes un montaje largo, tal vez quieras unos más largos. Lo último que quería cubrir fue el gerente de la tienda de anime. Entonces si x fuera de plano editor aquí y abrimos nuestro maniquí SK, luego ir a Windows y abrir el administrador de tragamonedas de anime que traerá a colación el administrador de tragamonedas de animación. Ahora, aquí es donde podemos agregar nuevas ranuras o eliminar o cambiar el nombre de las ranuras existentes. Ahora usted puede notar que el nombre que se muestra aquí arriba son en realidad el mismo nombre. Tan afilado cuando seleccionamos el slop, sin punta. Estas son las ranuras que se definen en nuestro esqueleto. Entonces aquí es donde en realidad manejamos todas esas ranuras. Ahora algo a tener en cuenta con slots y grupos es un grupo solo puede tener un montaje jugando a través de todas sus ranuras a la vez. Entonces, por ejemplo, si la ranura de montaje de cuerpo completo estaba jugando un montaje, y luego tocaba otro montaje usando la ranura superior del cuerpo que en realidad cancelaría el montaje de cuerpo completo. Y la razón de ello es que ambos en el mismo grupo. Entonces, si quisiera que mi montaje de cuerpo completo y mi montaje de la parte superior del cuerpo pudieran jugar al mismo tiempo, necesitaría mover mi ranura superior del cuerpo a un grupo diferente. Por lo que podría o bien crear un nuevo grupo o moverlo a uno existente. Si desea mover una ranura a un grupo existente, puede simplemente hacer clic derecho, configurar un grupo de cuerpos dos, y eso le dará una lista de todos los grupos existentes que puede mover esa ranura dos. Ahora eso es todo por esta lección, pero estaremos usando montajes mucho más en nuestras futuras lecciones también. 47. Planes de animación (mezcla de nodos): Oigan a todos. En esta lección vamos a estar echando un vistazo a los nodos de mezcla. Ahora los nodos de mezcla nos permiten reproducir múltiples animaciones en nuestro personaje al mismo tiempo. También nos permiten utilizar variables para controlar qué sección de nuestra gráfica Anim se está reproduciendo. Así que antes de empezar, voy a estar reutilizando algunas de las cosas que montamos en nuestra última lección, la lección de montajes. Y si recuerdas de esa lección cuando golpeamos play y presionamos uno para reproducir realmente nuestra animación, si empezamos a movernos, nuestra mitad inferior de nuestro cuerpo no se mueve. Y eso es porque recargo animación en realidad está ocupando todo el cuerpo. Así que hoy vamos a estar usando un blend know para dividir nuestro cuerpo por la mitad para que podamos tener nuestras animaciones de movimiento reproduciéndose en la mitad inferior mientras la animación de recarga se reproduce en la mitad superior. Entonces empezaremos saliendo del editor de planes. Después nos dirigiremos a nuestro gráfico de animación. Entonces iremos a personajes que maniquíes, animaciones, y abriremos el plano de animación de dinero ABP. Ahora mismo aquí en nuestro gráfico de animación, lo que está sucediendo es que nuestra máquina de estado de locomoción está emitiendo ya sea un ídolo o animación de carrera. Estamos guardando en caché esa animación en este nodo de pose de locomoción luego dentro de nuestra máquina de estado principal o estado de locomoción como jugando. Y eso es sólo jugar lo que cacheamos en el efectivo de locomoción. Entonces si nos dirigimos de nuevo a la gráfica Anim, esa locomoción guarda en caché la salida de nuestra máquina de estados principales en esta ranura de montaje. Y si recuerdas del montaje es lección, esto es lo que en realidad está jugando nuestro montaje. Ahora, una vez que se le haya dicho que se reproduzca el montaje, esto en realidad solo generará nuestra animación de montaje. Ya no se va a jugar son ociosos o ejecutando animaciones. Luego, por último, entra en nuestro equipo de control y es por eso que nuestra colocación del pie en realidad todavía funciona cuando estamos tocando el montaje, porque esto sucede después el montaje se ha enseñado a jugar, y luego sacamos la pose final. Así que básicamente lo que tenemos que hacer es aquí que necesitamos agregar un modo de mezcla que nos permita mezclar la mitad superior del cuerpo tocando la bazoleta de montaje y la mitad inferior del cuerpo tocando el locomoción en efectivo. Entonces para hacer eso, vamos a hacer clic derecho y buscar la mezcla PER. Queremos una mezcla en capas por hueso así. Entonces ahora necesitamos conectar esto. Yo sólo voy a mover estos nodos hacia atrás un poco así. Y arrastraremos este nodo aquí y desconectaremos estos dos nodos. Yo sólo estoy sosteniendo Alt y luego haciendo clic menos pluma aquí. Entonces primero tomaremos el pin de salida y simplemente conectaremos esto a nuestra plataforma de control así. Vamos a subir estos. Ahorala entrada de pose base aquí va a ser las animaciones que se reproducirán en la mitad inferior de nuestro cuerpo. Entonces en realidad no queremos que este sea el efectivo de locomoción porque eso no tendrá nuestras animaciones de salto. Necesitamos un efectivo de nuestros principales estados. Entonces para hacer eso, vamos a desconectar la ranura aquí, mueve esto hacia abajo. Rastreamos desde pilares. Voy a buscar dinero en efectivo y clic en Nuevo, guardar pose de efectivo. Y podemos seleccionar este nodo y llamarlo como quieras. Voy a llamar al mío, dicen principales estados, efectivo así. Entonces los voy a mover aquí arriba. Entonces están un poco más fuera del camino. Entonces compilaremos. Ahora, no te preocupes que hemos entrado en una T-Pose aquí o que tenemos una nota aquí Eso es solo porque en realidad no tenemos ninguna viñeta de enchufe de animaciones. Entonces ahora estamos en caché o pose de pilar. Podemos arrastrar hacia fuera de nuestro cartel base, buscar principal. Y podemos usar la pose de uso cacheada, pilar efectivo así. Entonces queremos copiar esto, pegarlo. Y ahora queremos enchufar eso a la fuente de nuestra ranura y enchufar eso en la pose de mezcla es 0. Ahora la pose de mezcla es 0, o van a ser las animaciones que se reproducen en la mitad superior de nuestro cuerpo. Ahora, todo lo que estamos haciendo aquí es que estamos recibiendo nuestra animación base. Por lo que nuestras principales animaciones de estado, esta es nuestra Idle run and jump animaciones. Estos siempre se jugarán en la mitad inferior de nuestro cuerpo. Y luego para la mitad superior de nuestro cuerpo, estamos diciendo, si estamos tocando un montaje, usa el montaje para la mitad superior. Pero si no estamos tocando un montaje, solo queremos usar esas mismas animaciones principales en efectivo del estado. Por lo que de nuevo, Idle ejecutar y saltar animaciones. Por lo que ahora podemos compilar sólo para deshacernos de esta nota aquí y se puede ver que nuestras animaciones están planeando de nuevo. Pero en este momento, nuestra animación es en realidad no se va a dividir como queremos. No se dividirán en el medio. En realidad necesitamos configurar eso en la configuración de capas aquí. Entonces, si seleccionamos el nodo, vaya a Configuración de capas, luego haga clic en estos pequeños desplegables. Se puede ver que tenemos algunos filtros y aquí es donde en realidad definimos en qué hueso queremos que nuestro cuerpo se divida. Por lo que vamos a agregar una nueva entrada aquí y dar clic en el menú desplegable del índice. Y aquí es donde en realidad fijamos el hueso que queremos que la división suceda. Entonces para nosotros queremos encender nuestros nombres óseos. Podemos encontrar exactamente qué hueso queremos usar. Entonces iremos a Character, luego bajaremos a huesos y queremos asumir nombres óseos de muestra. Entonces nos encargaremos de eso. Yahora podemos hacer zoom y queremos que la división suceda en la columna vertebral. Entonces vamos a acercar un poco aquí. Y creo que la columna vertebral es probablemente la mejor a la que ir. Nuestras animaciones de logotipo se reproducirán debajo de la columna vertebral uno. Entonces nuestras animaciones de la parte superior del cuerpo jugarán por encima de eso. Ahora, dependiendo de tu personaje, podrías tener diferentes nombres en el futuro, por lo que no siempre pones columna vertebral uno. Tendrías que revisar cuáles son los huesos de la columna vertebral para tu personaje específico. Entonces por ahora, vamos a usar espina dorsal uno y necesitamos asegurarnos de que deletreamos el nombre exactamente igual que como está en el esqueleto. Entonces columna vertebral subrayan 01, así. Ahora hay algunos otros ajustes para esta nota que entraré en un poco. Pero por ahora, sólo vamos a compilar y vamos a probar este out and game así que vamos a golpear play. Y si presiono uno para reproducir nuestra recarga y empiezo a moverme, se puede ver que nuestra animación de recarga se está reproduciendo y nuestras animaciones de la parte inferior del cuerpo jugando. Y cuando no estamos jugando esa animación de recarga o animaciones de la parte superior del cuerpo simplemente se están reproduciendo normalmente. Ahora bien, esto es solo un ejemplo sencillo de cómo podemos configurar en realidad diferentes animaciones para que reproduzcan en diferentes partes del cuerpo. Ahora, para explicar un poco sobre la profundidad de la mezcla, esto es básicamente como un efecto de mezcla. Por lo que actualmente es 0, lo que significa desde la columna vertebral uno e incluyendo la columna vertebral un hueso, todos los huesos por encima de ella. Solo estaremos usando esta salida de animación aquí. Cuando recargo el montaje está jugando un 100% de todos los huesos de arriba. Estaremos usando ese montaje y sólo ese montaje. Ahora bien, si pusiéramos esto para decir tres, por ejemplo, lo que pasaría es nuestra columna vertebral. Uno estaría utilizando alrededor del 33 por ciento de estas salidas de animación. Así que el 33% de nuestro montaje de recarga, luego la columna vertebral dos estaría usando 66% de nuestro montaje de recarga y 33% de solo nuestro caché de estado principal. Y luego por espina dorsal para ello estaría utilizando completamente el montaje para recargar. Por lo que básicamente puedes usar estos como una forma de mezclar los efectos del nodo de mezcla entre múltiples huesos. Ahora bien, si quisiéramos excluir parte de la parte superior del cuerpo reproducir realmente el montaje de recarga, podríamos hacerlo. Entonces si agregamos en otro filtro de rama, abre esto y configura esto para decir brazo inferior. Entonces diré subrayado más bajo. Establecí la profundidad ósea de dos menos uno. Lo que esto significa es que le estamos diciendo la nota de mezcla que en realidad no queremos el hueso inferior del brazo o cualquier hueso debajo de él use nuestra pose de estado de mezcla 0, queremos que use nuestra pose base. Entonces si golpeamos compile y probamos esto, si presiono Y y se puede ver que mi brazo derecho ya no se está moviendo con nuestra animación de recarga. Es solo quedarse ahí. Ahora, el brazo, la parte superior del brazo sigue moviéndose porque sólo estamos afectando desde la parte inferior del brazo. Pero se puede ver que en realidad ya no anima de la forma en que debería. Entonces así es como puedes excluir partes del cuerpo de reproducir una animación. Ahora, no te preocupes demasiado si no entiendes completamente que cuando estás comenzando con la animación, mayoría de las veces tu profundidad ósea será 0 y realmente no estarás usando esta menos una opción muy a menudo tampoco. Entonces por ahora, solo eliminaremos esta inferior en una solo haciendo clic en la pequeña flecha hacia abajo aquí y haciendo Eliminar. Ahora podemos agregar múltiples poses de mezcla de entrada. Por lo que si hacemos clic en Agregar pin, se puede ver que se agrega como un nuevo pin de mezcla postes. Y si vamos al detalle, que puedan ver que ahora tenemos un nuevo índice aquí en la configuración de la capa. Esto solo tiene los mismos ajustes que son índice 0 tiene su justo que estos ajustes ahora para este lápiz. Entonces tal vez por ejemplo, querías que las animaciones de recarga se reproduciran en la mitad superior del cuerpo, pero tenías una segunda animación que querías reproducir en la cara, por ejemplo, podrías luego agrega eso aquí, agrega un hueso nuevo al filtro en los filtros de rama, y luego haz que la cabeza reproduzca una animación diferente. A continuación tenemos los pesos de mezcla. Ahora bien, esta es la cantidad que la pose de mezcla afectará realmente a los postes base. Entonces, por ejemplo, actualmente solo se establece en uno, lo que significa que si para cualquier hueso que quiera reproducir la mezcla pose una animación, se reproducirá al 100% de esa animación. Si tuviera que poner esto a 0.5, quitaremos esta pose de mezcla una pluma por ahora. Entonces, ¿qué es hacer clic derecho y eliminar pin de mezcla. Entonces compilaremos si golpeamos play ahora y toco nuestra animación de recarga presionando una, se puede ver que no está reproduciendo completamente la animación. Básicamente está usando la mitad del efecto de eso en nuestra pose base. Ahora también podemos usar esto para desactivar una mezcla, por ejemplo. Entonces podríamos establecer esto para decir 0 y compilar. Y ahora si le pegamos a Play y presiono uno, se puede ver que ya no se juega un montaje porque hemos puesto ese Alfa aquí a 0. Esta es solo una entrada de flotación normal. Así podríamos arrastrar hacia fuera, usar una opción remota para flotar, y eso solo nos creará una variable de flotación que podemos cambiar y controlar dentro de nuestro Event Graph. Ahora, continuando, si volvemos a la gráfica Anim y seleccionamos la mezcla de capas por nodo óseo. Por aquí tenemos una opción para la mezcla de rotación basada en malla. Esto básicamente significa que la rotación de nuestros huesos o utilizar el espacio de malla en lugar del espacio local. Ahora esta opción puede ser útil si tus animaciones se ven un poco raras cuando las estás reproduciendo. La mayoría de las veces, me parece que en realidad tengo esto encendido, pero va a depender tu personaje y de las animaciones que estés jugando. Esto hace lo mismo, pero hemos escalado por lo que usará tus mallas, escala de huesos en lugar de la escala local. La mayoría de las veces querrás que esto se apague. Ahora hay otros tipos de nodos de mezcla. Entonces si eliminamos esta por ahora y borraremos esta variable, ¿verdad? Porque puedo buscar la herramienta Blend y hay una mezcla poses de Boolean. Entonces si creamos eso, se puede ver que tenemos una pluma verdadera y una falsa. Entonces conectará nuestra fuente, así. Ahora bien, esto nos permite controlar básicamente qué animaciones van a reproducir dependiendo de un valor booleano. Entonces si este valor activo aquí es cierto, que la animación está conectada hasta true se ejecutará. Y si esto es falso, la animación está conectada hasta que la gente correrá. Y en realidad podemos ver esto en la vista previa aquí. Por lo que se puede ver que el valor es falso. Así que sólo las animaciones que vienen de nuestra pluma de la gente aquí se están pasando a través de nuestro equipo de control. Si yo fuera a tomar esto y compilar. Diré ahora sólo la animación de nuestra verdadera pluma, se está pasando a través de nuestra plataforma de control. Y luego tenemos algunos tiempos de mezcla. Por lo tanto, si cambiaras este valor durante el juego, cuanto más altos sean estos valores, más tiempo tardará en mezclarse suavemente de las verdaderas poses a las poses de la gente y luego volver de falso a verdadero por lo falso sido tiempo. Así que este nodo puede ser muy útil para decir, si usted tenía un montón de animación, por lo que sólo jugar cuando sus personajes nadan y luego otras animaciones cuando el personaje está caminando por el suelo, es posible que tenga una variable llamada su natación que se conecta a algo como esto. Y luego eso puede hacer una transición sin problemas entre las animaciones que caminas sobre el suelo y estás nadando animaciones cada vez que ese booleano se establece en verdadero o falso. Otro nodo similar es el blending. Así que si buscamos Blend y luego int, podemos usar las poses de mezcla por int. Ahora esto funciona de manera similar, pero en lugar de un booleano, es un valor int. Por lo que podemos agregar múltiples entradas en este momento sólo hay dos. Entonces, si tuviera que configurar esto en uno, entonces se usaría nuestro único post. Para que podamos conectar estos así. Golpea Compilar y verás que se usa el. Pero si cambio esto a 0 y compilamos de nuevo, verás que ahora se están utilizando las entradas 0. Y lo bueno de esto es que podemos tener más de dos entradas. Así que si hacemos clic derecho y hacemos, o hacemos clic derecho en el nodo, lo siento, y añadimos mezcla PIM. Se puede ver que agrega una nueva opción. Ahora bien, si yo fuera a simplemente copiar y pegar estos nodos, pegarlos, conectarlos hasta aquí. Y ahora vamos a poner esto a dos, compilaremos. Ya ves que ahora se está utilizando el pin dos. Nuevamente, acabamos de tener estos tiempos pasados y funcionan de la misma manera que nuestro nodo booleano. Entonces, cualquiera que sea el valor que pongas aquí es el tiempo que tardará en fundirlo en esa pose. Ahora también podemos usar un nodo de mezcla usando una enumeración. Entonces si eliminamos esto y podemos sacar y simplemente lo dejaremos así por un momento. Crearemos una nueva enumeración, así que haremos clic derecho e iremos a los planos, luego iremos a enumeración. Yo sólo voy a llamar a este E tipos de animación de subrayado. Abriremos esto y crearemos un nuevo anión. Y a esto lo llamaremos decir natación. Y agregaremos otro para caminar y otro para decir, auto. Ahora estos son solo ejemplos para que te pueda mostrar cómo funciona el código, pero cerraremos esto por ahora. Vuelve a nuestro gráfico de animación y luego buscaremos la animación de subrayado de EA. Ya ves en la parte superior aquí tenemos poses de mezcla E tipos de animación de subrayado. Y eso es porque eso es lo que llamamos un sindicato. Entonces crearemos eso. Ya ves que aquí obtenemos este nodo. Y si hacemos clic derecho en el nodo, se puede ver que podemos agregar alfileres para nadar, caminar, y en costo. Entonces haremos eso por cada uno así. Y ahora tenemos una pluma aniónica en lugar de un booleano o un entero. Por lo que conectaremos la salida hasta nuestro recapitulación de control. Y los conectaremos seguros para nadar, caminar y capos. Ahora actualmente esto se establece en 0. Entonces si compilamos, solo escogerá el poste de natación porque ese es el primero. Pero también podemos usar una variable para controlar esto. Para que podamos crear un nuevo anión. Llamaremos a este modo de animación por ejemplo. Y lo establecemos en E tipo de animación de subrayado. Ese es el sindicato que acabamos de crear. Vamos a compilar. Ahora podemos conectar esta variable a nuestro nodo. En realidad podemos controlar cuál se va a usar usando esta variable. Entonces podemos decir, quiero en auto, compilarlo y ahora está usando la tinta arriba. Y podemos cambiar esto durante el juego en nuestro gráfico de eventos aquí para controlar qué animaciones queremos que reproduzca nuestro gráfico. Y luego, por último, si eliminamos este nodo y buscamos la tierra, solo podemos usar un modo de mezcla. Ahora bien, este es un nodo simple que básicamente solo toma una entrada a y B y nos permite mezclarnos entre ellos usando un valor alfa. Así que si esto es 0, será, la salida de este nodo sólo será el 100% de a. y si este es uno, será a. 100% de B es 0.5, entonces será la mitad y la mitad de ambas animaciones de salida. Por ahora, solo eliminaremos este nodo y en realidad estamos simplemente sentados de nuevo nuestra mezcla de capas por nodos óseos. Entonces buscaremos plomo y podemos usar marca de plomo por hueso conectaremos esto hasta aquí de nuevo, esto hasta nuestra plataforma de control. Eliminaremos estos nodos porque ya no los están usando. Entonces en nuestra nota aquí, solo establecemos la copia de seguridad de la acera del campo de la rama para la columna vertebral uno. Por lo que pondrá esto a espina dorsal, subrayan uno. Y eliminaremos estas variables aquí abajo también porque realidad no estamos usando esas y solo compilamos. Así que ahora cuando golpeamos play y corremos, podemos presionar uno y nos tocará una animación de recarga mientras nuestras animaciones de movimiento siguen trabajando con ellos para esta lección, espero que ahora entiendas un poco más acerca de mezclar animaciones juntas y cómo podemos reproducir dos animaciones al mismo tiempo en una malla de personaje. 48. Planes de animación (Notificaciones): Oigan a todos. En esta lección vamos a estar echando un vistazo a la animación notifica. Ahora la animación avisa a unas herramientas realmente útiles porque nos permiten ejecutar código un tiempo específico en una animación. Ahora ya hemos mirado algunos notifica antes en el curso. Miramos el sonido de reproducción y los efectos de reproducción, notifica lo que nos permitió reproducir sonidos o reproducir efectos de partículas en puntos específicos de nuestras animaciones. Rápidamente repasaré ésos de nuevo en esta lección solo para refrescar tu memoria. Entonces, para empezar, necesitamos ir ya sea a una secuencia de animación o a un montaje de animación. Podemos agregar notifica a ambos. Entonces voy a estar usando el montaje de recarga que hemos estado jugando en nuestras lecciones anteriores. Entonces nos dirigiremos a las animaciones de las lecciones. Y si no tienes esta carpeta, expliqué cómo agregar estos en las lecciones de montaje. Por lo que tal vez quieras ir a echar un vistazo a eso. Ahora, nos desplazaremos hacia abajo y encontraremos nuestro montaje de recarga, que está aquí en la parte inferior. lo vamos a abrir. Ahora. Aquí abajo tenemos nuestra tiempo notifica y aquí es donde veremos todos los notifica para este montaje específico. Para agregar un nuevo notificado, simplemente hacemos clic derecho en esta barra aquí que dice uno y podemos agregar una notificación. Ahora el motor tiene algunas notificaciones incorporadas ya. Y así es como podemos reproducir sonidos o reproducir efectos de partículas o efectos de partículas del Niágara. Ahora hay otros notifica, como puedes ver aquí para Simulación de Ropa y cosas por el estilo. No los voy a estar cubriendo en esta lección porque son bastante específicos y un poco más avanzados y lo que vamos a estar cubriendo. Pero solo agregaremos una notificación de sonido de reproducción. Y ahora con eso añadido, podemos posicionar eso en cualquier punto de la animación. Entonces digamos que queríamos sonar para tocar en este mismo punto. Podríamos agregar nuestro notificado a este punto. A continuación, en el panel Detalles, podemos establecer un sonido, volumen y modificadores de tono. Podemos cambiar cuál es el color de notificación, y esto es solo para la organización. Para que puedas rápidamente, de un vistazo ver qué es una notificación por su color. Otra configuración útil aquí es la oportunidad de gatillo. Ahora, tal vez solo querías que estos sonidos se reproduzcan a veces cuando esta animación se reproduzca al azar. Entonces lo que podríamos hacer es en lugar de enviarlo a uno, que significa que el sonido siempre se reproducirá cuando se reproduzca la animación. Podríamos establecer esto para decir 0.1. Ahora bien, este sonido, sólo estamos tocando el diez por ciento de las veces que se reproduce esta animación. Un ejemplo de cómo esto podría ser útil es tal vez tienes una animación ociosa y querías agregar un sonido de tos a esa animación ociosa. Ahora, probablemente no quieras que ese sonido se reproduzca cada vez que se reproduzca la animación ociosa. Por lo que podría establecer la oportunidad de disparo para que el sonido notifique a 0.1, y ese sonido se reproducirá 10% del tiempo que se reproduzca la animación. Ahora, avanzando, podemos hacer lo mismo con los efectos de partículas. Por lo que voy a eliminar el sonido notifique aquí, haga clic derecho y haga agregar notificar. Ahora bien podemos agregar un nueve a cinco para el Niágara, los efectos políticos caerán en cascada. Voy a seleccionar Niagara solo porque ese es un sistema más nuevo. Por lo que haremos clic en eso y seleccionaremos que notifique. Entonces arriba aquí en nuestro panel Detalles, podemos configurar qué efectos de partículas del Niágara queremos elegir. Actualmente no tengo ninguno de mis proyectos, así que viene uno aquí arriba. Pero si lo hicieras, aquí es donde aparecerían. Entonces podemos establecer la ubicación y la rotación. Ahora bien, este es el desplazamiento desde la raíz. Entonces el hueso raíz de nuestro personaje aquí está justo donde está mi ratón actualmente. Entonces si fuéramos a sumar, digamos, 50, Hola, nuestro efecto de partícula se movería hasta aproximadamente esta altura porque está aumentando la altura del efecto de partícula en 50 desde la raíz. Ahora, también podemos decir si nuestro hecho político está apegado o no a algo. Por lo que actualmente está unido y eso significa que sólo se va a unir a la raíz. Pero podemos especificar un nombre de bot si queremos. Queríamos que los efectos de partículas estuvieran unidos a la cabeza. Podríamos hacer eso buscando cabeza. Y se puede ver que nos da nuestro hueso de la cabeza aquí. Entonces ahora cuando engendramos este efecto de partícula o en realidad se unirá al hueso de la cabeza. A diferencia de antes, podemos decir notificar color. Y también podemos cambiar si la notificación se ejecutará o no cada vez o decir la mitad del tiempo si ponemos 0.5, por ejemplo. Ahora, usando este tipo de Notificar para jugar efecto, básicamente solo le dirá al efecto que se reproduzca una vez y luego el efecto será destruido. Pero tal vez querías los efectos que corres de decir aquí para acá en la animación. Bueno, eso lo podemos hacer. Por lo que seleccionaremos esta notificación, la eliminaremos, hacemos clic con el botón derecho e iremos a notificar al estado y descenderemos a tiempo a efecto Niagara. O si estás usando cascadas, tiempo para efecto de partículas. Por lo que seleccionará la opción Niagara aquí. Y ya ves que ahora tenemos un 12. En realidad podemos arrastrar esto a valor aquí haciendo clic en el pequeño punto en la parte inferior y arrastrando eso hacia fuera. Entonces podemos agregar esto a decir 50. Así que ahora los efectos de partículas que establecemos para esto notifican empareja uno del valor uno al valor verdadero. Ahora algo a tener en cuenta con esto es su efecto Niágara será, tendrá que ser configurado para bucle. Si solo está configurado para ejecutarse una vez, entonces los efectos de partículas solo se ejecutarán una vez y luego ya no lo hará. Entonces necesitarás efecto de partículas de Niagara Eso en realidad está configurado para bucle para que esto funcione. Entonces tenemos la misma configuración que hicimos con nuestro tipo de notificación anterior. Tenemos la plantilla que queremos usar. Entonces aquí es donde fijamos el efecto que queremos. Podemos elegir si se adhiere o no a un hueso o alvéolo. Podemos establecer sus compensaciones de ubicación y rotación. Podemos elegir si destruye o no de inmediato. Y básicamente lo que eso significa es, digamos tus efectores en bucle mientras jugamos la animación. Una vez que llegue aquí, si destruir inmediatamente se marca. No importa en qué etapa se inserte el efecto de partícula a mitad de carrera. Será destruida al instante. Mientras que si esto está ticked off, entonces una vez que llegamos a este punto, si el, si el efecto de partícula está a mitad de camino, entonces lo dejará terminar. Entonces tal vez tu maceta, un efecto fresco tarda dos segundos más en terminar, entonces lo permitirá. Entonces depende de ti si tienes o no este tectónico dependiendo del tipo de efectos que estés usando. Ahora cuando se trabaja con notifica, podrías terminar con una línea de tiempo bastante abarrotada si tienes mucho que hacer en una animación específica. Por lo que siempre puedes simplemente agregar nuevas pistas de notificación. Por lo que podemos dar clic en este pequeño desplegable aquí para agregar la pista de notificación. Y eso nos da una segunda pista que podemos agregar notifica dos, no cambia la forma en que corren ni nada por el estilo es puramente para la organización. Ahora, hasta ahora, hemos estado usando las notificaciones por defecto que vienen incorporadas con el motor, pero en realidad podemos crear nuestras propias que nos permitan correr en eventos y ejecutar código cuando se ejecute una notificación de animación. Entonces lo que haremos es seleccionar esta notificación y eliminarla. Ahora, tal vez quería que funcionara un trozo de código cuando mi personaje diga agarra la revista o pose la revista desde el arma de aquí. Bueno, eso lo podemos hacer con notifica. Entonces lo que haremos es hacer clic derecho y hacer agregar notificar. Entonces subiremos a nuevos notificados y eso nos dejará nombrar los notifica para que podamos jalar llamar a esta revista despegada así. Se puede ver que ahora tenemos una notificación que se llama la revista Touch. Podemos moverlo como nuestros anteriores, pero me voy a quedar el mío aquí. Por lo que ahora este aviso nos permitirá llamar a un evento dentro nuestro blueprint de animación cada vez que esta animación reproduzca este punto. Pero aquí nos vamos a encontrar con un pequeño problema, y les mostraré por qué si nos dirigimos a nuestro Blueprint de Animación, que si recuerdan, es en personajes, animación maniquíes. Y entonces abriremos dinero. Ahora, normalmente si hago clic derecho y busco mi desprendimiento, debería encontrar un evento para nuestra revista de desprendimiento, pero no lo soy. Y la razón por la que está pasando es que si te acuerdas, son menos que animaciones y esta carpeta aquí en realidad tienen su propio esqueleto. Y entonces nuestro personaje tiene un esqueleto diferente. Ahora esta es la razón por la que nuestros notifican. No es solo aparecer en nuestro plan de animación. Podemos arreglar esto fácilmente. Entonces lo que tenemos que hacer es ir a nuestra Carpeta de Personajes, luego a nuestros maniquíes, luego dos mallas y abrir el maniquí SK. Y aquí, vamos a ir a la pestaña de Avisos de Animación. Si no la tienes abierta, puedes subir a Window y buscar la animación, esas FISA y llevártela. Y sólo vamos a hacer clic derecho y hacer nuevo. Voy a llamar a esta revista, oh perdón, desprender revista. Y necesita ser deletreado exactamente igual que el notifique en nuestro montaje. Y ahora hemos agregado esa nueva notificación a nuestro esqueleto. Por lo que ahora cuando vayamos a nuestro plano de animación, podemos hacer clic derecho en la búsqueda del toque. Y se puede ver que ahora tenemos un anime entonces notificado para tocar revista y podemos agregar eso. Ahora si fueras a agregar una notificación a una animación que está usando el mismo esqueleto es tu personaje. Entonces, para darles un ejemplo, vamos a ir a la Carpeta de Personajes, maniquíes, animaciones. Entonces iremos al dinero y solo encontraremos el encontrara la animación de la tierra por ejemplo, abro esto. Ahora si hago clic derecho en el notifica aquí para agregar notificar, nueva notificar. Y yo sólo voy a llamar a este salto. Y ahora si vamos a nuestro Blueprint de Animación, hago clic derecho y busco salto. Y verás que eso acaba de aparecer de inmediato. Y eso es porque me saltaría la animación terrestre es en realidad solo usar el mismo esqueleto que nuestro personaje. Ahora, en nuestro montaje de recarga, tenemos a nuestra revista de desprendimiento notificar, y luego también dentro nuestro Animation Blueprint tenemos ese evento aquí también. Ahora, este evento correrá cada vez que este montaje sea interpretado por nuestro personaje y la animación llegue a este punto. Entonces, para probar esto, solo podemos agregar algún código a esto. Yo sólo voy a arrastrar hacia fuera y hacer una cadena de impresión. Y sólo vamos a dejar este cantado Hola. Y compilaremos, dale a Play. Y ahora cuando presione uno, verán que obtenemos esa impresión hola cuando nuestra animación de recarga llegue a ese punto específico. Y también podemos comprobar que el extremo de salto también está funcionando. que podamos hacer clic derecho en la búsqueda de salto, y eso nos crea un nuevo evento. Podemos arrastrar hacia fuera de eso y hacer una cadena de impresión para eso. Y si compilamos, saltamos cuando aterrizamos, se puede ver que ese Notificar también está funcionando también. Ahora, solo regresamos al esqueleto de nuestros personajes por un segundo. Iremos a maniquíes que mallas y abriremos el maniquí aquí en nuestra pestaña de notificaciones de animación. Aquí es donde puedes eliminar las notificaciones de animación. Puedes crear nuevos para que podamos hacer clic derecho y hacer nuevos. También podemos renombrar también. Por lo que podemos hacer clic derecho y seleccionar Cambiar nombre para cambiar el nombre de una notificación. Otra herramienta útil es la búsqueda de referencias, y podemos usar esto para encontrar todas las animaciones que tienen este aviso en él. Por lo que si hacemos clic en esto, se puede ver que nos está dando la animación exacta que utiliza el salto y notificar. Podemos hacer doble clic en esto y se puede ver que es la animación que tiene que notificada. lo que puede ser, por ejemplo, tienes una animación que se está ejecutando y notifica que no quieres. Siempre puedes simplemente venir al esqueleto, haz clic con el botón derecho en Notificar y encontrar la animación que se está reproduciendo que notifique. Si quieres deshacerte de la búsqueda aquí, solo podemos hacer clic con el botón derecho del ratón en eliminar filtros y puedes ver que ahora está mostrando de nuevo todas nuestras animaciones. Ahora también podemos crear nuestra propia costumbre notifica el trabajo un poco como el sonido de reproducción o el efecto de partículas de reproducción notifica. Entonces si nos dirigimos de nuevo al navegador de contenidos aquí, sólo voy a ir a la carpeta Blueprints. Entonces planos en tercera persona, haremos clic derecho y haremos clic en Clase Blueprint. Entonces vamos a ir a todas las clases y buscar notificar. Y queremos avisar de animación aquí. Entonces, si hacemos clic en eso y hacemos Select, eso nos creará un nuevo blueprint. Yo sólo voy a llamar al mío ejemplo. Notificar así. Y haremos doble clic para abrir eso. Yo sólo voy a arrastrar el mío hasta la barra superior de aquí así. Ahora tenemos un nuevo diseño de editor. Se puede ver que en realidad no tenemos un gráfico de eventos donde tenemos es nuestro Panel Mi Blueprint y luego el panel Detalles por aquí. Ahora tenemos algunas funciones integradas en este blueprint que podemos anular. Y estas son las funciones que en realidad se ejecutarán cuando se ejecute el Notificar aquí. Entonces lo que haremos es en primer lugar ir a nuestro montaje de recarga. Si hacemos clic con el botón derecho en el Notificar, pero vamos a agregar notificar. Por aquí puedes ver que ahora tenemos ese ejemplo lo notifica. Por lo que si hacemos clic en esto, pueden ver que tenemos un nuevo tipo de notificación. Eso es lo mismo que el nombre de nuestro blueprint y lo podemos posicionar donde queremos decir aquí, por ejemplo. Por lo que ahora cuando nuestra animación llegue a este punto, se ejecutarán los eventos dentro de nuestro ejemplo notificar aquí. Entonces usando esto, podemos ejecutar código personalizado dentro de esta notificación. Siempre que esa notificación reciba ROM, podemos ir a sobrescribir recibir notificación. Esta función se ejecutará cada vez que notifique dentro de nuestra animación se ejecute. Y nos proporciona alguna información útil. Por lo que nos proporciona la animación que en realidad llamó el Notify y también el componente mesh. Y lo bueno de esto es que podemos acceder, digamos, a nuestro blueprint de animación o incluso al personaje que interpretó la animación usando esto. Para que podamos alargar y podemos hacer consigue dueño, así. Ahora, el dueño de la malla del personaje siempre será el Character Blueprint. Entonces usando esto, podríamos arrastrar hacia fuera y hacer costo al personaje, por ejemplo. Y ahora podemos acceder fácilmente a nuestro plano de personajes. También podemos acceder a nuestro Animation Blueprint simplemente arrastrando desde los componentes de malla, buscando, por ejemplo. Y eso nos dará una referencia a nuestro Blueprint de Animación. Así que solo para darte un ejemplo de cómo funciona esto en realidad, eliminaremos esto por ahora. Yo sólo voy a agregar una cadena de impresión aquí. Y vamos a poner decir hola. Esta es una prueba. Conectaremos esto hasta el valor de retorno como ese compilará. Y ahora cuando golpeamos play y presiono uno, verás que hola y también se agota hola, Esta es una prueba y eso porque dentro recargo animación, tenemos nuestro nuevo ejemplo notificar. Y dentro en ejemplo notificar. El aviso recibido de ellos corre y ejecuta nuestra cadena de impresión aquí. Ahora un ejemplo común de lo que estos clientes o Pfizer usaron para nuestros pasos. Ahora puede estar pensando que solo puede usar el sonido de reproducción para notificar que está integrado en el motor. Pero el problema con eso es que si tienes diferentes tipos de sonidos para diferentes tipos de suelo, necesitarías detectar qué tipo de suelo está caminando tu personaje en qué tipo de suelo está caminando tu personajey luego reproducir el sonido apropiado. Usando un cliente notificado así, podrías escribir el código que tal vez haga un trazo de línea debajo tu personaje para detectar el suelo y luego reproducir el sonido correcto para ese tipo de suelo. Pero este es sólo un ejemplo. Podrías usar estos para todo tipo de cosas en tus proyectos. También podemos agregar ajustes de personalización a ellos también. Entonces si agregamos una nueva variable aquí y llamaremos a esto say sounds, por ejemplo, bajaremos al tipo de variable y buscaremos una base de sonido y seleccionaremos la referencia del objeto. Ahora, vamos a compilar y sólo vamos a dar clic en el ojito aquí. O puedes tomar instancias editables aquí, hace lo mismo, compilará. Y ahora cuando vamos a nuestro montaje de recarga y seleccionamos nuestro notifique, se puede ver aquí arriba en la configuración que ahora tenemos esa variable de sonidos que acabamos de crear. Podemos establecer un sonido y luego su interior se reciben la función de notificación. Podríamos usar cualquier sonido que se establezca dentro del montaje y reproducirlo. Entonces para hacer eso, solo arrastraremos de nuestra nota de retorno aquí y haremos un poco de espacio. Entonces nos arrastraremos y buscaremos reproducir sonido. Usamos el sonido de reproducción en la ubicación. Agarraremos nuestro valor de sonido y conectaremos eso a la variable de sonidos. Y para la ubicación obtendrá la ubicación del componente de malla. Entonces sí obtenemos ubicación. No conseguiremos ubicación mundial. Enchufa eso en la ubicación. Entonces lo compilaremos y te darás cuenta, voy a dejar mi sonido aquí como ninguno, y usaremos el montaje para establecer realmente que suena. Por lo que seleccionaremos el ejemplo notificar aquí y recogeremos un sonido aquí. Entonces voy a escoger el sonido de compilación fallida. Y en realidad notarás mientras la animación se reproduce aquí, en realidad reproduce un sonido para ello. Entonces detendremos este avión porque se está poniendo molesto. Y vamos a probar esto. Entonces le pegaremos a play y al juego y presionaremos uno para reproducir ese sonido, tocará la animación. Se puede ver que nuestra notificación se está ejecutando y está reproduciendo ese sonido que nos sentamos dentro de nuestro montaje aquí. Esto lo puedes hacer con todo tipo de ajustes. Entonces si quisieras, podrías agregar un booleano, por ejemplo aquí. Y mientras tomes instancia editable, eso será accesible desde nuestro montaje. Se puede ver que ahora tenemos esa nueva variable aquí, y puedo acceder a ella si selecciono mi notificación. Y también podemos usar múltiples de esta animación notifica. Para que pueda mover esto por aquí, haga clic derecho. Añade suficiente un ejemplo. Ahora si selecciono esto y ahora podemos escoger otro sonido. Para que pudiera escoger el éxito del compilador, por ejemplo. Ahora, cuando golpeamos play y presiono uno para reproducir la animación, deberías escuchar ambos sonidos. Por último, te mostré cómo crear nuevas notificaciones de animación, pero en realidad no te mostré cómo reutilizarlas. Entonces si salimos de editor de avión aquí, volver a nuestra animación de recarga. Ya ven que tenemos una revista separada. Ahora, tal vez quiero que ese evento también se ejecute por aquí, podemos hacer clic derecho, hacer agregar, notificar, ir a Skeleton notifica. Y por aquí se puede ver que tenemos todos nuestros notifica existentes y están desapegados. La revista está justo en la parte de abajo aquí. Para que podamos crear eso. Ahora el evento dentro nuestro plano de animación aquí se ejecutará dos veces para esta animación, una aquí, y otra aquí. Y también podemos usar esta revista de desprendimiento notificada en que otras animaciones, no está bloqueada a esta animación. Entonces si quisiéramos, podemos dirigirnos a decir, la carpeta Animations debajo los maniquíes, entonces goto dinero. Y podríamos añadir esto a la animación terrestre por ejemplo. Por lo que podemos hacer clic derecho y notificar, esquelético notifica. Y entonces podemos bajar a la revista desapegada aquí. Y ahora ese evento también correrá cuando toquemos esta tierra de salto que animación también. Entonces eso es todo por esta lección. Esperemos que ahora entiendas un poco más sobre notificaciones de animación y cómo puedes usarlas en tus futuros proyectos. 49. Planes de animación (States): Oigan a todos. En esta lección vamos a estar echando un vistazo más de cerca los estados de animación dentro de nuestro Blueprint de Animación. Ahora en nuestra primera lección, hicimos un resumen rápido de estos estados de animación. Pero en esta, vamos a echar un vistazo mucho más de cerca de cómo funcionan y cómo puedes agregar otras nuevas. Entonces, para empezar, solo abre tu plano de animación y dirígete al gráfico Anim. Por lo que sólo vamos a abrir eso. Entonces vamos a empezar por ir a la máquina del estado de locomoción aquí. Y si te acuerdas de antes, aquí es donde tenemos nuestro estado ocioso y luego caminaré slash run state. Y dentro de estos estados es donde en realidad tenemos nuestro lugar de animaciones. Entonces en el estado ocioso tenemos la animación ociosa y luego la corrida de barra de paseo. Tenemos nuestro walk slash run, espacio londinense. Entonces, para empezar, sólo vamos a agregar un nuevo estado a esta máquina de estado de locomoción. Entonces, para hacer eso, solo haremos clic derecho y haremos clic en estado. Y eso nos creará un nuevo estado similar a nuestros estados ociosos y nuestro walk slash run. Yo sólo voy a llamar al mío apuntado y hoy vamos a crear un estado de puntería. Entonces, por qué ahora tenemos un nuevo estado llamado apuntado, pero en realidad nunca se llamará por el momento porque no tenemos ninguna regla que vaya a transitar a él. Entonces, para crear una nueva regla, necesitamos arrastrar desde un estado diferente hacia nuestros nuevos estribo. Entonces vamos a arrastrar de ocioso a apuntado. Eso nos va a dar una flecha que apunta de ocioso a apuntado. Porque esta regla determina si estamos en estado ocioso, si debemos o no movernos al estado apuntado. Ahora necesitamos agregar realmente algún código a nuestra regla para determinar cuándo el estado inactivo debe cambiar al estado apuntado. Entonces lo que podemos hacer es hacer doble clic en este botoncito de aquí. Y eso nos llevará dentro de esa regla. Y dependiendo de si este valor de retorno es cierto o no , es si vamos a pasar o no del ídolo al estado final. Entonces comenzaremos con solo crear una nueva variable. Voy a llamar al mío apuntado, o perdón, no podemos llamarlo apuntado porque tenemos un nombre de estado, así que lo llamaremos está apuntado así. Voy a cambiar el mío a un booleano así y compilaremos. Ahora podría recibir una advertencia aquí. Todo lo que está haciendo es decirnos que nuestra regla aquí no tiene código en ella. Y vamos a añadir algo de código a eso ahora. Entonces vamos a hacer doble clic en esto para abrirlo. Y vamos a tomar nuestro es apuntado y sólo conectamos eso hasta el resultado aquí. Entonces podemos compilar así y deberíamos deshacernos de esa advertencia ahora también. Después nos dirigiremos de nuevo a la locomoción. Entonces ahora tenemos una regla que nos permitirá transitar de ídolo a apuntar a si r es variable apuntada o no es verdadera. En realidad podemos probar esto. Entonces si me llevo esto , se puede ver que nuestro personaje T posa y está haciendo eso porque en realidad no hemos establecido una animación en nuestro estado todavía. Entonces ahora abriremos nuestro estado apuntado y en realidad añadimos una animación para que se reproduzca. Por lo que arrastraremos y buscaremos jugadores de juego, y usaremos al jugador de Secuencia. Ahora bien, esto nos permite sólo establecer una animación que nuestro objetivo denuncia estatal. Y podemos hacer eso por aquí en el panel Detalles configuraremos la secuencia a algo así como el ADS. Y deberíamos encontrar el rifle ocioso ADS. Si no tienes esta animación, en realidad pasamos por cómo importarlas a tu proyecto en la lección de montaje. Para que puedas echar un vistazo a eso y eso te mostrará cómo agregar esas animaciones. Y así ahora hemos puesto la animación si compilamos, porque nuestro apuntado o está apuntado está ajustado a verdadero, puede ver que ahora está jugando una animación apuntada con rifle. Pero el tema ahora es si nos dirigimos nuevo a nuestra máquina de estado de locomoción, si yo iba a cambiar o se apunta a falso, nuestra animación en realidad no cambia de nuevo a ocioso. Eso se debe a que todavía necesitamos crear una regla que vaya de nuestro apuntado a nuestro ocioso. Entonces vamos a arrastrar de apuntado a ocioso, y esto se comprobará cada vez que estemos dentro del estado apuntado. Por lo que ahora necesitamos agregar algún código a esta regla que nos haga cambiar de nuestro estado interno a nuestro estado inactivo. Entonces vamos a abrir esto. Vamos a agarrar la variable se apunta. Ahora queremos que esto devuelva verdadero si esto es falso. Por lo que arrastraremos y buscaremos nada, encontraremos el NO Booleano aquí y conectaremos eso hasta los resultados. Entonces si es apuntado es verdadero, esto lo convertirá a un falso y luego devolverá un valor falso. Y ahora podemos probar esto. Entonces regresaré a la vista de locomoción aquí. Seleccionaremos está apuntado y lo despegaremos y lo sacaremos. En primer lugar, necesitamos compilar. Entonces ahora cuando lo tomamos y lo quitamos, puede ver que ahora está cambiando entre nuestros dos estados. Ahora nuestros metales de transición tienen algunos otros ajustes. No voy a pasar por todas, pero pasaré por algunas de las más importantes que hay aquí. Entonces, para empezar, tenemos el orden de prioridad. Ahora cuanto más alto es el valor aquí, mayor prioridad tiene ese rol. Entonces por ejemplo, si tienes múltiples reglas como lo hacemos aquí para los ociosos, tenemos esta y tenemos esta. Digamos que ambos iban a ser verdad al mismo tiempo, entonces el motor escogerá el que tenga la más alta prioridad aquí. Este ajuste puede ser útil si tienes un sistema de locomoción mucho más complicado con muchas reglas pasando de decir, un estado. A continuación tenemos la duración de la transición. Ahora bien, este es el tiempo que toma para que la animación ociosa pase sin problemas a la animación dirigida. Porque si te das cuenta, cuando seleccionamos nuestro nombre para, no se ajusta al instante. Obtenemos esa transición suave entre ellos. Entonces si aumentamos ese tiempo de duración aquí, digamos la regla de transición de apuntado a ocioso, lo cambiamos por decir uno. Ahora, cuando compilamos y seleccionamos como apuntado, si lo apagamos, puede ver que se obtiene una transición mucho más suave, más lenta de la animación apuntada al inactivo. Podemos hacer lo mismo para nuestro general también. Para que podamos seleccionar eso, establecer la duración en uno. Y ahora cada vez que nos enfrentemos a AMG conseguirá esa transición sin problemas después de compilar. Ahí vamos. Por lo que todo combinado ahora. Y se puede ver que ahora obtenemos esa transición mucho más lenta entre las dos animaciones. A continuación, seleccionando nuestra regla aquí. En los ajustes de mezcla tenemos un modo. Ahora así es como la animación hará transición a la nueva animación. Tendrías que probarlas para ver cómo funcionan. Pero estos te dan diferentes efectos de transición entre los dos estados. A continuación, tenemos las notificaciones. Ahora estos en realidad nos permiten ejecutar eventos en nuestro Event Graph cada vez que esta regla hace algo. Para que podamos tener transición de inicio y podemos tener un evento en nuestro gráfico de eventos que se ejecutará cada vez que comience esta transición aquí. Por lo que cada vez que la regla se haga realidad, este evento que aquí nombramos correrá. Tenemos transición final. Entonces cuando termine la transición y nos vayamos al nuevo estado, esto correrá. Y entonces si se interrumpe, esto correrá. Entonces si, por ejemplo, pasaremos 1 segundo a la transición de ocioso a apuntado, y lo cancelamos. La regla se volvió falsa y volvimos a ociosos que se interrumpen, evento correría. Entonces, para darte un ejemplo rápido, podríamos simplemente escribir test aquí. Por ejemplo, compile, vaya al Event Graph y si hago clic derecho y busco prueba, o lo siento, prueba de evento encontrará que nuevo anime notifique prueba de guión bajo y este evento se ejecutará cada vez que nuestra regla aquí comienza su transición de ídolo a MD. Y si no encuentras tu evento y el gráfico de eventos, no olvides que sí tienes que compilar tu blueprint después de escribir un nombre aquí. Ahora tenemos configuraciones similares para nuestro estado. Así que si en realidad selecciono mi estado de objetivo aquí, se puede ver que tenemos esos mismos ajustes, por lo que tenemos un evento personalizado que podemos ejecutar en nuestro gráfico de eventos para cuando nuestra estancia objetivo se introduce y también cuando se deja ese estado de puntería. Por lo que de nuevo, como antes, si agrego un nuevo evento, llamaré a esto apuntado iniciado. Vamos a compilar, ir al Event Graph y buscaré evento dirigido. Y se puede ver que tenemos nuestro evento dirigido comenzó aquí también. Así que ahora hemos añadido un nuevo estado, por lo que nuestra locomoción, y hemos añadido las reglas para transición hacia y desde ese estado, pero en realidad no hemos configurado ningún código para controlar esta variable. Acabamos de cambiarlo manualmente aquí. Así que te mostraré un par de formas en las que podemos controlar variables en nuestro blueprint de animación desde el Character Blueprint. Entonces, para empezar, podemos ir al Event Graph. Encontrará el blueprint, actualización de animación, y esto ejecutará cada fotograma y actualizará las variables que conectemos a él. Para que podamos agregar una nueva sucursal aquí. Entonces vamos a conseguir nuestro personaje porque queremos obtener alguna información de nuestro personaje va a arrastrar hacia fuera y podemos hacer costo a la persona, conectar hasta la secuencia de ella. Ahora en realidad necesitamos agregar un sistema de nomenclatura a nuestro personaje. Entonces lo compilaremos e iremos al plano de nuestro personaje, que está en los planos de tercera persona que el personaje de tercera persona. Ahora bien, no te preocupes demasiado si no tienes este código. Esto es de nuestra lección de montajes. Entonces sólo nos desplazaremos hasta aquí. Voy a hacer clic derecho y buscar el ratón izquierdo. Y vamos a usar el botón izquierdo del ratón. Y vamos a crear una nueva variable llamada se apunta. Así. Queremos sacar ese arrastre de ella y hacer f. Y si nuestro apuntado es actualmente cierto, queremos configurarlo en falso. Y si actualmente es falso y queremos configurarlo en true. Así que solo copiaré y pegaré eso y conectaré con gente y lo llevaré aquí así. Y lo compilaremos, volvemos a nuestro Blueprint de Animación. Y ahora sólo podemos conseguir que r se apunte desde nuestro plano de personaje. Usar eso para establecer R está dirigido en nuestro blueprint aquí. Entonces compilaremos, y ahora podemos probar esto para que le pegue a Play. Si dejé el botón del ratón, se puede ver que hacemos la transición a esa animación y todavía tenemos ese tiempo de transición de 1 segundo. Entonces va un poco lento. Entonces regresaremos a nuestra locomoción. Es como la regla. Cambia la duración, di 0 para hacer lo mismo para la otra regla. Entonces 0.2 aquí también. Entonces lo compilaremos, y ahora podremos volver a probarlo. Y presionaré el botón izquierdo del ratón. Se puede ver que ahora estamos haciendo la transición a esa animación. Ahora bien, esto sí funciona, pero tal vez tengas mucho código pasando en tu blueprint de animación. Y no necesitas que este código se ejecute en realidad cada fotograma. Entonces lo que podríamos hacer es si eliminamos esto, en realidad podemos establecer el código de nuestro ThirdPersonCharacter. En su lugar. Iremos al ThirdPersonCharacter. Obtendremos nuestro Componente Mesh, arrastraremos hacia fuera de eso y obtendremos una instancia M. Si recuerdas, esto nos da una referencia a nuestro plan de animación, pero aún tenemos que costar a nuestro ABP subrayado dinero porque ese es nuestro plan de animación. Y vamos a tener ambos de estos nodos ejecutar este código. Entonces no importa si apuntamos o sin nombre. Entonces queremos arrastrar hacia fuera y queremos hacer set no es. Ahora nos permite establecer nuestra variable apuntada. Ese es el Blueprint de Animación. Y solo queremos que r se apunte a partir de este plano y usar eso para configurarlo. Así que ahora podemos probar esto si puedo tirar, golpear play, y cuando salí haciendo clic del mouse y veo que sigue funcionando usando ese nuevo código que acabamos de escribir. Ahora puedes notar si dejamos botón del ratón y empezamos a moverte, ya no obtenemos ninguna animación de movimiento. Ahora eso es porque en realidad no establecimos ninguna regla para la transición de nuestro apuntado. Si nos dirigimos de nuevo a la locomoción de nuestro apuntado a nuestra caminata slash run. Por lo que sólo va a quedar atascado en nuestro apuntado hasta que nos deshagamos del clic izquierdo del mouse y luego cambiará a inactivo. Y si nos estamos moviendo, entonces cambiará a caminar. Por lo que podríamos agregar algunas reglas nuevas aquí que la transición de apuntado a caminar a la grupa de corte. Por lo que vamos a arrastrar fuera de apuntado e ir a caminar slash run así. Y vamos a usar el mismo código que usamos de nuestro ídolo aquí donde dice debe moverse. Entonces abriremos esa regla. Obtendremos la variable should move. Esto será cierto. Si nuestro personaje se está moviendo, entonces nos dirigiremos de nuevo a la locomoción y compilaremos. Y ahora cuando presionamos Play, si me dejo el botón del ratón, se puede ver apuntamos y si empiezo a moverme, nos volvemos a hacer la transición a nuestras animaciones de carrera de slash walk. Y lo ven si salgo de la caminata slash corriendo, volvemos a nuestras metas y podemos desenganchar, como lo hicimos antes. Ahora, por último, solo quería cubrir los alias de estancia. Así que si salimos del editor de plano aquí y regresamos a nuestro Animation Blueprint, alias de estancia son realmente útiles para mantener tus estados de animación un poco más pequeños. Entonces montaremos un ejemplo rápido de uno. Haremos clic derecho y usaremos un alias de estado y simplemente llamaremos a esto comprobaciones dirigidas. Por ejemplo, aquí tenemos nuestra verificación de puntería seleccionada. Nos vamos a conectar a nuestro apuntado. Y vamos a usar esta nueva regla para determinar si debemos o no entrar al estado apuntado. Entonces nos apuntaremos y conectaremos eso así. Entonces vamos a eliminar aquí estas reglas que se conectan a nuestro ocioso, a nuestros objetivos. También vamos a eliminar la regla que lo conecta a la carrera de banda de paseo. Entonces ahora estos dos bloques no están conectados. Pero si seleccionamos aquí nuestras comprobaciones de puntería, podemos asumir para qué estados queremos que se presente. Por lo que podríamos tomar en ocioso y podríamos llevar a casa paseo slash run. Lo que esto significa es que si estamos en nuestro estado ocioso o nuestro walk slash ejecutamos este alias, ejecutaremos esta comprobación. Entonces en realidad no necesitamos tener conexiones directas de ninguno de estos estados. Dos están apuntados porque ahora estamos usando este alias con estos dos estados tectónicos. Para que cuando estemos en estos estados, esto ejecute cualquiera de las reglas que estén conectadas a ella. Ahora necesitamos establecer un camino para ir de nuestras animaciones apuntadas a nuestro ocioso o nuestro paseo. Por lo que haremos clic con el botón derecho Agregar un nuevo alias de estado. esto lo llamaremos chequeos de movimiento. Usando esto, vamos a crear una regla a nuestro ocioso. Y esto será, está apuntado, tiene que ser falso. Entonces nos arrastraremos de sus objetivos y no lo haremos. Y nos desplazaremos hacia arriba y no seamos extremidades y conectaremos aquí arriba. Y entonces para nuestro movimiento se arrastrará hacia fuera y nos conectaremos hasta nuestra caminata slash run. Y haremos lo mismo que queremos. Está apuntado, es en realidad vamos a utilizar debe moverse. Porque cuando empezamos a movernos, queremos simplemente usar nuestras animaciones de movimiento para querer debe pasar a verdadero. Ahora, una cosa que sí necesitamos agregar a nuestra regla, entrar en nuestro apuntado ya que también necesitamos agregar que no queremos que se ejecute si nos estamos moviendo. Entonces voy a abrir nuestro aquí. Nosotros sólo vamos a sumar un final. Entonces lo haremos y conectaremos la salida a nuestros resultados. Por lo que queremos y debemos movernos, deben ser verdad o no deben ser verdad. Queremos que esto sea un NO, NO Booleano así. Entonces nuestra regla aquí sólo será verdadera si está apuntada, es verdadera y si debe moverse es falsa. Entonces solo para darles un resumen muy rápido de lo que hace esto cuando estamos en nuestro ocioso o nuestros estados walk slash run están dirigidos a check run. Y lo hará porque aquí tenemos a esos dos estados marcados. Y correrá todas las reglas conectadas a ella. Entonces se va a ejecutar este chequeo. Se comprobará está apuntado a verdadero y se debe mover falso. Y si lo es, entonces ejecutaremos nuestras animaciones apuntadas. Y entonces mientras estamos apuntando animaciones corriendo, este movimiento comprueba correrá porque tenemos, oh, se me olvidó tomar eso en realidad. Seleccionaremos eso y tick se nombran. Entonces, debido a que hemos marcado nuestro apuntado cada vez que estamos en ese estado, se ejecutarán comprobaciones de movimiento y eso comprobará que ambos roles aquí para ver que FEV1 son ciertos. Por lo que ahora vamos a probar esto. Compilaremos, le pegaremos a Play, y ahora podemos apuntar. Y si apunto y empiezo a moverme, se puede ver que empezamos a ejecutar esas animaciones de movimiento en su lugar. Si nos detenemos, entramos de nuevo en las animaciones apuntadas. Eso es sólo una breve reseña de los alias. Realmente no tiene mucho sentido cuando tenemos una pequeña máquina de estado de locomoción como esta. Pero si tienes algo que se está volviendo más complicado, tal vez tengas muchas reglas recorriendo todo el lugar. Puedes usar estos para ordenar tus planos de animación. Entonces eso es todo por esta lección. Esperemos que ahora entiendas un poco más acerca de los estados y reglas de animación. 50. Planes de animación (mezcla espacios): Oigan a todos. En esta lección vamos a echar un vistazo más de cerca a los espacios de mezcla de animación. Ahora, si recuerdas de nuestra lección general de Animation Blueprint, mezcla espacios que yo iba a pasar sin problemas de una animación a otra. Y podemos echar un vistazo a un ejemplo de esto entrando en nuestro dinero Animation Blueprint. Después iremos a la gráfica Anim que a la locomoción, después caminaremos slash run. Y luego aquí tenemos un espacio de mezcla por nodo. Ahora, este nodo toma un valor como nuestra velocidad de tierra aquí y lo usa para determinar qué animación debe reproducir desde nuestro espacio de mezcla. Si seleccionamos este nodo y pasamos al panel Detalles, podemos encontrar qué espacio de mezcla está configurado para usar aquí en la opción de espacio de mezcla. Si pasas el cursor por encima, guarda el nombre del espacio de mezcla. Entonces el nuestro es el MM walk run. También podemos dar clic en este botón aquí para llevarnos a ese espacio de mezcla. Entonces haremos eso y luego lo abriremos. Ahora como pueden ver, tenemos esta vista gráfica aquí abajo, y aquí es donde definimos nuestras animaciones para las diferentes velocidades. Entonces aquí puedes ver que la velocidad es 0, y aquí arriba la velocidad es de 500 Para 0. Si colocamos el cursor sobre este punto, se puede ver que la animación actual es la animación walk-in place. Luego más adelante en el valor 230, tenemos una animación diferente y esa es nuestra animación de paseo hacia adelante. Y luego por último al final, velocidad 500, jugamos o ejecutamos animación. Si sostengo Control y muevo mi mouse a lo largo de la línea de tiempo aquí se puede ver a medida que aumenta el valor, nuestra animación cambia. Por lo que a medida que nos acercamos a nuestra animación corrida aquí, puede ver que se acerca más a esa animación. Así que esto es lo que nos permite transición sin problemas entre digamos, una animación de paseo y yo ejecuto animación y usa ese valor de velocidad, que nuestro blueprint de animación aquí está suministrando, y eso es nuestro valor de velocidad de desplazamiento. Ahora, caminaré corriendo. Blend space es un espacio de mezcla 1D, lo que significa que solo tiene una variable que controla qué animación se está reproduciendo. Ese es nuestro valor de velocidad aquí. Pero también podemos tener espacios de mezcla que utilicen dos variables. Podemos tener una dirección y la velocidad que controla qué animación se va a reproducir. Es para esta lección, vamos a configurar un espacio de mezcla 2D. Entonces para hacer eso, vamos a dirigirnos al Navegador de Contenido. Yo sólo voy a ir a la carpeta Animaciones. Dentro de la carpeta maniquíes, vamos a hacer clic derecho, ir a animación. Y luego quieres encontrar la opción de espacio de mezcla. Puedes ver que hay la opción 1D aquí, o el espacio de mezcla aquí, que es el 2D. Entonces vamos a seleccionar esa. Entonces vamos a escoger un esqueleto. Voy a usar el esqueleto que viene con la plantilla de tercera persona. Entonces ese es este de arriba aquí se puede ver que el camino es de cuatro personajes, maniquíes y luego mallas. Por lo que vamos a seleccionar eso y que sin nombre a apuntado paseo mezcla espacio. Y eso lo abriremos. Ahora aquí puedes ver que tenemos una gráfica de aspecto similar a la de nuestra 1D. Pero en lugar de solo tener el valor horizontal, también tenemos un valor vertical que nos permite establecer animaciones en cualquier lugar de esta gráfica. Y entonces podremos controlarlos a ambos con una variable de dirección y velocidad. Entonces, para empezar, necesitamos renombrar y configurar estos ejes. Entonces comenzaremos con el eje horizontal aquí. Puedes hacer clic en el desplegable si no está abierto para ti, vamos a nombrar el nuestro a dirección, pues este eje controlará la dirección que usen las animaciones que queremos reproducir. Entonces queremos que el valor mínimo del eje sea uno o menos uno AT y el valor máximo sea 180. Y eso significa que podemos establecer una animación para cada dirección posible que vaya nuestro personaje. Entonces necesitamos establecer el eje vertical que puedas simplemente abrir eso aquí abajo. Y vamos a poner este a velocidad. Ahora, el valor máximo que voy a establecer para decir 600, y dejaremos el valor mínimo a 0. Por lo que cualquier animación que coloquemos aquí abajo en la parte inferior de la gráfica se usará cuando nuestro personaje esté inactivo o no se mueva. Y luego a medida que avanzamos, las animaciones se usarán para velocidades de movimiento más rápidas aquí. Ahora algo que me gusta hacer es asumir la opción de ajuste a rejilla en el eje horizontal y luego el eje vertical. Y lo que esto va a hacer es cuando arrastramos en nuestras animaciones, realidad se encajarán a estos puntos de cuadrícula. Ahora bien, esta es una preferencia personal, pero recomiendo tener estas encendidas. Simplemente hace que configurar tus animaciones sea mucho más fácil. Ahora estamos listos para establecer algunas animaciones en nuestro espacio de mezcla. Vamos a empezar con la animación se usa cuando estamos a 0 velocidad. Entonces para eso, voy a buscar ociosos en nuestro navegador de activos aquí. Y voy a estar usando el rifle ocioso ADS. Ahora si no tienes estas animaciones, puedes ver el inicio de la lección de montaje y te mostraré cómo agregar estas animaciones a tu proyecto. Pero si lo haces, podemos simplemente arrastrar esto y queremos que esto esté en el centro de abajo, así que solo voy a soltar eso aquí. También lo vamos a añadir a la parte inferior izquierda y a la parte inferior derecha así. Ahora la razón por la que hacemos esto es porque es cuando nuestra velocidad es 0, entonces nuestro personaje no se está moviendo, por lo que nuestro valor de dirección en realidad no importa. Todo lo que necesitamos hacer es tener nuestro juego de animación ociosa. A continuación, necesitamos una animación de paseo hacia adelante, y esta será la animación que se reproduzca cuando nuestra dirección sea 0. Por lo que será en la parte superior aquí. Entonces para eso, voy a buscar FWD y el navegador de activos, y vamos a usar la animación de caminata hacia adelante del rifle. Así que arrastra eso y suéltalo en la parte superior aquí. Ahora, si mantenemos el control, podemos arrastrar y realmente podemos ver nuestra animación de caminata ahora funcionando mientras arrastramos nuestro valor hasta la animación de caminar hacia adelante. A continuación necesitamos nuestra animación hacia atrás. Entonces para eso, vamos a buscar será WD. Y vamos a usar el rifle caminar hacia atrás. Y vamos a enchufar eso en el punto de extrema izquierda aquí. Y también al punto de extrema derecha aquí. Ahora la razón por la que hacemos eso es porque dondequiera que nuestros personajes dirección 180 o menos uno AT endirección 180 o menos uno AT ambos van a ir hacia atrás. Entonces cualquiera de los dos queremos estar jugando esa animación hacia atrás. A continuación queremos nuestra animación de izquierda. Entonces en nuestro buscador de activos, vamos a buscar a la izquierda y queremos que el rifle camine a la izquierda. Entonces voy a arrastrar eso a este punto cadera. Y luego queremos la animación adecuada. Entonces buscaremos el derecho. Y queremos que el rifle camine, ¿no? Y eso va a subir aquí arriba así. Ahora cuando mantenemos el control, podemos controlar qué animación se va a reproducir dependiendo de nuestra dirección y también de nuestra velocidad también. Ahora vamos a usar este nuevo espacio de mezcla dentro de nuestro blueprint de animación. Entonces, para hacer eso, vamos a dirigirnos a nuestro plano de dinero. Ahora vamos a agregar un nuevo estado que se va a usar cuándo, dónde apuntó y mientras nos movemos. Entonces para hacer eso, vamos a hacer clic derecho y agregar un nuevo estado. Voy a llamar así a este movimiento apuntado. Ahora vamos a necesitar una regla que vaya de nuestro movimiento apuntado a nuestro apuntado. Y dentro de esta fila, vamos a comprobar está apuntado a verdadero. Y también vamos a revisar, ¿nos estamos moviendo? Entonces haremos un AND booleano y queremos conseguir debemos movernos. Entonces si ambos son ciertos, entonces devolvemos el resultado. Y eso nos permitirá pasar de apuntado a nuestro movimiento apuntado. Ahora queremos hacer la transición de nuevo a apuntado de nuestro movimiento apuntado. Dejamos de movernos. Porlo que vamos a abrir esa regla va a conseguir está apuntada. Y queremos comprobar es debe moverse falso. Por lo que se va a conseguir debe moverse. Queremos utilizar un NOT nodos booleanos. Entonces NO booleano. Y luego de vuelta en la locomoción, necesitamos sumar una fila yendo de nuestra puntería para comprobar dos son movimiento apuntado porque si ya nos estamos moviendo y empezamos a apuntar, queremos transitar al movimiento apuntado estado. Por lo que arrastraremos de la verificación apuntada al movimiento apuntado. Y abriremos nuestro Rohit. Y otra vez, vamos a conseguir está apuntado. Y también queremos comprobar es debe moverse verdad también. Por lo que vamos a conseguir debe moverse así. Después nos dirigiremos de nuevo a la locomoción. Entonces, hasta el momento tenemos una puesta en marcha para que cuando se estén ejecutando las comprobaciones apuntadas, se comprueben todo lo que apuntamos. Y si lo estamos, entraremos en nuestro estado de puntería. Y si estamos apuntados y moviéndonos en su lugar, iremos a nuestro movimiento apuntado. Ahora si estamos en apuntado y empezamos a movernos, pasará de apuntado a apuntar a movimiento. Y si estamos en movimiento apuntado y dejamos de movernos, haremos la transición hacia el estado apuntado. Ahora hay un par de otros cambios que tenemos que hacer. Tenemos que seleccionar nuestros controles de movimiento, permanecer alias. Tenemos que asumir el movimiento apuntado cadera y estamos haciendo eso. Entonces comprobamos si fueron apuntados y si no lo estamos, entonces queremos hacer la transición de nuevo a nuestras animaciones normales ociosas o normales de ejecución desde nuestros estados de puntería. Ahora, necesitamos cambiar una de nuestras reglas conectadas hasta nuestro control de movimiento aquí, y esa es esta de aquí. Entonces si abrimos eso actualmente, esto es sólo comprobar si nos estamos moviendo. Queremos cambiar esto porque ahora tenemos un estado de movimiento. No queremos hacer la transición a caminar slash run si sólo nos estamos moviendo. Por lo que necesitamos agregar un cheque para asegurarnos de que está apuntado es falso. Entonces queremos un saber booleano para esto. Nos arrastraremos de nuevo y devolveremos este valor aquí. Entonces ahora si nos dirigimos de nuevo a la locomoción, si estamos en movimiento Ames y dejamos de apuntar, hará la transición de nuevo a nuestro paseo slash run porque tenemos este cheque aquí que los cheques se apunta falso y debe moverse verdadero. Y si lo es, entonces nos hará la transición del movimiento apuntado o apuntado a caminar slash run. A continuación, necesitamos realmente configurar nuestro espacio de mezcla y somos movimiento apuntado. Entonces eso lo abriremos. Vamos a arrastrar hacia fuera desde el resultado y voy a buscar reproductor de espacio de mezcla. Y usaremos el espacio de mezcla. Toca una nota. Después lo seleccionaremos y nos desplazaremos hacia abajo hasta la opción de espacio de mezcla en la parte inferior aquí. Tenemos que ajustar esto a nuestro nuevo espacio de mezcla. Entonces ese es el espacio de mezcla de caminata apuntado aquí. Usted ve que en realidad está actualizado nuestras entradas para nuestra dirección y nuestras variables de velocidad. Así que para la velocidad sólo se arrastrará hacia fuera y no obtener velocidad de tierra así. Ahora, para la dirección, necesitamos una nueva variable. Para ello, nos dirigiremos al Event Graph. Y aquí vamos a crear una nueva variable. Entonces lo haremos ahora y llamaremos a esta dirección. Y queremos que esto sea una carroza. Por lo que vamos a establecer que a un flotador y compilar. Ahora necesitamos esto para actualizar cada fotograma, así que vamos a agregarlo al código de aquí abajo. Por lo que añadiremos un nuevo lápiz a la secuencia, crearemos un nodo conjunto. Y conectaremos esto a nuestra secuencia. Sólo voy a hacer doble clic en la línea para crear un redireccionamiento. Ahora, sólo para mantener las cosas ordenadas. Entonces, para conseguir nuestra dirección, necesitamos nuestras velocidades. Entonces vamos a hacer clic derecho y buscar velocidad. Y si nos desplazamos hacia abajo, deberíamos encontrar la opción de velocidad. Entonces necesitamos nuestra rotación actual. Entonces hagámoslo. Vamos a hacer clic con el botón derecho y hacer el carácter de brecha y utilizar la variable de carácter de espacio. Arrastra hacia fuera de eso y obtén rotación. Y usaremos la rotación activa de gets. Entonces vamos a hacer clic derecho y buscar calcular dirección. Y esta es una función que en realidad está integrada en todo Animation Blueprint, que es realmente útil. Simplemente nos permite enchufar nuestra velocidad. Rotación y eso nos da nuestra dirección que podemos simplemente enchufar directamente a nuestra nota de set aquí. Ahora podemos regresar a nuestra gráfica Anim, luego a la locomoción. Y luego dos son movimiento apuntado. Y podemos agarrar esa variable de dirección, enchufar eso en nuestro nodo aquí. Entonces ahora podemos compilar y podemos probar esto. Entonces le pegaremos a Play. Si me fui del mouse, se puede ver que apuntamos correctamente y si empiezo a moverme, realidad estamos jugando en nuevas animaciones de caminata apuntadas. Si hago clic izquierdo mientras me muevo, hacemos la transición de nuevo a nuestras animaciones normales en ejecución. Ahora si el tuyo no está funcionando, puedes volver a la máquina del estado de locomoción y simplemente asegurarte de que todas las reglas que has configurado nuestras correctas. Por lo que se ven como los míos lo hacen ahora mismo. El de aquí abajo. Y asegúrate de que en los controles de movimiento sí tengas marcado el movimiento apuntado. Ahora actualmente nuestro personaje no está usando nuestras animaciones a la izquierda, derecha o hacia atrás. Y eso es por un escenario que hemos encendido en el Character Blueprint. Entonces vamos a ir a la carpeta de tercera persona, planos, Then Third PersonCharacter, y heredar. Vamos a seleccionar el Componente Movimiento de Personajes. Después vamos a desplazarnos hacia abajo hasta los ajustes de rotación y vamos a desmarcar orientar la rotación al movimiento. Y esto detiene a nuestro personaje frente a la dirección en la que nos movemos. Ahora podemos probar nuestras animaciones, compilaremos y pulsaremos Play. Y ahora cuando me moví hacia la derecha, puede ver que aramos animaciones derecha, animaciones izquierda o izquierda, y luego se reproducen animaciones hacia atrás o hacia atrás. Ahora puedes notar si haces clic izquierdo y empezamos a movernos hacia un lado, nuestro personaje en realidad ya no se mueve hacia un lado. Simplemente está avanzando. Ahora la razón que está sucediendo está en nuestro plano de animación. El estado de ejecución de barra diagonal de paseo solo utiliza un espacio de mezcla 1D, por lo que no tiene una entrada de dirección. Todo lo que tiene es una entrada de velocidad. Y por eso el personaje en tercera persona tiene encendido por defecto, la rotación de Oriente al movimiento. Ahora, hay algunos ajustes más en el espacio de mezcla de animación que quería mostrarles. Entonces ahora tenemos las divisiones de la grilla, esto controla cuántos espacios tenemos en nuestra grilla. Entonces si incremento esto para decir, ocho a ocho aquí también en nuestro eje vertical, ven que ahora tenemos más bloques en nuestra cuadrícula. Esto es útil para si está utilizando el ajuste a la cuadrícula activado. Y esto solo te da más puntos en la cuadrícula para ajustar para decir si querías una animación en un lugar específico, puedes aumentar estos valores para obtener un punto de ajuste allí. Entonces tenemos el tiempo de suavizado. Ahora bien, este es el tiempo que tarda una animación en transitar a otra animación. Si tuviéramos que poner esto realmente alto, digamos cinco segundos, por ejemplo. Ahora cuando golpeamos play y me moví hacia la derecha, verás que me lleva cinco segundos hacer la transición en realidad a nuestra animación de movimiento derecho. Por lo que normalmente querrías usar valores más pequeños para esto. Digamos, por ejemplo, 0.250.25 aquí abajo también, sólo para dar un poco de tiempo de transición entre moverse entre animaciones. Pero por defecto estos están configurados en 0, por lo que la animación es solo transición instantáneamente entre sí. Por lo que sólo podemos establecer esos en 0 por ahora. También hay algunos ajustes dentro de nuestro Blueprint de Animación. Entonces si tuviéramos eso, entonces iremos a locomoción, movimiento apuntado. Y si seleccionamos este nodo y nos desplazamos hasta la parte inferior, puedes ver que hay algunas configuraciones adicionales aquí. Tenemos la jugada violación. Entonces así de rápido se reproducirán las animaciones en nuestro espacio de mezcla. Uno es velocidad normal, dos sería el doble de velocidad normal. A continuación está el bucle. Por lo general quieres que esto quede encendido para los espacios de mezcla, pero si alguna vez quieres desactivar esto, puedes apagarlo aquí. También tenemos la posición de salida. Por lo que si querías que las animaciones comenzaran en un momento diferente a 0, puedes cambiarlo aquí. Luego, por último, tenemos nuestra configuración de espacio de mezcla. Así es como cambiamos qué espacio de botones estamos usando realmente en este nodo. Entonces eso es todo por esta lección, pero estaremos usando espacios de mezcla en nuestras lecciones futuras. 51. Planes de animación (Apunta offsets): Oigan a todos. En esta lección vamos a echar un vistazo a las compensaciones de puntería. Ahora, el objetivo de los conjuntos nos permite realmente tener nuestro personaje mirar en una dirección específica. Esto puede ser útil para si tienes un arma y realmente quieres que el personaje mire en la dirección a la que apunta tu cámara. Ahora, el objetivo de los conjuntos en realidad funciona muy similar a los espacios de mezcla. Tenemos una gráfica en la que podemos colocar animaciones, y luego usamos dos variables que controlan qué animaciones queremos reproducir. Ahora hagamos esto. Vamosa necesitar algo de animación, así que voy a X fuera de jugar NetTutor aquí, voy a estar usando algunas animaciones que se incluyen con la carpeta Animaciones de la lección. Si no tienes esto en tus proyectos, muestro cómo agregar estos al inicio de la lección de montaje. Entonces si vas a echar un vistazo a eso, eso te explicará cómo puedes meter estas animaciones en tu proyecto. Ahora si nos desplazamos hacia abajo, encontraremos las animaciones EO. Ahora esto significa AIM offset, y se puede ver que tenemos bastantes de ellos. Y estas son animaciones para cada dirección a la que el personaje puede estar enfrentando. Si abrimos esta animación hacia abajo aquí, por ejemplo, puedes ver que es una animación de un solo fotograma, lo que significa que en realidad no anima al personaje, es solo un fotograma de nuestro personaje mirando hacia abajo. Entonces si cerramos esto y vamos a otro, digamos nuestra animación aquí. Esta es una animación que es solo un fotograma, pero nuestro personaje está mirando a la izquierda. Ahora, usando nuestro offset de puntería, vamos a recombinar todas estas animaciones y luego controlar cuál queremos reproducir dependiendo de las dos entradas variables. Y esas entradas van a ser la rotación de nuestra cámara. Y eso nos permitirá controlar en qué dirección se enfrentan nuestros personajes usando nuestra cámara. Para empezar, cerraremos esto y vamos a crear un nuevo offset AME. Voy a hacer esto dentro de los maniquíes, luego animaciones. Así que haremos clic en el botón Agregar aquí, luego diríjase a la animación y desea encontrar un desplazamiento más ahora, similar a los espacios de mezcla, que es una opción 1D que le permite controlar el objetivo de establececon una sola variable, pero vamos a usar solo el desplazamiento normal de puntería, por lo que creará uno de esos. Y ahora necesitamos seleccionar nuestro esqueleto. Voy a seleccionar el esqueleto que viene con la plantilla de tercera persona. Así que ese es éste aquí en CSS path maniquíes mallas. Entonces sabemos que esa es la correcta. Eso va a crear un nuevo A-Master. Entonces yo sólo voy a llamar a esto apuntado A0. Por lo que sabemos que este es el dirigido a la animación offset. Y entonces eso lo abriremos. Yo sólo voy a arrastrar el mío hasta la barra superior aquí. Entonces ahora estamos dentro de nuestro desplazamiento de puntería. puede ver que se ve muy similar a un espacio de mezcla. Tenemos nuestra gráfica aquí abajo. Tenemos los mismos ajustes de eje horizontal y vertical aquí, y obtenemos nuestra vista previa en la parte superior aquí. Así que para empezar, necesitamos configurar nuestra gráfica nombrando nuestras variables aquí abajo. Entonces nuestra superior para horizontal, queremos York. Vamos a establecer el mínimo cinco, U2 menos 90, y el valor máximo a positivo 90. Así que eso le dará a nuestro personaje la capacidad de reproducir una animación cuando estamos mirando todo el camino a la derecha y todo el camino a la izquierda. Entonces hacemos lo mismo para el pitch. Entonces vamos a nombrar nuestro eje vertical pitch. Y el valor mínimo será menos 90, y el valor máximo será positivo 90. Y esto significa que podremos establecer una animación para todo el camino hacia arriba y todo el camino mirando hacia abajo. Siguiente diapositiva, nuestro espacio de mezcla es, me gustaría tomar en la opción snap to grid aquí y también aquí abajo, sólo para que cuando arrastramos nuestras animaciones y sabemos que se están encajando a valores exactos. Ahora antes de empezar a agregar animaciones a nuestro offset de puntería, solo quería explicar un poco sobre lo que realmente hace. Ahora, objetivo de los sets usan animaciones aditivas, lo que significa que las animaciones que jugamos usando nuestro offset de puntería no reemplazan a la animación actual que se está reproduciendo en el personaje. En realidad se suman a esas animaciones. Esto significa que podemos tener nuestro offset de puntería jugando con nuestro personaje, mirando en una dirección mientras tocamos también, digamos, una animación ociosa para que el personaje respire. Pero para que hagamos esto, en realidad necesitamos cambiar la animación. Entonces vamos a estar usando un offset en animaciones aditivas. Ahora, tenemos que hacer esto todos modos porque en realidad no podremos colocar esas animaciones aquí hasta que estén configuradas como aditivas. Y te puedo mostrar que si nos desplazamos hacia abajo, deberíamos encontrar nuestras animaciones A0 aquí abajo. Si intento arrastrar uno, verás que en realidad no me deja, y dice tipo de animación aditiva no válido. Eso es porque actualmente todas nuestras animaciones A0 aquí no son aditivas todavía. Tenemos que entrar en ellos y cambiarlos para usar ajustes aditivos. Entonces hay un par de formas en que podemos hacer esto. Te voy a mostrar cómo cambiar estos ajustes en una animación. Y luego en realidad vamos a usar el editor de matrices para cambiar todos ellos a la misma configuración. Comenzará con el de arriba aquí. Esta es la A0, C, C. Así que esta es nuestra animación de centro. Sólo voy a hacer doble clic en eso para abrirlo. Ahora, en nuestros detalles de activos, vamos a desplazarnos hacia abajo hasta que encontremos la configuración aditiva aquí. Y actualmente se puede ver que está configurado en ningún aditivo, lo que significa que esto es sólo una animación normal, no configurado como una animación aditiva todavía. Ahora, para las compensaciones de AIM, en realidad necesitamos cambiar esto al espacio de malla, lo que significa que esta animación calculará los cambios. Por lo que se debe hacer al carácter y al espacio de malla en lugar del espacio local para los desplazamientos de AIM, siempre se desea utilizar el espacio MSS porque ese es el único que soporta. Después vamos a cambiar el tipo de pose base a la animación seleccionada escalada aquí así. Ahora esto nos permite establecer una animación que consideramos como el punto de partida por defecto para esta animación aditiva. Entonces para esta animación, estamos en el centro, y esa es la real que queremos usar como su referencia. Así que en realidad vamos a establecer esto a la animación que estamos dentro en este momento. Buscaremos CC y usaremos el rifle MM cadera ociosa, FAI, AOC. Mira, esto es sólo nuestra animación de fotograma único centro. Ahora, esa es la animación que en realidad vamos a usar para todos nuestros objetivos fuera de las animaciones de set aquí, porque ese es el punto central y ahí es donde queremos que nuestras animaciones aditivas se sumen. Así que ahora hemos configurado esta animación como aditivo y podremos añadir esto a nuestro offset de puntería ahora, pero todavía tenemos que hacer esto para todas estas animaciones de aquí abajo. Ahora podríamos ir a través de cada uno a la vez y configurar estos ajustes de la misma manera, pero hay una manera más rápida de hacer esto. Entonces lo que haremos es guardar y pasar a la carpeta de animación de la lección. Nos desplazaremos hacia abajo hasta cerca de la parte inferior, y solo vamos a seleccionar todas nuestras animaciones de desplazamiento de objetivo aparte de nuestra central porque ya acabamos de configurar eso para que mantendremos el control y selecciona todas estas aquí y sigue bajando hasta que las tengamos todas. Después haremos clic derecho y queremos ir a acciones de activos, luego a editar en bloque vía matriz de propiedades. Y eso abrirá esta ventana de aquí. Ahora bien, si no has usado esta herramienta antes, básicamente te permite seleccionar múltiples activos en el Navegador de contenido y cambiar todos sus ajustes al mismo tiempo. Entonces para hacer esto, solo voy a clic en los activos y hacer Control a, y eso seleccionará todos nuestros activos aquí. Después en el editor de propiedades, se puede ver que tenemos los mismos ajustes que teníamos cuando estábamos dentro de la animación. Aquí sólo vamos a desplazarnos hacia abajo hasta la parte inferior. Queremos encontrar los ajustes aditivos. Entonces vamos a cambiar esto de no aditivo al espacio de malla como lo hicimos antes. Después cambiaremos esto a la animación seleccionada a escala. Entonces queremos seleccionar la animación y el fin de semana. Queremos establecer esto en la animación CC para nuestro offset de puntería, así que seleccionaremos eso. Y ahora podemos cerrar esto y todas nuestras animaciones ahora estarán usando esos ajustes. Entonces si elegimos uno al azar como nuestra izquierda aquí abajo, se puede ver si me desplazo hacia abajo, encontramos la configuración aditiva. Se puede ver que ahora hay configurados para nosotros. Así que ahora todas nuestras animaciones offset de objetivo están configuradas como aditivos. Podemos volver a nuestro desplazamiento de puntería. Entonces solo voy a cerrar estas dos animaciones por ahora. Y iremos a los maniquíes que a la carpeta Animaciones y abriremos nuestro apuntado. Simplemente voy a arrastrar esto hasta la cima otra vez. Entonces, lo último que debemos hacer antes de empezar a agregar animaciones a nuestro offset de puntería es establecer una animación de vista previa. Y esto solo nos da una animación que se previsualizará encima de nuestro offset de puntería para que podamos ver cómo se ve. Por lo que se desplazará hacia abajo hasta la parte inferior aquí. Ahora para la pose base de vista previa, no queremos usar una animación aditiva, lo contrario, simplemente no veremos una vista previa. Entonces vamos a buscar ociosos. Y vamos a encontrar el, voy a usar el rifle cadera ociosa FAI aquí porque nuestras compensaciones de puntería son en realidad para la cadera rápido, así que seleccionaremos eso. Entonces. Yo sólo voy a ahorrar y luego cerrar y reabrir nuestra puntería compensada así. Ahora estamos listos para empezar a agregar animaciones a nuestra gráfica aquí abajo. En la barra de búsqueda, voy a buscar la animación del centro porque esa es la animación que queremos usar. Cuando son tu pitch es 0, porque ese va a ser el punto central. Voy a buscar CC y vamos a arrastrarlo al centro así. Ahora podrías obtener este tema donde desaparezca la vista previa. Parece haber un error si te desplazas hacia abajo y simplemente restablecemos el valor para nuestra vista previa y luego seleccionamos, digamos una animación diferente. Sólo volveremos a buscar ociosos. Seleccionaré MFA ocioso, y luego volveré a buscar ocioso. Seleccionaremos nuestro rifle, cadera ociosa, FAI, como hicimos antes y ya puedes ver que ahora está funcionando. No sé por qué pasa eso. Creo que es un bug del motor, así que ojalá se arregle pronto. A continuación necesitamos agregar cualquier otra animación. Entonces por aquí en la barra de búsqueda, voy a buscar CU, y eso significa Centro arriba. Entonces vamos a sumar esa animación aquí arriba porque queremos que para nuestros personajes centrados en tu trasero, sean 90 en el terreno de juego. Entonces agregaré eso aquí. Pueden ver nuestros avances rotos de nuevo, eso está bien. Lo arreglaremos una vez que hayamos terminado de agregar o animaciones. Y así haremos otra búsqueda y vamos a buscar c, d. y eso significa Centro abajo. Entonces agregaremos eso al centro en la parte inferior aquí. Y de nuevo, esto es para cuando R es 0 y nuestros lanzamientos menos 90. A continuación haremos el lado izquierdo. Entonces buscaré L, C, que significa centro izquierdo. Entonces agregaremos eso por aquí. Esto será para nuestro pitch, o lo siento, estás siendo menos 90 y nuestro pitch siendo 0. Entonces queremos izquierda arriba, así que LU, y vamos a sumar esto la parte de arriba aquí, luego Aldi y añadimos eso al fondo. Entonces haremos el lado derecho. Entonces haremos LC, RC, Eso es justo al centro de lo que queremos. Justo arriba. Y eso es que un golpe hacia abajo se suman a la esquina superior derecha. Y luego queremos nuestra D, que está justo abajo, y lo agregaremos a la esquina inferior derecha así. Y ahora podemos salvar esto. A continuación, podemos arreglar nuestra vista previa, así que haremos lo que hicimos antes, que restablece el valor. Entonces buscaremos ociosos. Pondré esto en nuestra animación ociosa, y luego volveremos a buscar ociosos. Y usaremos el fuego de cadera ideal así. Ahora este error no afectará cómo funciona nuestro offset de puntería en el juego. Es sólo un tema de vista previa, así que no te preocupes demasiado por eso. Pero ahora en realidad podemos probar esto. Así que mantenemos el control y movemos nuestro mouse y ahora puedes ver a nuestros personajes usando esos offsets de puntería que acabamos de configurar. También puedes ver que nuestra animación ociosa todavía se está reproduciendo, pesar de que estamos agregando encima de esa animación nuestro offset de puntería. Y así es como funcionan las animaciones aditivas. Agregan la información adicional a la animación que se está reproduciendo actualmente. Ahora estamos listos para configurar esto dentro de Art Animation Blueprint. Entonces lo que haremos es guardar esto y salir de eso. Entonces se abrirá con el dinero Animation Blueprint y queremos ir al Event Graph. Entonces, si no estás ahí, puedes simplemente hacer doble clic en eso e ingresarás al gráfico de eventos. Y vamos a necesitar dos nuevas variables. Entonces vamos a necesitar una variable para nuestro pitch y guiñada. Entonces añadiremos una nueva variable, voy a llamar a este pitch. Y queremos que esto sea una carroza. Entonces vamos a cambiar eso al tipo de flotación. Y haremos lo mismo para tu tema súper cool. Y ya está puesta en una carroza para nosotros. Entonces solo podemos compilar. A continuación, necesitamos algún código para establecer realmente estas variables. Entonces bajará por aquí y vamos a empezar con el personaje. Así que consigue carácter. Y queremos que obtengan variable de carácter. Y necesitamos conseguir la rotación de control. Así que obtén rotación controlada. Y esta es la rotación de nuestra cámara. Y luego queremos la rotación de nuestros personajes, así que obtén rotación de actores así. Entonces desde nuestra rotación de control arrastramos hacia fuera y vamos a buscar a Delta. Queremos que el Delta gire una nota, y queremos conectar b en nuestro eje de rotación así. Ahora, el nodo delta básicamente solo obtiene la diferencia entre nuestra rotación de control y la rotación de nuestro eje. Y esta es la dirección que queremos que realmente enfrente nuestro personaje. Ahora del valor de retorno, vamos a buscar nuestra intercepción. Y queremos nuestro interp2. Y queremos que este sea el objetivo porque esa es la dirección del objetivo que queremos que nuestro personaje mire. Y luego para corriente, vamos a usar nuestro pitch en sus valores. Ahora, podemos hacer clic con el botón derecho y hacer dividir la pluma golpeada así. Podemos enchufar los valores indirectamente. O si recombinas estos, podemos arrastrar y hacer y usar un nodo rotador make así. Podemos enchufar esos en aquí también. Entonces voy a conseguir el tuyo, enchufa eso a tu entrada y luego echaré, enchufa eso en el pitch y pondré así. Entonces para el tiempo delta, queremos usar el tiempo deltas del mundo. Entonces sólo vamos a arrastrar y buscar mundo. Y queremos conseguir los ajustes de Delta del mundo. Y luego para la velocidad de internet, esta es la rapidez con la que el valor, el valor devuelto pasará de actual al objetivo. Entonces cuanto más alto sea esto, más rápido a o B, voy a poner el mío a 20. Podemos volver y ajustar eso si queremos. A continuación, necesitamos sujetar los ángulos de inclinación y guiñada. Entonces para hacer eso, vamos a alargar y hacer descanso. El rotador de nuestro pitch se arrastrará hacia fuera y buscará la abrazadera. Queremos ángulo de sujeción. Ahora la razón por la que estamos haciendo esto es si recuerdas en nuestro offset de puntería, tenemos un valor mínimo de menos 90 y un valor positivo de 90. No queremos nuestro pitch o vas por encima o por debajo de esos valores. Entonces para ellos, vamos a establecer menos 90 para el máximo que queremos 90. Y luego copiaremos y pegaremos esto y conectaremos los grados de ángulo a la Z o a la salida aquí así. Ahora vamos a usar estos para establecer nuestras variables. Entonces para el de arriba, para el pitch, queremos poner pitch. Y cuando usamos nuestro nodo set pitch, y luego para el inferior, queremos establecer tu usará el conjunto de tu nodo así. Conecta estos juntos. Y luego vamos a conectar estos hasta nuestras secuencias. Entonces agrega un bolígrafo nuevo, arrastra desde eso y conecta eso hasta nuestro pitch. Sólo vas a hacer doble clic en él para agregar un nodo raíz. Y sólo arrastraremos eso por aquí sólo para mantener las cosas ordenadas así. Así que ahora estamos realmente listos para agregar nuestro offset de puntería a nuestra gráfica Anim. Entonces nos dirigimos para allá ahora. Solo queremos que nuestro desplazamiento de puntería afecte a la mitad superior de nuestro cuerpo, no a la mitad inferior debido a los efectos la mitad inferior, estropeará nuestras animaciones de movimiento. Ahora bien, si recuerdas de nuestra lección de nodos de mezcla, establecemos aquí una nota de mezcla por hueso que separará nuestro cuerpo inferior y superior y nos permite tener animaciones que solo se reproduzcan en la mitad superior. Y eso es lo que estamos haciendo aquí con nuestra ranura de montaje. Entonces vamos a agregar nuestro puntería, el offset a este código de aquí porque ese va a ser el código que se juega para la mitad superior. Entonces vamos a arrastrar esto solo para hacer un poco más de espacio. Ahora voy a tener mi offset de puntería jugado antes de mi ranura Montage. El motivo por el que hacemos esto es si tocamos un montaje, no quiero que lo haga, o no quiero que nuestra puntería compensada afecte al montaje. Entonces, si lo hacemos antes, entonces cuando toquemos un montaje, sobrescribirá nuestro offset de puntería de nuestro cajero principal. Vamos a arrastrar hacia fuera y buscar offset AIM. Y queremos el plano de desplazamiento de puntería. Entonces simplemente crearemos eso así. Ahora tenemos que establecer qué objetivo fuera de set que realmente queremos usar. Y esto es lo mismo que establecer espacios de mezcla. Así que aquí en el panel Detalles con las notas seleccionadas, nos desplazaremos hacia abajo. Se puede ver que en realidad dice espacio de mezcla, pero se entiende decir offset. Pero podemos dar clic en esto y se puede ver están apuntadas A0 está ahí. Entonces seleccionaremos eso. Al igual que una nota al margen, podría decir un offset para ti si Epic soluciona esto. Entonces para mí dice mezcla espacio para ti. Podría decir un offset, pero de todos modos puedes simplemente establecer tu compensación de puntería aquí. Después podrás ver nuestro aviso actualizado. Tenemos nuestras propias entradas de pitch, así que tomaremos esas variables y las conectaremos a nuestro nodo de compensación de objetivo. Así que agarraremos tu pitch y conectaremos eso al pitch así. Y ahora podemos compilar y probar esto. Por lo que nos dirigiremos a nuestro nivel presione Play. Se puede ver que ahora cuando estoy y miro a nuestro personaje realidad mira en la dirección que mi cámara está mirando. Si empezamos a movernos, puedes ver que nuestro espacio de mezcla sigue funcionando con las animaciones de movimiento de nuestro personaje, mientras que también nuestro objetivo compensa el trabajo. Y si miras de cerca o animación ociosa sigue reproduciéndose, pesar de que estamos apuntando en una dirección diferente con nuestro objetivo de SAP. Pero ahora si salgo de mi vista de apuntamiento con solo hacer clic izquierdo, se puede ver que mi animación normal por no sostener un arma es un poco rara. Y eso es porque estamos jugando ese offset apuntado. Incluso cuando no estamos apuntando, podemos cambiar esto en nuestro plano de animación con bastante facilidad, así que nos dirigiremos hacia allí. Ahora, aquí puedes ver que nuestro offset de puntería tiene un valor Alfa. Ahora, uno significa que el desplazamiento de puntería está activado y 0 significa que está apagado. Entonces, si es 0.5, se necesitaría la mitad de la influencia de nuestro desplazamiento de puntería. Ahora en realidad podemos cambiar esto a un booleano para simplemente encenderlo o apagarlo. Así que seleccionaremos nuestra nota, pasaremos al valor Alfa en C Valor Alfa, lo siento, el tipo de entrada alfa está actualmente establecido en valor flotante. Pero si cambio esto a valor booleano y veo que ahora tenemos este total habilitado casilla de garrapata. Y ahora sólo podemos agarrar barra es de ocho. Conecta eso al habilitado aquí. Y ahora cuando compilamos y le pegamos a Play, se puede ver ahora que no estoy apuntado. Verás son, la animación ociosa se está comportando correctamente. Pero cuando empiezo a apuntar, se puede ver que nuestra puntería compensada entonces comienza a funcionar de nuevo. Ahora hay otra forma en la que podemos encender y apagar nuestro desplazamiento de puntería. Así que si salimos de aquí y volver a nuestro Blueprint de Animación, en lugar de simplemente encender o apagar este nodo específicamente, realidad podríamos tener toda una sección de código ejecutar sólo cuando está dirigido como verdadero . Entonces, para hacer eso, podemos buscar la herramienta Blend, y podemos usar la biblia de poses de mezcla. Y usamos esto en nuestra lección de nodos de mezcla. Entonces si recuerdas, podemos tomar esto, enchufar esto en nuestra ranura por defecto aquí, y luego tomaremos corazón de desconexión está apuntado. Conecta esto al valor activo. Entonces si está apuntado como verdadero que el código verdadero aquí se ejecutará. Y si es falso, entonces se ejecutará el código de la gente. Entonces cuando no lo estamos, queremos que nuestros códigos apuntados grupa. Entonces conectaremos esto a true. Voy a dar clic en Habilitar pruebas. Por lo que siempre está habilitado. Si no estamos apuntados, solo podemos copiar pegar dinero en efectivo de nuestros principales estados. Enchufa eso aquí. Esto funcionará exactamente igual que antes. Para que podamos compilar hit Play. Verás cuando apunte a nuestros personajes haciendo nuestro puntería o nombre de archivo separado, puedes ver que nuestra animación está funcionando correctamente. Por lo que como puedes ver, ambas formas funcionan. Cuál uses, depende completamente de ti. De esta manera puede ser un poco más fácil si tuvieras, digamos, otros nodos que quieres que ejecute cuando se apunte como cierto, pues solo podrías conectar esos hasta aquí y tenerlos corriendo. ¿ Cuándo es esto cierto? Entonces eso es todo por esta lección. Esperemos que ahora entiendas cómo puedes configurar un offset de nombre y cómo puedes usarlos en tus proyectos. 52. Planes de animación (curvas y metadatos): Oigan a todos. En esta lección vamos a echar un vistazo a curvas de animación y metadatos. Ahora, esencialmente, las curvas y los metadatos nos permiten agregar información adicional a nuestras animaciones que luego podemos leer dentro de nuestro blueprint de animación cuando se reproducen. Entonces, para empezar, te mostraré cómo realmente creamos una nueva curva. Entonces iremos a una animación. Voy a elegir la animación run forward. Entonces para nosotros eso va a estar en la carpeta Quinn luego debajo de la r14. Y la razón por la que está en la carpeta Quinn y no en el dinero es si te acuerdas, nuestro blueprint de personajes en realidad está usando el Quinn Animation Blueprint. Y en eso tenemos el conjunto de animación Run 4D. Eso lo abriremos. Y aquí se puede ver que tenemos una línea de tiempo de curvas. Ahora para agregar una nueva curva, solo puede hacer clic en el desplegable aquí y podemos ir a la curva AD. Ahora como puedes ver, la plantilla de tercera persona viene con un montón de curvas incorporadas. Estos en realidad no hacen nada por defecto hasta que los usamos y realmente los configuramos. Pero por ahora sólo vamos a crear nuestras propias curvas. Entonces vamos a subir a Create curve, y vamos a ponerle un nombre. Voy a llamar al mío curva de ejemplo así. Y ves que eso ahora ha añadido nuestra curva de ejemplo a nuestra animación. Ahora esta curva permite que nuestra animación produzca un valor dependiendo de la hora en la animación en la que estemos. Por lo que actualmente puedes ver que solo está ajustado a 0. Entonces cuando toquemos esta animación, todo lo que nuestra curva va a hacer es generar un valor 0. Pero en realidad podemos editar esta curva para generar un valor diferente dependiendo qué punto de la animación que se esté reproduciendo actualmente. Para ello, nos dirigiremos al desplegable de curva para la curva de ejemplo, luego queremos seleccionar Editar curva. Y si recuerdas de nuestra lección de líneas de tiempo, esto en realidad funciona muy similar a eso. Por lo que actualmente, este valor sólo va a ser 0 todo el tiempo que se reproducen las animaciones, pero podemos sumar en nuevos puntos. Entonces si hago clic en medio del ratón que se suma en un nuevo punto para nosotros. Y entonces aquí arriba en la parte superior, tenemos el tiempo que ese punto se encuentra actualmente y su valor. Así que si configuro esto a 0 o 0 está actualmente en 0 tiempo y tiene valor 0. Ahora si añado otro punto, digamos a un segundo. Entonces por aquí, haremos clic en medio del ratón. Ahora con eso seleccionado, se puede ver que el tiempo es uno y podemos establecer el valor a algo más como diez, por ejemplo, puede ver mi punto se ha ido de la gráfica, pero si hacemos clic en este pequeño aquí, en realidad traerá todos nuestros puntos de nuevo a la vista. Ahora cuando esta animación se reproduzca en 0 veces el valor será 0. Pero a medida que avanza el tiempo, el valor aumentará a lo largo de esta línea hasta que lleguemos a 1 segundo y será diez. Entonces a medida que el tiempo vuelva a aumentar, el valor se quedará diez porque no tenemos puntos adicionales. Así que ahora podemos leer este valor dentro nuestro plano de animación yendo al mapa en tercera persona aquí. Entonces queremos ir a nuestro Blueprint de Animación. Por lo que las animaciones luego van al dinero Animation Blueprint. Y en la gráfica de eventos, vamos a agregar un nuevo nodo. Vamos a hacer clic derecho y buscar curva. Vamos a utilizar obtener valle curvado. Se puede ver que podemos poner un nombre de curva. Entonces este tiene que ser el nombre exacto que estamos usando para nuestras curvas. Así que esta es curva de ejemplo deletreada exactamente igual con las letras mayúsculas también. Ahora bien, si se reproduce una animación que usa esa curva que hemos configurado, esta salida será valor actual. Entonces agregaremos un nuevo bolígrafo y solo añadimos en una cadena de impresión por ejemplo. Y conectaremos el valor de retorno a nuestra cadena de impresión. Y vamos a compilar. Y podemos probar esto. Entonces le pegaremos a play. Y se puede ver actualmente no se están ejecutando animaciones que usen esa curva. Por lo que nuestro valor es sólo 0. Pero si empiezo a correr hacia adelante, se puede ver que nuestro valor aumenta a diez. Ahora se está restableciendo de nuevo a 0 cada vez que la animación se repite. Porque si recuerdas al inicio de nuestra animación, es 0, entonces va a diez. Y luego una vez que llegue al final de nuestra animación se va a bucle. Se iniciará de nuevo de nuevo en 0 y el valor r será 0. Ahora de nuevo, similar a nuestra línea de tiempo, podemos destacar estos puntos aquí. Podemos cambiar la forma en que transitan unos de otros. Por lo que aquí arriba podemos elegir qué tipos de caída serán para el punto. Por ejemplo, podemos seleccionar el automático y ya ves que ahora obtenemos más de un efecto curvo a nuestro aumento de valor. Y podemos usar estos pequeños mangos para ajustar realmente cómo cambia nuestra línea. También podemos mover nuestros puntos con solo seleccionarlos y arrastrarlos. Ahora, tengo a ambos seleccionados, así que está moviendo a los dos. Pero si destaco solo el de aquí, pueden ver que puedo mover ese punto alrededor para cambiar cuál va a ser nuestro valor en ese punto específico en el tiempo. Si alguna vez quieres ver ese valor, puedes pasar el ratón por encima o puedes encontrarlo aquí. Y entonces el valor del tiempo está aquí. Ahora actualmente estamos en el editor de curvas, como puedes ver aquí. Pero si quieres volver a la vista normal, solo puedes dar clic en esta pestaña y eso nos trae vuelta a la pestaña que normalmente vemos. Ahora si alguna vez quieres volver al Editor de Curvas, di que lo has cerrado por accidente, puedes hacer clic en curva y simplemente editar curva. Eso nos traerá de vuelta aquí. Si quieres eliminar una curva, puedes simplemente dar clic en eso y hacer clic en Eliminar curva y eso realmente nos librará de nuestra curva. Ahora puedes tener múltiples curvas y una animación. Simplemente puedes golpear la curva y otra curva, puedes crear o reutilizar una de las curvas que hay aquí. Ahora podemos añadir esta misma curva a otra animación. Entonces si salimos y vamos al dinero y nos abrimos, digamos la animación de salto. Podríamos tener esa misma curva para aquí también. Podemos ir a la curva AD. Y en lugar de crear una nueva curva, sólo podemos buscar el nombre. Entonces buscaremos por ejemplo. Y se puede ver nuestra curva de ejemplo ya está ahí porque la hemos creado ya existe. Para que podamos reutilizarla, crearemos eso. Y se puede ver que comienza con los valores por defecto de 0. Ahora bien, tal vez en esta animación queremos que una curva oscura tenga valores totalmente diferentes. Entonces, por ejemplo, podríamos hacer clic en el medio del ratón, establecer esto a 0. Podríamos establecer el valor inicial algo así como menos 100. Y haremos clic en la cajita solo para traerla de vuelta a nuestra vista. Entonces podemos hacer clic en el medio del ratón en, digamos, 2.5th y tener este valor ir a 500. Y volveremos a recoger la caja solo para sacar ambos a nuestra vista. Y ahora cuando esta animación reproduce o produce valores totalmente diferentes a nuestra curva. Entonces en la prueba esto hacia fuera, golpear play y ver si corro hacia adelante eso sigue reproduciendo nuestra curva desde esa animación. Pero si salto, verás que sube dos valores completamente diferentes. A continuación tenemos metadatos, que es básicamente una curva que acaba de obtener un valor. te muestre lo que quiero decir podemos sumar al salto aquí y volveremos a la ficha aquí arriba. Ahora podemos eliminar esta curva de ejemplo por ahora. Entonces sólo vamos a hacer eliminar curva, subir a curvas y se puede ver que tenemos metadatos. Ahora aquí puedes ver, de nuevo, hay muchos por defecto que vienen con la plantilla de tercera persona. Pero si buscamos, por ejemplo, curva de nuevo, verás que eso también está ahí. A pesar de que es una curva, también son solo metadatos también. Entonces podemos buscar curva y podemos agregar nuestra curva de ejemplo así. Ahora como puedes ver, su valor por defecto es uno. Y si vamos al desplegable de la curva, no hay opción para editar esto. Ahora eso es porque los metadatos tipo de actúa como agregar un booleano a tu animación. Si se agrega a la animación que el booleano es el equivalente a ser verdadero. Y si no está en la animación, entonces es falso. En nuestro blueprint de animación, este valor de retorno será uno o 0, dependiendo de si la animación tiene este metadato con este nombre. Ahora cuando le peguemos a Play, verás cuando salto aumenta a uno y luego disminuye de nuevo a 0. Ahora las curvas de animación se utilizan para todo tipo de cosas como controlar animaciones faciales o propiedades dentro de los materiales. No vamos a estar cubriendo eso en esta lección puramente porque está un poco más avanzada. Pero lo que también podemos hacer con las curvas de animación es leerlas dentro de nuestro Blueprint de Animación, como hemos estado haciendo con nuestras curvas en metadatos. Un ejemplo de lo que podrías hacer con curvas en el futuro es que tal vez tengas un proyecto que tenga rodaje, pero ciertas animaciones no quieres que el jugador pueda disparar. Bueno, podrías crear una curva de disparo en bloque. Ésas son las animaciones en las que quieres bloquear el rodaje. Entonces dentro de tu plano de animación, podrías leer esa curva. Y si el valor está por encima de 0, sabes que debes bloquear el disparo en tu código. Ahora una cosa a tener en cuenta es si nos dirigimos de nuevo a nuestra animación de salto, porque tenemos nuestra curva de ejemplo aquí agregada como metadatos. No podemos entonces ir y agregar curva de ejemplo como curva también. Si tuviéramos que agregar curva, buscamos por ejemplo, en C, No va a aparecer hasta que eliminemos esta curva de ejemplo. Entonces vamos a quitar eso, luego ir a Agregar curva de búsqueda por ejemplo. Ahora, se puede ver que está apareciendo y podemos agregarlo como una curva. Ahora, si quieres saber dónde están realmente configuradas todas estas curvas y puedes manejarlas, renombrarlas o eliminarlas. Nos dirigiremos al Navegador de Contenido. Entonces vamos a ir a la carpeta del maniquí, después mallas y vamos a abrir maniquí SK. Ahora este es el esqueleto de nuestros personajes. Y por aquí puedes encontrar las curvas de anime. Si el tuyo no está abierto, puedes subir a ventana y seleccionar en curvas de anime aquí. Ahora, encima en las curvas de anime también, podemos eliminar curvas para que puedas hacer clic derecho en la columna, pulsa Eliminar. Puede cambiarles el nombre, o puede agregar nuevas curvas simplemente seleccionando Agregar nueva curva e ingresar un nombre. Ahora, por último, si intentamos agregar nuestra curva de ejemplo a las animaciones de las lecciones de aquí y a la carpeta de animación de la lección. En realidad no podremos encontrar nuestras curvas de ejemplo. Entonces si nos abrimos, digamos el rifle, caminamos hacia adelante, voy a curvas y voy curva AD y busqué por ejemplo, ver que en realidad no aparezca. Ahora bien, si recuerdas estas animaciones en nuestra carpeta Animaciones de la lección o usando un esqueleto diferente, ellas de nuestro personaje. Así que en realidad tenemos que añadir manualmente nuestra curva a este esqueleto para que estas animaciones lo encuentren. Entonces para hacer eso, sólo vamos a ir a maniquí que dos mallas luego a maniquí SK. Y aquí vamos a ir a curvas de anime, que va a hacer clic derecho agregar una curva. Voy a llamar a esta curva de ejemplo exactamente el mismo que el nombre que le dimos a nuestra curva antes. Golpearemos Enter, y ahora hemos agregado esa curva a nuestro esqueleto. Entonces ahora podemos cerrar esto y regresar a nuestro rifle, caminar hacia adelante, después dos curvas. Y podemos o bien agregar una curva o metadatos, y podemos buscar, por ejemplo, y podemos encontrar nuestra curva ahora. Así que sólo voy a añadir nuestra curva de ejemplo. Lo editaré para agregar algunos valores. Será media palabra del ratón clic y un valor en decir 0 para diez. Y luego volveremos a escribir la gráfica. No tengo un valor, digamos uno por 500, así. Lo volveremos a escribir sólo para asegurarnos de que todo esté correcto. Ahora podemos probar esto. Golpearé play y apuntaré y caminaré hacia adelante. Y ves que nuestro valor está aumentando eso así. Ahora si el tuyo no lo hace y solo sigue leyendo 0 cuando caminas hacia adelante, intenta simplemente ahorrarlo todo desde reiniciar el motor. Este es un error por el momento con esqueletos compatibles. Si te acuerdas, es por eso que nuestro personaje puede reproducir las animaciones de nuestras lecciones. Vimos esqueleto compatible de pago en la lección de montajes, pero es un poco buggy ya que es una característica nueva. Entonces a veces solo necesitas guardar y reabrir el proyecto y debería funcionar correctamente, entonces eso es todo por esta lección. Esperemos que ahora entiendas cómo agregar metadatos y curvas a las animaciones y luego leer esos valores en su interior y Animation Blueprint. 53. Sistemas de juego (interacción): Oigan a todos. En esta sección del curso, vamos a estar usando todo lo que hemos aprendido en nuestras lecciones anteriores para crear algunas mecánicas de juego comunes. Ahora, en esta lección, vamos a estar creando un sistema básico de interacción. Esto nos permitirá ejecutar código dentro de otros objetos cuando nuestro jugador interactúe con ellos. Ahora para aquellos de ustedes que han estado siguiendo en lecciones anteriores, he creado una nueva plantilla de tercera persona solo para que tengamos un nuevo comienzo para esta sección del curso. Así que para empezar, vamos a entrar en el plano de la tercera personaPersonaje y eso es justo dentro de la carpeta en tercera persona, luego planos. Por lo que eso lo abrirá. E inhalar, vamos a crear una nueva función y vamos a llamar a esa mirada al actor compilará. Ahora bien, esta es una función que en realidad va a detectar a qué actor estamos viendo actualmente. Y para ello, vamos a usar un trazo de línea, por lo que se arrastrará hacia fuera y buscaremos trazo de línea. Y queremos trazo de línea por canal. Si recuerda de nuestra lección de trazas de líneas, un trazado de líneas nos permite detectar objetos entre las ubicaciones de inicio y final. Entonces esto lo hace ideal para cosas como un sistema de interacción porque podemos detectar, es el jugador que actualmente está mirando un objeto. Entonces, para hacer eso, vamos a necesitar un poco de matemáticas para determinar dónde debe comenzar y terminar nuestra bandeja de líneas. Entonces vamos a hacer clic derecho y sí obtener control de rotación. Y eso nos da la rotación actual de la cámara de nuestros jugadores. A partir de eso, queremos sacar la dirección hacia adelante. Por lo que queremos buscar obtener rotación x vector. Entonces queremos arrastrar hacia fuera de eso y hacer un nodo de veces o multiplicar. Y vamos a cambiar la entrada aquí a una carroza. Por lo que sólo vamos a hacer clic derecho hacer convertir lápiz y luego seleccionar el flujo y queremos doble precisión. Entonces haremos eso. Los va a mover un poco hacia atrás. Ahora, el valor que establecemos aquí es cuán lejos de la ubicación de inicio puede interactuar nuestro personaje. Entonces dicen que quería Es interactúa y distancia sea de cuatro metros. Voy a poner 400 aquí y podremos cambiar esto más adelante, pero por ahora, sólo dejaremos esto en 400. Ahora necesitamos una ubicación de inicio para nuestro trazado de línea. Ahora sólo podríamos usar la ubicación de los personajes actor, pero si vamos a Viewport, los actos de personajes o la ubicación estarán en el centro. Y preferiría que mi trazo de línea saliera de la cabeza. Entonces volveremos a mirar al actor y vamos a conseguir la localización de los huesos de la cabeza. Entonces para hacer eso, podemos agarrar el componente de malla desde el panel Componentes, Arrastrar hacia fuera y buscar obtendrá la ubicación del socket. Podemos usar este nodo tanto con nombres de socket como con nombres óseos y nos dará la ubicación de ese alvéolo o hueso. Voy a poner el hueso de la cabeza nombrando que sólo la cabeza así. Y sólo voy a mover esto un poco hacia atrás. Entonces conectaremos el valor de retorno a la acción porque ahí es donde vivo. Trace va a estar partiendo de. Entonces vamos a necesitar un nodo impar. Entonces vamos a arrastrar hacia fuera del valor de retorno, ¿agrego nodo? Y vamos a agregar el valor de salida de r veces notarlo al Add Node desde el nodo de la aplicación dos y la entrada en nuestro trazado de línea. Así que solo para explicar, nuestro trazado de línea va a comenzar en la ubicación del hueso de la cabeza y luego el final de nuestra traza de línea va a estar nuevo en la ubicación de los auriculares, pero estamos agregando cuatro metros en la dirección hacia la que está mirando nuestra cámara. Entonces ahora podemos probar esto. Establecemos el Draw Debug Type dos para un fotograma, por lo que el trazado de línea será visible para un fotograma. Y entonces en realidad necesitamos ejecutar esta función. Por lo que sólo nos dirigiremos al Event Graph, haga clic derecho y buscaremos tecnología. Y agregaremos una tecnología de eventos, que va a hacer esto temporalmente para probar que todo está funcionando. Entonces agarraremos al actor vigía y conectaremos eso a aquí y compilaremos. Ahora ya podemos probar esto así que le pegaremos a play. Y es algo difícil ver la línea traza porque nuestras cabezas se interponen en el camino. Si presionamos F8 para rechazarlo nuestro mouse y nos movemos alrededor, se puede ver que la traza de línea está comenzando nuestra cabeza y él va cuatro metros adelante en la dirección que nuestra cámara está apuntando. Entonces a continuación queremos almacenar lo que realmente está golpeando la traza de línea. Así que saldremos de los planetas hasta aquí, volveremos a nuestro Third PersonCharacter, y luego volveremos a nuestra función de actor de búsqueda. Y nos moveremos por aquí hasta el final. Ahora queremos agregar una nueva variable que las tiendas sean golpeadas resultado de nuestra traza de línea. Por lo que sólo vamos a arrastrar desde aquí y hacer promover a variable. Y vamos a nombrar esto, mira resultado hit así. Ahora, podemos usar esa variable más adelante para detectar lo que nuestro personaje está mirando actualmente. Ahora también voy a crear una variable para este valor 400 aquí. Por lo que vamos a arrastrar hacia fuera y hacer de nuevo promueve variable. Y eso sólo creará un flotador para nosotros. Y voy a llamar a esto interactúan distancia. Ahora, haremos esto solo para que podamos cambiar fácilmente nuestra distancia de Interact para nuestro trazado de línea. Por lo que se puede ver que en realidad se acaba de establecer en 400. Y si quisiéramos más adelante, podríamos ajustar esto en la configuración de clase aquí. Entonces en lugar de tener que entrar en función para cambiar la distancia, sólo podemos entrar aquí y cambiarlo fácilmente. Y para mantener las cosas organizadas, podríamos darle una categoría también, así que la seleccionaré y vamos a cambiar el nombre de la categoría a interacción así. Ya ves ahora tiene una pequeña categoría de interacción que podemos mantener todas esas variables. Y si vamos a los valores predeterminados de clase, deberíamos tener una categoría de interacción, si podemos bombear, compilaremos primero, luego iremos a valores predeterminados de clase y verás que tenemos ahora una categoría de interacción y nuestras variables de distancia de interacción allí. A continuación, vamos a cambiar a nuestro actor de vigía para correr con un temporizador en lugar de hacerlo en tecnología. Y si lo recuerdas, on tech correrá cada fotograma. Entonces, si estás recibiendo, digamos, 200 fotogramas por segundo, esto estará funcionando 200 veces. Lo cual es un poco excesivo para nuestro actor de taquilla. Entonces en cambio vamos a usar un temporizador. Entonces yo sólo voy a conseguir el planeta de inicio. A partir de eso, vamos a arrastrar hacia fuera y hacer func función por temporizador. Queremos establecer temporizador por nombre de función. Ahora podemos eliminar a nuestro actor local aquí. Y esto nos permite tener una función ejecutada en un momento determinado. Por lo que vamos a establecer ese nombre de función para mirar a AXA. Ahora el nombre necesita ser deletreado exactamente igual con capiteles, lo contrario esto no funcionará. Entonces vamos a asumir el looping. Entonces vamos a fijar el tiempo a 0.03. Ahora esto significa que nuestra función de actor de vigía correrá 30 veces por segundo. Ahora eso podría parecer mucho, pero para un solo rastro, no es gran cosa. Y significa que cuando estamos mirando alrededor con nuestra cámara, obtenemos la información más actualizada. Ahora, otra cosa que podemos hacer es almacenar este valor de retorno y ese es nuestro mango de temporizador, si acaso alguna vez queremos detener este temporizador, tal vez por nuestro personaje muere. Ya no queremos que el acto de vigía rastree el funcionamiento, así que podemos usar el controlador del temporizador para detenerlo. Así que sólo vamos a arrastrar hacia fuera para promover la variable, y sólo vamos a llamar a este look actor timer así. Entonces ahora si alguna vez quisimos detenerlo, podemos usar esa variable para hacer eso. Así que ahora tenemos nuestro vistazo a la configuración funcional activa. Necesitamos ahora agregar una nueva interfaz que podamos agregar otros dos blueprints para ejecutar eventos y codificar cuando se interactúen con ellos . Entonces lo que haremos es simplemente compilar y guardar esto e ir al Navegador de Contenido. Y haremos clic derecho y vamos a agregar una nueva Interfaz de Blueprint. Así que vamos a ir a planos y luego queremos la Interfaz Blueprint aquí, y vamos a nombrar esto, voy a llamar a la mía BP subrayado interacción, interfaz así. Y lo abriremos. Y yo sólo voy a añadir el mío a la barra superior aquí. Ahora si recuerdas de nuestro video de interfaz, en realidad no hacemos ninguna codificación aquí. Todo lo que hacemos es agregar nuevas funciones y darles entradas y salidas. Ya tenemos una nueva función que inicia con la interfaz. Así que solo haremos clic derecho y renombraremos esto. Voy a llamar al mío interactuar así. Y vamos a compilar y podemos agregar nuevos insumos ahora. Y esta es información que vamos a enviar desde nuestro plano de personaje de jugador a cualquier modelo con el que estemos interactuando. Entonces lo que me gusta hacer es agregar una referencia de carácter solo para que podamos acceder a la información del personaje que interactuó con el blueprint que estamos ejecutando este código. Por lo que buscaremos carácter, usaremos la referencia de objeto tipo carácter. Yo sólo voy a nombrar a este personaje. Ahora por supuesto en el futuro, si quisieras enviarles información del personaje al plano con el que está interactuando. Podrías agregar nuevos insumos aquí. Entonces ahora tenemos nuestra función que se ejecutará cada vez que nuestro jugador interactúe con un blueprint, pero también podemos agregar algunas funciones adicionales. Entonces voy a agregar uno. Y vamos a llamar a esto permitir interacción. Y en realidad vamos a agregar una salida para este. Por lo que añadiremos una nueva salida. Y vamos a establecer esto para ser un booleano, y sólo vamos a nombrar este valor de retorno así. Así que ahora esto nos da una nueva función que podemos comprobar antes de ejecutar la función Interact solo para asegurarnos de que el blueprint con el que estamos interactuando tiene su interacción activada. Ahora vamos a agregar una función más. Así que vamos a ir a agregar función, y luego vamos a llamar a este nombre de interacción. Después agregaremos una nueva salida. Y esto se va a llamar nombre. Y vamos a establecer la variable tipo dos textos así, y luego vamos a compilar. Ahora esto nos permite establecer un nombre personalizado en cualquier blueprint que agreguemos nuestro tubo de interfaz de interacción. Y luego vamos a agregar un poco de textos a nuestra pantalla para que cuando nuestro jugador mire un objeto, se va a mostrar el nombre que proporcionamos usando esta función. Por lo que ahora todo esto se ha sumado. Podemos compilarlo y guardarlo. Ahora, volviendo al personaje en tercera persona, necesitamos algunos eventos de entrada para ejecutar realmente nuestro código interactivo. Ahora podríamos simplemente hacer clic derecho y buscar los eventos de entrada temporales que hemos usado antes. Pero en cambio, en realidad vamos a ir a la configuración de nuestro proyecto y agregar correctamente una entrada. Por lo que iremos a Editar configuración del proyecto. Y aquí queremos ir a la categoría Entrada. Y ahora queremos agregar un mapping de acción. Entonces iremos a Action Mappings. Haremos clic en el botón Agregar mapeo de acciones. Y vamos a llamar a esto interactuar así. Después haremos clic en el teclado y podrás escoger cualquiera que sea tu tecla una, voy a presionar E, para que se establezca en E. Ahora que está configurado, nos dirigiremos de nuevo a nuestro personaje clic derecho y buscaremos interactúan. Y queremos que la interacción debajo los eventos de acción aquí agregue nuestro aporte. Así que ahora vamos a agregar el código que en realidad le dice al objeto que estamos buscando para ejecutar su interfaz de interacción. Entonces para hacer eso, subimos al vigía, golpeamos resuelto, y nos arrastraremos de eso y lo vamos a romper. Y haremos clic en la pequeña flecha hacia abajo aquí para obtener todas las variables o arrastrar hacia fuera desde Hit Actor. Y vamos a buscar a Interact. Y queremos el mensaje de Interact aquí. Ahora voy a dar clic en esta flecha otra vez solo para hacer esto más pequeño. Y podemos atar un poco esto. Ahora antes de ejecutar esto, primero vamos a querer comprobar es el acto de violeta. Entonces lo haremos es válido. Conectaremos esto a prensado. Y también queremos comprobar es permitir que la interacción sea verdadera. Por lo que nos arrastraremos de nuevo y buscaremos Permitir. Y podemos usar el par permitir interacción. Enchufe que en es válido. Y luego queremos ejecutar un nodo de rama. Por lo que vamos a arrastrar hacia fuera desde el valor de retorno y hacer IF. Y luego a partir de eso, si nuestro valor de retorno es verdadero y permitir que la interacción sea cierto, queremos ejecutar nuestro Interact para poder conectarlo así. Entonces para nuestra entrada de carácter porque estamos dentro de nuestro Third PersonCharacter, podemos simplemente arrastrar hacia fuera y hacer uno mismo. Y eso pasará una referencia a este personaje a través de la función Interact. Ahora mantengamos las cosas ordenadas. En realidad podemos destacar todos estos. Obsérvelo, no el evento de entrada, solo el código que tenemos resaltado haga clic derecho y podemos hacer la función colapsada. Y yo sólo voy a llamar a esto interactuar así. Podemos simplemente mover esto aquí. Ahora, todo ese código está justo dentro de nuestra nueva función de interacción. Entonces si hacemos doble clic en eso, lo puedes ver aquí. Podemos simplemente mover esto aquí arriba, así que está un poco ordenado. Ahora necesitamos configurar un actor con el que nuestro personaje pueda interactuar en realidad. Por lo que compilará e irá al Navegador de Contenido, solo va a crear una nueva clase de blueprint. Se lo pondremos a un actor. Yo sólo voy a llamar a este BP subrayan ejemplo de interacción. Así. Lo abriremos y añadiremos un nuevo componente. Sólo voy a agregar un componente de cubo. Así. Simplemente nos da algo que la traza de línea puede golpear. Pero podrías usar una malla esquelética o un componente de malla estática y tener una medida personalizada si quisieras. Ahora una cosa a tener en cuenta es que si usas una malla estática o Malla Esquelética, debe tener colisión porque si no se alinea, trace no la golpeará. Entonces, para comprobar si tu malla estática tiene colisión, solo puedes ir a su malla de pila en el Navegador de contenido. Entonces, por ejemplo, ¿qué son Coupa? Simplemente podemos hacer clic en el Browse to y el navegador de contenido para ir allí. Podemos abrir esto. Ahora aquí, puedes ir a mostrar y luego bajar a donde dice simple colisión. Y luego si cuando te encargas de eso, obtienes este contorno verde claro aquí, eso significa que estás todo bien. Tiene colisión. Si no tienes eso, puedes subir al desplegable de colisión aquí, y puedes probar estas diferentes opciones para agregar alguna colisión a tu objeto. Entonces estamos usando este cubo para que sepamos que sí tiene colisión simple, así que todos estamos bien. Podemos agregar de nuevo a nuestro modelo de ejemplo de interacción. Ahora aquí necesitamos agregar nuestra interfaz de interacción. Entonces iremos a Configuración de clase luego a implementarlo interfaces, y añadiremos una nueva. Vamos a buscar interacción. Y queremos la interfaz de interacción BP. Y luego compilaremos. Ahora, si vamos a nuestro panel Mi Blueprint, haga clic en el desplegable para interfaces, puede ver que tenemos todas nuestras nuevas funciones de interfaz que agregamos dentro de nuestra interfaz de interacción. Ahora puedes notar que éste es amarillo, pero estos son geniales. Ahora eso es porque si lo recuerdas, nuestro Interact en realidad no tiene un valor de retorno. Si hago clic en esto, solo creará un evento en nuestro Event Graph. Pero si hago clic o permito la interacción, por ejemplo, si recuerdas que sí tenía un valor de retorno. Por lo que abre esto en un editor de funciones. Entonces esa es la principal diferencia o interactuar en realidad no tiene un valor de retorno. Si recuerdas dentro de la interfaz, si seleccionamos nuestro Interact, ves que no tiene salidas, pero ambas nuestras otras sí tienen salidas. Y por eso son colores diferentes. Y si hacemos clic en interactuar , crea un evento. Y si damos clic en Permitir interacción, se le ocurre una función. Entonces, para empezar, solo queremos habilitar, permitir la interacción. Entonces sólo vamos a asumir esto. Pero en tus futuros proyectos o funciones como esta es útil porque es posible que tengas un objeto que quieras que sea interactable parte del tiempo y algunas de las veces quieras desactivarlo. Por lo que solo podrías devolver un valor diferente cuando quieras desactivar su interacción. A continuación tenemos el nombre de la interacción, así que solo haremos doble clic en eso para abrirlo. Ahora podemos simplemente introducir manualmente un nombre aquí si quisiéramos, pero voy a arrastrarlo y promoverlo a una variable. Por lo que haremos promueve una variable. Voy a llamar a mi nombre y dejarlo como textos. Entonces vamos a compilar y yo sólo voy a añadir un valor por defecto como por defecto. Nombre. No será capaz de cambiar esto más adelante. Por lo que sólo vamos a componente. Así que ahora en realidad podemos agregar algún código a nuestro evento interactuar. Por lo que nos dirigiremos de nuevo a nuestra gráfica de eventos. Y ahora debido a que hicimos doble clic en interactuar, en realidad solo se agrega esto a nuestro gráfico de eventos. Pero si no tuviéramos esto, también podríamos hacer clic con el botón derecho en la búsqueda de evento interactuar. Y podríamos crear eso de esta manera también. Ahora este es el evento que correrá cuando nuestro personaje mire este objeto y presione el jabón a-z. Por ahora, sólo arrastraremos hacia fuera y haremos una cadena de impresión. Podemos imprimir string el valor del nombre por ejemplo, y simplemente enchufar eso así. Ahora lo bueno de este evento es que tenemos acceso a nuestro blueprint de personajes. Entonces tal vez tenías un componente en el plano de tu personaje que era un inventario o un sistema de salud. Puedes simplemente arrastrarte desde el personaje aquí. Nos vendría bien obtener componente por clase. Y podríamos usar esto para comprobar ¿ nuestro personaje tiene un componente específico? Si lo hace, entonces podemos usar el valor de retorno para acceder a cualquiera de esas variables de componentes. O simplemente podríamos costar a nuestro personaje. Por lo que podríamos hacer costo a ThirdPersonCharacter. Y luego usando esto, podríamos obtener variables o funciones de nuestro personaje. Entonces podríamos conseguir, digamos, la distancia de interacción si quisiéramos por alguna razón o si agregas variables de salud, son. Cualquier otra cosa, podrías usar esto para acceder a esos. Pero por ahora sólo vamos a ejecutar nuestra cadena de impresión. Así que voy a eliminar estos y conectar esta copia de seguridad a la cadena de impresión así. Ahora una de las cosas que queremos hacer es con nuestra variable de nombre. Nosotros sólo queremos tomar en instancia editable. Y si eres miembro, eso solo significa que cuando arrastramos nuestro cubo a nuestro nivel, podremos cambiar este nombre por cada cubo que arrastremos. Así que ahora nuestro sistema de interacción en realidad está prácticamente configurado. Pero sí quería agregar en un HUD que diremos el nombre de interacción de actores cada vez que nuestro jugador mire a ese actor. Entonces para hacer eso, solo volveremos a la carpeta en tercera persona aquí, luego a los planos y vamos a crear un nuevo widget de HUD. Por lo que haremos clic derecho, ir a Interfaz de usuario. Haremos un Widget Blueprint. Voy a seleccionar usar un widget. Y llamaremos a esto BP subrayar HUD, así. Y lo abriremos. Ahora porque este es nuestro HUD principal. Vamos a agregar unos paneles de lona. Entonces solo busca Canvas y lo agregaremos a nuestra jerarquía aquí. Entonces voy a querer algún texto realmente muestre el nombre de la interacción. Entonces buscaremos texto aquí también. Y eso lo agregaremos a nuestro panel de lona. Y lo vamos a tener para que esté arriba en el centro. Entonces voy a cambiar el ancla para que el texto se centren así. Y se puede ver que nuestra posición está en mal estado. Entonces lo que haremos es seleccionar esto a 000 así. Por lo que ahora se puede ver dónde centrado. En realidad quiero que el centro del texto esté en el centro del texto. Entonces lo que vamos a hacer es hacer alineación, hacer 0.50.5 así. Por lo que se puede ver que el texto ahora está centrado. Ahora quiero que mi texto sea un poco más alto, así que voy a sostener Shift y arrastrar hacia arriba. Y eso en realidad me permitirá mover nuestros textos y una dirección y bloquearlo en esa dirección para que puedan ver que puedo moverlo hacia arriba. Di aquí. Ahora voy a cambiar la fuente solo para hacerla un poco más pequeña. Entonces haremos que diga 20. Y vamos a compilar. Ahora, puedes pasar el tiempo que quieras configurando esto para que el texto se vea bien. Simplemente estoy haciendo esto rápido para que podamos hacerlo funcionar. Entonces primero necesitamos ocultar nuestros textos cuando en realidad no estamos mirando un objeto. Entonces lo que vamos a hacer es que vamos a usar la visibilidad aquí. Vamos a crear un nuevo binds. Por lo que vamos a hacer o hacer clic en enlazar y hacer crear vinculante. Con eso abierto, tenemos que determinar cuándo debemos poner este texto visible y luego oculto. Entonces para hacer eso, vamos a necesitar algunas variables de nuestro Third PersonCharacter. Entonces vamos a necesitar una referencia a eso. Por lo que comenzaremos yendo al Event Graph. Vamos a eliminar este nodo y este nodo aquí. Vamos a conseguir el personaje del jugador. Y a partir de eso queremos comprobar ¿es válido? Por lo que hacer es válido. Y conectaremos esto hasta construir. Después arrastraremos hacia fuera otra vez y haremos Cast to ThirdPersonCharacter. Entonces podemos usar la salida de este para almacenar como una variable. Por lo que haremos promociona variable. Yo sólo voy a llamar así a mi personaje. Entonces en realidad voy a resaltar estos nodos. Y haremos clic derecho y solo haremos colapsado para funcionar. Y llamaremos a esto establecer referencias así y en realidad mantiene las cosas bonitas y ordenadas. Y podemos reutilizar esto más adelante también. Por lo que ahora estamos listos para volver a nuestra función de obtener visibilidad. Y queremos conseguir nuestro carácter. Y solo queremos asegurarnos de que esto sea válido antes de ejecutar cualquier código. Conectará esto hasta aquí. Y si no es válido, entonces en realidad podemos ejecutar nuestras referencias de configuración así. Y usaremos este nodo de retorno, enchufa eso aquí. Simplemente pondremos esto en oculto. Entonces, si nuestro carácter no es válido cuando esto se ejecuta, intentará establecer la variable de carácter nuevamente. Ahora bien, si la variable de carácter es válida, queremos volver a obtenerla. Entonces a partir de eso queremos arrastrar hacia fuera y conseguir mirada en hit result. Nos arrastraríamos y haríamos un descanso. Extenderemos este nodo y queremos Hit Actor. Nosotros hacemos es válido. Y si es válido volverá a hacer esto más pequeño. Entonces tenemos un poco más de espacio, que arreglan esto así. Entonces si esto es válido, entonces queremos comprobar ¿ es interactable? Entonces vamos a arrastrar hacia fuera y vamos a permitir la interacción como esa. Y si eso es cierto, entonces queremos poner nuestra visibilidad en visible. Entonces copiaremos esto y lo pegaremos aquí. Entonces esto demasiado visible. Lo enchufaremos así. Entonces una vez que termines, debería verse un poco así. Ahora en realidad hay un par de uno o más nodos que necesitamos. Entonces lo que haremos es copiar nuestro valor de retorno, pegarlo aquí, y lo configuraremos en oculto. Ahora bien, si permitir la interacción es falso, queremos ocultar nuestros textos, así que lo haremos. Y también si el actor hit no es válido, también queremos ocultar nuestros textos, así que conectaremos eso así. Así que eso abarca establecer la visibilidad de nuestros textos, pero también queremos cambiar lo que dice al nombre de la interacción. Entonces lo que haremos es que en realidad copiaremos este código porque habrá lo mismo. Para que podamos copiar todo esto y esto también. Y así se asegura de que tengas todos los nodos resaltados aquí haz Control C. Luego iremos al diseñador, selecciona aquí nuestro texto. Y queremos ir al texto y enlazar, luego crear encuadernación. Y aquí dentro vamos a pegar en esas notas. Y voy a conseguir el nodo de inicio conectar hasta r es válido así. Ahora tenemos que devolver algo de sexo. Entonces este solo se enchufaría aquí. Y no queremos devolver ningún texto para esto, así que sólo dejaremos ese vacío. Copiaremos esto y pegaremos esto por aquí. Así que ahora, una vez que sabemos que permitir la interacción es cierto, queremos realmente obtener el nombre de la interacción. Por lo que vamos a arrastrar hacia fuera desde el reactor hacer interacción nombre. Y conectaremos esto a verdadero. Ahora bien, si la interacción es falsa, solo queremos devolver un valor vacío. Hagamos eso. Después copiaremos y pegaremos esto de nuevo, pegaremos esto aquí, y conectaremos el nombre hasta el valor de retorno así. Entonces podemos compilar. Y una vez hecho esto, debería verse un poco así. Ahora lo último que hay que hacer es en realidad agregar nuestro hard to play a screen. Entonces para hacer eso, iremos al ThirdPersonCharacter Blueprint, ese gráfico de eventos. Vamos a añadir esto a nuestro Begin Play. Haremos clic derecho y haremos Crear Widget. Conecta esto a nuestras notas. Y siendo dueño de Player, solo haremos Control, obtendremos el controlador del jugador. Así. Tenemos que configurar la clase al hub que acabamos de crear. Por lo que BP HUD. Ahora, siempre es una buena idea almacenar este valor de retorno cuando estás creando tu HUD principal. Así que vamos a arrastrar hacia fuera y probablemente vamos a esto a una variable, vamos a llamar a este HUD. Y eso es sólo eso si queremos usarlo más adelante. Y luego desde la salida de este nodo conjunto, o simplemente busque Add to Viewport así. Y eso en realidad agregará nuestro widget a la pantalla de nuestros jugadores. Entonces ahora estamos listos para probar esto. Vamos a compilar y dirigirnos a nuestro mapa. Queremos agregar algunos de nuestros ejemplos de interacción al nivel. Entonces agregaré una aquí y otra por aquí. Y si recuerdas, porque ponemos nuestro nombre a instancia editable dentro de nuestro ejemplo interactable, tenemos ese valor aquí. Entonces para esta, voy a poner esto para decir espada. Para éste. Consíguelo para que sea algo así como pipa. Por lo que ahora podemos golpear play. Y si atropellamos a este cubo aquí se puede ver que está imprimiendo espada. Y si presiono C, se puede ver que está imprimiendo el nombre de nuestro ejemplo de interacción espada, y hará lo mismo con el ejemplo var pi de aquí. Ahora podríamos pasar un poco más de tiempo ordenando nuestros textos HOD x, es un poco difícil de ver. Entonces, si salimos y abrimos nuestro capó, aquí podemos seleccionar nuestros textos en la jerarquía. Y primero podríamos centrarlo así nuestro texto bonito y centrado y podríamos agregar un fondo también. Entonces lo que haré es hacer clic derecho hacer rap con, y haremos rap con una frontera. Y luego para nuestro borde, seleccionaremos eso y vamos a establecer tamaño al contenido, por lo que cambiará de tamaño al tamaño de nuestro texto. Podemos cambiar el color, así que cambiaré el color del pincel para decir un gris. Entonces es sólo un poco más fácil de ver así. Y también podríamos agregar algo de relleno. Por lo que vamos a seleccionar nuestro texto y vamos a establecer el relleno, parecen decir ocho. Por lo que nos da un poco de acolchado alrededor de los bordes. Y ahora hemos añadido un nuevo widget. En realidad necesitamos establecer su visibilidad también. Y podemos reutilizar nuestra función de visibilidad que utilizamos para nuestros textos. Entonces nos desplazaremos hacia abajo, ve a la opción de visibilidad aquí. Simplemente haremos clic en enlazar y podrás ver que nuestra función de visibilidad de antes es que podemos configurarla. Y ahora nuestro borde de texto aquí cambiará su visibilidad cada vez que estemos mirando un objeto con el que podamos interactuar. Para que podamos probar esto. Vamos a compilar y volver a la cabeza y golpear play. Y ahora podemos ver nuestro texto está centrado y es un poco más fácil de ver porque tenemos nuestra caja gris cuando no estamos mirando algo, se puede ver que nuestras casillas ocultas junto con nuestro texto. Ahora actualmente lo que estamos haciendo cuando presi y seleccionando uno de nuestros ejemplos de interacción es imprimir un nombre. Pero por supuesto esto es sólo un ejemplo. Podrías cambiar esto a lo que quieras. Entonces podemos ir a nuestra interacción en ejemplo aquí y hacer que el actor diga destruir cuando interactuamos con él. Para que pudiéramos agregar Destroy Actor. Ahora, cuando lo compilamos y le pegamos a Play, si interactúo con los cubos ahora, se puede ver que ambos se destruyen. Entonces eso es todo por esta lección. Esperemos que ahora entiendas cómo podemos usar Blueprint Interfaces para ejecutar código en otros blueprints, como por ejemplo, cuando necesitamos un sistema de interacción. Y en nuestras próximas lecciones, vamos a estar agregando más características de juego a este proyecto. 54. Sistemas de juego (daños): Oigan a todos. En esta lección vamos a estar configurando un sistema de salud y también vamos a estar usando el sistema de daños que está integrado en Unreal Engine. Entonces, para empezar, podríamos simplemente agregar nuestras variables y funciones de salud directamente a nuestro personaje en tercera persona. Pero en cambio vamos a crear un componente de salud. Y la razón por la que vamos a hacer eso es porque podemos reutilizarla y otros planos si quisiéramos más adelante . Entonces comencemos. Daremos clic en el botón Agregar en nuestro navegador de contenido, iremos a la clase Blueprint y vamos a seleccionar un componente de actor. Estamos eligiendo componente acto en lugar de ver componente porque nuestro componente de salud no necesita existir en el mundo. Solo necesita código, por lo que usaremos componente activo. Voy a nombrar el mío BP subrayan componente de salud así. Ahora vamos a abrir esto y voy a arrastrar el mío hasta la barra superior así. Entonces empezaremos por crear algunas variables de salud. Entonces agregaré una nueva variable. Voy a llamar así a esta salud actual. Y voy a poner el mío a un entero. Te vendría bien un flotador si quisieras. Personalmente, prefiero usar enteros para la salud porque es un número entero. Entonces empezaremos con salud actual y eso va a ser un entero. Entonces vamos a crear otro. Esto se va a llamar comenzar la salud. Y queremos otro, y esto se llamará salud máxima. Entonces por último, queremos otra variable llamada y recibir daños. Y vamos a cambiar esto a un brillante porque eso es verdadero o falso. Entonces para estas tres variables, vamos a tomar una instancia editable. Entonces eso lo haremos ahora. Eso solo significa que cuando agregamos nuestro componente de salud a otro blueprint, cuando seleccionemos el componente de salud en su panel de componentes podremos editar estos valores. Así que ahora vamos a compilar y vamos a establecer algún valor de partida. Entonces para comenzar la salud, voy a poner esto a 100. Para máximo saludable establecer esto a 100, así y puede tomar daños se llevará a cabo, así, y luego compilar. A continuación vamos a crear algunas funciones en realidad van a cambiar nuestra variable de salud. Por lo que añadiremos una nueva función y llamaremos a esto aumentar la salud. Así. Agregaremos un nuevo insumo y llamaremos a esta cantidad de aumento. Y vamos a establecer esto a un entero como ese. Y luego compilaremos. Lo primero que queremos hacer es asegurarnos de que nuestra salud actual no va a ser mayor que r max salud. Entonces obtenemos nuestra salud actual y comprobamos es esto menos que r max self? Entonces conseguiremos mapas, salud. Y sólo queremos ejecutar este código si lo es, si esto es cierto. Entonces moverá esto aquí abajo y agregará esto a nuestro nodo de entrada así. A continuación queremos comprobar sumando la cantidad, la cantidad de aumento a nuestra salud actual la hacen más de r max salud. Entonces para hacer eso, obtendremos salud actual agregaremos nuestra montaña incrementada ahora que podríamos simplemente arrastrarnos desde aquí y enchufar esto así. O podemos arrastrarnos desde aquí y sí conseguir aumentar la cantidad. Y se puede ver que en realidad podemos obtener ese valor de nuestro nodo de entrada sin tener que crear una variable. Simplemente nos deja usar eso aquí. Y si eso no aparece, solo asegúrate de poder sacar dividido la entrada y deberías poder encontrarla. A continuación que queremos comprobar es este valor menor o igual a max out. Por lo que obtendrá máxima salud. Y si lo es, entonces podemos fijar esa cantidad a nuestra salud actual. Entonces haremos esto y luego podremos copiar y pegar estos nodos empanadas por aquí. Haremos establecer salud actual. Eso. Entonces si es falso, lo que significa que el aumento y los valores actuales de salud van a ser mayores que r max. Con qué frecuencia solo queremos copiar y pegar esto y decir, ayudaré a máximo así. Podríamos agregar una nota de redireccionamiento aquí, solo mantén las cosas ordenadas. Por lo que una vez que termines, debería verse así. Por lo que a continuación queremos una disminución de la función de salud. Entonces voy a buscarlo, o voy a crear una nueva función y llamar a esto la grasa, así. Y de nuevo, vamos a agregar una entrada a esto, así que voy a hacer mi ventana más grande aquí. Por qué el nuevo insumo, y vamos a llamar a esta cantidad de disminución. Y vamos a establecer esto a un entero también. Y luego compilaremos. Ahora, queremos comprobar ¿nuestra salud actual es mayor a 0? Por lo que la salud actual mayor a 0. Y si lo es, entonces permitirá o disminuirá la salud correr así. A continuación que queremos comprobar es nuestra salud actual menos r disminuir cantidad mayor a 0. Entonces sí conseguiremos salud actual y queremos hacer menos o restar. Queremos restar nuestra disminución a cabo. Ahora otra vez, podríamos enchufar esto así o podemos arrastrar hacia fuera sexual obtener disminución cantidad y podemos agregar eso aquí. Y luego queremos comprobar, ¿esto es mayor que 0? Si lo es, entonces podemos permitir que esa cantidad sea disminuida de nuestra salud actual. Entonces haremos esto. Copiaremos esto, pegue esto por aquí. Haremos establecer salud actual. Y si la cantidad es menor a 0, solo queremos establecer nuestra salud actual 0 porque no queremos que nuestra salud vaya por debajo de 0. Entonces solo agregará una nota aquí, solo ordene esto, y una vez que termines, debería verse así. Ahora una cosa que sí se me olvidó agregar es que queremos comprobar puede sufrir daños antes de aumentar la salud. Por lo que vamos a arrastrar esto más lejos, que va a agarrar nuestra puede sufrir daños. Y si esto es cierto, entonces vamos a permitir esta función Trump. Por lo que sólo conectará esto aquí y verdadero en aquí. Ahora también vamos a agregar algunos despachadores de eventos y estos pueden ser útiles para si agregamos nuestro componente de salud a diferentes planos, podemos querer que algo diferente suceda en una queotro cuando nuestra salud aumenta o disminuye cuando la salud llega a 0. Por lo que comenzaremos creando un despachador de eventos. Y yo sólo voy a llamar a esto en aumento de salud. Así. Crearemos otro llamado a disminuir la salud. Entonces queremos en salud 0. Así. Podríamos agregar algunos insumos para aumentar y disminuir nuestra propia salud. Por lo que iremos al panel Detalles aquí y agregaremos una nueva entrada. Voy a llamar a esta cantidad de aumento. Y lo establecemos en un entero. Y haremos lo mismo para la disminución insalubre. Entonces agregaremos una nueva entrada y llamaremos a esto el pliegue. Hechizo correctamente, disminuya la cantidad. Ahí vamos. Y vamos a establecer que a un entero también. Por lo que dentro o disminuir cómo la función podemos ejecutar nuestra propia disminución de salud aquí. Entonces lo haremos cool. Enchufa esto aquí, y luego queremos obtener una cantidad disminuida. Entonces solo voy a copiar y pegar esto y enchufar eso aquí. Entonces para la salud 0, queremos la no salud 0. Entonces vamos a llamar a eso, enchufa eso aquí. Y no agregamos una entrada para esto, así que no necesitamos enchufar nada más. Y luego iremos a nuestro aumento de salud. Y por aquí, queremos aumento poco saludable. Vamos a enchufar eso aquí. Y obtendremos la cantidad de aumento así. Vamos a enchufar esto aquí también porque cuando fijemos nuestra salud máxima, estaremos incrementando también. Y eso creará una función más. Y yo sólo voy a llamar a esto aplicar empezando salud. Entonces aquí lo que vamos a hacer es ir nuestra salud actual y poner esto a nuestra salud inicial. Después ejecutaremos esta función en nuestro Event Graph en Begin Play. Entonces agarraremos eso aplica comenzar salud y enchufarlo aquí así. Y luego compilaremos y guardaremos esto. Ahora podemos seguir adelante y agregar nuestro componente de salud a nuestro carácter. Por lo que nos dirigiremos al plano del personaje Third Personal. Entonces haré que esta ventana sea un poco más grande así. Y vamos a agregar un nuevo componente o búsqueda de salud. Agregaremos el componente de salud de BP y luego compilaremos. Y con nuestros componentes de salud seleccionados en el panel Detalles, puede ver que podemos configurar nuestra salud inicial o salud máxima y si el componente de salud puede sufrir daños o no . Ahora como puedes ver, nuestra salud actual está establecida en 0, pero no te preocupes, eso se establecerá 100 o donde sea que estés empezando. El valor de salud es cuando comienza el juego. Y podemos acceder fácilmente a estas variables así como nuestras funciones simplemente arrastrando adentro o arrastrando componentes hacia fuera, podemos hacer llegar actual, por ejemplo, que nos da acceso a esa podemos llamar a nuestra función para aumentar la salud que ejecutará nuestras funciones. Y también podemos, si quisiéramos vincular eventos a esos despachador de eventos. Entonces creamos, para que pudiéramos hacer una señal, podríamos asignar en salud incrementada por ejemplo. Y eso nos da un evento y el evento de compra para eso. Y esto correrá siempre que nuestra salud aumente. Y también nos da la cantidad de aumento aquí también si ejecutamos nuestro evento Bind en la parte superior. Pero por ahora, eliminaremos estos. Siguiente. Necesitamos configurar nuestro evento de daño en nuestro personaje en tercera persona. Entonces, para hacer eso, haremos clic derecho y buscaremos cualquier daño. Utilizará evento y los daños. Y vamos a agarrar nuestro componente de salud y queremos disminuir nuestra salud por la cantidad de daños cada vez que se ejecute este evento. Entonces nos arrastraremos y buscaremos disminuir la salud. Y conectaremos esto hasta el cualquier daño. Entonces queremos daños y lo enchufamos para disminuir la cantidad. Y verás que nos da este nodo que convierte el flotador en un entero. Esto redondeará el valor a la baja. Entonces, por ejemplo, si el daño fuera 1.5, esto lo redondearía a uno. Pero podríamos arrastrar y hacer redondear y usar un nodo redondo. Y esto en realidad lo redondeará al entero más cercano. Entonces si es 1.5, creo que lo redondeará hasta dos. Si se dijera 1.2, lo redondearía hacia abajo a uno. Por lo que vamos a utilizar alrededor de nodo para esto sólo porque es un poco más intuitivo. Y ahora, siempre que otro plano llame al evento de aplicar daño para nuestro personaje, este evento se ejecutará y disminuirá nuestra salud y nuestro componente de salud. Ahora establecemos una zona dañada en nuestro nivel que cuando nuestro personaje entre en ella, nuestro personaje en realidad perderá salud. Por lo que compilará esto. Pero primero en realidad, solo agregaremos una cadena de impresión aquí porque actualmente no tenemos una barra de salud. Por lo que sólo agregamos una cadena de impresión. Y cada vez que sufrimos daños, solo queremos obtener nuestra salud actual. Entonces sí obtenemos salud actual, imprimiremos el valor de salud actual para que cuando recibamos daños, sepamos exactamente cuánta salud tenemos. Voy a hacer que el texto se quede un poco más tiempo. Entonces sólo voy a fijar duración a cinco así. Y luego compilaremos. Ahora nos dirigiremos al Navegador de Contenido. Vamos a agregar un nuevo blueprint, el actor de la clase blueprint. Y me desplazaré hacia abajo y sólo vamos a llamar a esta BP subrayan zona de daños. Así. Arrastraremos esto a nivel y lo abriremos. Para esto, sólo vamos a agregar una colisión de caja para saber cuándo algo se superpone. Entonces agregaremos una colisión de caja. Lo arrastraré un poco para que quede al ras con el suelo. Después nos adentraremos en el Event Graph y vamos a eliminar la jugada inicial y la tecnología. Y vamos a utilizar el evento actor comenzó solapamiento. Y vamos a arrastrar fuera de otro actor, que va a llamar el daño Aplicar. Este es el evento que en realidad llamará al daño dentro de nuestro personaje en tercera persona, podemos establecer la cantidad del daño. Entonces le voy a decir así. Ahora podemos proporcionar un instigador de eventos, y este es un controlador de jugador. No vamos a estar usando esto para zona dañada puramente porque No hay ningún jugador que esté causando este daño. Es sólo un efecto ambiental. Entonces nos hemos dañado más gruesos. Y para ello nos arrastraremos y nos haremos uno mismo. Y esto básicamente solo nos permite saber qué actor aplica realmente el daño a nuestro personaje o no cualquier daño que puedas ver causar daño. También tenemos eso instigado por pluma también. A continuación tenemos la clase de daños. Ahora bien, esto es un poco más avanzado. No lo voy a estar cubriendo en esta lección, pero básicamente puedes crear nuevos tipos de daño y agregarles variables. Entonces, por ejemplo, podrías tener una clase de daño por incendio en la clase de daño por hielo, y luego puedes establecer esa clase aquí, luego en el extremo receptor. Entonces en tu cualquier daño de evento, podrías arrastrarte del tipo de daño y en realidad podrías obtener esas variables, digamos que el es daño por hielo o es daño por fuego por ejemplo. Pero por ahora, sólo vamos a dejar eso como la clase EMT. Pero por ahora, una última cosa que haremos antes de que diga, es seleccionar los componentes de la caja, buscar ocultos. Y queremos desmarcar Endgame oculto solo para que pueda ver o zona dañada. Entonces ahora estamos listos para probar esto. Vamos a compilar de cabeza a nuestro mapa en tercera persona. Y sólo voy a hacer la zona de daños un poco más grande y moverla por aquí. Y ahora cuando golpeamos play, podemos toparnos con la caja de daños y se puede ver yo, salud está disminuyendo en diez cada vez que realmente entramos a esa caja. Entonces básicamente así es como podemos configurar un sistema de salud y podemos usar esa casa los enumera en otros planos también. Ahora quería darles un ejemplo rápido de cómo podemos configurar esos eventos de vinculación en nuestro personaje. Así que digamos por ejemplo, cada vez que tu personaje recibió daño, querías tocar un sonido crecido. Se podría hacer eso agradable y fácilmente con los eventos bind. Entonces iremos al TerceroPersonaPersonaje, buscaremos el principio, los tocaremos. Al final de aquí, podemos agregar algún código nuevo. Entonces, para que nuestros eventos bind se ejecuten, en realidad necesitamos vincularlos. Entonces vamos a hacer eso en Begin Play. Y vamos a agarrar nuestro componente de salud se arrastrará hacia fuera y buscaremos enlazar en la disminución de Salud. Y queremos este golpe. Así conectará esto hasta nuestra ventana gráfica. Y ahora necesitamos un evento que realmente se enfríe cuando disminuya la salud. Entonces vamos a arrastrar hacia fuera y vamos a hacer costumbre. Y queremos agregar cliente. Entonces llamaremos a esto el pliegue, así. Ahora, este evento se ejecutará cada vez que la salud disminuya y sólo podemos agregar un sonido para que podamos hacer reproducir ubicación de sonido. Lo voy a hacer en la ubicación de mis personajes, así que sólo volverá a la ubicación. Y podemos configurar esto a un sonido que no tengo como sonidos crecidos o desconocidos, así que solo escogeremos compilados fallidos por ejemplo. Simplemente compilaremos. Ahora cuando golpeamos play, nos topamos con son caja dañada. En realidad conseguimos ese juego de sonido. Y se jugará cada vez que recibamos daños. Ahora, tocar un sonido es sólo un ejemplo. Podrías tener efectos de partículas que sucedan. Podrías ejecutar código totalmente diferente completamente a tu medida. Así es como ejecutarías código en tu personaje o cualquier otro blueprint que estés usando el componente de salud. Cuando la salud disminuye, podemos hacer exactamente lo mismo con aumento de salud y con salud 0 también. Entonces ahora lo que vamos a hacer es agregar un componente de salud a nuestro cubo o ejemplo de interacción que creamos en nuestra última lección. Entonces iremos a ese plano, ábrelo. Voy a agregar aquí el componente de salud. Y al igual que hicimos antes en nuestro blueprint de personajes, vamos a agregar el aplique o lo siento, Sería cualquier daño, el evento cualquier nodo de daño. Agarraremos nuestro componente de salud. A partir de ahí. Queremos hacer disminuir la salud. Nos vamos a arrastrar desde DynamesH y solo buscar por ahí. Y usaremos el nodo redondo. Enchufa eso para disminuir la cantidad y conecta esto aquí arriba. Justo así. Ahora, nuestro cubo puede sufrir daños, igual que nuestro personaje. Y lo que haremos es volver a tener nuestra salud actual como lo hicimos en el personaje. Y agregaremos una cadena de impresión. Yo sólo voy a agregar un append aquí. Entonces sí anexaremos y pondremos un cubo. Salud Es así. Y luego conectaremos nuestra salud aquí solo para que sepamos la diferencia entre la salud de nuestro personaje y la salud de nuestro cubo cuando se imprima en la pantalla. Así como así, r cubed ahora tiene salud. Podemos usar esos eventos bind si quisiéramos gustarnos que acabamos de hacer en nuestro personaje. Entonces podemos hacer atar, disminuir la salud y podríamos tener algo totalmente diferente sucedió en nuestro cubo cuando se disminuye su salud. Entonces este es el poder de los componentes. Puedes agregarlos a otros planos. Y suponiendo que los has configurado de manera modular, puedes simplemente agregarlos y hacer que funcionen muy rápido. En lugar de tener que crear nuevas variables de salud en cada blueprint que desea tener salud y luego nuevas funciones para afectar esas variables. Solo podemos agregar un componente y podemos hacer todo eso de inmediato. Entonces a continuación vamos a estar montando un proyectil que nuestro personaje va a disparar en la dirección que miramos cuando ese proyecto le pegue a algo que tiene este nodo de daño. Vamos a aplicar algún daño a ese objeto. Entonces, para ello, nos dirigiremos al navegador de contenidos. Haremos clic en Agregar y crearemos una nueva clase de blueprint. Voy a seleccionar Actor. Y nos desplazaremos hacia abajo y llamaremos a este BP subrayan proyectil así. Y lo abriremos. Ahora lo primero que añadiremos es una colisión de esfera, y esto será lo que realmente detecte cuál es nuestra configuración de proyectil. Entonces sí agregará, buscará esfera, y usaremos estas justas colisiones. En realidad voy a seleccionarlo y arrastrarlo encima de la D para ruta vista por defecto. Y esto nos hará temer la raíz de nuestro plano. Ahora, a continuación queremos agregar un nuevo componente. Voy a agregar una esfera y hablé correctamente. Ahí vamos, esfera. Y esto es justo lo que verán los jugadores durante el juego. Esta es nuestra representación visual de nuestro proyectil. Podrías usar un componente de malla estática. Si quisieras decir que tenías una bala o un cohete, podrías usar eso en su lugar. Yo sólo voy a estar usando la esfera aquí, así que lo haremos. Y voy a hacer el mío un poco más pequeño. Entonces sólo voy a reducirlo un poco así. También voy a hacer mi esfera un poco más pequeña. Entonces seleccionaré el componente de esfera y cambiaremos el radio de la esfera, solo arrastrémoslo hacia abajo un poco así. Y ahora, debido a que nuestra esfera aquí va a estar lidiando con la esfera de colisión, Static Mesh en realidad no necesita tener ninguna colisión y no queremos que lo haga. Así que seleccionaremos la medida de pila de esferas, desplazaremos hacia abajo, y encontraremos los presets de colisión. Vamos a poner esto a no colisión y vamos a desactivar Can character step on know y vamos a despegar generar eventos de solapamiento. Por lo que ahora nuestra malla estática de esfera no tiene colisión en absoluto. Y toda la colisión va a ser manejada por la colisión de esfera que agregamos al principio. Sólo para hacer las cosas un poco menos confusas, voy a seleccionar estos miedos Static Mesh, y solo voy a renombrar esto a mesh así. Y luego renombraremos nuestro componente de colisión de esfera por colisión de esa manera. Por lo que sabemos la diferencia entre los dos componentes ahora. Ahora también necesitamos configurar algunos ajustes de colisión para nuestro proyectil. Entonces lo que haremos es ir a la colisión, seleccionaremos, él, iremos a Presets de Colisión. Entonces, para nuestra colisión de proyectiles, en realidad vamos a convertir esto a la costumbre. Entonces vamos a asegurarnos de que Collision Enhabilitado esté configurado para consultar solamente. Entonces para el tipo de objeto, en realidad no tenemos un tipo de objeto proyectil, por lo que vamos a agregar uno en la configuración de nuestro proyecto. Entonces hagámoslo. Subiremos a Editar configuración del proyecto, y queremos ir a la categoría de colisión aquí. Después en los canales de objetos, vamos a agregar un nuevo canal de objetos. Voy a llamar título a este proyecto. Así. Queremos que se bloquee la respuesta predeterminada porque mayoría de los objetos en el mundo van a bloquear nuestro proyectil. Entonces queremos empezar a bloquear y luego le pegaremos a Aceptar. Ahora la razón por la que estamos haciendo esto es porque queremos que ciertas cosas ignoren nuestro proyectil. Entonces en nuestro personaje, por ejemplo, si vamos a la ventanilla, no queremos que nuestra cápsula aquí bloquee proyectiles porque en realidad es más grande que nuestro personaje. Queremos que nuestra malla de personaje bloquee la del proyectil en su lugar. Entonces estamos agregando un nuevo canal de objeto proyectil porque entonces podemos decirle a nuestro Componente Cápsula aquí que ignore eso. Y luego queremos que nuestra malla bloquee eso. Así que volviendo a nuestro proyecto, nuestro plan, seleccionaremos nuestro componente de colisión. Por aquí. Queremos seleccionar el tipo de objeto y queremos cambiar esto para proteger. Se ve que el mío no se presenta. Podemos intentar compilar y ver si aparece ahí arriba. Lo hace. Si todavía no lo hace, puede intentar simplemente guardar todo y reiniciar el motor. A veces sí tardan un poco en aparecer. Entonces puedes probar eso si el tuyo no es eso, pero el mío sí. Entonces seleccionaremos eso y luego volveremos a compilar. Y luego queremos configurar esto para bloquear todo. Entonces tomaremos la opción Block en la parte superior. Y luego queremos que esto realmente ignore ****. Entonces haremos caso omiso del punto. Y la razón por la que estamos haciendo eso está en nuestro personaje, esta cápsula aquí se considera el tipo de objeto ****. Queremos que nuestro proyectil ignore por completo la cápsula y sólo golpee la malla. Entonces por eso nos encargamos de ignorar para ****. Ahora la última colisión diciendo que queremos configurar para ignorar su cámara, solo estamos haciendo eso porque no queremos nuestro proyectil afecte el boom de nuestra cámara. Porque si un proyectil pasara por el boom de la cámara, podría hacer que tus cámaras se acerquen muy rápido y luego alejar el zoom y no se vería muy bien. Así que solo asegúrate de configurar esto para ignorar para cámara. También queremos establecer Can character step on, saber que vamos a detener a nuestro personaje tipo de tratar de pararse sobre este objeto si se acerca demasiado a nuestro personaje. Ahora estamos listos para escribir realmente algún código para nuestro proyectil. Por lo que nos dirigiremos al Event Graph. Si no tienes esta pestaña, puedes simplemente abrirla aquí. Ahora inherente, vamos a hacer clic derecho y buscar golpe de evento. Ahora, este evento se ejecutará siempre que nuestros objetos sean nuestro proyectil aquí o golpeen otro objeto. Y eso nos da algo de salida. Entonces cuando sí golpeamos algo, nos da una referencia al componente dentro de nuestro blueprint que en realidad golpea a los otros objetos. Entonces para nosotros este será el componente de colisión porque ese es el único que tiene colisión. Entonces tenemos otro, y esto te da una referencia al otro actor al que golpeamos y estaremos usando esto para aplicar daño. Entonces tenemos otro componente. Esto nos da una referencia al componente en el otro actor al que golpeamos. Y tenemos ubicación golpeada. Esto solo nos da la ubicación de donde golpeamos. Tenemos golpeado Normal, que es la dirección que la superficie que golpeamos, no vamos a estar usando esto. Es un poco más avanzado. Y luego en realidad tenemos aquí abajo unos resultados de cadera. Entonces, si arrastramos hacia fuera y hacemos break hit resultado en C, este es en realidad el mismo resultado de pista que obtenemos para los trazadores. Para que podamos acceder a toda esta información sobre el objeto que golpeamos con nuestro proyectil. Ahora, de nuevo, esto es un poco más avanzado. Sólo vamos a estar usando la otra pluma aquí para aplicar daño al acto de eso vamos a arrastrar fuera de evento aquí, lo buscaremos, aplicaremos, daño usaremos ese nodo. Queremos que el actor dañado sea el otro pin aquí. Entonces estamos diciendo que queremos aplicar una dimensión al actor que hemos escuchado. Podemos fijar los montos de los daños. Entonces sólo voy a establecer diez causa de daño. Como dije antes, este será el actor que en realidad esté haciendo el daño. Entonces estamos en el proyectil, este es nuestro yo, así que nos arrastraremos y nos haremos uno mismo. Y luego instigador de eventos. En realidad vamos a enchufar esto porque un personaje va a estar luciendo nuestro proyectil. Entonces lo que podemos hacer es conseguir instigador. No conseguiremos controlador instigador. Y podemos enchufar eso al instigador de eventos así. Y la forma en que esto está funcionando es cuando en realidad desove nuestro proyectil tendrá una opción para proporcionar un instigador, y lo haremos y ese será el personaje. Y ahora cuando aplicamos daño a otro objeto, estamos obteniendo ese valor instigador que establecemos cuando engendramos nuestro proyectil. Estamos proporcionando eso al otro plano que estaba dañando si quieren acceder a quien realmente los dañó. Ahora, agregaremos la cadena de impresión aquí es solo para que tengamos un poco más de información sobre a quién golpeamos. Por lo que vamos a añadir la cadena de impresión y vamos a arrastrar hacia fuera de que hacer anexar. Y sólo pondremos en la parte superior golpe de proyectil. Y luego en la segunda línea, conectaremos nuestra práctica. Entonces vamos a superar actor y enchufar eso aquí. Sólo voy a agregar un espacio al final de un hit. Entonces son dos palabras separadas así. Ahora lo siguiente que tenemos que hacer es no queremos que nuestro proyectil golpee al personaje que engendró el proyectil. Entonces para hacer eso, vamos a crear una nota de inicio como esa. Um, vamos a conseguir nuestro componente de colisión, arrastrarnos de eso y hacer caso omiso del actor mientras se mueve. Ahora esto básicamente solo nos dice componente de colisión, un actor que queremos ignorar cuando el componente se está moviendo. Entonces conectaremos esto. Queremosproporcionar un actor. Vamos a usar get owner. Y vamos a enchufar eso aquí. Y vamos a asumir debemos ignorar. Ahora, obtener propietario es otra variable que establecemos cuando en realidad engendramos proyectil. Y luego estamos accediendo a eso y estamos contando la colisión, Oye, queremos que ignores golpear al dueño. A continuación vamos a agregar un nuevo componente. Entonces iremos a Agregar, y vamos a buscar proyector. Y vamos a añadir el componente de movimiento de proyectiles. Este es un componente que está integrado en el motor y va a hacer todos los cálculos para nosotros que permitirán que nuestro proyectil bp se mueva realmente como un proyectil. Entonces, para empezar, vamos a fijar la velocidad inicial en 3 mil. Esta es la velocidad de inicio de un objeto. Entonces estableceremos la velocidad máxima en ese mismo valor también. Por supuesto, si quieres que el objeto se mueva más lento o más rápido, puedes aumentar o disminuir estos valores. Probablemente querrás mantener estos iguales. Y luego aquí abajo también tenemos velocidad. Voy a fijar aquí el primer valor para liberar mil también. Entonces, si cambiaras las velocidades aquí arriba, querrías asegurarte de hacer lo mismo por ella también. Ahora mismo si tuviéramos que engendrar nuestro proyecto, cómo en realidad no se destruiría una vez que golpea algo. Entonces vamos a agregar un destroy al final de nuestro código aquí. Entonces sólo voy a destruir actor. Y eso sólo significaría que cuando nuestro proyectil golpee algo, se convertirá en donde será destruido. Así que ahora podemos compilar y guardar esto, y hemos configurado nuestro proyectil, y ahora necesitamos realmente desovar. Entonces para hacer eso, vamos a ir al Third PersonCharacter, luego de vuelta al Event Graph, agregaremos en un nuevo evento de entrada. Entonces, para hacer eso, pasaré a Editar configuración del proyecto. Después iremos a la categoría de entradas y añadiremos un nuevo mapeo de acciones. Por lo que sólo añadiremos una nueva opción. Y voy a llamar fuego mío. Y luego nos dirigiremos de nuevo al Third PersonCharacter haría evento de fuego. Y eso lo encontraremos bajo la acción, eventos como ese. Ahora tenemos que engendrar son actores. Entonces sólo voy a mover esto por aquí para que les tengamos más espacio. Nos arrastraremos desde Pressado. Haremos engendrar actor. Queremos los actos de desove de clase. Fijaremos la clase al proyectil de nuestro proyectil en protector CPP. Ahora, la transformación de desove la vamos a arrastrar y hacer, hacer transformar. Ahora la ubicación, sólo voy a estar usando la ubicación de mis actores. Pero más adelante, si estás haciendo un arma, probablemente querrías usarla como su toma de hocico por ejemplo. Pero por ahora sólo vamos a usar la ubicación de los personajes actor. Entonces se pone, se mapea a la ubicación. Y lo conectaremos a la ubicación. Y luego para la rotación, vamos a utilizar las cámaras de rotación de corriente. Así que obtén control de rotación. Por lo que nuestro protege qué tan lejos está en la dirección que estamos buscando actualmente para el manejo de colisiones. Queremos establecer esto para que siempre desove ignorar colisiones. Y luego si recuerdas, estamos usando tanto al propietario como al instigador dentro de nuestro proyector para. Este nodo aquí y también para este nodo aquí. Por lo que necesitamos establecer esos. Y sólo vamos a usar una referencia a nuestro propio personaje. Entonces solo usaremos uno mismo. Y queremos enchufar esto a los dos aquí y aquí así. Ahora en realidad estamos listos para probar esto. Y hay una cosa que olvidé hacer dentro de la configuración de nuestro proyecto. Entonces, si volvemos allá, creé un nuevo mapping de acción, pero en realidad no puse una clave. Por lo que tenemos que asegurarnos de que hacemos eso. Yo sólo voy a hacer clic en el botón del teclado aquí y luego clic con el botón izquierdo del ratón, y eso asignará eso a eso. Ahora en realidad podemos probar esto, así que vamos a golpear play y vamos a botón izquierdo del ratón. Se puede ver que nuestro proyectil está desovando y está fluyendo y la dirección en la que miramos. Y si le disparamos a nuestro cubo, se puede ver que nuestro cubo de salud está bajando. Ahora, asegúrate de que estás golpeando el cubo y no el suelo, por ejemplo. Por lo que debería decir proyectil golpeó ejemplo de interacción BP como lo hace el mío. Lo mismo con R1. Por aquí se puede ver que tiene un valor de salud diferente al de éste y va a bajar también cuando lo golpeamos. Ahora, hay algunos otros eventos de daños incorporados en el motor. Entonces si nos dirigimos al Third PersonCharacter, sólo les explicaremos esos. Si hacemos clic derecho y podemos buscar puntos puntos daño, usted puede encontrar el daño del punto del evento. Ahora bien, esto funciona de manera similar a nuestro cualquier daño. Si lo movemos por aquí, se puede ver que tenemos algunos insumos adicionales. Ahora la razón de eso es que si llamamos al daño Aplicar puntos, se puede ver que esto funciona mucho como el nodo de daño aplicado, pero nos da algunas entradas extra. Entonces tenemos una entrada para la dirección y también para info de cadera. Por lo que este entonces se ejecutará este evento y nos proporcionará hit Info. Nos proporcionará un nombre de hueso y esto está integrado en la Info de golpe y cosas como la dirección de golpe. Entonces este nodo es un poco más avanzado que el daño aplicado y el daño MD, simplemente porque nos proporciona un poco más de información que podemos recibir sobre el actor que llega hasta aquí. Y luego proporcionamos esa información utilizando el nodo de daño de punto de aplicación y podemos ingresar esos valores aquí. Ahora hay algunos otros nodos de daño, por lo que borrará estos si hacemos clic derecho y buscamos daño radial en encontrar el evento daño radial. Ahora esto correrá siempre que nuestro personaje reciba un tipo de daño radial. Y si hacemos clic derecho y buscamos Aplicar radio, puedes ver que aquí hay dos opciones. Empezaremos por el de arriba. Entonces tenemos aplicar daño radial. Ahora este es un nodo realmente genial porque hace todo el trabajo por nosotros, por cosas como explosiones. Entonces lo que hacemos es proporcionar un origen y esto es algo así como el centro de explosiones. Podemos establecer un daño base y podemos establecer qué tan grande es la zona de daños. Por lo que todos los objetos dentro de los, digamos, 300 centímetros del origen tomarán en realidad el daño base. Y podemos proporcionar actores para ignorar como un trazo de línea por ejemplo. Entonces si solo hacemos re, podemos enchufar actores que queremos ignorar teniendo tomar cualquier daño radial. También podemos asumir hacer daño completo. Eso solo significa que no importa dónde estén los objetos que están en nuestros rangos dañados que tomarán el valor de daño base completo. Entonces tenemos los canales de prevención de daños. Por lo que es posible que tengas una explosión estallar y haya un muro entre tú y el origen de las explosiones, probablemente querrías que el daño se bloqueara. Entonces aquí es donde establecemos qué canal de colisión realmente bloquea el daño que hace nuestro daño radial. Pero por ejemplo, tal vez tenías una ventana entre tú y la explosión. No querrías que el cristal bloqueara todos los daños. Tendrías tu cristal de opinión, ignoras el canal de Visibilidad y el daño de explosión pasaría y golpearía a tu personaje. Y luego tenemos otro tipo de daño de radio que podamos hacer clic derecho en la búsqueda de daño radial. Nuevamente. Utilizaremos aplicar daño radial con caída. Ahora esto funciona más o menos igual. Simplemente nos permite tener un radio interior y exterior. Ahora, los objetos dentro del valor del radio interior desde el origen, tomaremos el daño de la base completa y luego los objetos dentro del radio exterior, pero fuera del radio interior tomarán una reducción cantidadde daños. Esa cantidad de daños dependerá de la caída del daño. Entonces cuanto mayor sea este valor, menos daño te llevarás, más lejos estarás del origen. Si todavía estás dentro del valor del radio exterior, entonces puedes establecer un daño mínimo. Entonces digamos que esto fue 600 y nuestro jugador decía, 590 centímetros del origen, probablemente tendrías un daño mínimo, digamos cinco. Y no importa lo lejos que estés del origen, si estás dentro del radio exterior, siempre sufrirás al menos cinco daños. Y luego acabamos de obtener las mismas entradas de nuestro nodo anterior aquí abajo. Ahora, ambos de nuestros nodos de daño radial o aplicar nodos de daño radial, llamaremos a este evento de daño radial. Para que puedas usar este evento y que será llamado por ambos de estos nodos que te acabo de mostrar. Esos son todos los eventos de daños adicionales que puedes usar en el motor y están integrados en el motor también Así que siempre puedes acceder a ellos. Ahora una cosa a tener en cuenta es este evento y el daño correrá sin importar qué tipo de nodo de daño aplicado utilices. Aunque utilicemos, digamos aplicar daño radial, llamará a este evento para que se ejecute, y esto se ejecutará, pero esto también se ejecutará también. Por lo que si tienes ambos eventos en tu plano, ambos se ejecutarán cada vez que apliques un daño radial. Y esto es lo mismo para el daño puntual. Por lo que si utiliza el nodo de aplicación de daño de punto, llamará al evento de daño de punto de evento. Si encontramos que el evento de daño de punto evento, este correrá, este evento, cualquier daño también correrá. Por lo que ambos correrán. Esto es sólo algo a tener en cuenta. Si tienes, digamos, ambos, tienes todos estos eventos en tu proyecto, esto se ejecutará siempre que tomes cualquier tipo de daño. Entonces solo ten cuidado con eso. Si tienes salud siendo disminuida aquí, y luego otra vez en estos dos eventos, podrías terminar con que tu salud sea disminuida dos veces. Por lo que sólo podemos eliminar est 55. Sistemas de juego (barra de salud): Oigan a todos. En esta lección vamos a estar agregando un widget de barra de salud que va a usar los valores que hemos configurado en nuestro componente de salud. Y luego vamos a agregar nuestra Barra de Salud al HUD BP que creamos en la lección de interacción. Entonces, para empezar, vamos a crear un nuevo widget. Entonces iremos a Agregar luego a la interfaz de usuario, y vamos a seleccionar Widget Blueprint. A continuación, seleccione el widget habitual. Y nos desplazaremos hacia abajo y yo sólo voy a llamar al mío BP subrayar salud, así. Lo abriremos. Yo sólo voy a arrastrar el mío hasta el pico superior. Para nuestra Barra de Salud. Voy a crear algunos textos que sólo dice salud. Entonces debajo vamos a tener una barra de progreso que va a mostrar cuánta ayuda tenemos. También vamos a agregar algún texto a eso, eso dirá nuestra salud actual y también en Mac auto. Ahora, para empezar, no vamos a usar un panel de lona porque recuerda que vamos a agregar nuestra Health Bar a nuestro HUD. Por lo que usaremos eso para elegir dónde está posicionada nuestra Health Bar en la pantalla. Por lo que aquí solo necesitamos agregar nuestros widgets de Health Bar. Entonces comenzaremos con una caja vertical. Entonces iré al panel y luego agarraremos la caja vertical y solo agregaré eso a la jerarquía. Agarraremos algunos textos, así que solo busco texto. Eso lo pondremos en la caja vertical. Entonces voy a conseguir una superposición. Entonces buscaremos superposición y añadiremos eso al cuadro vertical también. Y la razón por la que estoy usando una superposición es porque quiero tener una barra de progreso y luego quiero superponer algo de texto encima de esa barra de progreso. Entonces vamos a usar la superposición para eso. Ahora agarraremos nuestra barra de progreso, así que solo buscaré progreso y agregaré eso a nuestra superposición. Y luego también voy a conseguir un poco más de texto y agregarle eso a la superposición también. Por lo que comenzaremos seleccionando nuestro texto principal aquí. Y sólo voy a cambiar esto para decir salud así. Podemos cambiar la configuración. Entoncessi quieres, voy a hacer el mío un poco más pequeño, como tal vez 20. Eso entonces a continuación quiero establecer el tamaño de mi barra de progreso, pero no tenemos una caja de tamaño. Entonces, para ello, vamos a seleccionar nuestra superposición con el botón derecho del ratón Envolver con. Y luego queremos encontrar la caja de tallas aquí. Entonces eso se acaba de agregar en una caja de tamaño para nosotros. Ahora podemos elegir qué tamaño va a ser nuestra barra de progreso. Así que voy a activar anular ancho y anular altura. Y voy a fijar la altura para ahorrar 30. Y luego estableceremos el ancho para decir tres quintas partes. Por ahora. Ahora vamos a seleccionar nuestra barra de progreso y simplemente decirle que use todo el espacio disponible para que lo rellenemos horizontalmente y también verticalmente. Ahora actualmente estamos previsualizando para una pantalla de tamaño 1280 por 720. Así que vamos a cambiar esto a de Phil pantalla para simplemente agregar el tamaño deseado en pantalla así. Sólo para que podamos tener una mejor idea de qué tan grande o cuál es actualmente. A continuación, vamos a seleccionar nuestro libro de texto aquí que está sobre nuestra barra de progreso. Y voy a cambiar esto sólo por decir 50 slash 100s para que podamos ver cómo se verá. Voy a cambiar el tamaño para que sea mucho más pequeño. Entonces comenzaremos con, digamos, del 14 al 16. Y alinearemos esto en el lado derecho. Y también queremos alinearnos al centro así. Entonces ahora vamos a estar editando este texto usando código. Entonces para hacer eso, vamos a necesitar que sea una variable. Entonces voy a asumir es variable y voy a cambiar el nombre a texto de salud. Así. También vamos a estar cambiando nuestra barra de progreso. Entonces voy a simplemente renombrar esto. Se puede ver que ya está marcado como es variable. Entonces yo sólo voy a llamar así a esta barra de salud. Ahora también voy a agregar un poco de relleno al lado derecho porque no quiero que el texto esté justo en el borde de esta barra de progreso, abrirá el relleno y configurará el derecho a decir cinco pixeles. Oh, lo siento, tenemos que seleccionar nuestros textos allí, así que asegúrate de tener texto seleccionado. Y luego estableceremos el lado derecho unos cinco pixeles, o tal vez cuatro. Y eso solo nos da un poco de espacio entre el borde de nuestra barra de progreso y nuestro texto. Ahora podemos compilar y guardar esto. Y estamos listos para escribir realmente el código que va a controlar nuestra Barra de Salud. Entonces nos dirigiremos a la vista gráfica. Ahora para actualizar nuestra Barra de Salud y nuestros textos de salud, vamos a necesitar obtener una referencia al componente de salud que agregamos a nuestro personaje. Entonces para ello, vamos a agregar algún código a nuestro Event Construct que empiezan con solo borrar estas dos notas porque no las vamos a estar usando. Y luego conseguiremos nuestro lugar de posesión o obtienes Owning Player? Y esto nos da el controlador que posee este widget. Entonces a partir de eso podemos hacer se controla ****. Y esto nos da una referencia a nuestro personaje, pero como punto de referencia objeto. Y luego a partir de eso podemos hacer conseguir componentes por clase. Y entonces podemos comprobar, ¿tiene nuestro **** el componente de salud? Si lo hace, entonces queremos establecer eso. Vamos a arrastrar hacia fuera del valor de retorno. ¿ Promocionas una variable? Y llamamos así a este componente de salud. Ahora, antes de poner esto, queremos hacer algunas comprobaciones. Entonces primero queremos comprobar que estamos controlando algo. Entonces vamos a hacer es válido aquí así. Y si es válido, entonces permitiremos configurar así el componente de salud. Por lo que ahora estamos listos para crear nuestra función bind. Entonces compilaremos y volveremos a la vista del diseñador. Y comenzaremos seleccionando nuestra barra de salud aquí. Y pasaremos al panel Detalles y encontraremos el valor presente. Entonces queremos usar la opción bind y hacer Create Binding. Entonces, para empezar, queremos comprobar ¿ es válido nuestro componente de salud? Entonces vamos a conseguir el componente de salud y hacer es válido así. Eso sólo nos impediría obtener algún error. Entonces necesitamos obtener nuestra salud actual y también nuestra oferta máxima. Por lo que se va a arrastrar y sí obtener la salud actual y obtener la máxima salud, como aplaudir. Y entonces necesitamos dividir nuestra salud actual por r max salud. Y esto nos dará un valor de 0 a uno. Eso entonces podemos usar para nuestra barra de progreso. Pero primero necesitamos convertir estos para que sean carrozas. Entonces haremos para flotar. Eso nos dará esta nota. Simplemente copiará y pegará eso aquí. Enchufa toda la aleta o la salud de imax aquí. Entonces usaremos nuestra salud actual y sí dividiremos. Dividimos, y dividimos nuestra salud actual por r max out. Y esto nos dará un valor de 0 a uno. Y eso le dirá a nuestra barra de progreso qué tan lejos debe estar. Y entonces sólo podemos enchufar esto aquí así. Entonces si nuestro componente de salud no es válido, podemos simplemente copiar y pegar este valor de retorno y conectarlo a no válido y simplemente devolveremos 0. A continuación, necesitamos una carpeta para nuestros textos. Entonces volveremos al diseñador y seleccionaremos el texto dentro de nuestra barra de progreso aquí. A continuación, para el valor de texto seleccionaremos bind y haremos Create Binding. Y haremos lo mismo con nuestros componentes de salud. Entonces lo conseguiremos y comprobaremos que es válido. Y conecta esto hasta nuestro nodo de inicio así. Entonces queremos conseguir nuestra salud actual. Entonces consigue salud actual y consigue la salud máxima así, que es línea, estos son un poco mejores. Ahora, en realidad necesitamos devolver algunos textos. Así que arrastraremos hacia fuera de nuestro valor de retorno y usaremos el nodo de texto de formato así. Entonces necesitamos una entrada para nuestra salud actual. Entonces usaremos corchete abierto, lo llamaremos salud actual. Y luego cierre el corchete. Y vamos a golpear Enter y se puede ver que agrega un nuevo valor para nosotros. Entonces voy a enchufar nuestra salud actual a ahí. Y luego en nuestro formato texto valor aquí, vamos a hacer una barra y luego vamos a hacer soporte abierto, salud máxima, y luego cerrar corchete y luego entrar ahora. Y eso nos crea un nuevo Max sanamente. Y vamos a enchufar eso aquí así. Entonces si no es válido, solo estamos copiando, pegando o devolviendo el nodo y lo conectaremos y simplemente dejaremos ese valor vacío. Por lo que ahora todo nuestro código está configurado. Si volvemos al diseñador, puedes pasar todo el tiempo que quieras editando esto y haciendo que se vea como quieras. Voy a hacer una cosa y eso ha cambiado el color de nuestra Health Bar. Entonces lo voy a seleccionar y voy a bajar al Relleno, Color y Opacidad. Y sólo voy a seleccionar esto y lo voy a cambiar a un bonito color verde solo para destacar la salud. Y luego le pegaré OK, compilaré y guardaré esto. Ahora podemos agregar esto a nuestra cabaña, así que volveremos al navegador de contenido y abriremos el HUD de BP. En la paleta, buscaremos salud, y arrastraremos así en nuestra BP Health Bar. Y yo sólo voy a poner el mío en la esquina de abajo ahí. También voy a cambiar el ancla. Entonces porque este es el punto de anclaje más cercano, ahí es donde voy a usar. Entonces lo pondremos al lado inferior izquierdo así. Ahora, puedes cambiar el tamaño del switch it. Entonces si lo arrastro hacia fuera, se puede ver nuestra Barra de Salud se hace cada vez más grande y más pequeña. O puedes tomar el tamaño al contenido. Y eso solo se asegurará de que el widget siempre tenga el mismo tamaño que estaba dentro de este editor de widgets aquí. Así que ahora podemos compilar y probar esto. Entonces le pegaremos a play. Y pueden ver que nuestro valor está apareciendo al decir un 100 de 100 si me topo con esta caja de aquí, pueden ver que nuestra salud disminuye cada vez que entré a la caja. Si exhalamos editor de planes y vamos a nuestro plan de personajes y cambiamos nuestra configuración de salud aquí. Entonces si seleccionamos el componente de salud, digamos que pongo la salud máxima a 500 y establecemos la mitad inicial en 250. Verás que cuando compilemos y golpeemos play, espero por solo actualizaciones automáticamente, dice 250 fuera 500 y nuestra barra de progreso también está a mitad de camino. Así que ahora voy a sólo X fuera y sólo voy a establecer esos valores de nuevo a su defecto. Entonces un 100100. Ahora si quieres hacer más personalizaciones, solo tienes que ir a tu barra de salud aquí y hacer los cambios que desees. Si desea cambiar el tamaño de la barra de progreso, puede seleccionar la caja de tamaño y podemos cambiar estos valores aquí. Si desea cambiar el tamaño del texto, solo puede seleccionarlos y puede cambiar los tamaños de fuente aquí. Y también aquí. Ya terminamos para esta lección. Esperemos que ahora entiendas un poco más sobre cómo podemos obtener valores de otros planos y luego mostrarlos en un widget. 56. Sistemas de juego (reanudación): Oigan a todos, En esta lección vamos a estar configurando un sistema de respuesta. Y eso va a incluir un HUD que se mostrará cuando muramos, podremos hacer clic en botón responder, y eso nos creará un nuevo personaje que tomará el control. Entonces, para empezar, crearemos a nuestros encuestados. Entonces vamos a ir al Navegador de Contenido, sí agregar, y queremos agregar una interfaz de usuario y un Widget. Blueprint va a ser un uso de widget. Y nos desplazaremos hacia abajo hasta el fondo. Y voy a llamar a mi BP subrayado, responder HUD así. Y eso lo abriremos. Yo sólo voy a arrastrar el mío a la barra superior así. Esto va a reemplazar nuestro HUD normal. Entonces vamos a usar un panel canvas para esto. Por lo que buscará Canvas y agregará eso a la jerarquía así. Ahora, sólo voy a agregar un simple botón a esto que podamos recoger una respuesta. Entonces agarraremos un botón. Yo sólo voy a arrastrar esto. Voy a cambiar el punto de anclaje al centro porque quiero mi botón cerca del centro. También voy a cambiar la alineación a 0.50.5, solo para que nuestra ubicación esté en el centro de nuestro widget hip. Y voy a poner esto a 0 y a la x Y sólo voy a mantener shift y arrastrarlo un poco hacia abajo para que sea por aquí. Y ahora puedo agregar algunos textos, mis botones, por lo que buscará texto. Sólo voy a arrastrar hacia fuera en la parte superior de mi botón. Y vamos a tener esto decir re, deporte así. Ahora voy a detener mi botón otra vez y solo hacer tamaño al contenido para que se haga más grande para que quepa el texto aquí. Voy a cambiar el color del texto para que sea negro solo para que sea un poco más fácil de ver. Botón de inicio de nuevo. Ahorapodrías pasar todo el tiempo que quieras aquí haciendo que este luzca como quieras. Simplemente me alegra un poco de texto, voy a tener de nuevo ancla en el centro va a cambiar su alineación de nuevo a 0.50.5. Y vamos a establecer la x a 0. Y voy a mantener Shift otra vez y simplemente moverlo hacia abajo. Y yo sólo voy a tener estos textos dicen que tienes así. Y tendremos esto alineado en el centro y tamaño al contenido. Ahora estamos listos para agregar algún código a nuestro personaje en tercera persona. Entonces iremos al navegador de contenidos y abriremos eso. Ahorita aquí conectado hasta que empiezo a jugar, tenemos algún código que enlaza un sonido de play cada vez que recibamos daños, solo voy a borrar esto porque es un poco molesto. Entonces borraremos eso por ahora. Y vamos a crear un nuevo bind para cuando golpee 0. Entonces agarraremos nuestro componente de salud, arrastraremos de eso y sí nos ataremos a la salud. Y queremos Bind Event a en salud 0 aquí, así. Entonces desde evento, vamos a arrastrar hacia fuera y hacer costumbre. Y queremos agregar un cliente. Entonces llamaremos a este personaje muerto. Así. A continuación vamos a agregar un due once notas, así que vamos a arrastrar hacia fuera y hacer, hacer una vez. Y esto sólo significará que este código sólo se ejecuta una vez. Entonces queremos comprobar, ¿ nuestro HUD actualmente es válido? Debería ser, pero queremos comprobar de todos modos. Por lo que vamos a hacer es válido. Y conectaremos esto hasta aquí. Y vamos a retirar nuestro hub ahora. Por lo que vamos a arrastrar y hacer quitar de los padres. Y esto actúa como una forma de destruir un widget. Por lo que agregaremos esto como válido. Y luego queremos realmente engendrar nuestra respuesta. Así que vamos a arrastrar desde aquí, hacer crear widget, y vamos a establecer la clase para responder. Queremos que sea responder HUD, jugador ganador sí obtendrá controlador de jugador así. Entonces queremos establecer realmente nuestro respondido a una variable. Por lo que vamos a arrastrar hacia fuera desde el valor de retorno, hacer promover la variable. Llamaré a esto responder. Entonces necesitamos agregar esto a la pantalla del jugador. Entonces arrastraremos hacia fuera y haremos Add to Viewport así. Entonces queremos asegurarnos de que el PIN no es válido esté conectado a nuestro nodo Crear Widget. Y ahora para mantener las cosas ordenadas, vamos a resaltar todo esto y derrumbarlo a una función. Así que vamos a hacer clic derecho y hacer colapsado función, y vamos a llamar a esto crear reaparición, HUD así. Entonces todo ese código ahora está contenido dentro de esta función aquí. Y podemos mover esto para que sea un poco más pequeñito. Podemos agregar algunos nodos de reencaminamiento. Dos no son válidos. Alambre aquí así. Sólo para arreglar las cosas. Entonces compilaremos y guardaremos esto. A continuación, regresaremos al Event Graph. Ahora después de que hayamos creado nuestra respuesta aquí, queremos desactivar cualquier entrada de movimiento para nuestro personaje. Por lo que haremos clic derecho y buscaremos discapacitados. Queremos desactivar la entrada. Y luego sí conseguiremos controlador de jugador y conectaremos esto hasta el mando del jugador y la pondremos. Ahora si quisiéramos, podríamos tener aquí una obra de animación sorda. Ahora no tengo ninguna, pero lo que vamos a hacer en su lugar es armar una muñeca de trapo. Entonces cuando morimos, nuestro personaje tocaría como un efecto rabdo. Entonces, para hacer eso, obtendremos nuestros componentes de malla. Entonces queremos el componente de malla del panel Componentes vamos a arrastrar hacia fuera y vamos a hacer set simular. Queremos establecer simular física. Y conectaremos esto hasta para desactivar la entrada. Nosotros queremos asumir esto. Entonces vamos a arrastrar fuera de Michigan y lo que queremos hacer es poner todos los cuerpos. Hechizo correctamente, Cuerpos Simulan Física aquí. Nosotros también queremos asumir eso. Entonces queremos cambiar su perfil de colisión. Entonces para eso vamos a arrastrar y hacer Set collision. Y queremos Set Collision profile name. Conecta esto aquí arriba. Queremos configurar esto en nombre de perfil de colisión a muñeca de trapo. Tan R mayúscula y luego muñeca de trapo deletreada exactamente así. Este código es en realidad lo que va a hacer que nuestro personaje muñeco de trapo cuando muramos. Entonces vamos a colapsar esto a una función también. Entonces haremos clic derecho y haremos colapsar la función. Y a esto lo llamaremos Greg, sin embargo, así. Y de nuevo, vamos a mantener las cosas bonitas y ordenadas y todo ese código sólo está contenido en esa función. Ahora, así, también podríamos agregar una nota aquí para nuestro Componente de Movimiento de Personajes. Para que pudiéramos agarrar eso y hacer detener el movimiento. Y podríamos hacer detener el movimiento de inmediato. Esto sólo significa que nuestro personaje no seguirá recibiendo ninguna entrada de movimiento. Por lo que una vez que termines, debería verse así. Ahora de vuelta en nuestro Event Graph, podríamos querer que el cadáver de nuestro personaje desaparezca después de una cierta cantidad de tiempo. Entonces, para hacer eso, podemos alargar y hacer vida útil. Queremos establecer vida útil. Y esto es cuántos segundos después de ejecutar este nodo, el actor existirá para antes de que lo destruyamos. Entonces si pongo esto a decir diez segundos, después de diez segundos, el cuerpo de nuestro personaje desaparecerá. Ahora tal vez quieras una variable muerta que sea solo un booleano que sea cierto cuando el personaje está muerto. No lo estaremos usando en este ejemplo. Pero si lo hicieras, podríamos crear una nueva variable, llamar a esto muerto. Podríamos establecer esto aquí también, solo para que tengamos una variable que nos dice que estamos muertos. Y podrías usar eso en otro código si quisieras. A continuación, en realidad vamos a configurar un controlador personalizado. Y la razón por la que estamos haciendo esto es cuerpo de nuestro personaje podría desaparecer después diez segundos y entonces tal vez empecemos inactivo en la pantalla de respuesta. Ahora bien, si nuestro código de respuesta estuviera en el carácter y hubiera sido destruido, si pinchamos en el botón de responder, no pasaría nada porque nuestro personaje habría sido destruido, pero el el controlador de lugar siempre existirá. Por lo que queremos poner nuestro código de respuesta en eso. Entonces para hacer eso, vamos a crear un nuevo controlador personalizado, iremos al Navegador de contenido, luego agregaremos la clase Blueprint, y luego queremos el controlador del reproductor. Y eso nos creará un nuevo anteproyecto. Llamaremos a este controlador de ejemplo de subrayado BP. Al igual que ahora. Eso lo abriremos y sólo voy a arrastrar el mío al bar de aquí. Después iremos al Event Graph. Y luego aquí vamos a crear una nueva función para realmente encontrar la ubicación donde vamos a responder nuestro personaje. Por lo que crearemos una nueva función. Voy a llamar a este punto de respuesta aleatoria. Así. Vamos a agregar una salida. Esta será una ubicación. Entonces queremos que esto sea un vector y llamaremos a esta ubicación así. Entonces vamos a hacer o trabajar desconectar esta nota de retorno por ahora. Vamos a arrastrar fuera de esto y sí conseguir o actores de clase. Y con eso, vamos a usar el inicio del jugador. Ahora, este es un activo que está integrado en el motor. Entonces no hemos creado eso en realidad solo viene con el motor. Entonces a partir de eso queremos arrastrar hacia fuera y hacer longitud. Lo haremos es mayor que 0. Entonces solo estamos comprobando que haya al menos una estrella en nuestro nivel. Entonces haremos f. Y si es cierto correrá en nuestro chequeo aleatorio. Y si es falso, sólo tendremos que llegar a una ubicación. Entonces para esto, podemos hacer algo así como 300 y la Z solo para asegurarnos de no caer por el suelo. Pero esto sólo se usará si no tenemos ningún jugador inicia y el nivel, idealmente siempre quieres tener al menos uno en tu nivel. Entonces a partir de eso, en realidad podemos hacer una variable local para almacenar esto solo para mantener las cosas ordenadas. Por lo que vamos a arrastrar desde aquí, hacer promover una variable local. Simplemente llamaremos a este jugador Scott. Me gustaría poner una L al final de las variables locales solo para que sea fácil decir que son locales. Entonces haré que los jugadores inicien L capital así. Conecta eso hasta aquí. Y tomaré la salida y enchufaré eso aquí. Sólo mantén las cosas ordenadas. Y después conseguiremos el yeso. Queremos recoger al azar una de las entradas en este array para nuestro jugador, spawn up. Para eso, vamos a alargar y vamos a hacer volver a conseguir longitud. Y luego queremos entero aleatorio. Queremos entero aleatorio de un entero aleatorio en rango. Y luego para mínimo, queremos que este sea 0, y luego máximo queremos que este sea el largo menos uno. Entonces resta uno. Este será nuestro máximo así. Por lo que esto nos dará un número aleatorio entre 0 y cualquiera que sea el número máximo actual de entradas que están en nuestro jugador comienza. Y luego a partir de eso podemos hacer, podemos copiar y pegar esta variable, hacer gap y obtener una copia. Y luego conectaremos esto al entero. Esto nos dice qué jugadores comienzan queremos conseguir. Entonces solo obtenemos su ubicación. Por lo que sí volvemos a ubicación, volveremos esto. Entonces sólo copiaré y pegaré. Vuelvo nodo, enchufar la ubicación a la ubicación y enchufar esto de aquí en verdadero así. Podemos hacer esto un poco más recto, atar esto, y luego compilaremos y guardaremos esto. Ahora esta función obtendrá un inicio de jugador aleatorio para que nuestro personaje responda que nos dirigiremos al Event Graph ahora. Y vamos a borrar ambos porque no los vamos a estar usando. Entonces vamos a crear un nuevo eventos personalizados o hacer clic derecho y hacer personalizado. Y queremos agregar un cliente. Entonces voy a llamar así a este personaje de reaparición. Y vamos a empezar con nuestro punto de respuesta aleatoria. Entonces vamos a conseguir eso así. Entonces queremos responder a nuestro carácter. Así que vamos a arrastrar desde aquí y hacer engendrar actor de clase. Ahora, para la clase queremos que esto sea lo que nuestro **** predeterminado esté en nuestro modo de juego. Entonces lo que haremos es buscar conseguir el modo de juego. A partir de eso, sí podemos obtener poema por defecto. Y esto será lo que sea Default Pawn Class que hayamos establecido en nuestro modo de juego. Entonces conectaremos eso a clase. Entonces para spawn transform, vamos a arrastrar hacia fuera y hacer un make transform. Simplemente voy a retroceder un poco esto para que tengamos un poco más de espacio. Después tomaremos la ubicación de nuestro punto de respuesta aleatoria y la conectaremos a una ubicación así. Y estableceremos el manejo de colisiones predeterminado para intentar ajustar la ubicación, pero siempre generar porque siempre queremos que nuestro personaje se genere. Después haremos clic en la flecha hacia abajo aquí y configuraremos al propietario para que sea nuestro controlador. Así que solo usaremos uno mismo y conectaremos eso al dueño también. Ahora, porque estamos en el controlador, solo queremos poseer este nuevo personaje que hemos respondido. Entonces voy a arrastrar fuera del valor de retorno, ¿posees usted? Y podemos poseer ese personaje y podemos dejar el propio objetivo porque estamos dentro de un controlador. Entonces ahora compilaremos y guardaremos eso. Y vamos a volver a nuestro responder duro porque aquí necesitamos agregar algún código que se va a ejecutar cuando presionemos el botón R responder, seleccionará el botón aquí y bajaremos al desclic en el panel Detalles. Haga clic en eso. Y luego aquí necesitamos esto para ejecutar nuestro evento de respuesta dentro de nuestro controlador de ejemplo. Entonces, para hacer eso, haremos clic derecho y buscaremos Get Owning Player. Y esto nos da una referencia a nuestro controlador. Entonces todo lo que tenemos que hacer entonces es costar al controlador de ejemplo. Conecta eso hasta aquí. Y eso nos permitirá llamar a nuestro carácter de respuesta evento. Ahora cuando sumamos todos responden duro para tocar un grito, queremos que suelte nuestro mouse para que podamos realmente recoger nuestro botón de respuesta. Entonces para hacer eso, vamos a agregar algún código al Event Construct, solo vamos a eliminar el tick del evento y el evento preconstruido. Entonces sí vamos a volver a conseguir controlador de jugador. Entonces sí conseguiremos Owning Player. Y a partir de eso, podemos usar show mouse. Queremos establecer show cursor del ratón en true. Entonces queremos establecer el modo de entrada a juego y gy. Entonces vamos a enchufar eso aquí. Y queremos que el pelo widget sea auto, así que te buscaremos. Y esto solo nos está diciendo que nuestro cursor del ratón ahora está visible y estamos usando este widget como nuestro enfoque. Voy a desmarcar ocultar mouse durante la captura porque todo lo que hace es cuando mantienes pulsado el botón izquierdo del ratón y arrastra mientras los widgets visibles, ocultará nuestro mouse. Entonces en lo personal, eso no me gusta, así que voy a desmarcar eso. Ahora una vez que hayamos hecho clic, responderé botón. Queremos que nuestro ratón se oculte de nuevo. Entonces copiaremos este código aquí, y pegará eso aquí. Y vamos a establecer nuestro cursor del ratón para que no sea visible. Y luego queremos configurar el modo de entrada al juego. Por lo que haremos configurar el modo de entrada a juego solamente, se conectará aquí arriba. Y luego, por último, queremos ocultar nuestra respuesta con fuerza una vez que hemos recopilado responder. Por lo que vamos a arrastrar y vamos a hacer destruir o lo siento, no destruir, quitar a los padres movidos de los padres. Y eso actúa como un nodo de destrucción. Por lo que cuando hacemos clic en nuestra respuesta, berm le dirá a nuestro código de caracteres en el controlador para responder u ocultar nuestro mouse. Y entraremos solamente al modo de juego, y luego quitaremos nuestra respuesta escuchada desde la pantalla. Ahora, en realidad no estamos usando nuestro controlador de ejemplo todavía, así que necesitamos ir a nuestro modo de juego. Por lo que nos dirigiremos al navegador de contenido y encontraremos el modo de juego en tercera persona. Abre eso, puedes encontrar el controlador de jugador o la clase de controlador de jugador por defecto aquí. Y podemos cambiar eso para que sea el controlador de ejemplo de BP. Entonces compilaremos y guardaremos esto. Ahora otra cosa que debemos agregar es colisión de nuestros personajes para cuando hayan muerto. Ahora, no queremos que nuestro personaje siga bloqueando las cosas una vez que están muertas. Por lo que vamos a agregar un nuevo perfil de colisión. Por lo que subiremos a Edit Project Settings. Y luego aquí queremos bajar a colisión. Y luego presets. Vamos a agregar un nuevo preset. Voy a llamar a esto muerto ****. Vamos a Establecer Colisión Habilitada para consultar únicamente. Vamos a establecer el tipo de objeto a **** ellos para todo lo demás que se va a tomar ignorar. Y luego vamos a tomar bloque tanto para estático como dinámico. Vamos a usar este perfil de colisión para nuestra cápsula. Entonces cuando el jugador muera, muñeco de trapo talón, pero su cápsula seguirá siendo donde morimos. Ahora no queremos, si respondemos que nos atropellen a nuestro cuerpo y nos peguen a la cápsula. Entonces lo que esto hará es hacer que nuestra cápsula no interfiera con la colisión de nuestro jugador. Pero evitará que nuestra cápsula caiga por el suelo porque no tenemos estática salvaje y dinámica bloqueada. Nuestra cápsula podría caer directamente por el suelo. Y ahora en realidad necesitamos configurar nuestra cápsula para usar esto. Entonces le pegaremos a Aceptar y luego iremos a tercera persona. Y podríamos añadir esto a nuestro código aquí, pero en realidad voy a agregar el mío a la muñeca de trapo start. Entonces vamos a abrir eso y vamos a conseguir nuestros componentes de la cápsula. Entonces eso es todo desde nuestro panel de componentes. Arrastra hacia fuera y haz Set collision. Y queremos el nombre del perfil de circulación. Y sólo añadiremos esto a la anterior. Esto va a estar muerto ****, deletreado exactamente así. Ahora otra cosa que vamos a cambiar en nuestro personaje en el Event Graph es que este código aquí está siendo todo dirigido por nuestro evento empieza a jugar. Pero ahora tenemos un sistema de respuesta. Queremos cambiar esto para que sólo se ejecute cuando poseemos el personaje. Por lo que podemos hacer clic derecho y buscar evento poseer. Y podemos usar Event poseído y enchufar esto aquí. Y entonces en realidad podemos borrar la jugada inicial. Y ahora cada vez que este personaje es poseído por un controlador, entonces ejecutará este código. Ahora otra cosa que podemos agregar es que si te acuerdas, nuestro actor de lockout Tracy va a estar corriendo 30 veces por segundo, pero queremos parar eso cuando buceemos porque ya no vamos a ser interactuando con las cosas. Entonces, si recuerdas, creamos nuestra mirada a Act a timer y podemos usar esto para detenerlo. Así que por aquí, sólo podemos añadir esto al final. Obtendremos nuestro vistazo al temporizador, arrastramos fuera de eso y haremos claro e invalidar el tiempo que compro asa. Y esto en realidad detendrá nuestro rastro así. Y vamos a compilar esto. Ahora una última cosa que necesitamos cambios en nuestro bus de salud, así que nos dirigimos hacia allá y nuestro navegador de contenido lo encontrará en la parte superior aquí. Abre eso. Después nos dirigiremos al Event Graph. Y si lo recuerdas, hereda donde obtenemos nuestro componente salud peones. El problema con esto ahora mismo es que ahora tenemos un sistema de respuesta o control o puede que no hayamos tomado el control del **** cuando se ejecute este código. Entonces todo lo que tenemos que hacer es agregar un retardo de un fotograma. Por lo que buscaremos retraso y usaremos delay hasta el próximo técnico. Y todo lo que hace esto es agregar un solo retardo de fotograma a cuando se ejecutará este código. Y para entonces, nuestro controlador habrá tomado el control de nuestro ****. Ahora estamos listos para probar esto. Compilaremos y volveremos al Navegador de Contenido. Voy a cambiar los daños que se dañan zona hace por lo que voy a abrir eso. Voy a incrementar esto para decir 40 compilarán. Y ahora podemos golpear play y probar esto. Entonces si me topo con la zona de daños, pueden ver que estamos recibiendo 40 daños. Y ahora cuando corra por última vez, verás que nuestro personaje muere. Muñecas de trapo en el piso. Podemos golpear responder para engendrar un nuevo personaje. Se puede ver que nuestra interacción sigue funcionando. Si presiono E, eso está funcionando correctamente. Si volvemos a encontrarnos con la zona, también podemos matar a este personaje. Ahora tenemos un sistema de respuesta en pleno funcionamiento. Ahora es posible que quieras agregar nuevos puntos de spawn para tu personaje. Entonces para hacer eso, podemos salir y vamos a ir al desplegable aquí, luego dos básicos y podemos agregar un nuevo inicio de jugador con solo arrastrar esto adentro. Podemos agregar en un segundo, por lo que volverá a pasar a Básico, luego Player Start y agregaremos uno por aquí. Ahora cuando golpeamos play para jugar en ese paso, podemos desovar o incluso uno de estos nuevos puntos. Entoncesle pegaremos a Play. Se puede ver que en realidad hemos engendrado en el original, pero si nos topamos con la zona de daño para matarnos, podemos responder. Y se puede ver que es responderme en el original otra vez. Pero si lo hacemos de nuevo, hemos respondido en diferentes puntos de spawn. Entonces eso es todo por esta lección. Ojalá encontraras útil la información y ahora sepas cómo configurar un sistema de respuesta para tus futuros proyectos. 57. Sistemas de juego (enrutamiento): Oigan a todos. En esta lección voy a estar mostrándote cómo configurar un sistema de agachamiento para tus personajes. Ahora, puedes usar cualquier animación agachada que te guste. Voy a estar usando las animaciones de las lecciones que usamos antes en el curso. Y para descargarlos, basta con ir al enlace en la descripción del curso. Puedes descargar ese archivo, después extraerlos, y deberías terminar con una carpeta que se vea así. Ahora vamos a sumar estos a nuestro proyecto. Entonces todo lo que hacemos es hacer clic derecho y hacer copia. Después vuelve al motor. Después haremos clic derecho en la carpeta de contenido aquí. Y queremos ir espectáculo en Explorer. Y eso sacará a colación aquí nuestros archivos de proyecto. Y sólo vamos a pegar estos en eso. Ahora puedes ver que se muestra en el motor aquí. Ahora, el tuyo puede o no tener firewalls dentro. Entonces si lo abrimos, puedes ver que el mío está funcionando, pero si el tuyo no tiene ninguna animación dentro, simplemente cierra el motor y luego vuelve a abrirlo y debería aparecer. Ahora lo primero que debes hacer es crear un nuevo espacio de mezcla porque las animaciones de las lecciones en realidad no incluyen un espacio de mezcla pre-hecho para nuestro agacharse, pero sí incluye todos los las animaciones que necesitamos para crear una. Por lo que creará un nuevo espacio de mezcla. Ahora, sólo voy a hacer clic en Agregar, luego ir a animación. Y queremos encontrar aquí la opción de espacio de mezcla. Y necesitamos seleccionar nuestro esqueleto de personaje. Entonces ese es éste de aquí. Se puede ver que dice juego de ruta, personajes, maniquíes, y luego mallas. Entonces seleccionaremos ese. Y vamos a nombrar este espacio de mezcla, agacharse así. Y eso lo abriremos. Yo sólo voy a arrastrar el mío a la barra superior así. Entonces, para empezar, necesitamos configurar nuestro eje para que empecemos con lo horizontal. Esto va a ser toda dirección. Por lo que busca dirección. Vamos a establecer el valor mínimo a menos 180 y luego el valor positivo a positivo 180. Y si recuerdas de nuestro espacio de mezcla es menor que, Eso es porque necesitamos ser capaces de establecer una animación para todas las diferentes direcciones que nuestro personaje puede estar yendo. A continuación, necesitamos el eje vertical, así que abriremos eso y estableceremos que esta sea la velocidad. Y dejaremos el valor mínimo del eje en 0. Y entonces nuestro valor máximo de eje estará donde esté tu velocidad de caminata cuando estés agachado. Entonces si estamos planeando a 300, entonces vamos a poner esto en 300. Ahora esto es importante porque si configuro esto para decir 600 y establecemos animaciones para nuestro caminar agachado en este valor 600. Si nuestro personaje caminaba por ahí cuando se agachó a los 300, entonces las animaciones que se reproducirán estarán en la parte central aquí. Entonces, si tuviéramos animaciones en la parte inferior y en la parte superior, obtendríamos la mitad de las animaciones de arriba y la mitad de la inferior. Y entonces nuestras animaciones no se verían muy bien. Por lo que queremos que nuestro valor máximo de acceso en la parte superior aquí sea cual sea nuestra velocidad máxima de caminata en cuchada va a ser. Para mí, voy a configurar hasta 300, así que pondré esto a 300 también. También voy a tomar Snap to Grid tanto para el eje vertical como para el horizontal. Ahora bien, si recuerdas de nuestras lecciones de animación, en realidad no podemos usar nuestro chat de animación agachada porque necesitamos configurar nuestros esqueletos para que sean compatibles. Entonces para hacer eso, vamos a ir a personajes, luego a maniquíes, mallas. Vamos a abrir maniquí SK. Y luego aquí queremos ir a Windows y luego queremos encontrar detalles de activos y marcar eso apagado. Para esqueletos compatibles, queremos agregar una nueva opción. Y queremos que este sea el esqueleto que vino con las animaciones de las lecciones. Entonces ese va a ser este de aquí se puede ver que dice camino menos que animaciones. Entonces vamos a dar clic en ese. Y entonces salvaremos nuestro esqueleto. Y podemos cerrar estos detalles de activos y regresar a nuestro espacio de mezcla. Ahora, para que nuestras animaciones se muestren en el navegador de activos, es posible que necesitemos reiniciar nuestro espacio de mezcla, así que simplemente lo guardaremos y cerraremos, y luego lo volveré a abrir. Entonces eso está en mis animaciones de lección. Y vamos a abrir el espacio de mezcla agacharse. Y ahora deberíamos poder encontrar todas nuestras animaciones aquí en el navegador de activos. Por lo que comenzará con solo buscar agacharse. Y eso debería mostrar todas nuestras animaciones agachadas aquí. Entonces comenzaremos con la animación ociosa. Entonces voy a poner estos en la parte inferior para la velocidad 0. Entonces agarrará el rifle, se agachará, ocioso, y tapará eso aquí, aquí y aquí así. A continuación necesitamos la animación de caminar hacia adelante, y eso va a estar en el centro porque eso es para la dirección 0. Entonces vamos a agarrar la opción ford aquí y arrastrar eso al medio superior, así. Entonces queremos el hacia atrás, así que agarraremos ese y eso va a ser tanto en la dirección menos uno AT la dirección positiva 180. Entonces queremos la izquierda. Entonces tomaremos la animación de la izquierda y conectaremos eso aquí. Y luego justo por aquí. Ahora, cuando mantenemos el control, podemos previsualizar nuestra animación y asegurarnos de que todas se estén reproduciendo correctamente, lo cual parece que lo son. Ahora podemos guardar y cerrar esto. También estamos cerca de nuestro esqueleto también. Y vamos a dirigirnos al Plan de Personajes TercerosPersonajes. Entonces eso va a estar en la carpeta de tercera persona, planos, y luego encontraremos al personaje en tercera persona. Ahora, nuestro plano de personaje en realidad tiene un sistema agachado incorporado que podemos usar. Entonces todo lo que necesitamos hacer es agregar una entrada. Entonces voy a buscar entrada y luego lo deletreamos y ponemos el evento de entrada que vamos control. Voy a usar el control de izquierda. Entonces vamos a hacer clic derecho y buscar agacharnos. Y queremos la función agacharse. Y voy a enchufar esto en presionado y luego hacer clic derecho y buscar en agacharse. Y queremos que los agachados conectados hasta el lanzamiento así. Ahora actualmente este realmente funcionó porque nuestro personaje no tiene puede agacharse habilitado. Por lo que irá al Movimiento de Personajes aquí y buscará can agacharse. Y queremos asumir puede agacharse bajo capacidades de movimiento como esa. Entonces ahora podemos probar esto. compilaremos y le pegaremos a Play. Y ahora si presiono Control, se puede ver que mi cámara se mueve hacia abajo. Y cuando me muevo, estoy caminando más lento porque estamos usando nuestra velocidad de caminata agachada, pero nuestras animaciones en realidad cambiando porque aún no las hemos enganchado. Entonces vamos a dirigirnos al Blueprint de Animación. Por lo que en realidad saldrá editor de plan, ir a personajes que maniquíes, que animaciones y abrir el dinero Animation Blueprint. Y yo sólo voy a arrastrar el mío hasta el par superior. Ahora, como hicimos en la sección de animación de este curso, tenemos nuestra lección de estados. Vamos a agregar un nuevo estado para nuestras animaciones Crunch. Entonces nos dirigiremos a la gráfica Anim luego a la locomoción. Ahora hay bastantes formas diferentes en las que podrías configurar esto. Si miras aquí, tenemos un estado para todo lo que haces animación y luego caminaré slash run. Ahora, nuestro espacio de mezcla en realidad tiene las animaciones ociosas incorporadas. Entonces solo podemos usar un estado para agacharnos. Y se actualizará si estamos o no movimiento o ociosos para nosotros. Pero si estás usando un espacio de mezcla que no tenía esas animaciones ociosas. Y entonces necesitarías un estado inactivo agachado y un estado de movimiento agachado, como hacemos para nuestro ocioso normal. Y entonces caminaré cortando a correr. Para nosotros. Sólo vamos a hacer clic derecho y usar el estado. Y vamos a llamar así a esto agacharse. Lo abriremos y conectaremos nuestro espacio de mezcla para que se arrastre y tal mezclará el espacio. Y queremos a Linspace Claire aquí. Y luego en el panel Detalles, queremos establecer el espacio de mezcla a nuestro espacio de mezcla agachado. puede ver que está actualizado para la dirección y la velocidad. Simplemente compilaremos y obtendremos nuestra velocidad. Entonces nos arrastraremos y sí conseguiremos velocidad. Y usaremos la velocidad get ground. Ahora, necesitamos establecer una variable de dirección. Entonces lo haremos ahora adelante al Event Graph y crearemos una nueva variable. Llamaremos a esta dirección. Tenemos que poner esto en una carroza como esa. Ahora también vamos a agregar otra variable para si el carácter está agachado. Entonces crearemos uno nuevo y llamaremos a esto es agacharse. Y vamos a establecer esto también. Necesitamos que esto sea un booleano así. Entonces ahora para conseguir nuestra dirección, necesitamos nuestra velocidad. Entonces haremos clic derecho y sí obtenemos velocidad. Y eso debería estar en la parte de abajo aquí. Después de eso arrastraremos hacia fuera y buscaremos calcular dirección. Esto tomará nuestra velocidad y nuestros personajes rotación y retorno y dirección para nosotros. Entonces vamos a necesitar la variable de carácter. Entonces sí conseguiremos carácter. Y luego a partir de eso queremos hacer obtener rotación. Queremos el acto de rotación del get y enchufar eso a la rotación de base. Y luego desde nuestra dirección Calcular, podemos establecer nuestra dirección. Por lo que haremos establecer dirección. Podemos enganchar esto a nuestras secuencias. Entonces agregaré un pin nuevo, enchufa esto aquí, y agregaré a redirigir saber solo para mantener las cosas ordenadas así. Ahora tenemos que establecer R es agacharse variables, así que vamos a arrastrar eso en y crear un nodo conjunto. Entonces sí conseguiremos movimiento. Y queremos el componente de movimiento gap. A partir de eso vamos a hacer agacharnos. Hechizo agacharse correctamente. Y queremos el nodo está agachado aquí. Y simplemente conectaremos eso a nuestro agachado y luego agregaremos un nuevo bolígrafo para secuenciar y conectaremos eso aquí arriba. De nuevo, sólo voy a agregar un redireccionamiento ahora solo para que las cosas sigan luciendo un poco demasiado idea. Por lo que ahora podemos regresar a nuestro estado agachado. Y aquí tenemos que enchufar en dirección r así. Y entonces podemos compilar. Y ahora tenemos que establecer las reglas que realmente interesen en el estribo de la multitud. Entonces iremos a la locomoción. Después arrastraremos de ocioso a agacharse, y también arrastraremos desde Walk, slash run to agacharse también. Y abriremos la regla ociosa para agacharse. Entonces aquí solo queremos conseguir el es agacharse y conectarlo a la cadera variable. Y después haremos lo mismo en nuestro paseo slash ron. Y vamos a enchufar eso aquí. Entonces necesitamos reglas para volver de nuestra agachada a nuestra carrera ociosa o a pie. Entonces arrastraremos de Crouch a ocioso y luego abriremos esa regla. Y entonces aquí sólo queremos conseguir es agacharse, no es cierto. Entonces vamos a arrastrar y no hacer berilio y tapar eso aquí. Y luego queremos hacer lo mismo. Hemos arrastrado de Crouch para caminar slash run. Abre esa regla. Y aquí queremos hacer lo mismo es agacharse, no es cierto, así que lo probaremos y no lo haremos booleano. Pero también queremos comprobar, ¿nos estamos moviendo? Entonces nos arrastraremos de aquí y haremos y enchufaremos eso aquí. Y luego queremos conseguir debe moverse, así que debe moverse, enchufa eso aquí. Por lo que debería verse así. Ahora compilaremos y en realidad podemos probar esto. Entonces seleccionaremos la variable es agacharse, asumir esto. puede ver que va hacia arriba y hacia abajo como debería. Entonces compilaremos y en realidad probaremos esto en juego. Por lo que se dirigirá a nuestro mapa, golpeó Play. Y ahora cuando presiono Control, puede ver que en realidad nos agachamos, estamos agachados, se está reproduciendo animación ociosa. Si camino hacia adelante y de lado a lado, también se están reproduciendo animaciones de movimiento. Ahora actualmente nuestro personaje solo se enfrenta a la dirección en la que nos estamos moviendo. Y la razón por la que hace eso es que si te acuerdas, caminé slash run blend space es un 1D, así que solo tiene hacia adelante y hacia atrás. No tiene animaciones laterales como lo hace nuestro agacharse. Entonces, si quisiéramos que nuestras animaciones laterales se jugaran mientras estamos agachados, necesitaríamos cambiar configuración de movimientos de nuestro personaje. Entonces para hacer eso exhalará planetas a, y si nos dirigimos de nuevo a nuestro TercerPersonaje PersonaPodemos seleccionar el movimiento del personaje. Y aquí vamos a buscar orientar la rotación al movimiento. puede ver que actualmente está encendido, lo que significa que cada vez que nuestro personaje se mueva en una dirección, el actor se enfrentará a esa dirección. Apaga esto y compile el hit Play. Verás que si me muevo de lado a lado, nuestro personaje ya no mira hacia la dirección en la que nos movemos. Y la razón por la que la animación está haciendo esto es porque sólo tenemos animaciones hacia adelante y hacia atrás. Pero si nos agachamos y nos movemos de lado a lado, se puede ver que nuestro personaje en realidad coloca las animaciones correctas. Y eso es porque nuestro se agacha un espacio de mezcla 2D con animaciones para cada dirección. este momento, si miro la cámara en una dirección diferente, no importa dónde mire. Nuestro personaje siempre va a enfrentar de la misma manera. Entonces lo que podríamos hacer para cambiar esto es ir al Third PersonCharacter aquí, luego seleccionar el componente superior aquí para obtener nuestros valores por defecto de costos. Y entonces aquí podemos buscar York y podemos asumir la rotación del controlador de uso. Estás ahora cuando le pegamos a Compile y le pegamos a Play, se puede ver que puedo moverme de lado a lado y caminar slash run no juega muy bien, pero nuestra agachada sí. Y si miro en una dirección diferente, se puede ver que nuestro personaje realmente mira en esa dirección. Para que podamos cambiar la dirección que estamos viendo ahora. Ahora, por supuesto, todas estas configuraciones las puedes cambiar durante el tiempo de ejecución cuando suceden ciertas cosas. Entonces, por ejemplo, tal vez solo querías habilitar o deshabilitar orientar la rotación al movimiento cuando te agacharas, podrías hacer eso con solo conseguir el movimiento del personaje aquí, arrastrando y buscando orientarse, desplácese hacia abajo hasta la parte inferior. Y se puede hacer establecer orientar la rotación al movimiento. Podemos poner esto en verdad cuando nos agachamos y falso cuando nos agachamos. O podríamos cambiar eso. Estás configurando que activamos dentro de los valores predeterminados de nuestra clase aquí. Podríamos cambiar esto. Entonces podríamos hacer set, usar control de rotación. Lo eres, y podemos encender o apagar esto cuando queramos. Todos estos ajustes son de preferencia personal. Depende totalmente de cómo quieras que tu personaje se mueva y cómo quieras que el jugador pueda controlarlo. Ahora bien, si querías cambiar velocidad de movimiento agachada de tus personajes, podemos hacerlo en el movimiento de personajes aquí, que nos deshacemos de esta búsqueda. Podemos simplemente buscar agacharse y aquí encontrarás la velocidad máxima de caminata agachada. También puedes cambiar tu media altura agachada. Entonces así de grande será el componente de la cápsula dentro del personaje mientras estás agachado. Y también se puede girar si el personaje puede o no caminar por una cornisa, agacharse salvaje. Nuevamente, estas cosas se pueden cambiar en código. Puedes simplemente agarrar el componente de movimiento del personaje , arrastrar hacia fuera, establecer el máximo agacharse, y puedes cambiar esa velocidad máxima de caminata agachada en código si quieres. Ahora, por último, tal vez quieras configurar agacharse para que sea toggle en lugar de hold. Podemos hacer eso. Entonces eliminaremos este código aquí y desconectaremos estos por ahora y los moveremos hacia atrás. Usaremos presionado y haremos un nodo de rama. Y aquí queremos comprobar es el personaje actualmente agachado. Entonces para hacer eso, vamos a conseguir movimiento del personaje, conseguir el agachado o está agachado va a enchufar eso en aquí. Y si actualmente estamos agachados de lo que queremos agacharnos, y si no estamos agachados actualmente, queremos agacharnos. Por lo que reordenará estos así. Ahora cuando le pegue a Play, verás si presiono agacharme. Yo me quedo agachado. Y si me agacho sin precio, salimos de Crouch y no tenemos que aguantarlo más. Entonces ese es el final de esta lección. Esperemos que ahora entiendas cómo configurar un sistema simple de agacharse para tus futuros personajes.