Dominio de blueprints de Unreal Engine 5: sistemas de puertas y portales interactivos | 3D Tudor | Skillshare

Velocidad de reproducción


1.0x


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

Dominio de blueprints de Unreal Engine 5: sistemas de puertas y portales interactivos

teacher avatar 3D Tudor, Bestselling Blender Author & 3D Educator

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 a los sistemas de puertas y portales interactivos

      2:35

    • 2.

      Introducción a Unreal Editor y cómo agregar la plantilla de tercera persona

      9:36

    • 3.

      Lección 2 de la interfaz de blueprint 3D: gamemode, aparecimiento de personajes y configuración de blueprints de niveles

      14:32

    • 4.

      Lección 3D 3: fundamentos de la programación de blueprint para principiantes

      7:27

    • 5.

      Lección 3D 4: usa líneas de tiempo para animaciones fluidas en Unreal Engine

      13:37

    • 6.

      Lección 3D 5: crea puertas interactivas que se abran con desencadenadores de colisión

      11:49

    • 7.

      Lección 6 3D sobre técnicas avanzadas de colisión en Unreal Engine

      13:10

    • 8.

      Lección 7 3D: control de texto y luces con la programación de blueprints

      14:20

    • 9.

      Lección 8 de 3D: consejos de interacción de programación con planos

      13:47

    • 10.

      Lección 9 3D para la interacción del jugador con puertas

      11:01

    • 11.

      Lección 3D 10: codificación del sistema de puertas de interacción con el jugador

      13:36

    • 12.

      Lección 3D 11: diseña un widget de UI simple en Unreal Engine

      14:31

    • 13.

      Lección 12 de programación 3D sobre la visibilidad de widgets de UI basados en las acciones del jugador

      11:52

    • 14.

      Lección 13 3D como actualizar widgets de UI con entradas de blueprint externas

      9:05

    • 15.

      Lección 14 3D - Programación de un sistema de puerta batiente de dos direcciones

      13:50

    • 16.

      Lección 3D 15: crea y sincroniza puertas dobles con planos

      9:12

    • 17.

      Lección 3D 16: programación de una puerta de acceso rápido para un acceso más rápido

      10:25

    • 18.

      Lección 3D 17: agrega efectos visuales a una puerta de acceso directo

      8:45

    • 19.

      Lección 3D 18: crea un plano de palanca para desbloquear puertas

      12:20

    • 20.

      Lección 3D 19: implementa el desbloqueo remoto de puertas con comunicación de blueprint

      14:40

    • 21.

      Lección 3D 20: crea mecánica de rompecabezas de múltiples botones para sistemas de puertas

      17:47

    • 22.

      Lección 3D 21: programación de un interruptor de presión para la activación de puertas

      12:30

    • 23.

      Lección 3D 22: diseña una puerta de puerta con sistemas de blueprint

      15:47

    • 24.

      Lección 3D 23: implementa trucos para la mecánica de puertas de interruptores de puerta

      15:10

    • 25.

      Lección 3D 24: depuración y optimización del sistema de puertas de interruptores de puerta

      11:54

    • 26.

      Lección 3D 25: trabajo básico para una puerta corredera de rompecabezas de botones

      14:28

    • 27.

      Lección 3D 26 Crea la mecánica de rompecabezas de botones para puertas interactivas

      13:11

    • 28.

      Lección 3D 27: finaliza la puerta corredera del rompecabezas de botones con planos

      20:27

    • 29.

      Lección 3D 28: crea un sistema de inventario con artículos seleccionables

      16:42

    • 30.

      Lección 3D 29: trabajo básico para una puerta de ciencia ficción que requiere elementos clave

      11:58

    • 31.

      Lección 3D 30: bloqueo y desbloqueo de puertas con un sistema basado en objetos

      10:38

    • 32.

      Lección 3D 31: agrega efectos visuales para mejorar las interacciones de puertas de ciencia ficción

      12:38

    • 33.

      Lección 3D 32: crea un teletransportador para transiciones de nivel dentro

      8:30

    • 34.

      Lección 3D 33: diseña una puerta basada en la física con programación de blueprint

      10:46

    • 35.

      Lección 34 3D - Programación de una puerta de cambio de nivel con efectos de transición

      16:08

    • 36.

      Lección 3D 35: configura un sistema de waypoints dinámico para niveles interactivos

      12:09

    • 37.

      Lección 36 3D Anulación del modo de juego para personalizar la funcionalidad de Spawn de jugadores

      15:07

    • 38.

      Lección 3D 37: trabajo básico para guardar sistemas para preservar los estados de puerta

      13:31

    • 39.

      Lección 3D 38: crea la mecánica de juego de guardar para mantener el progreso a través de los niveles

      11:36

    • 40.

      Lección 39 3D: programación de sistemas de carga de juegos para el progreso guardado

      10:15

    • 41.

      Lección 3D 40: diseña una puerta con manijas funcionales para una interacción inmersiva

      9:53

    • 42.

      Lección 3D 41: finaliza la mecánica de puertas de manija con efectos de partículas y mejoras visuales

      19:21

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

128

Estudiantes

1

Proyectos

Acerca de esta clase

[Haz clic aquí para acceder al paquete de recursos]

¡Desbloquea el poder de Unreal Engine 5 al dominar los sistemas de puertas interactivas y los portales de ciencia ficción!



El Blueprint de Unreal Engine 5 Blueprint para dominar los sistemas de puertas y portales interactivos está diseñado para llevarte desde las habilidades de nivel principiante hasta la creación de mecánica de nivel profesional, todo mientras creas entornos inmersivos e interactivos.

Ya sea que recién estés comenzando con Unreal Engine Blueprints o que estés buscando perfeccionar la mecánica avanzada, esta clase es tu guía práctica para desbloquear el potencial del diseño de juegos.

Imagina crear puertas deslizantes animadas, mecánicas de empuje realistas y portales de teletransporte que transporten a los jugadores a la perfección a través de tus niveles. Aquí es donde el diseño de juegos se encuentra con la ciencia ficción, y todo está desglosado paso a paso para que lo sigas.

Lo que aprenderás

Esta clase de Skillshare se centra en enseñarte habilidades prácticas y del mundo real en el diseño de juegos a través de Unreal Engine 5.

Al final de Unreal Engine 5 Blueprint Domina los sistemas de puertas y portales interactivos, tendrás un conocimiento completo de:
Programación de Blueprint: aprende todo, desde interfaces básicas de Blueprint hasta configuraciones avanzadas para sistemas interactivos.


Sistemas interactivos: crea puertas responsivas que reaccionan al tacto, las placas de presión o las entradas de varios botones.


Interacciones de física: crea puertas que reaccionen de forma natural a las acciones de los jugadores y los cambios ambientales.


Integración de UI: añade widgets personalizados y comentarios de los jugadores para mejorar la interacción del usuario.


Animación y VFX: añade animaciones deslumbrantes, efectos de partículas e iluminación para un acabado pulido y cinematográfico.


Principios de desarrollo de juegos: domina la lógica detrás de los rompecabezas interactivos, los sistemas de inventario y la mecánica de teletransportación.

Lo que crearás

En esta clase, crearás una colección lista para portafolios de más de 15 sistemas dinámicos e interactivos, que incluyen:

  • Puertas giratorias y deslizantes básicas.

  • Puertas dobles con animaciones sincronizadas.

  • Puertas de empuje impulsadas por la física para interacciones realistas.
  • Portales de teleportación multinivel para un juego fluido.

  • Puertas de rompecabezas que requieren controles de inventario o secuencias de múltiples botones.

  • Sistemas habilitados para guardar estado para mundos persistentes e inmersivos.

¿Por qué tomar estar clase?

  • El Blueprint de Unreal Engine 5 Blueprint para dominar los sistemas de puertas y portales interactivos está diseñado para empoderarte con habilidades prácticas que puedes aplicar a proyectos de desarrollo de juegos de inmediato:
  • Para todos los niveles: las lecciones comienzan de manera simple y avanzan a técnicas avanzadas, lo que las hace accesibles para principiantes e intermedios.
  • Aprendizaje práctico: cada lección implica crear mecánicas reales y utilizables, para que tengas resultados tangibles al final.
  • Proyectos listos para el portafolio: crea mecánicas de nivel profesional que impresionarán a clientes potenciales, empleadores o a tu comunidad de juegos.
  • Aplicaciones del mundo real: aplica tus nuevos conocimientos al desarrollo de juegos, al diseño de niveles o a la narración interactiva.

Recursos exclusivos

Para ayudarte en el camino, también tendrás acceso a un paquete de activos de ciencia ficción modular que incluye:

  • Accesorios interactivos como interruptores, botones y palancas.
  • Efectos de partículas personalizados para teletransportadores y animaciones.
  • Recursos de entorno modular para crear diseños pulidos y profesionales.

Cómo está estructurada la clase

Cada lección se basa en la anterior, lo que garantiza una progresión clara a medida que avanzas en tus habilidades:

  1. Comienza con lo básico: aprende a crear la mecánica de puertas giratorias y deslizantes.
  2. Añade elementos interactivos: diseña puertas con interacción del jugador, como placas de presión o animaciones sincronizadas.
  3. Explora sistemas avanzados: crea teletransportadores, puertas con bloqueo de inventario y sistemas de estado de seguridad.

 

Al final de Unreal Engine 5 Blueprint para dominar los sistemas de puertas y portales interactivos, tendrás un conjunto completo de mecánicas reutilizables para tus proyectos de Unreal Engine.

 

¡Hasta la próxima, felices scripting a todos!

Markos

Conoce a tu profesor(a)

Teacher Profile Image

3D Tudor

Bestselling Blender Author & 3D Educator

Top Teacher
Level: All Levels

Valoración de la clase

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

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

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

Transcripciones

1. Introducción a los sistemas de puertas y portales interactivos: Bienvenido a Unreal Engine Five Blueprint Mastery door Systems y portales interactivos, el único taller completo dedicado completamente a la elaboración de mecánicas avanzadas de puertas Blueprint Mastery door Systems y portales interactivos, el único taller completo dedicado completamente a la elaboración de mecánicas avanzadas de puertas y portales interactivos. Realmente no hay nada como esto ahí fuera. Un taller completo todo en una puerta donde aprendes a diseñar, construir y animar una amplia gama de sistemas de puertas en un solo lugar estructurado y conveniente Con demasiada frecuencia los desarrolladores de juegos chocan contra una pared cuando intentan crear sistemas interactivos que van más allá de lo básico. Sincronizar animación para muñecas dobles, diseñar rompecabezas complejos o implementar mecánicas de teletransportación puede Este taller resuelve todo eso combinando todo lo que necesitas en un solo curso. Imagine aprender paso a paso con todas las herramientas, recursos y orientación que necesitará para tener éxito. Desde disparadores basados en colisión hasta sistemas de teletransportación multinivel, desbloqueará todo el potencial de la programación irreal de cinco ciclos del motor En este taller, tendrás acceso a 41 lecciones y más de 8 horas de contenido exclusivo que no encontrarás en ningún otro lugar. Comenzarás con lo esencial como interfaces de ciclo y configuración del modo de juego antes de avanzar a técnicas avanzadas que incluyen animación sincronizada, mecánicas de bloqueo y complejos sistemas de rompecabezas Comenzaremos con lo esencial como interfaces de planos y configuración de Gamo antes de avanzar a técnicas avanzadas, incluidas animaciones sincronizadas, mecánicas de bloqueo y sistemas complejos Al final, incluso dominas la mecánica de teletransportación y efectos visuales dinámicos asegurando que sus sistemas de puertas estén pulidos Pero lo que hace que este taller realmente se destaque es la clave exclusiva de nivel modular de Sci Fi para crear proyectos de calidad profesional. Al final de este taller, dominarás la comunicación de planos para una interactividad avanzada, construirás sistemas de puertas inmersivos desde animaciones simples hasta complejas transiciones de varios niveles, implementarás estados seguros para garantizar que tus mecánicas persistan en todos los niveles y agregarás toques finales de grado profesional como efectos de sonido y sistemas dinámicos Ya sea que diseñes tu primer proyecto o amplías tu cartera, esta es tu oportunidad de adquirir habilidades que no encontrarás en ningún otro curso. Únase al único taller completo de sistemas de puertas disponible y hagamos realidad sus ideas con el motor real cinco, sistemas de puertas de dominio Blueprint y el curso de portal interactivo 2. Introducción a Unreal Editor y cómo agregar la plantilla de tercera persona: Hola, y bienvenidos a Real Engine five Blueprint Mastery, Door Systems y portales interactivos Comencemos extrayendo nuestro Paquete de Recursos Doors descargado. Al hacer clic derecho sobre él, y voy a usar WinRAR y extraer dos Doors Resource pack Ahora bien, si tienes WinZip, el proceso es algo así como el mismo Tú eliges un destino y éste lo extrae. Ahora, para mí, lo extrajo aquí al escritorio que he descargado el archivo. Y antes de continuar, vamos a comprobar en Unreal Engine Library en la pestaña Unreal Engine que tenemos 5.4 0.4, que es la versión del proyecto Si estás en la versión anterior, son cinco. Ahora, vayamos a nuestro proyecto. Voy a hacer doble clic y abrir el proyecto. Esto puede llevar un tiempo dependiendo de la velocidad de tu computadora, pero hemos incluido la caché de datos derivados y la carpeta intermedia, que alojan archivos que facilitan este proceso. Tales archivos como shaders que se han cargado antes cuando estábamos creando el proyecto Ahora bien, para los que son nuevos, expliquemos lo que estamos viendo aquí. En primer lugar, esta imagen es nuestra ventana gráfica. Podemos movernos usando el botón izquierdo del ratón y moviendo el mouse hacia arriba hacia abajo a la izquierda derecha y usando WSAD para movernos en el espacio mundial como un videojuego Q y E también elevan y de elevan. No estoy seguro de qué palabra esta, pero de todas formas, nuestro personaje, nuestro no personaje, nuestra cámara. Ahora bien, esto, como pueden ver, es un poco lento. Entonces, si uso la rueda del mouse mientras mantengo pulsado el clic derecho, puedo ir más rápido con la rueda del mouse hacia arriba y puedo ir más despacio con la rueda del mouse hacia abajo. Esto se puede indicar aquí por la velocidad de la cámara. También puedo cambiarlo cambiando el valor aquí, pero la rueda del mouse parece ser un poco más fácil. Ahora. No entraremos en más detalles sobre muchos botones. Voy a explicar algunos, pero lo haré cuando abramos nuestro mapa. Entonces para hacer eso, bajemos aquí, que es el navegador de contenido. Y aquí podemos ver nuestros activos mapas y sonidos. Estos están incluidos en nuestro paquete de recursos Puertas. Ahora para los activos, podemos ver algunos activos, pero los demostraremos más adelante en el mapa correcto. En los sonidos, podemos ver algunos sonidos que tenemos que usar en este tutorial. Y en los mapas de carpetas, podemos ver los mapas pre hechos. Si realmente rápido vamos sobre ellos, vamos a abrir Tutorial dos mapa. Es una habitación pequeña que usaremos posteriormente como sala de traslado, y vamos a ir al mapa tutorial sin número. Y aquí podemos ver nuestros activos y nuestro nivel que usaremos para construir nuestras puertas. Ahora, primero lo primero, comencemos por continuar con la explicación de lo que estamos viendo en esta pantalla. Como podemos ver, es mucha información, pero no tengas miedo. Son cosas muy simples. Aquí, tenemos el outliner, que como pueden ver, está prácticamente hecho en el nivel uno, nivel dos, el nivel tres y algunos artículos adicionales Estas son carpetas que hemos categorizado los artículos que estamos incluyendo en esta bolsa de recursos y en las siguientes carpetas, estamos categorizando en base a niveles que estaremos creando las puertas También se puede ver una carpeta de iluminación, que tiene los accesorios de iluminación, y podemos ver algunas carpetas nuevas por aquí que en realidad no tienen nada y la carpeta patio de recreo que quedó atrás Entonces, um, comencemos explicando estas carpetas vacías. Ahora, cuando tengo una carpeta que tiene algo, antes que nada, tiene una flecha y podemos ver dentro de su contenido, donde estas carpetas no tienen nada. Estas carpetas también tienen un ojo junto a ellas, el cual está cerrado. Si trato de hacer clic sobre ellos, no pasa nada. Entonces estas carpetas están un poco vacías. Podemos eliminarlos no los necesitamos. Entonces, lo siguiente que necesitamos para ver nuestra carpeta de artículos adicionales. Voy a hacer click en él, y voy a dar click en el ojo. Ahora, puedes ver que los artículos desaparecen de nuestra vista. Esto no quiere decir que no estén cargados en el juego. Si presiono play, podríamos ver claramente los artículos. Presiono play, y esto es en tiempo de ejecución el juego, y los artículos están ahí. Entonces cerrar los ojos por aquí no significa que los estemos perdiendo en el juego. Simplemente significa que podemos trabajar sin mirarlos. Ahora mismo, vamos a cerrar los ojos de todos los niveles excepto el Nivel uno, porque los vamos a utilizar a medida que avanzamos editorial. Ahora, para los artículos extra, abramos el ojo y veamos qué tenemos aquí. La velocidad es un poco alta. Bien. Arreglarlo con una rueda del ratón, y ya podemos ver. Tenemos una puerta doble y en diferentes medidas que podamos usar, vamos a deshacer los cambios. Tenemos un marco, lo mismo para la puerta. Creo que esta es la puerta que se mueve de esta manera, y tenemos una luz encima de ella, algunos triángulos que vamos a usar para los artículos, una puerta de salón que vamos a usar para nuestra tienda de física, un interruptor que vamos a animar Un botón que vamos a animar, un botón disparador, que está hecho también de dos mallas, como lo es el botón, un portal, algunas cajas, y algún otro tipo de puertas, un cristal, esto es una Ahora, es una escalera. Creo que es una escalera, algunas paredes, algunos pisos, y esta es una pequeña demostración de todos los activos. Sí, son piezas separadas. Pero nuevamente, tenemos esto a nuestro nivel. Ahora, para seguir explicando lo que vemos por aquí, como vimos, se usa el botón de reproducción para jugar al juego, para iniciar lo que hayamos creado, y escapar se usa para parar. Ahora, lo siguiente de lo que quiero hablar que vamos a usar es cuando seleccione algo por aquí, tenemos un stub detallado Entonces cuando traigo algo al mundo y quiero ver sus propios detalles, es instancia porque puedo tener como dos pisos. Si voy a usar Alt y voy a arrastrar esta R por aquí. Entonces esto duplica el piso. Si utilizo este piso y este piso, estas son las mismas mallas, pero estas son instancias. Tienen distintos detalles. En ejemplo, la ubicación de estos dos bloques cambia. Esto es Y 600 y este es Y 980. Y si cambio esto, escala, cambia a esta única instancia. Entonces estos son los detalles de la instancia que estoy seleccionando. Hay varios detalles basados en lo que hemos seleccionado. Entonces todo para los detalles de la instancia seleccionada está por aquí. Ahora, otra cosa que sucede en outliner es que cuando estoy recogiendo algo por aquí, en realidad selecciona la instancia Y si está muy lejos o no sé realmente dónde está lo que he seleccionado aquí, puedo presionar F. Y va a acercar lo más posible a nuestra malla ahora mismo porque he seleccionado esta malla. Si seleccioné a otro actor, se acercará a ese actor. Ahora, ten cuidado porque si seleccioné la esfera del cielo, por ejemplo, y presiono F, me llevará fuera de la esfera del cielo para sentirla, para tenerlo todo en la pantalla. Ahora, volvamos a algún artículo. Iremos dentro pasado. Y creo que hemos explicado algunas cosas sobre lo que estamos viendo. Somos más versátiles de usar irreal. Y antes de dejar una cosa más, voy a ir a Content Browser y voy a ir al botón at de aquí. Porque quiero agregar una característica o paquete de contenido. Esta es una forma de agregar las características y los paquetes de contenido que Area ofrece de forma gratuita cuando estamos creando un proyecto. Y el contenido, la característica que quiero agregar ahora mismo es la plantilla de tercera persona. Entonces tenemos un personaje que podemos movernos y algunas otras cosas que vamos a explicar a la siguiente lección. Entonces por ahora, voy a presionar Agregar proyecto. Esto podría llevar un tiempo. Cuando esté hecho, se abrirá una ventana. Aquí está, abre una ventana del navegador de contenido que no necesitamos, podemos cerrar y podemos cerrar esto y ahora podemos ver nuevas carpetas aquí, la carpeta de caracteres, el prototipado de nivel, y la carpeta de tercera persona Pero vamos a explorar esto en la próxima vez. Adiós por ahora. Nos vemos entonces. 3. Conceptos básicos de la interfaz de Blueprint Modo de juego, generación de personajes y configuración de planos de nivel: Bienvenido de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y portales interactivos Así que la última vez dejamos descargar nuestro personaje en tercera persona con agregar a nuestro proyecto, la plantilla de tercera persona. Ahora, vamos a explorar lo que tenemos en la plantilla de tercera persona. Tenemos una carpeta de planos. Tenemos una carpeta de entrada y una carpeta de mapas. Los mapas tienen el mapa de plantilla de tercera persona, que si lo abro y presiono play, puedo ver al personaje en tercera persona. Puedo mover algunas cajas por ahí. Puedo saltar y eso es prácticamente todo. Ahora, cuando vamos a Nuestro mapa y pulsamos Reproducir, no hay nada de eso. No podemos ver ningún personaje saltando por ahí. Tenemos apenas una cámara en movimiento. Bueno, ¿por qué es eso? El motivo es porque hay dentro del titular en tercera persona, podemos ver los planos plegados, que tiene el personaje en tercera persona que estábamos usando y controlando, y tiene el modo de juego BP en tercera persona ¿Qué es un modo de juego? Un modo de juego es un plano especial que como reglas especificadas por nivel Al igual que, en este nivel, tendremos un modo de juego. En la plantilla de mapa en tercera persona, tenemos otro modo de juego. Bueno, vamos a tener lo mismo, pero ahora mismo, aquí no tenemos modo de juego, por lo que es un modo de juego predeterminado. No es un modo de juego de plantilla en tercera persona. Entonces, ¿cómo cambiamos el modo de juego en nuestro mapa? Al lado de los detalles por aquí, podemos ver los escenarios del mundo. Ahora bien, si no puedes ver los ajustes del mundo, podemos ir a Ventana y habilitarlo por aquí, ajustes de mundo, y aparecerá o aparecerá así en algún lugar del layout, o aparecerá acoplado por aquí, que como puedes ver, puedes acoplarlo donde quieras Incluso puedes atraparlo por aquí. Pero este es el lugar más utilizable. En fin, ¿cómo cambiamos la configuración del mundo, el modo de juego? ¿Cómo lo anulamos? Bueno, hay esta opción modo de juego por aquí que podemos configurar el modo de juego override y seleccionar nuestro modo de juego BP en tercera persona, y será eso es todo, básicamente. Si presiono play ahora, aparecerá el personaje. Apareceré cayendo y muriendo. Ahora bien, ¿por qué no apareció donde quiera? Bueno, puedo controlar esto antes que nada, con mi cámara. Puedo presionar play aquí, y el personaje aparece aquí. Pero, ¿por qué en el otro mapa aparecía siempre en cierto lugar, aunque no tuviéramos ahí la cámara? Bueno, la razón es porque modo juego tiene alguna funcionalidad extra, alguna funcionalidad que vamos a anular más adelante en el tutorial. Pero esa funcionalidad se trata de engendrar al personaje. Y qué carácter, depende de otra funcionalidad llamada clase de peón por defecto Y aquí podemos ver que la clase de peón por defecto es el personaje de tercera persona BP Si no le dije esto a ninguno, presione play, casi nada. Ni siquiera puedo moverme. Voy a cambiar esto de nuevo a personaje en tercera persona, y tenemos que establecer un inicio de jugador. ¿Cómo hacemos esto? Aparece un nuevo botón por aquí. Bueno, no aparece, pero ahora mismo lo vamos a explicar. Entonces voy a hacer click en él, y este es el botón para agregar rápidamente algo a tu nivel, algo a la ventana gráfica, básicamente, porque más adelante, la viewport ph múltiples Como pueden ver en mi irreal, aquí hay una pestaña de nivel, que se llama subniveles, pero no vamos a entrar en ella Ahora, vayamos aquí y agreguemos un inicio de jugador. Este es nuestro inicio de juego. Así es como se ve. Tiene un controlador y una bandera y esta forma de cápsula, que es una colisión, en realidad, una colisión de forma de captura. Voy a traer este par de inicio por aquí. Voy a presionar fin, así va al suelo. Y voy a presionar play. Ahora, ya ves, tenemos nuestro personaje por aquí, y nuestra cámara no importa dónde esté. Podría ser como por aquí, presionando play, el personaje está aquí. Ahora bien, cómo se controla esto, lo vamos a ver más adelante en algunos próximos tutoriales porque vamos a anular su propia funcionalidad en la funcionalidad de cómo el modo de juego elige un inicio de jugadores. Ahora, hemos creado un inicio de jugador. Hemos agregado nuestro modo de juego y es personaje patrocinador que estaremos jugando y probando nuestro código. Pero antes de sumergirnos en la primera puerta, volvamos a cerrar todos los niveles. No parece que se salve. Esto parece ser un entorno temporal. Hay otras formas de ocultar la visibilidad a través del código y los activos, pero no vamos a hacer esto ahora. Entonces, antes de sumergirnos en los planos y comenzar a codificar, expliquemos un poco qué son los planos Bueno, blueprints es el verdadero sistema de scripting visual del motor Y ¿qué es un sistema de scripting, un sistema visual de scripting Considera tener bloques de código con comportamiento listo y solo conectar esa lógica en el orden quieres usar el código ha sido reescrito tantas veces y no siempre es eficiente reinventar la rueda, reescribir el código que tantas veces se ha escrito URL ofrece un sistema de blueprint, que está listo bloques de código en una representación visual que hacen ciertas cosas, y los organizamos en un orden especial que tiene sentido que la máquina sepa lo que le pedimos que haga Decir esto significa que tenemos muchos tipos diferentes de planos, también Por ejemplo, hay un plano de nivel que usaremos para controlar nuestra primera puerta Pero además de eso, hay planos de widgets que controlan la interfaz Hay planos de actores que hacen cosas específicas en nuestro juego Por ejemplo, nuestro switch será actor. Hay planos de personajes que es nuestro personaje que estamos usando y controlando Hay planos de animación que controlan la animación del personaje Ahí está el modo de juego Blueprint, que es el plano especial sobre el nivel Por ejemplo, ¿cuáles son las reglas del nivel? Puede albergar alguna lógica multijugador. Tiene pregunta específica. Por eso es el modo de juego Blueprint, el blueprint del controlador del jugador Sé que esto puede sonar aterrador para alguien nuevo, pero es solo un sistema para categorizar la funcionalidad Tenemos el sistema para los widgets, tenemos el sistema para los personajes. Tenemos el sistema para las animaciones, el sistema para el multijugador y la jugabilidad. Todo está categorizado en sistemas específicos, un sistema muy bien optimizado que ofrece real. Ahora, comencemos por abrir nuestro primer plano, que sería el plano de nivel, un plano dedicado para Voy a ir a este botón, a un botón nuevo. Pero cuando lo presiono, podemos ver algunas opciones para crear una nueva clase Blueprint para convertir selecciones a clase de blueprint Pero lo que queremos es abrir plano de nivel. Esta no es una imagen típica que vemos en un plano, diseño típico, pero es suficiente para explicar algunas cosas Aquí mismo, tenemos el gráfico de eventos, que alberga la funcionalidad de nuestro blueprint Este es el lugar en el que escribimos mucho de nuestro código. Junto a él, podemos ver el panel de detalles, que en este momento están seleccionando la clase predeterminada. Por aquí, podemos ver la depuración para nuestro blueprint, que usaremos cuando vayamos a estar depurando el código que estamos haciendo Y en el lado izquierdo, podemos ver mi ficha Blueprint En otros planos, veríamos una pestaña de componentes y algunas otras pestañas por aquí, un script de construcción, que se usa para publicar código y lógica cuando estamos ejecutando el blueprint en el editor antes del mapa Vamos a demostrar un poco de esa lógica. Y el puerto de vista, que en realidad, vamos a verlas. Hablar de ellos sin verlas no es un buen punto. En el archivo de contenido, voy a hacer clic derecho y crear una nueva carpeta. Y voy a nombrar a esta carpeta blueprints. Además, voy a codificar por colores esta carpeta. Voy a hacer click derecho sobre él, ese color y ponerlo en azul. Y dentro de este Blueprints, voy a hacer click derecho e ir a la clase Blueprint Y aquí podemos ver los diferentes tipos de planos de los que hablamos antes El actor, el peón, el personaje, el controlador del jugador, el modo de juego basado, el componente actor, los componentes de sincronización Diferente hay muchas clases de planos que podemos crear Lo que vamos a seleccionar ahora mismo es sólo un actor. Voy a nombrar esta prueba PP. Y vamos a abrirlo. Ahora, como puedes ver, esta es la diferencia con el mapa tutorial. Aquí mismo, solo tenemos la gráfica de inventar y mi plano y detalles Mientras que aquí, tenemos la pestaña de componentes, la ventana gráfica, el script de construcción y la gráfica de inventar Eso tiene guiños para demostrar alguna funcionalidad de todos modos. Y aquí tenemos la pestaña de componentes. Esto es lo que quería explicar que en la ventana gráfica, podemos agregar cosas a nuestro plano Por ejemplo, podemos agregar un cubo, y vamos a programar este tubo en este blueprint para hacer algún comportamiento Mientras que aquí en el mapa de niveles, porque se trata del nivel, no tenemos este hub de viewport Y la razón es que la ventana gráfica del mapa tutorial básicamente es esta ventana gráfica Todo en este nivel es básicamente un componente. No lo es, pero puede ser un componente de esto. Diciendo esto, llevemos un duplicado de una puerta. Creo que esto es, esta es la puerta con tirador. Voy a traer esta puerta. Voy a presionar a Alt y traerlo aquí. Y voy a rotarlo. Así. No, lo quiero del otro lado. Así. 90 grados. Ir a los detalles -90. Está bien. Ahora bien, esto, como pueden ver, no está chasqueando muy bien Pero lo que voy a hacer es por aquí, tenemos el punto de chasquido a las diez Voy a elegir cinco, ir a bajarlo. Y creo que se rompió bien. Sí, bueno. Ahora, voy a ir al mapa tutorial, y voy a hacer click derecho y crear una referencia a Prop pack EU six o six. ¿Quieres decir? Ahora bien, esto es esto porque yo había seleccionado. Cuando tengo algo seleccionado, digamos, para este ejemplo de muro, puedo hacer clic derecho y traerle una referencia en el plano de nivel En realidad no necesitamos el muro. Voy a borrar esto. Solo necesitamos el pack de utilería. Esa es la puerta llamémosla puerta de ahora en adelante, y esta es la puerta uno. Cambié el nombre del muro. Por eso está en el nivel uno. No debería estar en el nivel uno. Esto elijo esto. Se supone que esto está en artículos adicionales. Voy a moverlo de aquí al Nivel uno, y arrastrarlo y soltarlo aquí. Sería más fácil cerrar el archivo tal vez y cambiarle el nombre aquí a puerta tan buena. Esto es pared equivocada. Y aquí tenemos la puerta. Entonces ahora mismo lo renombramos. Por compilar aquí, se puede ver que cambió el nombre aquí también. Entonces, ¿qué queremos hacer con esta puerta? Lo tenemos aquí. Lo que haremos es programarlo para que abra y cierre en función de lo cerca que esté el jugador. No cómo clo. En realidad, el jugador se acercará a él, se abrirá la puerta. El jugador irá a otro lugar y la puerta se cerrará. En fin, creo que dije demasiadas cosas para esta lección. Te voy a ver en la siguiente. Pero mi 4. Fundamentos de la programación de Blueprint para principiantes: Donde lo dejamos es con agregar esta puerta de aquí. Lo copiamos de puerta, sacamos presionado y lo arrastramos, y lo trajimos aquí También creamos una referencia a ella, nuestro plano de nivel. H. Empecemos a hacer algo con esta puerta. Y al hacer algo, quiero decir, básicamente rotarlo para que se abra. Cómo hice esto fue seleccionando la puerta, presionando E, y como podemos ver, cambió al rotador Con presionar R, cambia a la escala Imo, y W trae el movimiento. También podemos ver estas selecciones aquí arriba. Lo que tenemos que hacer mover esta puerta básicamente rotarla, y este es un actor estático, siendo actor la palabra clave. ¿Por qué es eso? Porque como decíamos, en los planos tenemos algún comportamiento prescriptado Saco un cable de esto de nuestra referencia de la puerta y pido actor. Lo que queremos cambiar es la rotación así que la rotación. Puedes ver que obtenemos algunas opciones sobre rotación. Obtener la rotación del actor, podemos establecer la rotación del actor. Podemos establecer la ubicación relativa y la rotación. Vamos a hablar de relativo y la diferencia entre relativo y mundo en una lección posterior. Pero ahora mismo, sólo vamos a usar la rotación del actor set, que es una rotación mundial. Voy a elegir este nodo de rotación de actores conjuntos. Ahora bien, este nodo tiene una ejecución y para la salida, nuestro valor de retorno, que es rojo, rojo es polen, vamos a hablar de ello más adelante. Una rotación, entradas y una física de teletransporte. Lean puede ver que las cosas están codificadas por colores, y esto nos lleva a un nuevo tema. ¿Qué son las variables? Las variables son como pequeñas celdas de información en blanco. Qué tipo de información es el tipo de variable. Dejamos el Plano M explicado. Entonces, ¿qué aloja mi Blueprint? Mi Blueprint contiene información sobre nuestro código. Como puedes ver, te muestra elementos que pertenecen a blueprint, variables, gráficas que están aquí, tenemos las gráficas de categorías Si vamos a, vamos a gráficas. Ya ves que ya hay algunos eventos, este evento gris para nosotros. Si hago doble clic en esto, me pueden llevar a cada evento. Entonces un evento existe en nuestra gráfica, podemos navegar directamente a él desde aquí. También podemos crear nuevas gráficas a las cosas por ejemplo, esta será la gráfica a tope o la gráfica de movimiento o cualquier otra gráfica que quisiéramos Entonces podríamos tener diferentes gráficas con diferentes eventos, pero no puedo tener el mismo evento de gráficas. Haga clic derecho y traiga el evento begin play. Puedo traerlo aquí y puedo tenerlo aquí también. Sin embargo, no va a funcionar. Arrastre desde aquí y escriba print string, que es un nodo que imprime solo una cadena y conecto aquí y también se conecta a la otra gráfica. Trato de compilar, verás que voy a obtener un error vinculado a más de una función con el mismo nombre. No podemos tener el mismo evento en ambas gráficas. Necesitan tener un nombre diferente. En realidad no necesitas la prueba de planos, pero es bueno mostrar algo Lo siguiente que necesitamos es la categoría de función. ¿Qué son las funciones? Bueno, en Norte, hay bloques reutilizables codificando bloques de lógica que pueden tener salidas de retorno , las entradas se pueden llamar varias veces desde diferentes lugares. El plano de otros planos. Son ideales para realizar tareas reutilizables específicas. Tienen algunas reglas específicas aunque la función debe completar la lógica antes de regresar. Tienen que completar lo que esté sucediendo aquí o tienen una salida. Y si hago clic aquí para obtener salidas, quiero obtener este valor. Lo que esté pasando aquí dentro tiene que terminar o su seguir corriendo. Por ejemplo, si traigo esta función por aquí y la conecto aquí, esto tendrá que terminar sus operaciones para que el código continúe. El siguiente. La siguiente categoría son las macros que no vamos a necesitar intial, así que no nos vamos a molestar con ellas es como funciones que, como dije, algo así como funciones, pero más versátiles, podemos tener múltiples entradas de ejecución Y eso nos lleva al punto de ejecución. Como viste antes, conecté este cable aquí. Cuando hablé de la rotación del actor set, dije que aquí hay una entrada de ejecución y una salida de ejecución. Estas ejecuciones necesitan estar conectadas para nuestra ejecución de código. Esto no correría porque esto está vacío. Y como puedes ver, eventos como comenzar a jugar tienen solo una salida de ejecución se puede considerar como hacer algo. Hacer algo empezar a jugar, hacer algo en tick que vimos aquí, hacer algo en actor, comenzar a superponerse. También tenemos eventos personalizados que podemos crear nuestra cuenta y llamarlos en nuestro código. O ahora necesitamos mover nuestra puerta con nuestra rotación de actores establecidos. Entonces nuestra rotación de puertas, vamos a ir detalles a -90 Redondear esto de 89.999 a -90. Digamos que cuando comencemos a jugar, eliminemos la función. Digamos que queremos que la puerta vaya a cero. Entonces ahora, si presiono play, la puerta no es cero. Y cuando presiono Stop, puedo ver el motivo Y en el registro del mensaje de error, que es la movilidad de la puerta no establecida en movible. Entonces voy a hacer click en la puerta. Aquí en sus colas, va a ir a la movilidad y usar movible. Entonces ahora si presiono Play, la puerta está abierta. Creo que esto es para éste. Yendo a continuar el siguiente por 5. Uso de líneas de tiempo para animaciones fluidas en Unreal Engine: Hola, y bienvenidos de nuevo a Engine five real, Blueprint Mastery Door Systems y portales interactivos Anteriormente, nos quedamos con OD OpenRDOR. Usamos nuestra referencia de puerta o evento de inicio de juego, usamos la lógica preestablecida de rotación del actor conjunto. Y fijamos la rotación del actor a 000. Y cuando presionamos play, podemos ver que la puerta ya está abierta. Yo quería abrirla al revés, podría poner dos -180 y se abriría de otra manera Y si quisiera cambiarlo cada vez, pero quería que esto también pasara, por ejemplo, tenía cuatro de referencias D, y quiero que todas tengan la misma rotación. Lo que aquí necesitaría es una variable. Entonces a esto, puedo escuchar el botón más, o puedo hacer clic derecho aquí directamente y promover esto a una variable, que se llama nueva rotación Podría cambiarle el nombre usando la variable aquí y cambiando la rotación de la puerta. Ahora, como pueden ver, apareció aquí a mi ficha de planos en las variables de sección Vamos a mostrar la creación de la otra manera. Voy a eliminar esto, y voy a eliminar esta variable también, y voy a agregar una variable y tirar de ella a rotación. Si un arrastrar y soltar aquí me pide obtener o establecer significa que estamos obteniendo el valor que tiene esta variable. Eso quiere decir que vamos a obtener a la variable un nuevo valor. Si selecciono conjunto, por ejemplo, podemos ver como algunos pines de entrada y pin de salida. Podemos ver también que está en color porque esta variable es del tipo booleano Hago clic y veo un montón de tipos de variables. Los más comunes son los booleanos, que son sí o nos, que básicamente son términos de codificación, podrían ser ceros Entonces un booleano, eso es lo que es. Un cero y uno, verdadero o falso. A continuación, tendremos enteros serían los números enteros. Por ejemplo, uno, dos, tres, cuatro, cinco, seis, o menos uno, dos, tres, cuatro, cinco, seis, cantidad ilimitada. Bueno, no ilimitado. Ellos sí tienen un límite. Creo que el límite es algo para el quintillón y los flujos, que serían los números con decimales, básicamente, estos son los números reales Entonces tenemos nombre y cadena y texto. Las cadenas son todos los caracteres, y el nombre y el texto tienen reglas específicas. Ahora, los vectores, los vectores están aquí son tres flotadores puntuales, básicamente Si traigo un vector, si creo un vector aquí, cambiemos el tipo de variable. Podemos ver que tiene XY z. Es un punto de tres. Puedo dividir aquí mismo, clic derecho en el nodo en el pin por aquí y dividir, puedo ver tres flotadores, básicamente Eso es lo que es un vector. Puede convertirse en un color. Puede convertirse en un movimiento. Puede convertirse en cualquier cosa que representen tres puntos. Puede convertirse en una ubicación. Y lo que tenemos aquí es un vector específico, que se llama rotador Si voy aquí y selecciono un rotador, que está debajo del vector, y cambio el tipo de variable No quiero configurarlo. Quiero conseguirlo. Ahora, un atajo rápido sería si arrastre y suelte aquí con el control presionado, me estoy poniendo un getter Si arrastre y suelte aquí con un alt presionado, entonces me estoy poniendo un setter Ahora bien, si conecto esto aquí, compilo, necesito compilar siempre y guardar, y voy a ir a la variable y cambiar esto a, digamos, -60 Ahora pila de nuevo y presiona play, y podemos ver que la puerta está a medio camino abierta Claro, si me acerco a él, no pasa nada. Y ahora sí tenemos una variable para cambiar la rotación de la puerta. Entonces, si tuviéramos muchas puertas, por ejemplo, podríamos usar esta variable aquí para cambiar la rotación. Si queremos que esto suceda, lo que podemos hacer es poner un retraso aquí. Que es un nodo que crea un timestyle en nuestro código. Al igual que, espera la cantidad que hemos establecido en duración para completar y seguir adelante con el código Entonces digamos que esperaremos 2 segundos antes de que esto suceda. Volvamos a mapa. Juguemos. Miremos la puerta. Y en 2 segundos, la puerta se movió y se abrió. Entonces este es un nodo de retardo que tiene que ver con el tiempo. Entonces como nuestro código se ejecuta en bloques como podemos ver de lógica, una cosa lógica a pensar sería poner aquí un pequeño retraso, cambiar un poco la rotación, poner un pequeño retraso, cambiar la rotación, pero poner algunos pequeños retrasos que el ojo no pudo captar, por ejemplo. Bueno, hay un comportamiento guionado. Ya hay un comportamiento escrito para esto para nosotros. Como en muchos lenguajes de programación y como en blueprints, bueno, grandes programadores han creado herramientas, por lo que estos comportamientos son fáciles para nosotros Lo que haríamos para lograr ese efecto que cada vez que se mueve un poco de tiempo se llamaría una línea de tiempo. Vamos a buscar una línea de tiempo y presionar Agregar línea de tiempo. Como puede ver, este es un nodo más complicado en comparación con la simple demora o incluso en comparación con la rotación del actor conjunto. Tiene un montón de insumos. Jugar, jugar desde el principio, parar, revertir, revertir desde el final, establecer nueva hora, nueva hora, la cantidad que estamos estableciendo, y actualizar y terminar y una dirección. La dirección tiene un nuevo color, y ese color no hemos visto aquí. Parece que el bocado que podría traducirse en morder, para ser honesto. Es por ello que tienen colores similares. Pero esto es, como podemos ver cuando cubrimos, una dirección del tiempo E AM. La E al principio inicia para EAM, que es la abreviatura de enumeración. Básicamente, se trata de una lista preestablecida que hemos creado que no puede cambiar en tiempo de ejecución. Es una lista de lo que queramos. Cierto el específico se llama dirección, y si vamos a hacer un nodo igual. Enum igual podemos ver aquí las opciones que tiene hacia adelante y hacia atrás Hay muchas formas de usar nums. El más común es con un interruptor que se puede ver es interruptor en dirección de línea de tiempo E, el mismo nombre que la enumeración aquí porque se enumeran Necesitan tener la misma enumeración conectada a ellos, que tiene un avance y un retroceso Esto podría estar conectado, por ejemplo, para actualizar, lo que significa que mientras la línea de tiempo esté funcionando, haga algo, o podría estar conectada para terminar cuando la línea de tiempo haya terminado de hacer lo que sea que esté haciendo, ¿terminaron de seguir adelante o terminaron de retroceder? Vamos a usar esto muy pronto. O ahora, vamos a simplemente eliminar esto porque no lo vamos a necesitar. Lo que vamos a necesitar es cuando estamos actualizando la línea de tiempo, conectar el conjunto de rotación del actor. Vamos a eliminar. En realidad, no eliminemos. Solo conectemos de terminado a jugar. Cuando se haya completado el retraso, toca la línea de tiempo y mueve a nuestro actor, rota a nuestro actor. Ahora bien, ¿a qué jugamos? No hay nada. No hemos puesto nada para jugar. No vamos a estar lidiando con el set new time y new time porque es un poco más avanzado que lo que estamos haciendo ahora mismo. Entonces lo que tenemos que hacer es ingresar a la línea de tiempo. Como pueden ver, este es un nodo muy especial. Entonces, si hago doble clic en él, lo abrimos por aquí, y aquí mismo, tenemos el gráfico de eventos, y aquí está la línea de tiempo, puerto específico. Tenemos un camión que vamos a ver qué es. Va a estar agregando algo como sistema tessiano, como, por ejemplo, un camión de flujo lo que vamos a estar usando lo que voy a hacer es que voy a presionar la tecla Mayús y dar click aquí para crear un punto y shift click y crear un punto aquí Ahora bien, estos dos puntos tienen un tiempo y un valor. Si pongo el tiempo a cero y valor cero, esta sería la mitad de nuestro sistema cartesiano Si voy al siguiente y presiono, digamos cuánto tiempo tardaría la puerta en abrirse. Digamos punto 0.5 y valor de uno, podemos ver que esto pasó a valorar uno en el tiempo 0.5. Ahora tenemos una pendiente que podemos conducir algo con ella. El resto de los botones, como pueden ver, es el botón de longitud, que si me alejo en 5 segundos, detiene la línea de tiempo. Podría establecer este 2.5, y detendrá la línea de tiempo aquí. Pero hay otro botón por aquí, usa el último fotograma clave, que aunque agregue un camión más grande en 5 segundos, notaría que el último fotograma clave está en 0.5 y detendría la línea de tiempo Ahora bien, si volviera a haber más pistas, tomaría el último fotograma clave de la pista más larga. Ahora, por supuesto, hay algunas opciones como la reproducción automática, como loop y otras cosas que hacer, que no vamos a necesitar en este momento Lo único que vamos a necesitar hacer es nombrar esta nueva pista, clic y presionar F dos aquí, y voy a tirar de esta puerta de rotación Alpha. Va a ahorrar. Voy a cerrar la línea de tiempo porque ya no la necesitamos. Asegúrate de que usamos el último fotograma clave si tienes 5 segundos, y voy a cerrar esto Entonces ahora tenemos un nuevo pin aquí, la puerta de rotación Alpha. Este es el valor 0-0 0.5 segundos 0-1. Esto se ejecutará por 0.5 segundos. Se estará actualizando por esta cantidad, y esto corresponderá 0-1 valor en estos 0.5 segundos. Ahora bien, ¿cómo puedo conectar esto aquí? No hay pin verde. Bueno, lo que puedo usar es, nuevamente, un nuevo nodo con comportamiento prescriptivo llamado nodo alerta, que es un nodo matemático, un larp, que es una interpolación de A a B, básicamente, y puedo conectar el B aquí, que es mi destino y mi rotación original, que era -90, que era -90 Entonces puedo conectar este Alfa aquí. Puedo elegir también el camino más corto si es necesario, pero a veces puede estropearlo las cosas. Entonces, en base a tus rotaciones, puedes elegir si revisas esto o no Voy a ir a Mar Map y presionar Reproducir. Y esto es a -60. Pongámoslo a menos 180 porque queremos abrir hacia adentro Pero sí funcionó. Lo vimos funcionando. Sí, la puerta se abre sola, esperando 2 segundos, y esta línea de tiempo está animando nuestra puerta Creo que esto es suficiente para éste. voy a ver en la siguiente. Adiós. 6. Crea puertas interactivas con desencadenadores de colisión: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery Door Systems y Anteriormente, explicamos algunas cosas sobre la línea de tiempo y cómo funciona. Lo agregamos a nuestro plano de mapa tutorial. Usamos el evento begin play. Usamos el delay, y jugamos la línea de tiempo para establecer la rotación del actor en base a una larp de un rotador Creamos una variable para nuestra nueva rotación, y también dentro de la línea de tiempo, creamos un camión de flujo 0-1 usando 0.5 segundos. También hicimos clic en el último fotograma clave de uso, por lo que la longitud de la línea de tiempo es irrelevante para cuánto dura Se necesita el último fotograma clave. Ahora bien, esto sucede cuando empezamos a jugar. Pero lo que queremos hacer es que esto suceda cuando el jugador se acerque a la puerta. ¿Cómo haríamos esto? este sistema de detección de colisiones, lo que significa que tenemos un sistema para entender cuando un objeto, digamos, por ejemplo, un jugador está colisionando con algo Por ejemplo, el muro, ¿por qué no podemos salir de estos muros? No es que sean sólidos o algo así. Le decimos al juego al programa que para nuestro peón, para este personaje, esto se comporta como sólido, por ejemplo, me impide moverme a través Entonces, ¿cómo está pasando esto? Vayamos a nuestro botón de agregar rápidamente al proyecto y busquemos un disparador. Caja de gatillo. Vamos a traerlo aquí, y vamos a revisar sus detalles. Lo he hecho un poco más grande para que podamos ver algunas cosas. Cuando buscamos los detalles, hay una pestaña específica llamada colisiones. Aquí está. Y esta pestaña, podemos ver estos presets de colisión. Entonces cada objeto en irreal, como la pared, el gatillo de colisión, la cápsula, el jugador pon cuando genera, tiene sus propios Tenemos una manera de asignar un tipo de objeto que defina qué tipo de objeto es lo que le hayamos establecido ver este es palabra dinámica. Pongamos esto a la costumbre. Para que podamos cambiar un poco esto. Personalizado, puedo cambiar cómo se comporta este disparador más allá de su preajuste original Al igual que el preajuste original era disparador, creo, es disparador. Y con costumbre, puedo decir, No, ¿sabes qué? Vas a bloquear la estática de pared, o vas a bloquear peones Si presiono las patas de bloqueo, presiono play, encontraremos aquí arriba esto oh, sí, aquí está Verás, no puedo superarlo. Está bloqueando el estanque. Mientras que, si se superponía al estanque, entonces yo simplemente lo atravesaría. Déjame ver dónde está la colisión. Hagamos esto visible. Si voy aquí y presiono visibilidad. No, en realidad, escondido en el juego. Si deshago clic en esto, puedo ver esto en el mapa Entonces simplemente te pasa a trabajar al mismo tiempo. Aún no hemos programado esto. Entonces otra cosa de las colisiones es que suelen ser invisibles Siempre están escondidos en el juego. Entonces, por ejemplo, nuestra puerta, tenemos este gatillo delante de ella. Y será la encargada de abrir y en realidad, por solo abrir la puerta, vamos hacerla un poco más grande. Vamos a moverlo aquí. Tal vez un poco más grande, más ancho. Sí, creo que ese es un lugar bonito. Entonces vamos a usar esta colisión. Tengo el disparador seleccionado, voy a ir al plano de nivel Voy a hacer clic derecho y crear una referencia al cuadro de activación. Voy a compilar. Ahora bien, ¿cómo usamos esta caja de gatillo? Bueno, como vimos en los presets de colisión, hay tres respuestas principales, solapar, bloquear e ignorar Volvamos a poner esto para desencadenar ya los valores predeterminados de colisión Entonces lo que queremos no es cuando ignoramos, no cuando bloqueamos porque no nos importan estos canales, y están más o menos puestos en marcha. Pero queremos que cuando nos estamos superponiendo hagamos algo cuando probablemente el jugador se superponga con esto Podemos comprobar que el jugador se superpone. Sí. Volvamos a nuestra caja de gatillo y tipo drawable y type overlap Y podemos ver un montón de comandos para esto. Podemos conseguir actores superpuestos. Podemos obtener componentes superpuestos, lo cual es diferente a los actores. Podemos superponer actor. Podemos preguntar, ¿se superpone a nuestro jugador? Pero podemos ver algunas otras cosas que asignan y se unen por aquí, asignadas en el actor comienzan a superponerse, se asignan en la superposición final del actor, evento de enlace en el actor comienza a superponerse y el evento en el actor se superpone al final. Realmente no hay mucha diferencia entre asignar y enlazar. Ambos usan bind básicamente. Llamemos a asignar primero. Asignar en actor comenzar superposición. Y llamemos también a bind. Así se unen solapamientos. Evento de enlace en superposición de inicio real. Como puede ver, ambos llaman bind. La diferencia es que un letrero crea también un evento para nosotros. Pues si llamamos bind, tenemos que crear el evento nosotros mismos. Y para ello, solo sacamos del evento y hacemos un evento personalizado. Por qué dibujamos del evento Porque el enlace en una caja de activación requiere entradas específicas. Esto no es cualquier evento personalizado. Se llama evento personalizado, pero no es ninguna costumbre. Se puede ver que tiene estas dos entradas aquí ya que tiene esta también. Si creo un evento personalizado por su cuenta, verás que no tiene nada. Tengo que crear estos insumos yo mismo. Pero lo hago si hago crea estas entradas, como si estuviera agregando dos entradas, deberían ser de tipo actor objeto referencia. Verás que ahora soy capaz de conectarlo aquí. Puedo compilar y está funcionando porque lo que esto requiere son básicamente estas dos referencias de objeto actor. Entonces desde que los creé, todo esto está bien. Si los quito, deja que algunos lo hagan. Entonces sí, ya ves, no tiene las entradas, así que no puede delegar. No es compatible. En fin, sigamos explicando cuáles son estas dos referencias de objeto actor. Actor de superposición significa nuestra caja de gatillo, básicamente, cualquier colisión de caja de gatillo que hayamos utilizado. Otro actor es el actor que se superpuso. Entonces lo que tenemos que hacer ahora mismo es eliminar todo esto y mover comenzar a jugar un poco más allá. Vamos a desconectar esto. Voy a usar Alt y dar click para desconectarlo, y voy a conectar esto aquí. Cuando comience el juego, vincula algo a esta caja de activación cuando comience a superponerse. Entonces eso es algo. ¿Qué debería ser? En primer lugar, tenemos que preguntar si el otro actor es el jugador. Para hacer eso para probar si el otro actor es el jugador. Hay varias formas. Ahora mismo, lo vamos a hacer con un nodo de casting, que es un poco más caro que otras formas, pero es una buena manera de mostrar el casting. Entonces, ¿qué es el casting? Primero llamémoslo. Voy a llamar a elenco a tercera persona. Carácter. Básicamente, es preguntar, ¿eres así? El objeto que es entrante es el objeto que estamos pidiendo. Entonces estamos echando a ello. La razón por la que le estamos echando suele ser porque queremos alguna información de ese objeto. Nuevamente, hay otras formas mejores que casting para hacer eso a mayor escala, pero para nosotros ahora mismo, no va a crear ningún problema. Entonces, por ejemplo, si quisiera la velocidad del personaje, podría escribir aquí velocidad obtener velocidad, y obtendría la velocidad del personaje en tercera persona o algo más específico. Como si quisiera revisar la colisión de la cápsula. Componente Apsu Aquí viene com, que es un carácter específico. Sabemos que cada personaje tiene una cápsula, así que puedo obtener esa información del personaje. Ahora bien, si tuviéramos algo instantáneo específico en este personaje, por ejemplo, tener un HP, podríamos obtener el HP de ese personaje de aquí. Mientras que si no lo hiciéramos, no podría volver a conseguir, digamos, cápsula. No hay componente get capsule porque el otro actor podría ser cualquier tipo de actor. Pero con el casting, estamos pidiendo elenco a tercera persona. ¿Eres un personaje de tercera persona? Y si lo eres, así que si el elenco tiene éxito, entonces podemos sacar alguna información de él Si el elenco falla, significa que no es lo que estamos pidiendo. Entonces vamos a preguntar, ¿qué está colisionando al otro personaje, al personaje de tercera persona En caso afirmativo, entonces sólo vamos a tocar la línea de tiempo, y eso sería todo. Vamos a compilar. Y vamos a acercarnos a la puerta y la puerta se abrió. Creo que esto es suficiente para éste. En la siguiente, vamos a hacer el cierre de la puerta. Vamos a poner algo aquí para pisar aquí, abrimos la puerta, paso aquí, cerramos la puerta. Pero eso es para éste. Te voy a ver en la siguiente. Adiós. 7. Técnicas avanzadas de colisión en Unreal Engine: Hola, bienvenidos de nuevo a Andrea Engine five, Blueprint Mastery, Door Systems y portales interactivos En la última lección, dejamos con la creación esta colisión que cuando el jugador se acerca, se abre la puerta. Y para hacer eso, nos useri el blueprint de nivel, y creamos el evento bind a nuestro trigger box en begin Entonces, cuando nuestro jugador se superpone, estamos desencadenando este evento Estamos comprobando si es nuestro jugador porque podría haber sido otra cosa con nuestro nodo de reparto, y luego estamos activando nuestra línea de tiempo Ahora, pongamos esto un poco en orden. Y vamos a crear un sistema similar para cerrar la puerta. Entonces voy a seleccionar nuestro disparador. Voy a copiarlo y pegarlo, Control C controlar bien. Y voy a moverlo por aquí. En realidad, podría haber hecho lo mismo simplemente usando la t y arrastrando desde una flecha Así que copiar pegar o Alt y arrastrar sería lo mismo. Ahora, voy a hacer esto un poco más pequeño. Voy a adelantarlo un poco. Y ahora voy a crear una referencia a ella teniéndola seleccionada en la ventana gráfica y volviendo a nuestro plano de nivel, voy a hacer click derecho y crear una referencia para activar el cuadro dos Ahora, de nuevo, necesitamos usar el evento vinculante en Actor comenzar solapamiento. Entonces voy a usar este evento, copiar y pegarlo aquí. Voy a conectar la caja del disparador porque este es el objetivo. Target se refiere a quien, por ejemplo, estoy vinculando este evento hacia y desde el evento, voy a crear un evento personalizado. Llamemos a esto cerrar cerrar, hacer Tigger. Voy a traerlo aquí. Voy a copiar el elenco al personaje en tercera persona. Lo voy a colocar aquí y voy a conectar estos dos revertidos. Así que vamos a jugar. Y cuando nos acerquemos a la puerta, ésta irá a abrir la puerta. Si voy por aquí, va a cerrar la puerta. A lo mejor un gatillo es un poco más grande, pero está bien. Sí, está funcionando Entonces lo que estamos haciendo básicamente es la misma línea de tiempo, estamos invirtiendo desde el momento en que es la línea de tiempo. Por ejemplo, si vamos directamente a esta caja, no va a pasar nada. Es una buena manera de demostrar también algo. Si presiono Alts, estoy expulsando en la Ten cuidado de que esto solo funcione en esta ventana gráfica. Si ejecuto un juego independiente, si juego en el nuevo editor Window Pie, si presiono Alts, no funciona No puedo expulsar de aquí, pero puedo expulsar de una Así que vamos a jugar en la ventana gráfica seleccionada, a la derecha. Ahora, voy a alts y expulsar de esta ventana gráfica, y voy a traer el mapa tutorial por aquí, el plano del mapa tutorial En realidad, un poco más grande, ¿verdad? Esto nos hace falta. Y esto es depurador real manera de depurar visualmente los Estás seleccionando qué plano quieres ver funcionando. Porque si tuviera dos de estos planos en nuestro mapa, ahora, no podría tener planos de dos niveles, pero si fuera otro tipo de plano y tuviera el doble o 100 veces, todos aparecerían aquí Entonces necesito saber cuál estoy depurando, cuál estoy viendo depurar Entonces voy a seleccionar el mapa tutorial. Y vamos a alejar un poco el código, traerlo aquí, y voy a volver a nuestro juego presionando F ocho. Ahora, en realidad no necesitaba expulsar, pero fue una buena oportunidad para mostrar expulsión En fin, F ocho, volvamos a nuestro personaje. Ahora estoy moviendo el personaje. Y voy a pasar por éste. Se puede ver que se está activando. Se superpone. Está corriendo, pero no pasa nada. No pasa nada porque ya está al final. Entonces esto desencadena por como una fracción de segundo, un fotograma para simplemente comprobar que está al final. Donde si voy aquí, se dispara durante todo el tiempo. Si voy aquí ahora, se dispara para todo el tiempo. Y esta es la forma en que puedes ver tu código, cómo está funcionando, dónde se detiene, donde tiene algún problema. A veces vale la pena tener dos pantallas para esto, y la misma pantalla puede ser un poco complicado, pero es factible De todas formas, vamos a volver a poner esto aquí, presiona para. Lo siguiente que vamos a hacer es de alguna manera decirle al jugador jugador paso aquí, pisar este lugar aquí para cerrar la puerta. Entonces para hacer esto fácilmente, solo podría traer un texto por aquí, solo texto, texturner actor aquí lo vamos a llevar a algún lugar que pueda ver, necesito rotar 90 y traerlo tal vez por aquí Y si voy a sus detalles, como decíamos, cada elemento tiene sus propios detalles. Ahora bien, el texto tiene su propio detalle, que se llama texto. Sea lo que sea que escriba aquí, podemos ver en el mapa. Así que paso aquí para cerrar la puerta. Si quisiera poner esto en una línea diferente, sigamos capitalizando cada letra, cada primera letra Lo que podría hacer es ir a aquí, sólo puedo cambiar a Enter, y vamos a la línea de abajo. Lo siento, esto es una distracción. Necesito hacer esto más grande. Así que al tener alineación horizontal, alineación vertical también puede manipular nuestro texto. Voy a dejarlo al centro y al fondo del texto. Creo que se ve bien. Sólo voy a moverlo así y a lo mejor hacerlo un poco más pequeño 24. Bueno, 20, 20 parece estar bien. Y voy a moverlo. No, estuvo bien. Entonces esta es una forma en la que podemos ver algún texto. Paso aquí para cerrar la puerta. Pero si quisiera que el texto apareciera encima de la puerta, en cierto tiempo, seguiría necesitando una caja de colisiones para hacer eso. Ahora, podríamos llenar el mundo con cajas de gatillo y usando el plano de nivel, podríamos comprarlas. Pero y si quisiera tener solo una caja de gatillo que pueda hacer muchas cosas con ella, y dependiendo de mis necesidades, podría cambiar su funcionalidad. Aquí es donde entra en juego un plano de actor. Esta es la diferencia entre plano de nivel, que es un plano responsable de todo el nivel, y tenemos el plano actor, que es responsable de sí mismo y de hacer las cosas que se supone que Entonces vayamos a nuestros planos. Vamos a crear uno nuevo, no usar test. Escojamos la clase de plano. Escojamos un Noctor y llamemos a este texto de trama PP. Entremos en este plano. Como decíamos, el plano de nivel es responsable de todo el nivel Entonces sus componentes teóricamente podrían ser todo el nivel. Pero este plano tiene este punto de vista, y como describimos, aquí es donde podemos ver visualmente algunas partes de nuestro plano, qué consiste nuestro plano, Y donde los colocamos es el talón del componente por aquí. Entonces, para este plano, vamos a necesitar una caja de gatillo , una caja de gatillo en planos Sin embargo, una caja de gatillo en planos, no se llama caja de disparo Se llama colisión de caja de colisión o colisión de cápsula o colisión de esfera. Estas son las clases predeterminadas que tenemos disponibles. Son 99% casi lo mismo. Son casi lo mismo, pero no son lo mismo. Es por eso que se llaman cajas de gatillo, y a estas se les llama colisión de cajas. De todos modos, sigamos adelante eligiendo una colisión de caja. En este caso que estamos dentro de este plano plano, no necesito hacer referencia a la colisión de caja de alguna manera porque está dentro del plano, mientras que en el plano de nivel, necesito hacer referencia a esta caja desencadenante Ahora mismo, si traigo este plano dentro del mapa, podemos ver la colisión de la caja Pero no necesito hacer referencia a esto dentro de aquí porque pertenece a este plano Cuando necesito llamarlo en mi gráfico de eventos, puedo simplemente arrastrarlo y soltarlo desde aquí o puedo arrastrarlo y soltarlo desde variables y componentes. Recuerde variables, los componentes también son variables. Y como tenemos el comportamiento de la caja gatillo cerca de nuestras mentes, examinemos el comportamiento de la colisión de la caja. Como pueden ver, tiene un talón de detalle muy diferente por aquí Y si voy a Viewport y lo selecciono, tiene más cerca del otro donde con algunas diferencias, como por ejemplo, estos eventos por aquí antes necesitábamos llamar a Bind on event Entonces podemos hacer esto desde aquí también. Entonces Enlazar en superposición. Y podemos ver que estos eventos que existen aquí también comienzan a superponerse y superponerse y todo lo demás. Pero como está dentro del plano, Areal nos da estos eventos que podemos usar directamente Por ejemplo, quiero en componente comenzar a superponerse. Puedo hacer click en esto y crea el evento, así que no necesito vincularlo. Un poco de información extra si lo estaba llamando desde otro plano, por ejemplo, si tuviera una referencia a esto, digamos, tengo esta casilla seleccionada, traigo una referencia aquí a esta casilla Ahora, de esta caja, puedo obtener mi de este plano, puedo obtener el componente de caja Voy por la lista, obtengo box, puedo enlazar aquí, porque si hago clic aquí, podemos ver que no hay eventos como estaba en blueprint Entonces, si quiero ligar de otro lado a esta caja, todavía necesito atar así. Déjame terminar la demostración. Así que voy a enlazar en superposición, y luego crearía un evento personalizado. Y como puedes ver tiene más opciones que la caja de gatillo. Por eso estoy diciendo que no es exactamente lo mismo. De todos modos, esto es solo información extra. Volvamos a nuestro plano y voy a borrar esta casilla No lo necesitamos porque sí tenemos listo este evento para nosotros. Y entre paréntesis, se puede ver qué cuadro es Por ejemplo, teníamos cinco cajas más que dicen que esta es la casilla 15, 15 cajas más. Podemos ver que esta es la casilla 15. Ahora, creo que este es un buen punto de parada para este. Te voy a ver en la siguiente. Adiós. 8. Control de texto y luces con la programación de blueprint: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery Door Systems y Entonces anteriormente, comenzamos a crear nuestro actor Blueprint de texto bajo Agregamos este plano en el mapa, y agregamos un cubo de colisión, una colisión de caja dentro de la ventana gráfica, dentro de los componentes del Y demostramos un poco el guiño de componente comenzar solapamiento, casilla 15 versus el asentido de la caja de gatillo, que era un poco más sencillo Ahora, sigamos construyendo este plano. Los siguientes componentes que vamos a necesitar son una luz puntual y un texto. Renderizado de texto. Ahora, la línea de punto, necesitábamos hacer el texto un poco más visible, si estaba oculto o no, no oculto, no visible a la iluminación. Y bueno, haz que destaque un poco mejor. Y el texto tierno sería el texto que añadimos a nuestro texto, como de la misma manera que agregamos paso aquí para cerrar la puerta, que en realidad deberíamos traer. Voy a usar Alt y arrastrar algo de superficie aquí. Y bien. A lo mejor ponerlo un poco más bajo. Entonces el jugador sabe dónde se supone que deben pisar. Hagamos esto un poco más pequeño también. Está bien. Aquí está bien. Sí. Y ahora tenemos que poner este texto encima de la puerta para decir un paso más cerca de la puerta para que se abra. Como queremos usar esto muchas veces, vamos a usar el script de construcción, que, de nuevo, es único para la clase blueprint Bueno, a la mayoría de las clases de blueprint, ya que dijimos que el nivel, blueprint es diferente en comparación con un simple La mayoría de las clases de planos tienen el script de construcción. El sprint de construcción se utiliza para hacer las cosas en el editor. Es muy bueno de usar para la generación de procedimientos y aleatorización, personalización de activos Por ejemplo, ahora mismo, necesitamos personalizar nuestro texto. Como cada instancia de este plano que vamos a llevar al mundo, si duplico esto Queremos que el texto diga otras cosas en una instancia y otras cosas en la otra. Entonces este es el mismo plano, pero tenemos dos instancias con texto diferente Una forma de hacer esto sería utilizar este script de construcción. Vamos a conseguir nuestro trender de texto por aquí, solo arrástralo y suéltalo. consejo rápido para esto sería si mantengo presionado Control y arrastre y suelte, me estoy poniendo un getter Si estoy aguantando, voy a conseguir un setter. Como viste, lo arrastre y lo suelto desde aquí, es lo mismo. Es nuestro trender de texto. Si renombro este textnder M, puedes ver que se le está renombrando también aquí Entonces pestaña de componentes, lista de componentes en variables. No nos vamos a molestar con un setter, sí. Sólo vamos a usar el único getter, y vamos a establecer texto La diferencia entre este texto conjunto y obtener este renderizado de texto conjunto M sería que esto se refiere al valor, déjame elegir el renderizado de texto. El valor del texto donde esto se refiere a la entidad de render de texto. Entonces esto cambiaría si lo he preestablecido variables con renders de texto, podría cambiarlo así. En fin, un poco confuso. Ahora mismo, sólo vamos a hacer el valor del render de texto. Nuevamente, diferentes detalles cuando estoy aquí, diferentes detalles cuando lo estoy seleccionando de aquí. No necesito estar en el viewpod sería lo mismo, pero diferentes detalles desde una perspectiva variable y diferentes detalles desde una perspectiva de componente Ahora, continuemos. Guión de construcción, necesitamos cambiar nuestro valor de texto. Entonces voy a promover esto a una variable. Y ya lo nombró por nosotros valor. Vamos a agregar el texto delante de él. Valor de texto. Y lo que vamos a hacer es usar este botón de aquí, instancia editable o encontrarlo por aquí y usar el I por aquí Puedes verlo auto click Instancia editable con la e aquí También lo vamos a exponer en spawn por si acaso estamos desove este plano Bueno, no lo vamos a engendrar, pero si quieres engendrar este plano, tendrías Ahora, vamos a compilar y guardar y volver a nuestro mapa y demostrar lo que acabamos de hacer. Tenemos este valor de texto y nosotros lo que pongamos como valor aquí sería nuestro texto. Ahora mismo está vacío. Entonces, si vamos a nuestra ventanilla, podemos ver que no hay texto En realidad desapareció. Si presiono aquí uno, dos, tres, podemos ver uno, dos, tres. Entonces, sea lo que sea que agreguemos como valor a esta variable, en realidad podemos sembrar correspondiente a nuestro renderizado de texto, y esto está sucediendo a través del script de construcción. Ahora bien, esto significa que sucede antes de que se ejecute el juego antes de que presione play. Y otra cosa es que presionamos instancia Edit y exponemos en span. Entonces, si hacemos clic en estos planos y vamos a los detalles por aquí, déjame hacerlo un poco más grande Podemos ver en la categoría por defecto un valor de texto. Para estar más seguros, vamos a escribir mi valor de texto. Y podemos ver que esto cambió el valor del nombre. Entonces esta es nuestra variable. Entonces lo que sea que escriba aquí, como, hola , hola, va a convertirse en el nuevo texto. Y aquí podemos ver la definición de instanciar, como un plano dice hola, el otro plano no dice el otro plano Y escribe hola y este dice hola, y este dice hola. Así que hacer pública la variable o exponerla en realidad instancia editable nos da la oportunidad de cambiar la variable de aquí Ahora, la categoría por defecto, es otra cosa. Cuando vamos a la propia variable, podemos ver que aquí hay un montón de detalles. Uno de los detalles es la categoría. Podemos categorizar nuestras variables y mantenerlas como estas son componentes Están en componentes como lista. Si agrego este a una categoría llamada digamos texto, ahora podemos ver que este pertenece al texto de la categoría. Además, si salgo aquí afuera y en realidad, necesito compilar para ver este cambio, podemos ver que en vez de por defecto, dice texto. Podríamos hacer un montón de ajustes aquí para establecer la posición de la luz puntual, el texto y la caja, pero no vamos a ir tan lejos en el guión de construcción. Lo que podemos hacer, sin embargo, y sería como es traer el punto de luz y establecer la intensidad. Y digamos, dale un valor por defecto de 1,000 y ahora promociona esto a una variable dejemos con nueva intensidad. Cambiemos la categoría también a luz y también fijemos color. Es posible que desee configurar un color diferente. Vamos a establecer el valor predeterminado en blanco. Sí, blanco, blanco, no. Y vamos promover esto a una variable, nuevo color de luz e instancia editable también y categoría Ahora, en vez de cambiar la categoría aquí, lo que puedo hacer es simplemente arrastrarla y soltarla aquí y entró en esta categoría. Ahora, vamos a traer esto aquí. En realidad, sólo puedo duplicar esto. Ahora, tener esta opción en lugar de uno y arrastrar otro cable también es válido No crea ningún problema. Incluso lo hace un poco más claro sobre qué es qué. La otra cosa que quería explicar es por qué presioné un valor por defecto aquí y luego promoví a variable. Bueno, cuando lo hago de esta manera, si compilo, la variable promovida, nueva intensidad mantiene el valor que tenía por defecto, y el color sería blanco también. Entonces ahora si voy, no hice clic en esto para ser Instancia Editable Vamos a exponerlos en spawn, tal vez para un uso más avanzado y compilar y guardar Vayamos a nuestro mapa, y ahora podemos ver la categoría de texto y la categoría de luz por aquí. En realidad no necesitamos a los dos. Solo necesitamos uno por ahora, y vamos a configurar un poco el posicionamiento. Entonces, ¿qué queremos lograr aquí? Si lo tengo seleccionado, puedo elegir los componentes de este plano Si elijo esta puerta, puedo elegir los componentes de este plano Si elijo la pared, puedo elegir en los detalles los componentes de lo que sea que elija. Lo que voy a hacer es elegir la caja. Entonces, cuando el jugador se mueva hacia la puerta porque no hay otro lugar donde moverse, activará esta caja. Creo que este es un buen lugar para ponerlo. El jugador podría saltar. Entonces hagámoslo un poco más alto. Entonces van a pasar por esta caja. Vamos a por el texto. Vamos aros. Voy a conseguir esto de aquí. Un 90 giratorio, y vamos a establecer un texto. También digamos que acércate para abrir la puerta. Nada cambió. Bien, mi error. No debo hacer eso al render del texto. Debo hacer eso al plano, mi valor de texto cerca para abrir la puerta Muy bien. Y movamos este texto por encima de la puerta. Y hagamos la frase un poco más corta. Vamos a nombrarlo enfoque para abrir. De nuevo, es un error. Debería estar en el plano, no en el renderizado de texto porque anulamos este renderizado de texto desde aquí Así que no mucho el No, enfoque para abrir. Creo que abrir necesita una P. Así que acercarse a abrir. Seleccionemos el texto más tarde otra vez. Colócala un poco mejor. Y llevemos también la luz por encima de él. Por lo que hace que el jugador mire el nuevo punto de luz que spot. Creo que configurarlo. Veamos cómo se ve. Genial. Lo siguiente que debemos hacer es un poco de funcionalidad, pero creo que este es un buen punto de parada. Nosotros lo configuramos. Creamos los otros componentes, los configuramos en el mapa, y creo que este es un buen punto de parada. Te voy a ver en la siguiente. Adiós. 9. Programación de consejos de interacción con planos: Bienvenido de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y portales interactivos Anteriormente, creamos nuestro texto de flujo BP. De hecho, agregamos algunos componentes más y creamos el script de construcción que controla el texto, el color y la intensidad. Lo agregamos a nuestro mapa, y usamos los propios componentes. Elegimos el plano, y luego a partir de los detalles, elegimos los componentes que queríamos y los trasladamos al espacio en consecuencia donde lo queremos Sigamos con la parte de codificación. Cuando el jugador se superpone, preguntemos de nuevo si es nuestro jugador cuando el otro actor Esta vez, vamos a hacerlo un poco diferente. Vamos a ir a nuestro navegador de contenido, vamos a ir a una tercera persona, y vamos a ir a nuestros planos de carpetas y abrir nuestra BP tercera persona En la tercera persona, está el código que mueve o jugador alrededor. Ahí está el guión de construcción y la ventana gráfica. El panel de visualización consiste en la malla de personajes, la cápsula, una cámara Boom ****, y la cámara, y un componente de movimiento de personajes Ahora, lo que queremos es usar la cápsula e ir a los detalles y buscar a Tug y agregar el Tug P ahora, ¿qué son las etiquetas? Las etiquetas son etiquetas o identificadores simples, si lo deseas, que podrían asignarse a actores o componentes de blueprint y ayudan a categorizar e identificar objetos en el mundo del juego, facilitando el filtrado y búsqueda o activación de comportamientos específicos en Por ejemplo, ahora mismo, lo que vamos a hacer, vamos a guardar y compilar. Volvamos a. Vamos a preguntar si no al otro actor, sino al componente que superpusimos ¿Tiene la etiqueta? En realidad tiene etiqueta. El componente tiene etiqueta, y vamos a elegir porque esa es la etiqueta que ingresamos aquí. Voy a cerrar esto. Ya no lo necesitamos. Y si el componente que se superpuso con la caja tiene la etiqueta P, entonces usaremos una rama, que es un nodo I. Entonces básicamente, si esto si es correcto, si es cierto, la condición, nuestra condición ahora mismo es el componente tiene etiqueta, va de true. Si no, pasa de falso. Entonces es una declaración Is con una condición. Y claro, necesita la ejecución. Si tenemos la etiqueta de componente P, entonces disparamos la rama verdadera. Si no, disparamos la falsa rama. Si es cierto, vamos a necesitar el renderer de texto y vamos a necesitar la luz puntual Vamos a dibujar un conjunto de visibilidad. Ahora bien, este es un nodo que controla la visibilidad de un componente, debemos convertirlo en verdadero e ir a nuestros detalles en el renderizado de texto y buscar visibilidad. Y convertirnos en pulso, y lo mismo hacemos a la luz puntual. Como ve, cambié la entidad, el componente en el que estoy dando clic, y se quedó con la etiqueta por aquí. Entonces esto es muy útil. Estoy tratando de apagar la luz, renderizar, compilar y guardar. Por lo que esto hará que la visibilidad de ambos se haga realidad. Vamos a probarlo. Si voy a jugar, no puedo ver nada. Paso aquí, acercamiento para abrir. Perfecto. Paso aquí para cerrar, acercarse a abrir. Hagamos visible nuestro segundo nivel. Va a hacer clic en el ojo en el segundo nivel, y ahora es visible. Y en realidad, si entramos en esta sala, dupliquemos esto. Simplemente voy a seleccionar esto y arrastrarlo por aquí y seleccionar la cosa de abajo también y arrastrarla por aquí, tal vez un poco más allá por aquí. Podría copiar el texto también va a rotar y con alt, voy a duplicarlo y arrastrarlo por aquí. Entonces sí, creo que está bien. Vamos a seleccionar nuestro nuevo disparador, ir a nuestro mapa tutorial, traer la referencia y conectarlo aquí. Entonces eso sería todo. Ahora vinculamos este disparador también a este evento. Entonces si voy a jugar, puedo ir aquí, acercarme a abrir. En realidad me acerco a abrir, y voy a dar un paso por aquí y cerrar, abrir, cerrar. Genial. Nuestra puerta de al lado será la que presionemos E, y se abra. Entonces, traemos aquí a nuestro actor de colisiones. En realidad, voy a traer uno nuevo. Flujo de texto aquí. Vamos a establecer para texto presione para abrir D. Pongamos espacio aquí. Nuevamente, si quisiera cambiar cómo se ve, el texto, podría seleccionar un renderizado de texto. Podría cambiar las opciones aquí. Podría cambiar el color, y no hemos expuesto todas estas variables. Acabamos de exponer cuál sería el texto. ¿Dónde queremos chocar? Digamos que cuando el jugador haya caminado por la mitad de la habitación, digamos en algún lugar de aquí. Nuevamente, para mover esto, solo lo estoy seleccionando de los detalles. Pongamos la luz en algún lugar de aquí. Y vamos a traer el texto. ¿Cuál es el texto? Oh, no es visible. Por eso no puedo ver. Entonces voy a ir a buscar visibilidad en los detalles del texto. Se va a convertir en verdad. Y ahora tengo el texto. mí no me gusta esto, así que sólo voy a cambiar algunos ajustes. Lo voy a mandar al centro y al lado del centro. Bien. Creo que esto se ve mejor. Sí, ese lugar está bien. Podemos pintarlo a lo grande en otra ocasión. Ahora, vamos a comprobar si necesito volver a ponerlo en invisible, la visibilidad. ¿Correcto? Vamos a probarlo. Pasemos a esta puerta y no hay texto. Voy a cerrar la puerta. Y esto me pareció genial. Ahora, lo único que necesitamos es abrirnos para hacer esta puerta. Entonces comencemos con la creación del plano. Vamos a hacer click derecho, ir a clase Blueprint y seleccionar untorblueprint, porque no necesitamos poseerlo , no necesitamos moverlo Es sólo una entidad con alguna funcionalidad. Entonces actor plano, vaya a llamarlo PP puerta uniida. Uy. Tal vez una manera de. Entonces abramos este plano. En realidad, vamos a crear una carpeta para las puertas. Vamos a tener una carpeta llamada puertas dentro de los planos, y voy a arrastrarla y soltarla aquí Y vamos a traerlo al mundo. Vamos a fijarlo después. Y otra forma de abrir el plano además de hacer doble clic aquí sería desde el outliner, eligiendo el blueprint que quiero editar y si lo he traido al mundo, simplemente puedo hacer clic por aquí, Editar Blueprint, o simplemente puedo seleccionar Open Blueprint Editor de seleccionar Open Blueprint Editor de el Entonces voy a abrirla. Y para este plano, vamos a necesitar tres componentes Agreguemos una caja de colisión. Esto será detectar si el jugador está en rango o no, por lo que puede abrir la puerta o no. Y vamos a necesitar también una flecha Así que sabemos hacia dónde está orientada la puerta, que es la parte frontal entonces que es la parte trasera, y vamos a necesitar una malla estática Entonces para la malla estática, en realidad, porque no quiero estar buscando los activos. Ya que lo tenemos aquí, solo puedo seleccionar este navegar al perdón, no a esta flecha. Los detalles aquí, voy a de visibilidad, y voy a estar seleccionando la puerta. Y en la malla estática, puedo ver qué malla estática es la entidad de la malla estática. Voy a ir aquí, y aquí está la puerta. Ahora, voy a volver a mi plano y agregar malla estática, y ya ha seleccionado la puerta para mí. Genial. Ahora, es un poquito de bota P. Realmente no importa. Yo sólo voy a traerlo por aquí. Y el resto podemos movernos del propio mapa seleccionando el plano Eso es girado 90 grados porque el movimiento va a ser en el espacio relativo. Ahora bien, ¿qué significa esto? Cuando giro la puerta aquí, antes que nada, roto todo el plano Entonces, aunque girara la puerta de alguna otra manera, sería en el espacio local y mundial. Esto significa que lo estoy rotando en base a las coordenadas y al sistema cartesiano del cual se basa en el eje XY Z del mapa y las ubicaciones que podemos ver todo es. Por lo que la ubicación y rotación serían relativas a las coordenadas de este sistema. Pero lo que vamos a hacer es que vamos a estar rotando esta parte, que en realidad me aparenté con la flecha Ahora, asegúrate de que estas cosas no estén parentadas, y si eso sucede, no tienen una flecha aquí, simplemente la arrastramos y soltamos a la raíz Lo adjuntamos. No hacemos una nueva raíz. Entonces todo es una entidad por sí sola. Por ejemplo, si le pongo la flecha a la puerta y muevo la puerta alrededor, entonces estoy moviendo la flecha con ella. Si lo descargo, puedes hacerlo también. Como si algo está adjunto, si lo arrastras y sueltas sobre sí mismo, se desprende Entonces ahora si muevo la puerta, la flecha, como pueden ver, se queda ahí. Ahora, voy a estar moviendo esta puerta en una ubicación relativa, rotación relativa. Diferente a la rotación de actores establecidos. Como se puede ver, cuando muevo aquí al actor, el punto de pivote era el centro, el centro del actor. Mientras que quiero mover la puerta en base su propio punto de pivote sobre la rotación relativa en el plano Pero creo que estoy desviando. Creo que deberíamos verlo en acción, y dejaríamos éste para el siguiente curso, la siguiente lección. Entonces te voy a ver. Adiós. 10. Preparación básica para la interacción del jugador con las puertas: Bienvenido de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, terminamos nuestra configuración para nuestro texto de flujo BP, agregamos algún código que si el otro actor superpuesto tiene un componente que tiene la etiqueta P, y eso es lo que se superpone, entonces activamos la visibilidad. Para ello, agregamos una etiqueta a nuestro componente de cápsula de caracteres. Entonces en tercera persona, el plano tercera persona BP BP personaje de tercera persona En el componente cápsula, buscamos etiqueta. Y agregó la etiqueta P. Otro lugar que se podrían agregar etiquetas que discutimos es también actor. No lo demostramos, pero si c a class defaults y buscamos nuevamente la etiqueta, podemos encontrar que el actor tiene su propia pestaña para etiquetas, donde podemos ver también las etiquetas de otros componentes Entonces vamos a cerrar esto. Luego procedimos configurando el texto de flujo BP para la habitación contigua, y comenzamos a crear la nueva puerta, que es la puerta unidireccional BP Entonces en este plano, dejamos un poco de desplazamiento de la rotación Puedo ver. Esto debería ser cero. No menos cero, sino cero. Cambiamos un poco la ubicación porque el Pivot está un poco desplazado, y explicamos que vamos a estar moviendo la puerta en base al dístem cartesiano de este plano, que es el espacio relativo local y no el y no el Entonces rotación y escala de ubicación mundial. Sí, esta es una diferencia muy grande. La ubicación mundial y la ubicación relativa, la rotación mundial y la rotación relativa. Estos son muy escala por supuesto, importantes de distinguir porque, por ejemplo, si estuviéramos rotando, digamos, correctamente, la puerta en la palabra ubicación, digamos que esto estaba correctamente girado, por ejemplo, podríamos mover la puerta De esta manera, así pivota con el actor correctamente, y se abre así y usando la rotación mundial Bueno, esto significaría que esta puerta se abriría sólo de esta manera. Si quisiera hacerlo de esta manera, todavía no funcionaría. No funcionaría así. Subiría a la rotación mundial que la configuramos. Por lo que es importante distinguir esto. Así que volvamos aquí. Vamos a configurar esto para que esté en algún lugar en el medio. Está bien. Ahora bien, ¿qué vamos a hacer para animar esta tienda Vamos a ir a nuestro mapa tutorial. Vamos a robar la línea de tiempo desde aquí. Vamos a copiarlo y en realidad solo una línea de tiempo, y vamos a ir a nuestro gráfico y pegarlo por aquí. Ya que lo copiamos y pegamos, tiene nuestros valores dentro de 0-0 0.5 0-1 Entonces esta es nuestra unidad Alpha. Ahora bien, para hacer la ubicación relativa en comparación con el mundo, y es por eso que no copié esto, que es establecer la rotación del actor, y estamos poniendo un objetivo como este actor y dando una nueva rotación, necesitamos conseguir nuestra puerta, que es apuntalar la puerta trasera uno y establecer la rotación relativa. Es un nodo muy similar. Como pueden ver, también ha barrido en el teletransporte ya que éste sólo tiene teletransportarse, pero significa que está barriendo si no es Y vamos a conectar esto aquí. En el caso anterior, pasamos larpando a través de un rotador Pero en este caso, solo quiero hacer clic derecho aquí y dividir el rotador, y voy a simplemente larp a flote Entonces voy a larp aquí a partir del 02, creo que vayamos a la puerta Vamos a rotarlo. Creo que es -90 Abre hacia adentro -90. Bien. Podríamos haber visto la flecha aquí también. Tan original, entonces de cero a -90 de A a B. Ahora bien, ¿cómo llamamos a esto En el otro plano, solo usamos la colisión por aquí, y llamamos a la puerta abierta Entonces otra vez, podríamos haber usado la colisión. Vamos a traer es una caja de nuevo para que podamos traer incluso colisión comenzar superposición. Y podríamos simplemente decir que cuando el personaje tiene P. Entonces volvemos a poner una rama. La forma en que traje la sucursal tan rápido fue seleccionando B y haciendo clic. Esto trae una rama. Entonces, si es verdad, entonces juega. Y luego tenemos una puerta de colisión otra vez. Pero cuando chocamos con él, debería abrirse. No queremos hacer esto. Queremos presionar E. Entonces como no vamos a estar creando un sistema completo para que las entradas cambien los enlaces para agregar enlaces y todo, solo estaremos usando E para abrir puertas, lo que podemos hacer es usar el controlador del reproductor. Entonces voy a conseguir el controlador del reproductor. Voy a explicar en un segundo y habilitar la entrada desde el controlador del reproductor. El objetivo debe ser uno mismo y el controlador del jugador debe estar en el controlador del jugador. Ahora bien, la forma en que muevo esto fue presionando a troll y simplemente arrastrándolo y soltándolo donde quiera Si presiono Alt y hago clic, lo desconecta. Si tengo algo relacionado con el control, puedo conectarlo en otro lugar. Ahora bien, ¿qué es un controlador de reproductor y qué está habilitando la entrada? Un controlador de jugador en Unreal Engine es una parte del juego que procesa la entrada del jugador, como las acciones del controlador del teclado, y las traduce en comandos para el personaje del jugador o cualquier otro objeto del juego Actúa como un vínculo entre el jugador y la palabra del juego, básicamente. Normalmente, el controlador solo obtendría entradas directas, pero podemos habilitar la entrada de otros actores para permitirles reaccionar ante acciones específicas. Por ejemplo, aquí vamos a estar esperando que la acción E abra la puerta. Entonces para lograrlo, vamos a usar nuestra colisión por aquí. Voy a desconectarme presionando hacia fuera y haciendo clic en estas cosas. En realidad, sí necesito esto, así que voy a cortar y pegar. Y voy a conectar esto aquí. Entonces, si nuestro jugador ha chocado con un cubo, entonces habilitaremos la entrada aquí, Ops, error Esto debería estar aquí. objetivo debe ser uno mismo. habilitando la entrada a este actor a esta puerta y el controlador del reproductor es el controlador del reproductor. Pero cuando dejamos esta casilla, queremos no habilitar la entrada para desactivarla básicamente. Entonces voy a seleccionar la casilla. Voy a hacer clic en la superposición de final de componente. Vaya rápido haga clic. Voy a copiar y pegar esto. Voy a conectar esto aquí. Y va a copiar y pegar el controlador también y llamar deshabilitar entrada. Va a establecer el objetivo a uno mismo y conectar el controlador del reproductor. Entonces ahora, ¿cómo activamos E cuando se presiona E? Bueno, esto es fácil. Si pulsamos y tecleamos teclado, podemos ver que básicamente hay todos los botones del teclado, que si llamo E, vamos a encontrar E. Aquí está. Yo lo llamo, crea un evento por sí solo. Entonces como hemos habilitado la entrada, esto va a hacer algo. Demuéstralo por un segundo. Pongamos aquí una cadena de impresión. Dice hola. Entonces voy a jugar en el mapa. Si estoy presionando E ahora, no hace nada. Si voy al lado de la puerta y entro esta colisión y presiono E, dice hola. Si me voy, no vuelve a hacer nada. Entonces esto solo funciona mientras tiene habilitada la entrada. Ahora bien, si tuviéramos otras ejecuciones con E, tenemos el enlace padre de anulación, que anulará lo que sea que EE esté haciendo en otras cosas, y consumirá también entrada. También hay modificadores, como si quieres tener turno y E al mismo tiempo, todos modos, hay mucho al respecto Pero eso es básicamente un nodo de entrada. Para animar nuestra puerta, podríamos simplemente conectar directamente esto aquí Pero entonces sólo seríamos capaces de abrir nuestra puerta. Si voy así y presiono E, sólo puedo abrirlo. No puedo cerrarla. Pero creo que este es un buen punto de parada para este. Te voy a ver en la próxima. Adiós. 11. Codificación del sistema de puerta de interacción con el jugador: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, platicamos un poco sobre las rotaciones relativas y terminamos con nuestra línea de tiempo y establecemos la rotación relativa usando una vuelta en un flotador porque la X e Y no cambiarán Solo el eje Z, el eje Yo aprenderán de cero a -90 para establecer la rotación relativa Y siempre será en esa rotación. Entonces tenemos la flecha para decirnos dónde está el frente y hacia dónde se abrirá la puerta. Si quisiéramos abrirlo de esta manera, lo único que tendríamos que hacer sería cambiar este -90 a 90, y se abriría hacia los 90 grados Lo siguiente que hicimos fue habilitar la entrada con el controlador del reproductor a través de este blueprint y deshabilitarlo cuando comenzamos y terminamos solapamiento cuando nuestro jugador comienza y termina superposiciones usando la etiqueta de componente P. Luego demostramos un nodo de entrada, el botón E que cuando lo presionamos mientras estamos en el tubo de colisión, funciona y hace que nuestra puerta Sigamos haciendo que la puerta pueda abrirse y cerrarse. En algunas lecciones atrás, hablamos un poco sobre enumeraciones, que hay listas preestablecidas que no pueden cambiar durante el tiempo de ejecución Vamos a crear uno de esto porque el que mostramos ya existe del motor de Unreal, y se trata de dirección Podríamos usar esto, pero vamos a hacerlo un poco más avanzado para algunos otros usuarios también. Vamos a hacer clic y vamos a ir a Blueprint y desde Blueprint, vamos a elegir Ahora vamos a llamar a esta puerta E estado, y voy a abrirla. Por aquí, tenemos el botón que agrega enumeradores. Como decíamos, básicamente es una lista, y como puedes notar, los nombra diferentes porque no puede tener el doble del mismo enumerador Yo giro esto a cero, va a reventar un error. Numerador cero, nuevo enumerador cero ya está en uso. Vamos a tener abierto. Cerrar. Apertura. En realidad, una P, y cierres. Ahora, voy a ahorrar y voy a cerrar esto. Ahora, tengo esta lista por aquí, pero ¿cómo traigo el plano No puedo simplemente arrastrarlo y soltarlo? No puede crear un guiño a partir de este tipo de activos Entonces para hacer esto, voy a ir a nuestro stub variable y voy a presionar el botón más de aquí para crear una nueva variable e ir al tipo de variable por aquí y buscar el estado E D. Ojalá estuviera escribiendo y aquí está en la categoría enumeraciones IAM, es nuestra enumeración es nuestra enumeración Voy a dar click sobre esto y voy a nombrar a la variable también estado puerta. La forma en que lo hice fue dando clic aquí o siempre puedes presionar F dos y va a ir a Renombrar. Vamos a traer esto aquí y vamos a explorar un nuevo nodo. Este nodo es el nodo switch. Como dijimos anteriormente, el nodo switch necesita estar conectado a una enumeración específica, el switch on enumeration, básicamente, porque hay switches basados en enteros, por ejemplo, basados en Si escribimos switch on, se puede ver que todo con una E es una enumeración. Muchas cosas del Niágara, pero hay muchas variables para encender. La más utilizable es en realidad la cadena de encendido. Así podemos personalizar nuestros casos. Como caso podría estar abierto. Como si pudiéramos tenerlo con cuerdas, y podríamos tener lo abierto. Y entonces dependería de lo que es entrante de una cadena. Nuevamente, una cadena es un tipo de variable que puede tomar bien, básicamente texto, cualquier texto. Eso puede ser un número, puede haber una letra, puede haber un símbolo, cualquier cosa que sea un texto. También hay una variable de texto, pero está diseñada para un tipo diferente de uso, más para localizar contenido Está optimizado para mostrar diferentes tipos de textos si necesitan traducción y formato para diferentes idiomas. Pero para nosotros ahora mismo, esto es sólo un ejemplo porque vamos a usar una enumeración Entonces al presionar E, quiero que esto haga algo diferente basado en el estado de la puerta. Ahora, necesitamos establecer un valor predeterminado para esto. Estado. El primer valor que tenemos en nuestra enumeración es abierto, lo que no queremos Queremos que se cierre. Entonces lo voy a decir para cerrar y compilar de nuevo. Entonces el estado por defecto cuando se presiona es cerrado. Entonces, cuando la puerta esté cerrada, vamos a jugar desde el principio. Cuando la puerta esté abierta, vamos a dar marcha atrás desde el final. Mientras jugamos, en realidad podríamos cambiar el estado por aquí y decir que cuando pudiéramos conectarlo por aquí, y luego por aquí, y luego voy a duplicar esto y conectarlo por aquí y por aquí, y esto estaría cerrando y esto estaría abriendo. Entonces cuando estamos presionando E, si estamos en estado abierto, estamos cerrando la puerta y estamos invirtiendo la animación. Si estamos de cerca, estamos abriendo la puerta y reproduciendo la animación correctamente. Pero quiero demostrar el nodo do once. Entonces, como decíamos, esta actualización de la línea de tiempo se ejecuta constantemente. Esto significa que esto ejecuta todos los fotogramas, básicamente. Cada frame, se ejecuta lo que sea que salga este final de ejecución. Si lo hago una vez por aquí, significa que hará esta ejecución, y una vez que llegue a este punto, simplemente se detendrá aquí después de que la haya hecho una vez. Para hacerlo de nuevo, necesitaríamos reiniciar. Y si tengo clic en este botón de inicio Cerrar por aquí, esto significa que tendría que restablecerlo antes de que lo haga una vez, lo que sea que tengamos aquí afuera y complete. Entonces, esto quiere decir que si, por ejemplo, queremos cambiar, déjeme cortar esto. El abierto va al revés desde final y el cierre va a jugar desde el principio. Entonces es abrir y está cerrando. Sí. Ahora, voy a pegar esto aquí. Si quisiera cambiar esto mientras se ejecuta la línea de tiempo, tendría que hacerlo una vez, y tendría que restablecerlo cuando la línea de tiempo haya terminado. Entonces voy a poner nodo de lectura aquí. Voy a poner un nodo de lectura también aquí y lo voy a conectar aquí Ahora, puedo usar esta enumeración en lugar de esta para simplemente determinar dónde se cierra o se abre la puerta Entonces voy a cambiar una línea de tiempo. Y si es hacia adelante, significa que estamos abriendo la puerta. Si es al revés, entonces significa que estamos cerrando la puerta. Y esto se ejecutaría una vez, y cuando la línea de tiempo haya terminado, se restablecerá, por lo que es gratis volver a hacerlo la próxima vez. Vamos a probar esto. Vamos a jugar. Nos estamos acercando a la puerta. Nos estamos mudando aquí. Presionarlo para abrir, presionarlo para cerrar, y no pasa nada. Y el motivo es bastante sencillo porque al final, no especificamos si hicimos abrir o cerrar. Entonces lo que voy a hacer es que voy a ir a un nodo de secuencia. Ahora bien, ¿qué es un nodo de secuencia? Parece que va a hacer algunas cosas en un orden, lo cual lo hará, pero no significa que esperará a que termine una línea y luego pasará a la siguiente. Ejecutará todos los pines simul en un orden, pero dispararán casi simultáneamente Al igual que, si tuviera aquí una cadena de impresión que diga hola. Y tenía una cadena de impresión por aquí también. Eso dice, en realidad, vamos a numerarlo. Uno, dos. Vamos a mover esto un poco más alto. Voy a poner un retraso aquí. Y voy a poner otra cuerda por aquí. Digamos que esto es tres y esto sería cuatro. Entonces lo que se supone que vamos a ver aquí sería uno, dos, tres, cuatro. Pero lo que va a pasar es que vamos a ver uno, dos, cuatro, tres porque el tres tiene un pequeño retraso aquí. Hagamos esto 1 segundo. En realidad, 0.2 estaba predefinido el no tengo un número exacto, pero imagina si un fotograma tarda 16 milisegundos en renderizar, y hace todos los cálculos del juego Imagina lo rápido que se ejecuta cada nodo. Entonces 0.2 es tiempo de sobra. Vamos a probarlo. Vamos a presionar play, y necesito ir a la puerta para probarlo. Ves uno, dos, cuatro, tres. Se puede volver a ver en la bitácora, uno, dos, cuatro, tres. Esto nos dice que esto no espera termine una ejecución para ejecutar la siguiente, luego una, luego dos, luego tres. Voy a eliminar todo esto porque en realidad no es necesario. Y voy a quitar algunos pines de ejecución. Sólo necesitamos dos. Y conectemos este al reset, y vamos a duplicar esta funcionalidad por aquí. También conectemos la dirección al interruptor y cambiemos hacia adelante, va a estar abierto, y hacia atrás, va a estar cerca. Entonces ahora deberíamos poder ver la puerta abierta y cerrada. Sí. Sin embargo, falta algo. Se debe informar a un jugador que puede abrir y cerrar la puerta. Y para ser honestos, estamos muy cerca de la puerta para comenzar a abrir. Al igual que la colisión es muy pequeña. Entonces, cuando estoy aquí, esto sucede. Entonces creo que estas dos cosas van en la siguiente lección, y te voy a ver entonces. Adiós. 12. Diseña un widget de UI simple en Unreal Engine: Hola, y bienvenidos de nuevo a Unreal engine cinco Blueprint Mastery Door Systems y Anteriormente, terminamos con la apertura y cierre de la puerta. Creamos un estado. Entonces cuando estamos presionando E, cambiamos con base en el estado de la puerta usando esta enumeración E estado de la puerta, que tenemos abierta, cerramos abriendo y cerrando Y cuando la puerta está cerrada, invierte la línea de tiempo o cuando está abierta, reproduce desde el principio Demostramos a una vez nodo que mientras esto se está ejecutando, estamos haciendo esta acción una vez y estamos reajustando cuando la línea de tiempo haya terminado, y cuando la línea de tiempo haya terminado, estamos configurando el estado de la puerta para que esté abierta o cerrada Dijimos que la caja de colisiones aquí es un poco pequeña. Ahora, en vez de cambiarme a cada puerta, voy a simplemente ir por aquí y voy a seleccionar esta casilla, y voy a extenderla un poco más. Esto parece estar bien. A lo mejor un poquito más porque no quiero que esto sea demasiado porque si es demasiado, el jugador podrá abrir la puerta desde una distancia mayor de la deseada. Podríamos tener otros mecánicos verificando esto, pero por ahora, esto servirá. Por lo que las mecánicas más complejas incluirían trazas de líneas y comprobadores de distancia desde puntos específicos Consideremos esto fijo. Lo siguiente que debemos hacer es tener una manera de decirle al jugador que eres rango y abrir o cerrar la puerta. Entonces lo que usaremos es un widget. Vamos a crear un widget de blueprint que agregaremos a nuestra ventana gráfica, y cuando el jugador esté cerca de una puerta, dirá abrir o cerrar según el estado de la puerta Entonces comencemos por crear una nueva carpeta en la carpeta de contenido que llamaremos UI. Y voy a codificarlo por colores a un azul claro. Genial. Ahora, aquí dentro, voy a dar click, no voy a ir a blueprints porque aquí no hay blueprint de UI Yo categoría diferente, una categoría única llamada interfaz de usuario, que podemos ver fuente, pizarra, pincel, y otras cosas. Pero lo que queremos es un plano Widget. Al igual que con los otros planos, hay un montón de clases que podemos preestablecer entre las que podemos elegir Pero lo que queremos es el widget de usuario. Vamos a hacer click en esto y vamos a llamarlo WG puerta W JD, creo que por eso Y voy a abrirla. Ahora, al instante, podemos ver que esta no es una interfaz de blueprint habitual Esto es algo diferente. Bueno, no exactamente, porque estamos en la pestaña del diseñador. Por aquí, hay una pestaña gráfica, que es más familiar que cuando se compara con el diseñador. Tenemos, sin embargo, una diferencia de eventos. Tenemos preconstruir y construir en lugar de comenzar a jugar. Al igual que, si vamos aquí, hemos empezado a jugar y al actor de eventos comienzan a superponerse y tick es lo mismo. Ahora, el preconstructo es algo así como el guión de construcción Es como correr esto, pero no exactamente también. Demasiados detalles, creo. Vamos a centrarnos en la pestaña del diseñador por ahora, y vamos a pasar al código un poco más tarde. Entonces, ¿qué estamos viendo aquí? Aquí estamos viendo básicamente una representación visual de las resoluciones y cómo se ve nuestro widget en ellas. No se rompe en este momento porque no tenemos nada en el widget. Lo segundo que vemos es el talón de detalle y una paleta. Una paleta tiene algunos elementos de interfaz de usuario como un borde, como un botón, como una casilla de verificación Estos son los comunes, deslizadores de texto. También tiene algunos más avanzados, como características como la entrada de cuadros de texto, cuadros combinados, listas, formas de configurar realmente las imágenes Uno de ellos es el lienzo. ¿Qué es un lienzo? En definitiva, nos permite establecer una ubicación y escala en la ventana gráfica en el tamaño de pantalla que queramos Eso no quiere decir que necesariamente deba estar tomando toda la pantalla. Podría ser un lienzo que sea un widget más pequeño, pero es una referencia basada en el espacio. Digamos, por ejemplo, si traigo aquí un botón, puedo decir dónde está y qué tan grande es. Mientras que si no tenía el lienzo y solo traía un botón, entonces no hay punto de referencia para ello. Esto solo una resolución deshacer. Voy a borrar el botón. Básicamente, eso es lo que es un lienzo. Tiene muchos más detalles y características, pero en pocas palabras, eso es lo que es Para nuestro caso, estaremos usando algo muy sencillo además del lienzo. No vamos a estar usando botones ni nada. Solo estaremos usando algún texto. Y para que ese texto tome cierta forma, usaremos un cuadro horizontal porque queremos poner dos elementos de texto, uno que podría ser el botón a presionar y otro que sería el texto que dice abrir o cerrar. Así que incluso tenerlos separados ayuda si tuviéramos que cambiar el botón, y por supuesto, para cambiar el texto cerrar o abrir versus tendremos que escribir cada vez para escribir abrir, cerrar. Ahora sólo tenemos que escribir open o close. Pequeña diferencia, pero a mayor escala, haría la diferencia. Ahora que tengo la caja horizontal y la quiero anclar en cierto lugar, tengo esto como una flor aquí que le dice al motor, trate de colocarla en algún lugar por aquí. Hay mucha, mucha más funcionalidad a los anclajes, como si pudiera tener el ancla puesta en el medio y luego darle un offset a la caja que está basada en el medio Hay dimensionamiento de la caja, como queramos. Ahora mismo, no vamos a molestarnos con estas cosas. Simplemente vamos a hacer que se vea bien. Eso sería, hagamos la resolución un poco más correcta porque la había dejado entrar alguna resolución aleatoria que no es muy válida cada vez. Entonces lo voy a poner aquí. Es la resolución. Creo que si consideras que el jugador está por aquí, creo que si aparece tal vez más al centro izquierdo hacia. Sí, creo que ese lugar está bien. Y voy a mover este ancla. Voy a romper el ancla también en esquinas y ponerla por aquí. Sí, está bien. Eso está bien. Donde debería aparecer el abrir o cerrar y el botón que usamos. Tenemos nuestra caja horizontal, y necesitamos poner algunos elementos en ella. Voy a elegir un texto. Voy a agregarlo a la caja horizontal, y voy a agregar otra. El primer texto sería fácil. Yo diría solo E. El segundo texto, en realidad, pongamos también este símbolo por aquí y un espacio y un espacio antes del símbolo. Sí, se ve mejor con este símbolo. Ahora, lo siguiente, debería decir abrir o cerrar. Entonces digamos abrir y cerrar. Se ve bien. No podemos dejarlo como está, pero juguetemos un poco con él. Digamos que quiero cerca para estar un poco más a la izquierda. Lo que vamos a hacer en vez de cambiar tamaños para rellenar y alineaciones horizontales y todo, sólo vamos a ir aquí abajo, que es el render transform y simplemente moverlo un poco hacia la izquierda, por 20, 20 parece bien, tal vez 15 renders traducción Esta es la opción, y esto la mueve un poco hacia la izquierda o hacia la derecha, arriba y abajo. Puedes escalarlo, puedes sellarlo, puedes inclinarlo. Esto en realidad inclina todo porque no he elegido esto. Esto necesita cambiar 15. Sí, creo que se ve bien. Vamos a verlo en acción. Vamos a agregarlo a nuestro viewpoard. Voy a compilar y guardar y veamos nuestro widget. La pregunta que viene es, ¿cómo le traigo un widget, por supuesto, a mi viewpoard, que son solo unas notas y está ahí La otra pregunta que viene es, ¿ dónde pongo este código? ¿Dónde uso un código que ponga en juego un widget? Bueno, podríamos ponerlo en la puerta. Esto significa que cada puerta necesita crear un widget. No es un comportamiento muy óptimo. Podría ponerlo en el plano de nivel. Esto significa que este widget existiría en este nivel, y solo se crearía aquí. Pero vamos a tener un nivel al que estamos haciendo la transición, y necesitamos que este widget se sostenga ahí, siendo ambos niveles Así que podría usar la instancia del juego, que se extiende a través de todo el juego. Pero si tuviera menús principales, si tuviera otros niveles que no usaría este widget, esto significa que este widget estaría en la instancia siempre. Entonces el denominador común que puedo usar entre dos niveles ahora mismo con lo que estamos tratando sería el modo de juego, porque este nivel estará usando este modo de juego, el nivel de transición estará usando ese modo de juego. Entonces, poner el código aquí ahora mismo para este ejemplo, tiene sentido. Entonces voy a navegar a nuestro modo de juego desde la configuración del mundo. Es la tercera persona. Podríamos encontrarla aquí también. Entonces dentro de tercera persona, planos, modo de juego en tercera persona, si se abre así, no es problema Esto es solo básicamente los valores predeterminados del plano del modo de juego Si vamos a, digamos, por ejemplo, nuestra puerta y vamos a nuestros valores por defecto de clase, podemos ver estos detalles aquí Entonces como no hemos abierto el plano, este es el plano solo de datos No le hemos hecho nada más. Muestra sólo los valores por defecto. Podemos dar click por aquí, abrir Full Blueprint Editor, y toda, podemos ver el script de construcción, viewport, que en modo juego, tiene usos muy específicos y no nos molestarán Y lo que necesitamos es el gráfico de eventos. Y lo que vamos a hacer es llamar al evento start play que se ejecuta cuando comienza el juego, y vamos a crear widget. Ahora, para la clase, vamos a seleccionar la puerta del widget, y para el jugador propietario, vamos a obtener el controlador del reproductor Podríamos tener diferentes widgets que pertenezcan a un policía local, por ejemplo, y su dueño cambiaría en función del índice de jugadores. Si lo dejo como e, no podremos ver el widget porque acabamos de crearlo. Acabamos de hacer una variable a partir de ella. No se ha llamado en nuestra opinión. Para hacer esto, necesitamos agregar a viewpot para que esto traiga nuestro widget a la vista Entonces voy a compilar y guardar e ir a Bloqueo de Tutorial y presionar Reproducir. Y aquí podemos ver nuestro widget. Básicamente, lo que estamos comprobando es si está en una buena posición cuando queremos abrir y cerrar la puerta. Creo que si aparece ahí mismo, está bien. Puedes colocarlo en cualquier otro lugar que quieras. Y creo que esto es para éste. Te voy a ver en la próxima que estaremos implementando la mecánica para mostrar y ocultar el widget. Adiós. 13. Programación de visibilidad de widget de UI basada en acciones del jugador: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, terminamos terminando la parte de diseño de nuestro widget, que he cerrado. Entonces no, no tengo aquí esto. Creamos un plano Widget. Lo nombramos WG Door. Agregamos un panel de lienzo a nuestra jerarquía. Bueno, este es un punto que no expliqué bien. Por aquí, tenemos la jerarquía, que nos muestra qué elementos están dentro del widget. Es algo así como la pestaña de componentes en blueprints, pero para widgets, y la jerarquía aquí nos dice qué widget es primero, segundo, que pertenece a quién básicamente Además, no expliqué mucho la caja horizontal. Creo que es algo que se explica por sí mismo. Permite que los widgets se coloquen horizontalmente. Si pasamos el cursor sobre permite que el widget se coloque en un flujo horizontalmente, si cubrimos algo, si seleccionamos algo y lo colocamos, nos dará una punta de herramienta al respecto Vamos, haz la cosa. Yo simplemente no quiero. Entonces sí, básicamente, en la paleta, es más fácil ver las puntas de las herramientas aquí. Tiene que estar en el icono mismo. Hemos creado el widget. Hemos agregado a nuestra ventana gráfica a través de la creación y la agregamos a la ventana gráfica a través del modo Por el evento comenzar a jugar, creamos el widget, y luego lo agregamos al viewpod Ahora, lo alojamos en el modo juego porque va a ser compartido entre niveles, y queremos que este widget exista en todos los niveles. Pero no queremos estar agregando el widget en la ventana gráfica cuando comience el juego Queremos agregarlo a viewport cuando lo llamamos. Lo que haremos es promover esto a una variable, que es nuestra referencia de widget. Cuando estamos creando, estamos obteniendo un valor de retorno, que es una referencia a lo que creamos. Y voy a nombrar a este wg dot Rep. como pueden ver, el tema con las referencias es un poco importante en Llamando referencias, teniendo formas hacer referencia a algo como lo teníamos en el plano de nivel que estábamos haciendo referencia los cuadros desencadenantes cuando tenemos la referencia al otro componente, que preguntamos si tiene una etiqueta Las referencias son una cosa. Las referencias son el Alfa y Omega, si se quiere, de la programación orientada a objetos. Ahora tenemos almacenada una referencia del widget. Entonces vamos a crear un evento personalizado. Voy a llamar a este Widget. Voy a conectarlo a la ventana gráfica de salida, y voy a traer la referencia por aquí y conectarla al objetivo Porque si acabamos de salir de la ventana gráfica, probablemente desencadenaría un error o no haría nada porque no habría target porque target en sí significa un modo de juego No es un widget, por lo que no puede agregarlo a la ventanilla. Pero la referencia del widget en Cam se agregó a la ventana gráfica y esto funcionará correctamente Ahora lo siguiente que hacemos es crear otro evento personalizado y llamar a este widget remove dot. Voy a arrastrar un cable de la referencia del widget y decir remove from parent. Esta es la forma en que estamos eliminando widgets de la ventana gráfica, una de las formas Así que vamos a utilizar estas dos funciones. Vayamos a nuestra puerta unidireccional. Vayamos a Gráfico de eventos. Vayamos a nuestra colisión. Entonces, cuando estamos colisionando y comenzamos a superponerse, deberíamos mostrar nuestro widget Para llamar a esto, necesito tener acceso al modo de juego, así que necesito una referencia al modo de juego. Por suerte, Unreal Engine tiene una buena manera de obtener el modo de juego Se llama modo de juego G. Pero esto devuelve un valor genérico. Tenemos un modo de juego específico. Tenemos el modo de juego en tercera persona, o tenemos el modo de juego puertas o podemos tener cualquier tipo de modo de juego. Esto devuelve solo un modo de juego genérico, referencia de objeto basada en modo de juego. Para comprobar si es nuestro modo de juego, vamos a necesitar lanzar. Entonces vamos a lanzar a juego en tercera persona. Como decíamos, el elenco está preguntando algo, ¿ Eres esta cosa, básicamente, este objeto es este tipo de objeto? Entonces voy a convertir a un elenco puro, que simplemente quita el pin de ejecución y lo hace un poco más fácil. Si logramos y nuestro modo de juego es el modo de juego porque el éxito es como cuando era elenco impuro, fue como elenco fallar, elenco triunfar Ahora tenemos un BollonT nos dice si tuvo éxito o no. Entonces, si logramos, entonces podemos obtener alguna información. Podemos obtener algunas funciones y eventos del modo de juego en tercera persona. El evento que queremos ahora mismo es agregar el widget. Por aquí, y solo puedo arrastrar otro cable y decir, quitar el widget de punto y conectarlo por aquí. Voy a compilar y guardar y vamos a probarlo. Vamos a ir a la primera puerta, se abre, segunda puerta, tenemos un widget, y se está quitando. Bonito. Pero lo que pasa es que nuestro widget no corresponde a lo que debería estar diciendo. Al igual que, ahora mismo, debería estar diciendo abierto y ahora mismo, debería estar diciendo cerrado, lo cual es correcto, pero sólo es 50% correcto. No siempre es correcto. Entonces arreglemos esto. Y para ello, vamos a pasar a nuestro modo de juego en tercera persona, y vamos a crear una función. Entonces, ¿qué es una función? Básicamente, es un conjunto de acciones o lógica, si se quiere, eso es reutilizable. Se puede usar varias veces y se puede llamar simultáneamente muchas veces, y ejecutará tareas específicas cada vez. Al igual que un evento si se llama de nuevo, suelen ser tú la nueva llamada, mientras que las funciones simplemente se ejecutarán de nuevo. Un ejemplo de eso prácticamente serían múltiples colisiones superpuestas, como por ejemplo, muchas balas te golpearon en el mismo fragmento de un segundo Eso estará señalizado en orden, cuál golpeó primero y cuál lo segundo, etcétera, si se tratara de funciones, todas correrían ejecutadas Serán apilados e inmediatamente ejecutados. Entonces básicamente podríamos haber creado un evento, pero para este escenario, creamos una función. Ahora, otra cosa de las funciones es que por supuesto, tienen entradas, como podemos ver en sus detalles, pero también pueden tener salidas. Por ejemplo, si quisiera algo para saber si tuvo éxito o no, podría tener una salida de un bollian y como pueden ver, creó un nodo de retorno Y ese booleano podría ser verdadero o falso, por ejemplo, si algo que no escuché tuvo éxito o no Voy a eliminar esto y voy a eliminar la nota de devolución porque no la necesitamos. Vamos a compilar y guardar tal vez un detalle más sobre las funciones y eso será todo. Funciones, no pueden tener tiempo cosas dentro de ellas. Pueden llamar externamente cosas de tiempo, pero no pueden tener un retraso aquí. No podemos tener una línea de tiempo aquí, no podemos tener temporizadores. Entonces el tiempo es algo que no puede estar en una función. Ahora bien, nuestra función, ¿qué debemos hacer? Llamemos a esto actualizado, widget, texto. Y vamos a necesitar una nueva entrada de tipo string. Voy a llamarlo con jet text. Ahora lo que esto va a hacer, vamos a conseguir nuestra referencia Widget D. Voy a conseguirlo aquí, y voy a recibir mensajes de texto. En realidad, vayamos a nuestro Widget. Vayamos a nuestro diseñador. Ahora, queremos cambiar este texto por aquí, el texto que dice cerrar. Si lo vemos encima de los detalles, hay nombre que podemos poner o en realidad podemos ponerlo aquí, pero voy a elegir estar aquí. Llamemos a este Widget texto. El texto de mi widget. Ahora, junto a él, hay un botón llamado Is variable. Si no se hace clic, entonces esto significa que es estático No se puede modificar, mientras que si hago clic es variable, se puede modificar a través del código. Hay muchas razones para que esto suceda detrás de escena, pero no entremos en demasiados detalles. Volvamos a nuestro modo de juego, no al gráfico de eventos en nuestro modo de juego en la función Actualización del widget, y vamos a obtener el texto de mi Widget. Y a partir de aquí, voy a poner texto como hicimos con los renders de texto en el texto de flujo BP. Voy a conectar esto a, esto es un texto. Podemos cambiar esta cadena a un texto. Y se puede conectar directamente. Si la dejara cuerda, no importaría. Lo traduciría auto a cadena de texto. Pero por qué no dejar esta parte un poco más clara, y solo voy a cambiarla a texto y conectarla aquí. Entonces tenemos una función que cambia nuestro texto. Necesito compilar el widget porque giramos este dos es variable. Necesitaba ser compilado, t es guardar también, y ahora está bien. Creo que este es un buen punto de parada. Vamos a continuar en la siguiente implementando esta nueva función. Adiós por ahora. 14. Actualización de widgets de UI con entradas de blueprint externas: Hola, y bienvenidos de nuevo a Unreal NGInFB Blueprint Mastery Door NGInFB Blueprint Mastery Door Systems y portales interactivos. Anteriormente, añadimos la funcionalidad para agregar el widget de puerta o eliminar el widget de puerta en función de si estamos colisionando con la colisión de la puerta Para ello, usamos dos eventos personalizados creados, y usamos el viewpod at y los quitamos del padre y los conectamos a la referencia del widget que almacenamos en la reproducción de inicio Luego fuimos a nuestra puerta de ida BP, y al comenzar la superposición y al final los eventos de superposición de la colisión, agregamos el widget ador y eliminamos la puerta en consecuencia. Al obtener el modo de juego y lanzarlo a nuestro modo de juego en tercera persona. A continuación, creamos una función en el modo de juego en tercera persona, que llamamos update Widget text. Ahora, esta función tenía una entrada de texto Widget, y establece el texto a través de la referencia del Widget de Puerta, y obtuvimos mi texto Widget de él. Ahora, continuemos creando el sistema que actualizará el texto del Widget. Para ello, vayamos a nuestra puerta de ida y creemos otra función a la que volveremos a llamar update widget. Texto. En esta función, obtendremos nuestro modo de juego, y podremos hacer el modo de juego y el modo de juego, y podríamos lanzar el modo de juego en dos tercera persona y convertirlo a puro. Pero lo que podemos hacer ya que lo estamos usando tan a menudo en este plano, podemos ir a nuestra jugada de inicio Podemos copiar este código desde aquí. En realidad, sólo voy a cortar este código de aquí, ir a empezar a jugar, pegarlo aquí. Voy a conectarlo como nodo de casting esta vez. Y voy a promover esto a una variable. Y como puedes ver, Área lo nombró ya como BP en tercera persona Juego Viejo muy conveniente. Voy a compilar, y dice que no puede compilar porque el objetivo de estas dos funciones se desconectó. Esto es lo que quise decir antes también ese objetivo se refiere a quien se supone que debe hacer esto. Y yo ahora mismo, no tiene una función de widget ador. Aunque lo hiciera, el objetivo el objetivo predeterminado de esta función sería objetivo es BP tercera persona. Entonces incluso si creo un evento personalizado, agregue el jet. Se puede ver que esto seguirá golpeando un error porque el objetivo es P. Llamamos a esto desde el modo de juego. Para que el error desaparezca, solo traeremos nuestra referencia de nuestras variables de aquí y vamos a conectar esto aquí y conectaremos esto aquí. Y creo que esta variable de cadena no se usa en ningún lado. Siempre podemos encontrar referencias. Mi nombre. No, no se usa en ningún lado, así que voy a borrar esto, y voy a compilar de nuevo, y ahora se ha ido el error. Volvamos a nuestro Widget update Widget text. Ahora, no necesitamos esto. Podemos traer solo nuestra referencia de modo de juego porque esto está almacenando básicamente el modo de juego, esta instancia del modo de juego, y vamos a actualizar texto rígido. Ahora bien, tenemos nuestra función por aquí, necesitamos poblar qué tipo de texto va a aparecer Entonces para ello, vamos a conseguir el estado puerta. Vamos a encender el estado Dor porque esto es lo que controla y en realidad podemos mostrar otro nodo. Esto sería mucho mejor. Conectemos esto por aquí. Hay otro nodo en el que podríamos crear algún texto y luego agregar el texto allí y establecer ese texto. Podríamos hacer como básicamente una cadena o esta vez un texto. Y podríamos tener un montón de setters basados en el switch. Entonces podríamos tener este sobre este caso, este sobre este caso, este sobre este caso, y luego conectar ese texto por aquí. Ahora, la otra cosa que podemos hacer, hay otro nodo que podemos usar en variables específicas que se llama select. Select nodes tiene un índice comodín, lo que significa que puede convertirse en algunos tipos de variables Entonces, si presiono aquí, podemos ver los tipos de variables en las que puede llegar a ser. Y como pueden ver, puede convertirse en una enumeración. Entonces esto significa que puedo conectar esto aquí, y esto me da una opción para cada elemento para cada enumerador, básicamente Entonces cuando el enumerador está abierto, me da esta opción. Cuando está cerrado, me da esta opción. Ahora, vamos a sentir lo que necesitamos para cada caso. Para abrir, necesitamos cerrar. Para cerrar, necesitamos abrir y para los otros dos, no necesitamos nada porque no estamos interactuando con la puerta en ese punto. Entonces vamos a compilar, guardar, y vamos a probarlo. En realidad, no, tenemos que bacalarlo primero porque solo crearlo no significa que lo codifiquemos. ¿Cuándo debería actualizarse el widget? Por supuesto, antes lo agregamos a la ventana gráfica. Entonces voy a simplemente brotar de las funciones, voy a arrastrarlo y soltarlo aquí y conectarlo por aquí. Voy a copiar pegarlo y conectarlo a continuación también. Y el widget debería actualizarse también cuando bien, básicamente, los siguientes puntos que debemos actualizar es cada vez que estamos cambiando de estado, ya que nuestro estado afecta al widget, lo que se supone que diga el widget. Entonces voy a arrastrarlo y soltarlo aquí y voy a conectar los dos cables aquí. Y como pueden ver, puedo tener dos ejecuciones conectándose a un nodo. Ahora voy a hacer lo mismo. Voy a copiar esto y pegarlo aquí a estas dos ejecuciones. Una sería la actualización, y la otra sería la meta. Ahora, vamos a probarlo. No presionar play se abre abierto. Tenemos esa E allá que no está haciendo exactamente lo que queremos. No desaparece. Pero, um si, vamos a arreglar eso. Entonces lo que vamos a hacer es bastante sencillo. En lugar de actualizar el widget en la actualización de líneas de tiempo, lo que vamos a hacer es que vamos a estar eliminando el Entonces voy a copiar este código por aquí, BP modo de juego en tercera persona y quitar puerta y pegarlo al final de um de la línea de tiempo de la actualización de la línea de tiempo. Lo siguiente que tenemos que hacer es después de actualizar este texto Widget, también debemos agregarlo al portagym de vista de Cypress paste Voy a presionar copy, y voy a pegar esto aquí y conectar esto aquí. Y esto debería funcionar. Vamos a probar. Y funciona. Impresionante. Creo que esto es para éste. Te voy a ver al siguiente. Adiós. 15. Programación de un sistema de puerta batiente de dos direcciones: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery Door Systems y Anteriormente, terminamos con nuestro sistema de widgets para mostrar cerrar o abrir en función de si nuestra puerta necesita abrirse o cerrarse. Así que creamos esta función, actualizamos el texto del Widget dentro de nuestra puerta unidireccional VP que está llamando a la función que creamos en la lección anterior, actualizamos el texto del Widget desde el modo de juego y rellena el texto correspondiente al estado de la puerta. Ahora. Debido a que tenemos esta molesta E por aquí en el widget, terminamos agregando algún código para eliminar el widget de puerta mientras la puerta se abre o se cierra y también agregándolo cuando la puerta está abierta o cerrada, cuando la animación ha terminado desde la línea de tiempo Entonces ahora sigamos a la puerta de al lado. Entonces voy a hacer visible el nivel tres y pasar por aquí. Esta puerta debe abrirse frente a donde mira el jugador. Entonces para ello, vamos a duplicar nuestra puerta actual. Pero vamos a ahorrar también. Usted vio este pequeño asterisco por aquí, este asterisco blanco. Déjame hacer un cambio. Dónde está la puerta, aquí está la puerta. Vas a ir a esto aquí. Entonces aparece el asterisco. Ves este asterisco por aquí significa que algo cambió en el plano y hay que guardarlo, que este activo no se ha guardado que este activo no se ha Esto es lo que significa este asterisco. Voy a volver a guardar, Control Shift S para guardar todo, y voy a duplicar este plano Yendo a llamarlo BP, oponérselo del jugador D. La ortografía podría ser correcta, podría no serlo. Nunca lo sabremos. Entonces voy a abrir esto, y este es el mismo plano Esta es una versión duplicada del plano que teníamos. Pero antes de empezar a hacer algunos cambios, que no serán muchos. Vayamos al mapa tutorial y traemos uno nuevo del texto flotante. Y seleccionemos nuestra luz puntual. Vamos a traerlo por aquí, por aquí. Creo que por aquí está bien. Además, la colisión de la caja de colisión se está haciendo más grande. Eso está bien. Y por último, el texto. Pero, llenemos primero el texto. Seleccionemos el plano. Vamos a mi valor de texto. Esta puerta se abre frente al jugador. Todo bien. Y ahora vamos a seleccionar el texto. No puedo ver el texto. Es porque es invisible. Sí, en lugar de hacer esto cada vez, solo modifiquemos una cosa en el plano. Abramos el plano Al comenzar a jugar, llevemos el texto y pongamos la visibilidad en falso. Y vayamos a mi render de texto y hagamos visibilidad. Cierto. Vamos a compilar y guardar de nuevo en nuestro mapa. Ahora podemos ver el texto, y cuando comience el juego, desaparecerá. Voy a traer esto por aquí. Voy a volver al plano, ir a ir al texto para darle formato. Aumentemos un poco el tamaño aquí. Entonces turno entra aquí. Turno entrar aquí, y Tada es seleccionada de nuevo. Sí, esto está bien. A lo mejor un poco más pequeño. Ahora bien, debido a que esto se escala en un segmento, básicamente en un punto de ajuste, puedo desactivar esto desde aquí arriba y simplemente hacer esto y habilitarlo de nuevo para habilitar los puntos de ajuste Así que vamos a traer nuestra nueva puerta por aquí también. Entonces opuesto en jugador, ve a traerlo aquí. qué lado debería girarlo de esta manera o de esta manera, de esta manera. Mantengamos el mismo bot. Sí, eso se ve oka Sí. Está bien. Así que vamos a la funcionalidad. No mucho va a cambiar. Encontremos la puerta. Vamos a cerrar los otros planos que ya no necesitamos. No necesito esto. Guarda el modo de juego. Sí, justo la puerta opuesta, y eso será todo. Ahora bien, lo que queremos cambiar es básicamente en la línea de tiempo, ya sea que este ángulo sea -90 o 90 basado desde donde esté parado el jugador Podríamos tener múltiples colisiones y comprobando desde cada lado si el jugador está en este lado o este lado Pero hay otra manera más rápida hacer esto y más fácil. Vamos a crear una función para calcular la dirección. Y en esta función, vamos a conseguir la ubicación de nuestros actores, así que consigue en ubicación. Y necesitamos la ubicación también del jugador. Para conseguir al jugador en este escenario, podemos simplemente llevar al jugador a casa y a partir de esto, también en realidad, podemos simplemente duplicar esto y conectarnos aquí. Entonces estamos teniendo dos ubicaciones, el jugador y la ubicación de la puerta. Ahora, la puerta tiene un lado frontal porque tenemos la flecha. Y si abrimos al jugador, el jugador también tiene un anverso. Ahora, volvamos a nuestra dirección de cálculo. Desde estas dos ubicaciones, necesitamos encontrar la dirección desde la puerta hasta el jugador. ¿Está detrás de mí o está frente a mí? Así que para obtener dirección único vector de dirección único a partir de dos. Esto produce un resultado vectorial, lo que significa que en función de dónde estoy parado, la Y y X y Z podrían ser menos, podría ser más. Demostremos esto. Voy a hacer cadena de impresión. Voy a conectar esto aquí y vamos a jugar. Pongamos esto aquí. Ahora, vamos a pasar por la puerta. Éste se abre. Olvidé conectar esta función. Vamos a conectarlo al presionar E, en realidad. Entonces voy a calcular la dirección. Aquí. Entonces cuando estoy presionando, ves que todas las variables excepto Z son menos. Pero si voy por aquí, vuelven a ser menos. Bueno, ahora la X es positiva, sin embargo, porque estoy del otro lado, si tomamos en consideración los centros, aquí mismo, la X es más, mientras que aquí, es menos. Así que realmente no puedo decir cuál debería ser. Si voy del otro lado, la Y también va a estar cambiando. Si tuviera esta tienda por aquí, entonces la Y obtendría menos, la Y obtendría más por aquí. Entonces esto realmente no termina el trabajo. Lo que tenemos que hacer es crear un producto punto. Y lo que es devuelve un producto. Esto realmente no explica tanto. Entonces, ¿qué es básicamente un producto punto? Es una manera de comparar dos direcciones. Aquí tenemos la dirección de nuestro actor, y la siguiente dirección sería el vector hacia adelante. Obtener vector adelante. Aquí está. Esta no. Lo siento. El actor adelante aquí está, consigue actor adelante vector. Entonces básicamente, este es el frente de la puerta. Entonces tenemos esta dirección y tenemos la dirección de la puerta al jugador. Entonces tenemos esta dirección y el avance de la puerta. Ahora bien, en base a estas direcciones, el producto punto, nos dice cuánto están apuntando estos dos vectores, estas dos flechas en la misma dirección. Si el producto punto es un número positivo alto, están apuntando en una dirección similar. Si es un número negativo, están apuntando en dirección opuesta. Y si es cero, están apuntando en ángulo recto entre sí. Básicamente, lo que hace es calcular el coseno del ángulo entre ellos. Eso es lo que hace el producto punto, y nos da un flotador como retorno negativo o positivo. Y esto es lo que vamos a usar para comprobar si es mayor o igual a cero. Y si es mayor o igual a cero, vamos a crear una nueva variable. Voy a llamar a esto ángulo abierto. Vamos a cambiarlo a una carroza. Voy a traer un setter por aquí. Y nuevamente, vamos a hacer un nodo select, select float. Ahora, ya ve, si arrastro el cable, selecciono, me sale éste, selecciono flotador y obtengo este selecto. Este tiene la tarjeta blanca, mientras que el otro tiene un lingote por defecto Entonces voy a conectar esto aquí. Voy a conectar el resultado de nuestro mayor error igual a cero de nuestro producto punto. Y esto sería, creo que A sería -90 y B estaría 90 adelante de la puerta es positivo, por lo que se abre enfrente Sí, creo que eso es todo. Ahora, donde vamos a conectar esta dirección de cálculo. Si lo conectamos al principio por aquí, no vamos a hacer eso. Va a estar calculando dirección cada vez. Entonces, cuando vaya frente a la puerta para cerrarla, se va a dar un error. Voy a cambiar la dirección. Pero si lo conecto solo cuando la puerta está cerrada, conectémosla para jugar desde el principio y claro, trae el ángulo por aquí. Ahora bien, de esta manera, sólo está calculando cuándo la puerta está cerrada, y cuando va de abierta a cerrada, va a usar el mismo ángulo que calculó antes. Ahora, vamos a probarlo. Podríamos estar trayendo el inicio del jugador con nosotros. Bien, se abre de esta manera, se cierra correctamente. Se abre de esta manera, se cierra correctamente. Entonces ahora tenemos una puerta que se abre y se cierra. Bien, lo paso por la física del juego. Ahora, tenemos una puerta que se abre y se cierra, como donde está mirando el jugador. Bien, creo que esto es para éste. Vamos a continuar por la siguiente puerta doble. Va a ser lo mismo pero doble en la siguiente lección. Adiós por ahora. 16. Crea y sincroniza puertas dobles con planos: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery, Door Systems y portales interactivos Anteriormente, terminamos con nuestra puerta de doble vía, básicamente, nuestro opuesto a la puerta de apertura del jugador. Lo que hicimos básicamente fue que creamos una función de dirección calculada que a partir de la ubicación del actor y la ubicación del jugador, obtuvimos una dirección unitaria. Calculamos el producto punto con nuestro vector directo actor, y comparamos si es mayor o igual a cero para calcular el nuevo ángulo. Luego agregamos este nuevo ángulo a nuestro larp en nuestra línea de tiempo como objetivo Ahora, hagamos lo mismo cuatro en puerta doble. Hagamos visible el nivel cuatro. Y vamos a traer en realidad, puedo traer este. Sí, puedo traer esta. Vamos a traerlo aquí. Vamos a mover la luz de esta manera esta vez. Y también el texto. Cambiemos el nombre del texto. Seleccionemos el plano. No puedo ver nada. No seleccioné el plano. Seleccioné la raíz. Entonces esta es una doble ley. No. Vamos a moverlo un poco. Tenemos que hacer lo de entrar también. Nosotros una variable. Oh, me escondí de mí. Entonces creo que esto está bien. Y vamos a crear nuestras nuevas puertas de planos de puerta, y vamos a duplicar lo contrario de jugador Ahora, llamemos a esta puerta BPW. Y vamos a abrirlo, compilar y guardar. Entonces, lo que tenemos que hacer aquí es bastante sencillo. Vamos a duplicar esta malla por aquí. Voy a hacer click y duplicar o podría copiar y pegar, y eso sería todo. Y entonces lo que vamos a hacer es conseguir esta malla por aquí. Vamos a necesitar algo de espacio. Así que voy a mover esto por aquí. Va a duplicar este conjunto relativo de rotación relativa, y el larp y vamos a conectarlo por aquí Y necesitamos al Alfa. Necesitamos conectar el objetivo, que es la nueva malla. Y lo que tenemos que hacer también es multiplicar esto por menos uno porque vamos a negar la rotación Entonces también necesitamos arreglar los mensajes estáticos por aquí, y es hora de seleccionar la nueva puerta. Entonces voy a compilar y guardar. Voy a volver al mapa. Voy a ir a nuestra puerta Tuggle por aquí. Va a seleccionar la primera parte. Lo voy a encontrar en el navegador condat a través esta opción de malla estática por aquí, presionando este botón, y ahí está Voy a volver a nuestro plano, seleccionar la primera puerta y usar el activo seleccionado del navegador de contenido Ahora vamos a hacer lo mismo en la siguiente. Y selecciona la siguiente tienda e importa esta. Ahora bien, por lo que veo, hay una especie de conjunto enfrente aquí. Entonces este sería éste y éste sería éste. Creo que están muy bien espaciados. Ahora vamos a moverlos al centro del plano. Sí, está bien. Aumentemos también el tamaño de la colisión. Eso está bien allá. Y vamos a probarlo porque creo que esto podría necesitar ser opuesto. Así que volvamos a nuestra habitación y llevemos la nueva puerta para que la rote. Existe una gran posibilidad de que veamos alguna animación divertida porque cambio las puertas alrededor. Pero si no hacemos pruebas, no lo sabemos. Entonces voy a traer a los jugadores que empiecen de nuevo por aquí para que no corremos por todo el nivel. ¿Qué es la tienda? Oh, debo haber borrado esto por accidente, tráelo aquí. Bien. En fin, comencemos por aquí. Juguemos. Se trata de una puerta doble abierta, cerrada. Sí, se abre enfrente. Se abre hacia mí en lugar de alejarse de mí. Sí. Entonces podríamos dejarlo como o simplemente podríamos intercambiar estos dos. Bastante seguro que había una manera de hacerlo más rápido. Menos clics. Pero de todos modos, sí. Y tenemos una puerta doble. Ahora bien, está bien que tengamos una puerta doble, pero empecemos a agregar algunos sonidos a nuestras puertas. Agreguemos un sonido de apertura y cierre. Entonces de abierto, queremos reproducir sonido a D. Este es un nodo que reproduce un sonido que podemos definir el sonido, pero no podemos manipularlo después. No tiene salida para guardar el sonido. Entonces es solo que tiene muy pocos ajustes por aquí. Vamos a usar el multiplicador de tono, y para el sonido, vamos a encontrar la puerta abierta. Puerta abierta a, esta. Entonces ahora, lo que vamos a hacer con el pitch, vamos a hacer un float aleatorio en rango para hacer que el tono de apertura sea un poco más alto, normal a mayor. Y lo más alto sería un punto digamos 15. Y vamos a duplicar este código. Si lo pongo después del cálculo o antes, realmente no importa, pero lo voy a poner después. Hagamos algo de espacio aquí. Y en lugar de multiplicar el pitch con flotadores aleatorios de uno a 1.5, vamos a hacer Entonces 0.8 a, digamos, 0.99, lo que lo haría sonar como más pesado, como un tono más bajo, básicamente Así que vamos a probar esto. Sí. Tenemos un sonido en nuestra puerta. Pan. Creo que esto es para éste, en el siguiente, vamos a empezar con nuestra puerta de acceso directo. Adiós por ahora. 17. Programar una puerta de acceso directo para un acceso más rápido: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery door Systems y Así que la última vez terminamos con nuestra puerta doble. Ahora, abramos el siguiente ojo. Aquí estamos en nuestra puerta de acceso directo, que será una puerta que de un lado, no se abre. Dice cerrado. Y cuando vayas del otro lado, puedes desbloquear. Para ello, necesitamos hacer un pretrabajo muy pequeño. Tenemos que volver a nuestra enumeración I estado Dor, y necesitamos agregar un enumerador, y llamémoslo bloqueado. Voy a ahorrar. Pero como realmente no va cambiar nada en las puertas anteriores, como tener encerrado aquí no hace nada porque esta puerta no se puede cerrar con llave. Pero incluso en el widget de actualización, no escribe non aquí. Esperaba decir que no algo así, pero parece que lo está manteniendo vacío. Entonces en realidad no afectó. Pero tal vez en otros sistemas, agregando a los enumeradores después de haberlos usado, no es recomendable Ahora, agregamos la categoría bloqueada en un enumerador. Vamos a la carpeta de la puerta, y volvamos a duplicar lo contrario del jugador. Llamemos a esta puerta corta BP. Vamos a abrirla. Nuevamente, necesitamos cambiar algunas cosas, pero no mucho. Entonces lo primero que haremos es separar la parte de animación y sonido a un evento por sí solo, para que podamos llamarlo. Sólo quiero poner esto aquí arriba. Y voy a crear un evento personalizado y llamarlo animación de puerta. Y conéctelo al interruptor. También queremos cambiar el estado predeterminado de la puerta a bloqueada. Compilar y guardar. Y ahora necesitamos crear un mecanismo para comprobar si la puerta está cerrada con llave. Y esto es bastante sencillo. Vamos a traer nuestra enumeración. Vamos a hacer un operador igual num, no igual porque lo convertimos a un byte, y queremos que sea un num igual, así podemos elegir entre los enumeradores Entonces voy a elegir encerrado. Voy a poner una rama otra vez con B y dar click. Y cuando se presiona, voy a comprobar si está bloqueado. Necesitamos algo de espacio por aquí. Todo bien. Entonces si no está cerrada, sólo vamos a animar puerta Animación de puertas. Vamos a tocar la animación de la puerta. Pero si está bloqueado, necesitamos crear un mecánico o las reglas de bloqueo. Entonces vamos a crear un evento para clientes. Llámalo mecánico de cerraduras para perros atajos. Ya. Y tenemos que llamarlo por aquí. Entonces atajo, mecánico de cerraduras. Ahora, cada vez que estamos presionando E, estamos comprobando si está bloqueado, si está bloqueado, el mecánico está jugando. Comprobemos si el jugador está en la parte delantera. Y lo que podemos usar es básicamente la dirección de cálculo. Sólo necesitamos básicamente el tobillo que se calcula. Pero quiero demostrar algo más. Quiero copiar este código de aquí, lo que nos dice que si está por encima o igual a cero, está al frente, si es menor, está en la parte posterior. Y lo que voy a hacer es crear otra función. Y voy a llamar a esta función es anverso, signo de interrogación. Y voy a hacer esta función pura, y las funciones puras siempre necesitan una salida. Y voy a cambiar el nombre de esta salida a la parte frontal. Voy a pegar el código que copiamos. Y conectar este operador este resultado por aquí, y tenemos esta función. Ahora, vamos a llamar a esta función. Voy a ir a nuestro mecánico de puertas más corto y traer esta parte frontal. Como puedes ver, es realmente diferente en comparación con las otras funciones. Veamos la dirección de cálculo. Tiene una entrada de ejecución y salida de ejecución. Este es simplemente verde. Es igual que el controlador get player. Es como que el componente tiene etiqueta. Se ve así. Esto se debe a que las funciones puras solo ejecutan algunas operaciones sin establecer algo dentro establecer ninguna variable o cualquier cosa dentro de aquí. Como puede ver, es solo una función de expresión matemática pura, y tiene una salida de un booleano Nosotros no establecemos nada. Podríamos estar configurando variables locales porque las funciones tienen estas variables locales por aquí que solo existen en la función mientras se ejecuta y luego desaparecen casi pero cada vez que la función se ejecuta, crea estas nuevas variables, y cada vez que las usa, las libera después, lo cual es muy óptimo. Así que las funciones puras no deberían tener cosas que se están estableciendo a menos que sean variables locales. Este es el currículum de la misma. Y claro, no requieren de ejecución, y tienen resultado de alguna acción. Entonces voy a presionar una sucursal aquí, voy a conectar esto aquí, y estamos preguntando si estamos de frente. Nuevamente, esto podría hacerse si los ángulos son -90, hubiéramos estado en la parte delantera Entonces solo quería demostrar esta función pura. Y también podemos poner un no aquí y no bullan y negativo Entonces lo verdadero significará desbloquear, y lo falso significará no desbloquear. Si es falso, estamos en la parte frontal. Si es cierto, no estamos en la parte delantera. Estamos en la parte de atrás porque lo ponemos esto no aquí, lo que hace que este bulliano sea opuesto Si es cierto, queremos establecer el estado de la puerta. Y esto estaría cerrado porque después de que abrimos la puerta permanece cerrada. Entonces podemos tocar un sonido. Toca sonido creo que se llama Dog and Lock. Sí. Y como se supone que esta puerta está cerrada con llave, vayamos a la puerta y tenemos que demostrársela al jugador de alguna manera. Va a seleccionar una puerta, y voy a cambiar el material a creo que es puerta una cerrada. Sí, aquí está. Puerta uno cerrada, entonces es roja. Y cuando lo desbloqueemos, debería cambiar de color. Vamos a ir a par graficar por aquí cuando lo pongamos a cerrar, tocamos el sonido desbloqueado y vamos a llegar a nuestra puerta. Vamos a establecer material. Y luego vamos a seleccionar la puerta uno. Y como se puede ver, hay un índice de elementos. Yo DR tenía más materiales, entonces pude seleccionar el índice apropiado para cambiar. Pero solo tenemos un material, así que simplemente cambiamos el índice de elemento cero. Lo siguiente que debería pasar es actualizar el widget porque pasará de bloqueado a abierto básicamente. Y tenemos que poner aquí también que está diciendo bloqueado. Cuando la puerta está cerrada, el widget dice bloqueado. Pero, ¿y si estoy parado en un sitio que puedo desbloquearlo? Debería estar diciendo desbloquear. Entonces para ello, vamos a hacer una selección. Voy a hacer un texto selecto. Como puedes ver, ya teníamos esta opción, la que tiene un Bleian si B, pick A, si A es true, y la que es select, que tiene el nodo wild Asegúrate de usar el que tiene un booleano. Voy a traer otra vez el frente este. Voy a conectarlo aquí. Y si es de frente , digamos, parece encerrado desde el otro lado. Y si estamos del otro lado, debería decir desbloqueado. Ahora, compilemos y guardemos. Entonces que actualizamos correctamente. Lo que queda por hacer es hacer algo cuando el jugador intenta abrirlo, presiona E, la puerta está cerrada y está de pie del lado equivocado. Entonces lo que vamos a crear es una animación de traqueteo de puerta. Pero vamos a hacer esto en la siguiente. Creo que esto es suficiente para éste. Te voy a ver entonces. Adiós. 18. Agregar efectos visuales a una puerta de acceso directo: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery Door Systems y Anteriormente, comenzamos con nuestra puerta de acceso directo. Agregamos enumerador, un nuevo enumerador a nuestro estado puerta, el estado bloqueado Vimos que no cambió nada en nuestro código porque no se recomienda agregar nuevos enumeradores después de que ya lo hayas usado en un montón de lugares, pero no nos importó porque tenemos un código muy pequeño, y actualizamos el widget para nos importó porque tenemos un código muy pequeño, decir, no en la puerta doble en la nueva puerta de acceso directo Actualizamos para decir, si está en la parte frontal del jugador, parece bloqueado, si está en la parte trasera, desbloqueado Y creamos esta es front side pure function con el código que usamos en la dirección de cálculo. También separamos la animación de la puerta de presionar E, lo que lleva a verificar si la puerta está cerrada. Si está bloqueado, está jugando a nuestro mecánico Trcetlock. Si no lo es, es reproducir la animación. Cuando estamos en la parte trasera de la puerta, estamos desbloqueando la puerta y estamos cambiando el material porque configuramos el material para que sea uno con un resplandor rojo, pero ahora cuando lo desbloqueemos, será el normal Pero lo dejamos fuera sin crear un sonajero. Entonces, vamos a crear el sonajero. Hagamos un nuevo evento personalizado. Llamemos a este sonajero de puerta de evento personalizado. Y aquí volveremos a necesitar una línea de tiempo. Sólo voy a copiar esta línea de tiempo por aquí, y voy a presionar play desde el principio. Pero creo que sí tenemos un sonido para un sonajero, así que voy a tocar el sonido con di primero y luego tocar de principio a línea de tiempo Y creo que el sonido se llama sonajero. Sí, señal de traqueteo de puerta. Aquí estamos. Ahora, vamos a resolver algo. ¿Cuánto tiempo debe sonar la puerta? Creo que 0.5 está bien. Hagámoslo un poco más. Digamos 55. No 0.55, no sólo 55. Yo sonajero por 55 segundos. Bueno, depende de la persona que esté tratando de abrirla. Digamos 0.55, y pongamos el valor a cero porque al principio y al final, debería estar en la misma posición Al igual que el jugador está tratando de abrirlo, pero realmente no puede. Ahora bien, ¿cómo vamos a crear el sorteo? Bueno, para mí, la solución en estos momentos es bastante simple, pero el sonajero no va a ser realmente perfecto, pero va a ser un sonajero Yo solo voy a persift y solo haga clic en puntos aleatorios por debajo de uno y por encima de menos uno y tal vez acercarlos un poco más Digamos que está empujando. Y veamos, hace un tirón aquí, y luego hace un gran empujón. Y sigue empujando esta manera y luego suelta y luego vuelve a arrastrarse, y luego vuelve a empujar, una última vez No lo sé, algo así. Se puede jugar mucho con él. Lo que podemos hacer para que sea un poco más suave podría usarse la función automática, y como puedes ver, la hace más suave. Pero en mi opinión, tener duro de ida y vuelta podría verse mejor para alguien que intenta abrir una puerta. Voy a dejarlo así. Si quieres, puedes seleccionarlos todos y hacer lo automático, seleccionándolos y haciendo auto para interpolar entre los puntos Ahora bien, ¿qué hacemos en la actualización con este Alfa? Bueno, claro, vamos a larp. Voy a larp. Este será Alpha 0-1 0.5 Eso es una coma 1.5. Y cero a 1.5. Entonces estos son los grados de la rotación. Yo sólo voy a copiar el nodo de rotación también y éste, la malla de la puerta, también, la referencia de la puerta. Ahora, voy a conectar esto aquí. Ahora bien, debido a que usé valores negativos por aquí, menos de cero, este 1.5 también estará contando como un punto negativo negativo como un punto de ajuste imaginario sobre el valor negativo. Entonces esto va a ir y venir de esto. Y si fuera más grados, creo que no se vería tan bien, no es que se vea muy bien ahora mismo, pero es más normal tener pequeños grados por aquí. Ahora, una última cosa antes de ir a la prueba, conectemos el sonajero de la puerta de aquí Vamos a llamarlo traqueteo y compilemos y guardemos, y vamos a jugar No he añadido la puerta en el mapa. Debería faltar algo. Vamos a agregarlo en el mapa. Ahora bien, esta es la puerta doble. Esta es la puerta de acceso directo. ¿Dónde está la flecha frontal por aquí? Podríamos cambiar el color de la flecha, para que no coincida con el artilugio, este artilugio de aquí o hacerlo un poco más grande y grueso, pero Para ello, solo tienes que ir a los componentes del plano, seleccionar la flecha, ir a sus detalles Ahora, para mí, esta configuración fue creada para algo diferente. Sólo voy a cambiarlo para que la jugabilidad sea sabia. Una puerta de acceso directo tiene más sentido. Voy a seleccionar todo esto. Voy a empujarlos hasta aquí. Los va a hacer un poco más altos y empujarlos hacia arriba. Voy a borrar esto. Voy a traer esto por aquí. Quizá por aquí. En esto no tienes que hacer. Es solo para mí, tiene más sentido un atajo para molestar al jugador dando vueltas por las cosas Por lo que tener que hacer esta distancia en comparación con esta distancia es mayor. Entonces el jugador piensa, Bien, tal vez debería cerrar la puerta como si realmente mereciera la pena abrir la puerta, yendo de aquí a aquí, instantáneamente y luego dando vueltas por todas En fin, temas de desarrollo. Vamos a progresar. Vamos a traer aquí al jugador. Probemos la puerta. Bien, es traqueteo Parece encerrado desde el otro lado. Sí, voy por aquí. Si vamos todo este camino, ¿puedo saltar de aquí? No. Bien, lo desbloqueo. Nunca volveré a hacerlo de esta manera. Voy a ir directo a la habitación contigua. En realidad, todo está desbloqueado ahora mismo, así que no puedo ganar el juego. Pero de todos modos, creo que esto es para éste. Vamos a seguir en el siguiente con la creación un interruptor y una puerta que se abra con ese interruptor. Adiós por ahora. Nos vemos entonces. 19. Crea un plan de palanca para desbloquear puertas: Bienvenido de nuevo a Unreal Engine five, Blueprint Mastery, door Systems y portales interactivos Anteriormente, terminamos con nuestra puerta de acceso directo. Creamos un evento personalizado, luego tocamos un sonido, luego creamos una nueva línea de tiempo y, en base a esta línea de tiempo, volvimos a establecer la rotación relativa. Y nosotros llamamos a este evento por aquí. Ahora, es el momento de profundizar un poco más en este proyecto. Vamos a abrir el Nivel seis, y es hora de que nuestra puerta se esté comunicando con un interruptor, solo algo de información extra antes de continuar. Todo lo que hemos creado son objetos. Y cuando estábamos creando un nuevo plano, estábamos seleccionando una clase Esta es la puerta de clase BPW. Esta es la puerta unidireccional clase BP, etcétera, etcétera. Lo mismo va para esto también, no para la enumeración. La enumeración es solo una variable. Es una enumeración. Entonces, ¿por qué estoy hablando de clases? Una definición inteligente sería que son objetos con propiedades y comportamientos específicos que permiten a los desarrolladores crear múltiples instancias. Eso significaría que podemos tener dos de esta puerta. Tienen el mismo comportamiento, tienen las mismas propiedades, y son instancias completamente diferentes de esta clase. Diciendo todo esto, lo que hemos hecho hasta ahora, por ejemplo, al principio por aquí, usamos las referencias de clase para hacer algo en el plano de nivel Usamos la clase puerta de aquí para rotar a este actor. En otros ejemplos, en realidad no llamábamos a ningún otro actor. Pero nuevamente, un ejemplo sería el casting que hacemos para el jugador en las colisiones En realidad, no hacemos casting. Hicimos casting al principio aquí. Esto nuevamente, requiere de la clase. Pide la clase. ¿Eres la clase de personaje de tercera persona de BP? Si eres de esta clase, te estoy sacando alguna información. Lo que necesita el siguiente paso, esta puerta es algo que llamamos interfaz de plano Voy a llegar haga clic y vaya a Blueprint y vaya a Blueprint Voy a llamar a esto BI Ds. Ahora bien, ¿qué es una interfaz de blueprint? Esencialmente, es una forma de ejecutar funciones en diferentes clases que pueden implementar su propio código. No es exactamente común, pero puedo llamarlos a cualquier clase que implemente creo que sería mejor mostrarlo como ejemplo. Una cosa más, es una de las formas más óptimas para la comunicación de planos Al igual que un plano necesita comunicarse con otro plano y no se conocen exactamente No saben de qué clase son el uno al otro. Duplicemos nuestra puerta cerrada, nuestra puerta de acceso directo. Voy a duplicar esto, y voy a llamar a este interruptor de puerta. Entonces ahora, volvamos a nuestras puertas VI y la abramos. Y a medida que lo abro, se ve que parece un plano, pero tiene en el otro lado la pestaña M Blueprint y Esto se debe a que aquí sólo podemos ver una función, la que nos creó. Si agrego más funciones, podemos ver otra función. Y la única gráfica que existe aquí son estas funciones, básicamente. Lo cual, como puede ver, no tienen ejecución. La ejecución se creará en el blueprint que los estará alojando. Entonces voy a borrar esta. Voy a nombrar esta puerta de desbloqueo. Ahora bien, lo que podemos hacer aquí además de nombrar una función, podríamos poner entradas y salidas y decir que esta función se ejecuta siempre así Siempre tiene estas entradas y las salidas. Vamos a guardar, compilar, y vamos a nuestro switch, switch, éste. Entonces, ¿cómo implementar la interfaz por aquí? Vamos a ir a nuestros ajustes de clase. Vamos a ir a interfaces. Vamos a presionar AD y vamos a buscar puntos BI. Ahora voy a compilar, y como pueden ver, apareció una nueva categoría en las interfaces top my Blueprint Y si abro esto, podemos encontrar la puerta de la cerradura. Y si hago doble clic en él, creamos un evento para ello. Ahora bien, si esto tuviera una salida, convertiría en una función y yo entraría en la función. Ahora bien, ¿qué pasa cuando abrimos la puerta? Bueno, cuando abres la puerta, tenemos ese código por aquí. Sí. No vamos a necesitar toda esta mecánica, así que sólo voy a eliminar esta parte, el atajo de bloqueo. Necesitamos el sonajero de la puerta para tomar la posición del mecánico de la cerradura de puerta de acceso directo, que ya no existe. Y necesitamos este código. Vamos a cortarlo y pegarlo por aquí. Y el material es el correcton. Entonces, en cuanto a codificación, esta puerta está lista porque cuando presionemos E, pasarán dos cosas o la puerta se desbloqueará y se abrirá o cerrará, o la puerta se cerrará con llave, y sonajero Como pueden ver, estamos llamando de la nada a este evento de puerta abierta. Esto se debe a que lo llamaremos a través del otro blueprint a través del switch con el uso de la llamada de interfaz Ahora vamos a crear ese switch de Blueprint. Vamos a ir al Navegador de contenido. Vamos a ir a nuestra carpeta Blueprint. Vamos a hacer click derecho y crear un nuevo actor. Voy a llamarlo interruptor BP. Y vamos a abrirlo. Comencemos con los componentes. Agreguemos, por supuesto, una caja o lesión. Agreguemos un texto. Render en realidad, no. No necesitamos una licitación. Necesitamos dos mallas estáticas. Entonces voy a seleccionar malla estática y voy a duplicar esto. Ahora, para la primera malla estática, compilemos, guardemos, volvamos a nuestro mapa. Vayamos a nuestros apoyos, y seleccionemos este de aquí, que es el de la palanca de utilería Vamos a atarlo. Bien, volvamos al interruptor y vamos a aplicarlo. Ahora, para la segunda malla estática, vamos a hacer lo mismo los ellos arriba, seleccionar el segundo, vincularlo, volver al switch, y agregarlo por aquí. En realidad, agreguemos una flecha porque sí, eso pensé. Estos son una especie de mal pivotado. Entonces voy a girarlos 90 grados y entregarlo es una palanca, no un interruptor. De todas formas. Y también, voy a rotar esto 90 grados de esta manera. Entonces mira hacia arriba porque vamos a estar animándolo para que baje. Comparemos y guardemos. Y ahora sí necesitamos alguna funcionalidad de las puertas. Así que voy a ir a cualquier puerta realmente no importa. Voy a ir a doble puerta ahora mismo. Voy a encontrar comenzar a jugar, y voy a copiar este modo de juego de tapa y convertirlo en una variable. Y voy a ir caja al interruptor y pegarlo por aquí. Y esta variable, como pueden ver, no existe. Cuando una variable no existe, es gris. Para que exista, podemos simplemente crear una variable por aquí y nombrarla o simplemente podemos hacer crear una variable por aquí y nombrarla o simplemente podemos clic derecho sobre ella y crear variablu como modo de juego en tercera persona y ya está hecho Lo siguiente que voy a hacer es unparent esta flecha de la malla estática Pero eso no es lo que quería decir. Lo que quería decir era que voy a seleccionar esta la de malla estática, que es la palanca que vamos a girar. Y en la jugada de inicio, la voy a traer aquí y voy a conseguir una rotación relativa. Así que no voy a tener que calcular nada. Sólo voy a almacenar esta variable desde movible y conectarla por aquí Entonces vamos a usar esta variable ahora para rotar el interruptor, el hígado. Pero antes de empezar a animar, terminemos de copiar el comportamiento que queremos También queremos el comportamiento de colisión. Así que voy a conseguir todo esto por aquí, voy a controlar, y voy a pegarlos por aquí. Ver, actualizar el texto del Widget. Necesitamos a estos dos. Así que solo voy a crear una función coincidente, confirme. Pero esta función es un poco vacía. Pero no importa porque necesitamos una diferente para hacer cosas diferentes esta vez. No es una puerta. Entonces lo que básicamente haremos es crear una variable, llamarla vendida y traer una sucursal por aquí. Si estamos resueltos, vamos a obtener nuestro modo de juego en tercera persona y vamos a eliminar widget de puerta de widget. Bueno, es un widget de hígado en este momento, pero lo llamamos widget de puerta. No importa. Y si no se resuelve, entonces vamos a actualizar el texto. Y tipo de uso. Entonces el jugador sabe que puede usar el gatillo. Y esta funcionalidad ahora se copia, y también copiamos el texto del widget de actualización al mismo tiempo. Un recordatorio rápido. Lo que esto hace es que cuando estamos superponiendo con el jugador, estamos habilitando entrada en este plano Estamos actualizando el widget y lo agregamos a la ventana gráfica, o lo eliminamos y deshabilitamos la entrada cuando terminamos de superponer Creo que esto es suficiente para éste. Te voy a ver en la próxima. Adiós. 20. Implementación del desbloqueo remoto de puertas con la comunicación de blueprint: Bienvenido de nuevo a Unreal Engine five, Blueprint Mastery, Sistemas de puertas y Anteriormente, terminamos con nuestro interruptor de Puerta. Creamos una interfaz de blueprint que explicamos es la forma blueprints se comuniquen cuando no saben quién es el otro blueprint, qué tipo de más el otro blueprint es, y lo implementamos en nuestra puerta de interruptor BP yendo a la configuración de clase e implementándolo en interfaces implementadas implementándolo Presionamos anuncio y lo implementamos. Luego obtuvimos el evento Unlock Door que creamos en la interfaz de Blueprint, y conectamos la cadena de eventos que queremos que sucedan cuando la puerta está desbloqueada Bueno, ahora no es una puerta. Bueno, es una puerta, en realidad. Y luego fuimos y continuamos cambiando el evento de prensado para siempre traquetear si está bloqueado, y si no está bloqueado, desbloquearemos reproducir la animación de desbloqueo La animación abierta. Luego continuamos y creamos el switch BB que copiamos la funcionalidad de superposición de la colisión de caja. Agregamos la colisión de caja. Agregamos dos medidas estáticas también y una flecha. Y por lo que puedo ver, la flecha se gira erróneamente. Voy a restablecerlo a default. Ahora es correcto. Sigamos con la animación del switch. Entonces vamos a usar la E del teclado. Y lo primero que vamos a preguntar es el switch shot? ¿Es el interruptor? ¿Se ha girado realmente el interruptor? Si no lo ha hecho, entonces vamos a decir que tiene porque esto pasará sólo una vez y va a reproducir la animación. Ahora, por aquí, vamos a actualizar widget. Entonces deja de mostrar el uso del texto, y vamos a reproducir sonido. Que vamos a jugar con el terreno de juego otra vez. Vamos a hacer una carga aleatoria en rango. Y vamos a pasar de 0.8 a uno. Y el sonido sería, creo que hay un interruptor. No, se llama palanca alguna vez P. Aquí estamos. Y ahora necesitamos una línea de tiempo. Entonces una línea de tiempo. Vamos a entrar en esta línea de tiempo. Vamos a crear un nuevo camión de flujo. Vamos a sentarnos a hacer clic y crear dos puntos. El uno será por 0.15, y será uno, y el otro sería cero, cero. Ahora, voy a presionar estos dos botones para ajustarlo horizontal, verticalmente, y voy a presionar como fotograma clave. Además, esta vez, voy a seleccionar ambos, y voy a usar la curva automática. Entonces el movimiento es un poco más suave. Ahora, cuando se reproduce la línea de tiempo, antes que nada, necesitamos un poco de espacio. Vamos a necesitar cambiar la rotación de la palanca. Así que vamos a conseguir nuestra malla estática. Vamos a establecer la rotación relativa. Voy a conectar esto aquí y voy a alertar y voy a usar la rotación relativa que tenemos. Voy a conectar el Alfa aquí. Y para la B, lo que voy a hacer es que voy a hacer el rotador Voy a ir a -90, y voy a romper el rotador Ningún eje, lo siento. Y voy a core roll y pitch para permanecer igual, porque lo giramos alrededor para mirar hacia la flecha. Entonces ahora mismo, mantendrá la misma rotación que tuvimos, y cambiará la Z a -90 También voy a seleccionar el spot ordenado para que haga un pequeño movimiento. Lo siguiente que vamos a hacer es que vamos a conseguir de nuevo, la malla estática y vamos a fijar el material. Entonces cuando terminamos y ha terminado la animación, siembra los apoyos sobre el material, lo que vuelve este amarillo a verde Ahora, la parte interesante, ¿cómo enviamos el mensaje a la puerta? Bueno, como dijimos, tenemos esta interfaz de blueprint que puede mandar un mensaje a cualquier actor que lo tenga Puede mandar un mensaje a cualquier actor, básicamente. Pero si el actor tiene la interfaz blueprint, hará algo con ella. Si no lo hace, no hará nada. Entonces voy a crear una nueva variable por aquí, y voy a tenerla del tipo actor. Entonces esto significa que puede ser cualquier actor. Cualquier actor que pueda seleccionar y poblar esta variable puede convertirse en el objeto al que estoy enviando el mensaje Voy a llamar a esta puerta actor. Y recuerda la instancia editable. Voy a hacer click en él y exponer en spawn, claro, voy a compilar y decir, ahora, voy a llevar el interruptor y la puerta al nivel Traamos el interruptor aquí y llevemos la puerta también. Esa no era la mejor ubicación. Pongámoslo por aquí. Creo que esa es una altura agradable, un lugar agradable. Puedes colocarlo lo que quieras. Ahora, voy a seleccionar la caja de colisión y voy a traerla un poco adelante. Hazlo un poco más grande. Entonces, cuando el jugador está aquí adentro, pueden interactuar con el interruptor. Ahora bien, ¿cómo obtenemos esa referencia? Por aquí, no encontraremos por aquí. Lo siento, he seleccionado plano. Yo había seleccionado la caja. Así que volvamos al plano. Por aquí en los detalles, podemos encontrar a este actor de puerta. Puedo usar este pick actor de SN. Y puedo seleccionar cualquier actor que quiera. Como ahora mismo, seleccioné el muro. Puedo seleccionar esta historia, pero no va a hacer nada. Enviaremos este código que vamos a implementar. Básicamente, vamos a codificar hacer esto. Sólo vas a conseguir al actor y decir mensaje de apertura de puerta. Y como pueden ver, tiene este pequeño sobre por aquí. Esto significa que envía este mensaje. Ahora, podría preguntar si este actor sí implementa la interfaz. Podría seleccionar la interfaz que quisiera, vidor y si no pudiera poner una rama aquí, y si no tuviera la interfaz, entonces no enviaría el mensaje básicamente. También podría preguntar si es actor válido por si me olvido, por ejemplo, de seleccionar un actor y esta variable está en blanco. Podría tener una cadena de impresión aquí, cadena de impresión, switch no tiene actor. No es un interruptor. Es un hígado. A lo mejor debería renombrar este blubrid. Vamos. Entonces voy a llamar a esta puerta del hígado. Voy a ir aquí y ponerle nombre a estos dos hígado. Bien. Entonces esto haría bastante seguro que tenemos un actor y tenemos también la interfaz implementada a ese actor. Podemos tener otro mensaje de error aquí que diga que el actor no tiene interfaz. No implementa interfaz. Y ahora podemos tener dos códigos de error. Voy a compilar y guardar. Voy a ir por aquí. Voy a rotar esta puerta a la rotación por cobrar y colocarla ¿está bien? Quizá un poco más alto, y está bien. Ahora, vamos a traer también el texto que describimos las puertas. No hemos puesto uno aquí también. Entonces hagámoslo. Vamos a traer un nuevo texto bajo. Vamos a poner el mensaje, ir por aquí y teniendo alguna flecha, algunos piden flecha. Y vamos a rotar el texto. Vaya, no un plano, el texto en sí. Y tráelo aquí. Lo haré un poco más pequeño. Y también traer la luz. Bien, y ahora la colisión Presionemos play. Bien, funciona. Yendo por aquí. Estoy cerrando la puerta, viniendo por aquí. Y el interruptor va a nuestro lugar equivocado, lo arreglaremos, y la puerta no se abre porque antes que nada, no seleccioné la puerta en el actor del interruptor. Entonces voy a seleccionar esta puerta esta vez, y vamos a ir a la palanca, no cambiar y cambiar esto. Entonces no es Ya lo que queremos, y debe ser pitch. Entonces voy a conectar esto aquí y s -90 aquí. Vamos a traer esto también por aquí. Entonces, de nuevo de manera equivocada. No de la manera correcta. Entonces no son 90. Son 180, y son más 180. La tercera vez es el encanto. Yay. Conectar animación. Ahora, la puerta se abrió, y podemos seguir adelante. Entonces vamos a traer el texto aquí ahora que funciona, vamos a traer uno nuevo. Voy a traer un texto flotante. Y voy a poner por texto. Usa la palanca para abrir la puerta. Todo bien. Y en el turno entrar para ir una línea por debajo. Voy a seleccionar el texto. Voy a moverlo por aquí. Ahora, esta vez, voy a llevar la luz por encima del hígado. Entonces este lugar se ilumina. El jugador ve a dónde tiene que ir. Un poco de diseño de juego, aunque no sea necesario. Siempre es bueno tenerlo. Y voy a aumentar esto aquí. Voy a traerlo por aquí. Sí, aquí está bien. Esta habitación está lista. Ahora, vamos a seguir en el siguiente con el uso de dos palancas para abrir una puerta, pero de una manera diferente este momento, la palanca envía un mensaje a la puerta que dice desbloquear. El siguiente será lo contrario. La puerta estará preguntando a las dos palancas, ¿Estás resuelto? Te voy a ver entonces. Adiós por ahora. 21. Crea mecánica de rompecabezas de múltiples botones para sistemas de puertas: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery, Door Systems y Anteriormente, terminamos con nuestra puerta de hígado, básicamente. Creo que al final lo llamamos palanca. Sí, puerta de hígado. Aquí no se actualizaba porque no fecha nombres automáticamente. Para que podamos actualizarlo. Además, una cosa que me di cuenta es que en el texto del widget de actualización, no debería decir parece desbloqueado. Voy a borrar esto, sólo voy a decir bloqueado. Y eso podría ser. Entonces ahora terminamos con la puerta del hígado. Lo que hicimos fue que agregamos algunos textos también, y terminamos con la parte de animación del hígado. Y agregamos algunos mensajes de error también por si acaso el actor de puerta no está configurado. Ahora, sigamos a la siguiente parte. Hagamos visible nuestro Nivel seis, creo, siete, nuestro nivel siete, y este es el punto de inflexión después, vamos por el camino. Comencemos con la actualización nuestra interfaz de planos para perros Vamos a añadir una nueva función llamada SOD. Esta función, vamos a usar una salida, y vamos a llamarla SOD Esto lo usaremos a nuestro hígado. Entonces vamos a ir a nuestro hígado e ir a configuración de clase y agregar una interfaz que es puntos BI. Ahora, vamos a ir a interfaces. Vamos a compilar realmente primer plano de colisión del nombre de la interfaz debido al booleano Llamemos a esto booleano se vende. Sí, no se puede tener la variable del mismo nombre dos veces, y si pertenece a la interfaz, también pertenece al blueprint y esto crea un problema Tengo que compilar esto primero, y ahora éste, y es Uh, vamos a hacer doble clic resuelto y traer el resuelto y conectado aquí. Entonces ahora, siempre que se solucione sea frío, vamos a devolver nuestra variable I solved. ¿Dónde llamamos a esto que resolví? Vamos a nuestra nueva puerta. Entonces vamos a duplicar la puerta del hígado. Voy a llamar a esta puerta multirompecabezas, y la vamos a abrir. Aquí no van a cambiar muchas cosas. Lo único que vamos a cambiar es que vamos a crear una nueva función. Llamemos a esto comprobar acertijo respuestas. Y también tendrá una salida booleana o acertijos resueltos. Bien. Vamos a construir a continuación. Ahora lo que vamos a hacer es usar este evento desbloquear Puerta, que debido a que copiamos, se convirtió en un evento normal. Vamos a la interfaz. Llamemos a la interfaz uno. Esto sucedió porque duplicamos el plano. Así que vamos a ir a nuestro evento desbloquear la puerta, y vamos a traer las respuestas del rompecabezas de cheques. Y si esto vuelve cierto, abriremos la puerta. Si no, vamos a sonar así por aquí. Y en lugar de llamar a esto desde los interruptores, lo estaremos llamando cuando presionemos E y la puerta esté cerrada con llave. Entonces, cuando termine, lo haremos se llamó evento de puerta de desbloqueo. Ahora, cuando lo llamo dentro del plano, Cedar no tiene este sobre por aquí, pero tiene el objetivo a diferente color Esto sucede cuando estás llamando internamente a un plano. Una función de interfaz de blueprint. Entonces ahora, para continuar con nuestra función verificar las respuestas del rompecabezas, antes que nada, necesitamos crear una referencia a los rompecabezas como hicimos para el cambio aquí, tenemos que hacer para la puerta y los rompecabezas. Entonces, ¿cómo hacemos esto? Vamos a crear una nueva variable de tipo actor objeto de referencia, y vamos a ponerle nombre puzzles. Ahora, ¿por qué acertijos? Hasta ahora, hemos estado usando variables individuales, lo que significa que tienen un solo tipo de contenedor. ¿Y por qué decir esta palabra contenedor? Porque tenemos tres tipos más diferentes de contenedores. Si seleccionamos los rompecabezas variables y vamos por aquí, podemos ver hacer esta matriz de contenedores variables, conjunto o mapa, que son los otros tres tipos diferentes de contenedores. Entonces un contenedor es uno único. El segundo es array, el tercero se establece y mapea con reglas específicas en cada uno. Pero la funcionalidad básica sigue siendo la misma, manteniendo una lista de elementos, una lista de variables, básicamente. Vamos a estar usando array, que contiene un tipo de variable. Mapa puede contener dos tipos de variable, y conjunto es cada variable básicamente en la lista tiene que ser única. Ahora, seleccionaremos el primer tipo de lista, el array uno, y una cosa más importante de estas listas es pensar que cada variable que tienen en la lista tiene un orden específico. Por ejemplo, si compilo esto, podemos ver acertijos y elementos de matriz. Y si hago clic en un elemento de matriz, tengo un elemento array aquí. El segundo, el tercero, y estos están en un orden específico. Esto es cero, este es uno, esto son dos. Lo mismo sigue para el resto de la lista también que mantienen un orden específico y siempre mantienen este orden a menos que lo cambiemos. Ahora bien, cuando dije que los actores del set necesitan tener un elemento único, significa que el primer elemento tiene que ser no lo mismo que el segundo. Por ejemplo, si esto fuera números enteros, habría sido uno, dos, tres, no podría haber sido uno, uno, uno Demostremos esto por un segundo. Cambiemos el tipo de variable a entero. Y vamos a compilar, verlo resetd los elementos. Entonces agregué cero. Si intento agregar de nuevo, no puedo porque el cero ya existe. Si giro esto a uno, entonces puedo agregar. Si trato de convertir cero a uno, no me deja. Si trato de convertir uno a cero, no me deja. Entonces tengo que convertir esto a dos, por ejemplo, y luego volvió a agregar cero. Entonces, cuando continúa, es muy contraproducente llenar los juegos manualmente De todas formas, volvamos a nuestra matriz, que puede contener varias veces una, por ejemplo, tenemos que compilar para hacer esto. Varias veces cero, por ejemplo, y debe ser de tipo actor sin tipo. Bien, entonces una serie de actores. Entonces tenemos esta pequeña lista ingeniosa de actores, que no está poblada Vamos a hacer que el incienso sea editable y expondremos sobre spawn también, y necesitamos compilar y luego ir a nuestro mapa, y vamos a traer a nuestros nuevos actores Traigan dos hígados, uno por aquí y otro por aquí Y vamos a traer la nueva puerta también puerta multi puzzle. Los reemplazaré mejor después. Va a llenar la matriz de rompecabezas. Entonces voy a presionar este botón de aquí, uno más, y voy a seleccionar el primero para que sea este y el segundo para que sea este. Ahora bien, si el orden importaba, importaría la forma en que los seleccionamos Pero en nuestro caso, solo estaremos comprobando si ambos están resueltos. Ahora, no necesitábamos realmente construir a los actores en este momento porque el código sería vamos a hacer el código, en realidad. Vamos a revisar rompecabezas Acers y ahora traeremos nuestra nueva matriz de acertijos Ahora, descubriremos un nuevo nodo, que sería el para cada bucle. Ahora, además de los cuatro cada bucle, también hay un bucle de cuatro y un bucle de cuatro con break y un cuatro cada bucle con break. Y claro, hay un reverso para cada op. Ahora bien, ¿qué es un bucle? Porque la palabra más común, como podemos ver aquí, es un bucle. Un bucle le permite repetir acciones varias veces tan rápido como se puede ejecutar. Como podemos ver, tiene una ejecución en un bucle body y un nodo completado como los nodos de ejecución. Y todos aquí son iguales con la excepción del break. Break es que podemos llamar alguna manera para detener lo que sea que esté haciendo esto. Por ejemplo, en las cosas estamos buscando algo y lo encontramos, podemos detenernos cuando lo encontramos y completar el bucle. Y la otra diferencia es que estos dos cada uno y para cada bucle con break, tenemos una entrada de matriz, mientras que estos los configuramos manualmente para hacer algo una cantidad específica de veces. Por ejemplo, si quisiéramos que sucediera dos veces, podría ser un loop 0-1 porque loops y arrays, eso también es algo importante y los otros contenedores comienzan con cero como primer índice, el primer número de los elementos Tendremos el elemento cero, y luego tendremos el elemento uno y el elemento dos. Entonces esto también es importante. Ahora, eliminemos esto y hagamos que nuestro bucle for funcione. Entonces lo que vamos a hacer es, y aquí viene el mensaje está resuelto. Vamos a pedir que se solucione. No, lo llamamos resuelto. Sí, mensaje resuelto. Ahora bien, esto nos devuelve resuelto o no, el rompecabezas que estamos pidiendo. Y también, solo un recordatorio de por qué usamos una llamada de interfaz porque esta es de tipo actor. Entonces significa que puede volver a ser todo. Puede convertirse en un interruptor y una palanca y un interruptor. Puede convertirse en un botón y un interruptor puede convertirse en una puerta y un interruptor o cualquier cosa. Puede convertirse en cualquier cosa. Mientras que si tenemos el tipo clase en lugar de actor por aquí, teníamos como palanca P, palanca P. Si tuviéramos esta, solo podríamos esta matriz solo contendría puertas hepáticas y podríamos obtener información directamente para ellas. Pero esto hace que sea capaz de obtener cualquier actor que implemente este tipo de interfaz de blueprint Ahora, completemos la lógica sobre esto. Vamos a poner una rama aquí porque si acabamos de conectarnos, el nodo de retorno por aquí, volveríamos constantemente por cada cuerpo si está resuelto o no. Pero esta función está a punto revisar todos los acertijos, no sólo uno. Entonces el nodo de retorno debería suceder al final. Ahora lo que vamos a hacer es que la primera vez que encontremos un rompecabezas que no está resuelto, vamos a promover esta variable, sino una variable local esta vez. Entonces solo existe en esta función, y vamos a desconectarla en realidad. Si uno de ellos es falso, vamos a romper el bucle de cuatro. Sí, usa el bucle cada uno para bucle con break o con break. Bien. Con control, solo estoy reconectando todos los pines. Bien, entonces cuando encontremos un rompecabezas que no esté resuelto, apagaremos esto y romperemos el bucle de cuatro. Entonces, lo que también tenemos que hacer es darle un valor predeterminado de True. Entonces, si esto nunca se rompe, entonces esto devolverá esta nueva variable. En realidad, vamos a darle un nombre también. Vamos a llamarlo todo resuelto. Y esto lo completará. Ahora, vamos a explicarle un poco rápido otra vez desde el principio lo que estamos haciendo. Estamos pasando por nuestros acertijos. Hemos establecido una variable por defecto, variable local. Esto quiere decir que cada vez que se ejecuta, comienza como resuelto. Incluso si lo apagamos la próxima vez que esto se ejecute, comenzará como a través porque es una variable local. Ahora, estamos pasando por nuestros acertijos con un bucle for. Comprobamos si están resueltos. Si no se resuelven, apagamos esta variable y estamos rompiendo el bucle, y estamos dando salida al resultado Así que vamos a probar esta tienda. Vamos a poner los interruptores. Colóquelos en la pared. Bueno no en la pared sino. ¿Esto es justo adentro? No, también es contrario. Entonces lo rotamos. Y la puerta también está enfrente. Sí, creo que está bien. Quizá un poquito. De esta manera. Bien, voy a hacer que empiecen los jugadores. Voy a moverlo aquí. No hay juego. ¿Vas a usar el único discurso? Oh, primero traquemos la puerta. Es traqueteo. Segundo interruptor, y se desbloqueó. Genial. Así que terminamos con esta puerta también. Supuestamente, no podemos cerrar. Oh, tal vez esta puerta no debería abrirse de esta manera. Tal vez y solo Ir a pen graph. Oh, se abre frente al jugador. Bien. ¿Sabes qué? Lo vamos a dejar como E. Si quieres, puedes jugar con el ángulo. En realidad, podemos simplemente desconectar esto e ir hacia los 90, creo. Sí, no lo voy a dejar como E. No puedo , lo siento. No puedo vivir con como. Haciendo esto. Sí, funciona correctamente. Porque poner el ángulo siempre 90 desactiva básicamente la dirección de cálculo De todas formas, ya terminamos y llegamos al momento en que haremos los ítems de física. Te voy a mandar el siguiente. 22. Programar un interruptor de presión para la activación de puerta: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, door Systems y Anteriormente, terminamos con nuestro puzzle múltiple, multi puzzle w. Agregamos dos switches, y les agregamos una interfaz, una nueva función de interfaz que llamamos SLP e implementamos que cuando se llama a SLT porque es una función con un nodo de retorno, está devolviendo el estado ESL del Nombrada también a E salt la variable resuelta que teníamos porque nombré SL también la variable de la interfaz, lo que llevó a un error porque no podemos tener dos nombres, dos variables con el mismo nombre, una que devuelve y una variable del blueprint Después continuamos y modificamos un poco, la puerta del hígado. De hecho, al final retiramos el ángulo abierto y colocamos 90 a la línea de tiempo, y de esta manera pasamos por alto la ección calculada y se abre hacia nosotros y no hacia las escaleras También cambiamos la puerta de desbloqueo del evento para verificar las respuestas del rompecabezas. Ahora, también llamamos a la puerta desbloqueada desde nuestra interacción porque los interruptores no están llamando a la puerta. Al ver esto, también creamos esta función de respuesta de rompecabezas de verificación que necesitaba la matriz de acertijos de actores, que era la nueva variable, la nueva variable contenedor que encontramos. Que es básicamente una lista en cierto orden. Para poblar esto, agregamos al actor en el mapa, y luego a partir de los detalles predeterminados del actor que exponemos esta variable, agregamos dos con un símbolo más por aquí, elementos de matriz, y los elegimos para que fueran estos dos conmutadores Entonces, cuando estamos comprobando si el rompecabezas está resuelto, estamos usando un bucle de cuatro edades un nuevo nodo que solíamos pasar por la lista de acertijos y preguntando si están resueltos. Si no se resuelven, tenemos una variable local, lo que significa que cuando se ejecuta la función, siempre se restablece a la variable predeterminada, y la predeterminada era true Entonces cuando sale de resuelto y no está resuelto, vuelve a las caídas, y rompe el bucle forrajero Ahora, es el momento de hacer los interruptores. Entonces abramos nuestro nuevo mapa. Nivel ocho. Oh, no hemos puesto el texto aquí, y las colisiones están un poco arriba. Primero arreglemos la colisión. Seleccionemos los interruptores y movemos la caja un poco afuera para que sea más fácil chocar con el jugador Queremos hacer lo mismo para la otra caja. Sí, eso está bien, creo. Y también, aumentemos un poco la caja de la puerta porque cuando la puerta esté abierta, debería poder cerrarla solo un poco más y tal vez hacerla más alta por las escaleras. Sí, creo que está bien. Bien, vamos a traer un texto. De hecho, vamos a duplicar esto. Está bien si lo hacemos. Pongamos el texto. Si hago doble clic en el texto, o si logro seleccionar un texto mientras he seleccionado el plano, simplemente puedo hacer clic en el texto Al instante me enfoco en el texto, y lo traeré aquí. Y cambiemos el texto para usar el uso ambos. Ambos. Palancas para abrir la puerta Bien, llevemos también la luz. ¿Dónde está la luz? Y la colisión, vamos a darle la vuelta un poco así. Tal vez en algún lugar de aquí. Sí, creo que está bien. Así que cuando entramos, eh Sí. Creo que si viniera de K, estaría bien. Creo que sólo voy dentro de ella. Sí. Usa ambos ríos para abrir la puerta. Oh, hay dos ríos por aquí. Genial. Ahora, nueva habitación, comencemos con los elementos de física. Hagamos que estas cosas se muevan porque esto es más divertido. Entonces, seleccionémoslos todos. Y es bastante simple. Sólo podemos ir a los detalles. Voy a buscar la física. Simula la física, y vamos a dejar los ajustes como están porque son perfectos para lo que queremos hacer. Entonces ahora si voy a ellos, tal vez deberíamos mover la ventaja inicial. Así que ahora puedo empujar estas cajas alrededor. Genial, pero deberíamos hacer el pequeño rompecabezas con las cajas. Esto no es suficiente. Entonces lo que vamos a hacer es que vamos a crear un switch, primer lugar, usando esta malla de aquí. Así que déjame volver a la habitación. Vamos al contenido, y vamos a Blueprints, haga clic derecho en Nuevo tipo de clase Blueprint actor Y llamemos a este interruptor BP. Sí, porque este es el interruptor. El otro era la palanca. Uno está confundiendo a estos dos. Ahora, abramos el interruptor BP, y agreguemos a la malla Srtic Esto va a duplicar . Selecciona el primero. Va a anclarlo por aquí. Vamos a los interruptores. Detalles. Física. Vamos a buscar esta malla estática. Y vamos a implementarlo al número uno, en realidad. Entonces esta es esta y la que no tiene número sería la base. Vuelva a buscarlo aquí e implemente. Todo bien. Ahora, lo siguiente que necesitaremos es, por supuesto, un centro de colisión. Entonces caja de colisiones. Y vamos a escalarlo para que sea del tamaño del ladrillo interno y empujarlo hacia arriba hasta el punto de que no toque la caja porque no queremos que se active desde la propia malla estática. Entonces también vamos a hacerlo delgado así. A lo mejor un poco más delgado. Voy a desactivar. De hecho puedo hacerlo desde aquí. Yo lo voy a hacer 2.2. No, 0.16. Sí, creo que está bien. Entonces algo tiene que entrar en contacto tan cercano para que se considere que está en el interruptor. Esto es para lo que vamos a usar esto. Esto es lo que le diremos a este plano que el interruptor necesita bajar. Hay algo en ti. Entonces creo que este tamaño, esta cerca de la caja está bien. Bien, vamos al gráfico de eventos, y vamos a necesitar que los dos eventos de superposición comiencen y finalicen la superposición de esta caja. Así que vamos a conseguir la superposición de inicio, y vamos a conseguir el solapamiento final. Ahora bien, esta vez no vamos a hacer el casting o el otro componente tiene etiqueta porque vamos a tener dos switches. Tendremos que volvamos a nuestra habitación. Vamos a llevarlos al nivel de juego. Entonces un interruptor estará, por ejemplo, aquí, y digamos que el otro interruptor estará quizá aquí. Sí, pongámoslo aquí. Entonces el uno, tendremos que ponerle una caja, y el otro, tendremos que pararnos sobre nosotros mismos, y luego la puerta subirá. Y cuando salgamos del gatillo, bajará la puerta. Entonces tendremos cierta cantidad de tiempo para pasar por esta puerta. Entonces, si empezamos aquí, tal vez haya más posibilidades de fallar. Pero así que básicamente estamos haciendo una pequeña mecánica de juego aquí al mismo tiempo. Entonces, dado que existe la posibilidad de que el actor esté encima del interruptor, y una caja al mismo tiempo estaría encima del interruptor, podemos usar algo diferente esta vez. Volvamos al interruptor, y tomemos nuestra caja y consigamos actores superpuestos, que nos da una lista con todo lo que se superpone a la caja, todo lo que se superpone a esta colisión Hay un filtro de clase si solo necesitábamos buscar un tipo específico, y esto devolvería solo una lista de esa clase específica. Pero para nosotros, nos preocupamos por tipo de todo. Entonces lo que vamos a hacer es que usaremos, como pueden ver, este icono de aquí también es un icono de matriz. Esto nos indica si volvemos a la puerta multi puzzle, ya ves, tenemos este icono por aquí, mientras que aquí, lo tenemos con caja media vacía. Básicamente, esta caja vacía es solo un símbolo de conexión. Entonces si leo, por ejemplo, aquí, podemos ver que la caja se llenó, pero esta está vacía. Es sólo para decir que esto no está conectado a algo. Lo que vamos a hacer es que vamos a obtener la longitud de esta matriz. Y si es igual a cero, entonces hacemos algo o no hacemos algo falso o falso Básicamente, al superponerse, si no es cero, crearemos una línea de tiempo que reproduciremos la animación. Al final de la superposición, si es cero, invertiremos la animación. Pero creo que este es un buen punto de parada para este. Te voy a ver a la siguiente. Adiós. 23. Diseña una puerta de puerta con Blueprint Systems: Hola, y bienvenidos de nuevo a Unrealizing cinco Bluepin Mastery Door Systems Unrealizing cinco Bluepin Mastery Door Systems y portales interactivos. Anteriormente, terminamos con las colisiones de la puerta multi puzzle La tienda que lleva estos dos acertijos, estos dos interruptores para que se abra. Ahora, también agregamos este texto, este blueprint de texto de flujo que iluminaremos este texto, y continuamos y habilitamos la física en estas casillas y creamos el blueprint de switch, que agregamos dos medidas estáticas para representar la parte inferior y la parte superior del interruptor y una colisión de caja que le hicimos tres D forma de paralelogramo por encima de la parte inferior, una Luego continuamos y usamos los eventos de superposición de inicio y superposición final de esa colisión de caja. Creamos una rama que la pregunta, la condición esta vez es que estamos consiguiendo todos los actores solapados Y si esto es longitud más de uno, entonces preguntamos si esto es básicamente verdadero o falso, más de cero o menos de cero, porque es igual. Entonces, si era menos, es imposible ser menos, pero si fuera menos, seguiría pasando a verdadero que falso. Si quisiéramos estar cero y arriba, podría estar por debajo, igual a cero. Eso estaría cubriendo el bajo cero. Así que agreguemos la línea de tiempo. Ve a dibujar cable y presiona Agregar línea de tiempo. Ahora, vamos a entrar en la línea de tiempo, y vamos a crear un camión de flujo. Vamos a crear dos puntos. El primero, claro, cero, cero, y el segundo, digamos, 0.5, dos, uno. Voy a encajarlo con estos dos botones y usar La key frame y compilar y guardar. Ahora, ¿qué haremos en actualización? Bueno, similar a la rotación de cambio que usamos esta vez, establecemos la rotación relativa. Esta vez usaremos la ubicación relativa establecida. Vamos a conseguir la primera malla estática. Vamos a establecer la ubicación relativa. Vamos a conectarlo para actualizarlo. Y vamos a dividir este vector porque sólo queremos cambiar Zen. Entonces para esto, vamos a larp y vamos a conectar el Alfa aquí Ahora para el valor, necesitamos de 02 tal vez menos diez. Sí, menos diez está bien. Así que ve a deshacer. Entonces menos diez. Y esto lo desencadenaría para que bajara. Si vamos a probarlo, presionemos play. Y lo pisé, bajó. Ahora bien, no sube, tal vez deberíamos poner esto un poco más en el suelo porque el personaje no parece ser capaz de subir fácilmente. Entonces supongo que esta caja también va a ser dura. Sí. Entonces vamos a agarrar esto. Vamos a empujarla aquí abajo y vamos a hacer los mismos aros Lo mismo para este. Sólo vamos a empujarla así. Sí. Todo bien. Ahora, volvamos al plano y vamos a crear la dirección opuesta Entonces vamos a usar la misma pregunta. Vamos a copiarlo y pegarlo y ponerlo por aquí, y luego vamos a usar el reverso. Entonces vamos a compilar y guardar, y vamos a probarlo. Vamos a compilar y presionemos play. Y baja, sube. Se baja, sube. Genial. Ahora, como tenemos un lingote en el hígado que dice está resuelto, lo mismo necesitamos para este interruptor Así que vamos a crear esta variable se resuelve, y vamos a traerla por aquí. Ahora, cuando termine la línea de tiempo y siga adelante, así que encienda la dirección de la línea de tiempo, la vamos a establecer. Se resuelve de dos a través. Y en realidad, también podemos cambiar el material. Vamos a conseguir el de malla estática, que es nuestro paquete de utilería, la caja de gatillo, esta , la naranja. Y vamos a establecer material No necesitamos dos referencias, establecer material, y esto es, creo, presión de placa de presión puesta. Y vamos a copiar esto también y ponerlo marcha cuando nos bajemos de la caja del gatillo. Bueno, cuando la caja del gatillo no tiene nada de pie sobre ella, también necesitamos vender se soluciona. Cuando nos bajamos. No vamos a esperar hasta que haya terminado todo el cronograma. Bueno, esto en realidad es más un diseño de juego. Como si esperas a que termine la línea de tiempo y luego la apagas, o si la apagas directamente cuando sales, es una elección del desarrollador. No es algo obligatorio. Entonces lo estamos haciendo cuando al instante nos bajamos en lugar de esperar a que el botón suba. Y esto debería ser plano de placa de presión, no encendido. Todo bien. Entonces vamos a probar esto. Se vuelve verde, se vuelve normal. Se vuelve verde, se vuelve normal. Ya ves si paso demasiado rápido, entonces gira más rápido porque sigue jugando desde donde estaba. Ahora, llevemos una caja en un botón y veamos que no funciona. La razón por la que no funciona es que por defecto, estas casillas en su configuración de colisión, tienen los eventos de superposición generados apagados. Si enciendo esto, significa que esta casilla no ignorará esta colisión. Pero no queremos que esto suceda en todas las cajas. Nosotros solo queremos esta caja, la que tiene los colores y dice push. Entonces los otros no hacen nada, y este hacemos algo. Entonces, activemos esto generar eventos de superposición. Vamos a compilar, vamos a presionar play, y vamos a empujar esta caja, y funcionó. Y si me siento aquí, esto funciona también. Y el siguiente paso sería hacer que todo funcione en conjunto y crear la puerta. Ahora, vamos a empujar este solo para demostrar que no está funcionando. Sí, no está funcionando, pero si paso, está funcionando. Así que sigamos duplicando nuestra puerta multipuzle. Así que vamos a nuestra puerta multi puzzle, ya que de alguna manera para encontrarla. Puedo presionar por aquí. No, en realidad, lo necesito en el navegador de contenido. Y la forma en que voy manualmente. Oh, sí, este botón de aquí. Si presiono este botón, me lleva a él. Entonces duplicando esto, y vamos a llamar a esta puerta BP multi switch. Vamos a abrirlo. Y lo que no vamos a necesitar, no vamos a necesitar un insumo. Esta puerta se abre por sí sola, y no necesitaremos un sonajero Esto no será necesario. Necesitaremos que la puerta esté abierta. Y no necesitamos el comienzo, en realidad lo hacemos podemos hacer un widget para esta tienda, como hacer algo para abrir esta puerta. Entonces básicamente, vamos a actualizar Widget. Esta tienda tendrá dos estados. Se habrá cerrado. Vamos a establecer cerrar por defecto, y luego abrir, cierre básico y apertura. Pero vamos a cerrar y abrir. Realmente no importa. Entonces, cuando esté cerrado, diremos, pero es necesario presionar ambos interruptores. Vamos a capitalizar los primeros. No presionado, en realidad, tiene que estar en cualquier otro caso, no necesitamos decir nada. Entonces compilando guardar, sí tenemos error porque estamos llamando sonajero cuando no hay Y claro, no necesitamos la parte frontal. No necesitamos calcular direcciones. No importa que se use. Vamos a eliminarlo donde se usa. Entonces necesitamos cuando está abierto para estar abriendo, cuando está cerca de cuando está cerca para estar abriendo, cuando está abierto para estar cerrando. Y no necesitamos ser realmente de principio y fin. Lo necesitamos para continuar desde donde estaba. Entonces esto irá a jugar, y esto irá al revés porque esta puerta se va a bajar cuando los dos interruptores estén apagados, y cuando ambos estén encendidos, va a estar subiendo. Entonces sí queremos que, sin embargo, reproduzca un sonido cuando está haciendo esto. Entonces vamos a tocar sonido. Y reproducir sonido. El primero sería elevador de puerta, y el otro también sería elevador de puerta. Pero queremos que el que está bajando sea un poco más profundo de sonido, así que irá a 0.8 pulgadas. Entonces suena más profundo. Y esto va a creer usos, y eso sería por los sonidos. Ahora bien, lo siguiente que tenemos que hacer es cambiar este modelo en realidad. Así que vamos a ir a buscar nuestro modelo por aquí, lo cual no es bastante seguro cuál es aquí. Se supone que esto es un pack de utilería. Lo encontraré desde aquí. Sí, lo encontramos. Y vayamos aquí y pongámoslo. Está girado erróneamente, pero no importa. Lo haremos simplemente no me gusta el lado. Oh, tiene el material equivocado. Sí, porque cambié la puerta, pero el material se mantuvo igual. Ahora, puedo presionar esto por aquí para devolverlo al valor predeterminado. Y esto es algo que pasó. Si cambia la malla, el material se mantiene igual de la malla anterior que tenía a menos que tenga un material por defecto, que lo cambia al material por defecto de la nueva malla. Pero si ha anulado el material en la malla anterior, mantendrá el material anulado En fin, sigamos, llevemos la puerta un poco más al medio. Creo que eso es sobre bien. Voy a presionar un poco hacia arriba. Bien, compilar y guardar. Y vamos a traerlo en el mapa también. Vaya a planos, vaya a puertas y puerta de múltiples interruptores Podríamos haberle llamado otra cosa. Es el lado frontal es el lado frontal, ¿verdad? Cocinero podría ser un poco más grande. Podríamos hacerlo un poco. Lo estira un poco, pero sí, lo haré me gusta un poco más grande. Ahora es demasiado grande. Nunca, como puedes ver, nunca hagas eso en el plano porque cuando lo estás haciendo en todo el actor, también estás haciendo más pequeño que las colisiones Entonces, aunque se vea bien, puede que no funcione correctamente. Entonces, si quería hacer esto, tenía que ir al propio utilería y luego hacerlo. Sí, creo que está bien. Haciéndolo un poco más grande y un poco más pequeño. Eso lo puedo hacer dentro del looping también. Puedo deshacer todos estos cambios y simplemente hacerlo aquí. Bien. Hagamos la caja de colisiones un poco más grande también. Todo bien. Entonces eso va a ser un poco más alto, también. Él. Ahora bien, esta puerta sólo estará desbloqueando de esta manera Entonces, si empezáramos de esta manera, nos habrían bloqueado. No importa. Ahora, creo que esto es para éste. En la siguiente, vamos a hacer la codificación para hacer los dos interruptores, abrir la puerta. Adiós. 24. Implementación de trucos para la mecánica de puertas de interruptor de puerta: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery, Door Systems y portales interactivos Anteriormente, casi terminamos con las imágenes de nuestra puerta corredera, deslizando hacia arriba con el mecánico de múltiples interruptores Ahora, lo que hicimos fue que terminamos con la línea de tiempo, jugando desde el principio, jugando o retrocediendo con los eventos de inicio y fin de solapamiento. Y cuando esté terminado, dijimos que está resuelto. Pero cuando terminamos la superposición, dijimos que no se resuelve al instante. Estamos cambiando también el material y estamos usando la ubicación relativa establecida. También duplicamos nuestra puerta de rompecabezas múltiple y eliminamos algunas cosas, y mantuvimos la animación de la puerta, el interruptor. Agregamos un sonido de reproducción, y lo conectamos para reproducir y revertir en lugar de tocar desde inicio y reversa desde el final. También eliminamos la entrada E. Lo que necesitamos eliminar es el widget add Door. En realidad, no necesitamos eliminar completamente el widget de Addo Déjame deshacer. Bien, tenemos que agregarlo a cerrado porque solo cuando la puerta está cerrada, queremos que muestre el widget. Ahora, pensando en esto, debe haber un error en todas partes. Así que vamos a jugar a probarlo un poco. Creo que hay un error que cuando estemos cerrando la puerta y nos alejemos, voy a mostrar el widget. Entonces lo estoy cerrando. Sí. Porque estamos agregando el widget, irrelevante para si estamos dentro de la colisión o no Entonces, para arreglar esto, necesitamos cambiar algunas cosas. Pero vamos a hacer esto más adelante. Ahora sigamos con la puerta. Lo que vamos a estar arreglando es agregar algunas reglas por aquí, y en cada plano, solo enviaremos referencia al actor Ahora continuemos con la fijación de la puerta de múltiples interruptores con completarla. Lo que tenemos que hacer es ir a nuestra Puerta desbloqueada. En primer lugar, hagámoslo interfaz porque lo duplicamos. Entonces voy a hacer doble clic en Desbloquear puerta, crear el evento de interfaz. Voy a traerlo aquí y borrar éste. Ahora, lo que tenemos que verificar es actualizar el texto del Widget y cambiarlo para eliminar Widget. Entonces voy a copiar el código de aquí. Voy a pegarlo por aquí. Entonces, cuando estamos desbloqueando la puerta, el widget siempre se elimina, aunque esté en la vista Y, por supuesto, animación call door porque cuando estamos desbloqueando, necesitamos llamar a esa animación Lo siguiente que necesitaremos es una puerta con cerradura, la misma pero para cerrar. Así que vamos a volver a nuestras puertas de BI, y vamos a crear un nuevo evento, nueva función, y vamos a llamar a esta puerta de cerradura. Y vamos a ir a nuestra puerta, y vamos a llamar al evento de interfaz. Y lo que necesitamos de aquí, esto realmente necesita ser cerrado, sí. Entonces, cuando esto esté cerrado y ejecute la animación de la puerta, se abrirá. Entonces necesitamos lo contrario de esto. No necesitamos el sonido aquí porque ya estamos tocando un sonido por aquí. No necesitamos el cambio material también. Entonces hubo algunas cosas que necesitábamos eliminar, pero sí necesitamos de todo lo demás. Bueno, en realidad, no necesitamos el widget remove también. Entonces esto necesita girarse para abrir, y luego estamos ejecutando la animación del perro, que cuando se haga, estará abierta, por lo que tocará el sonido cerrado y revertirá desde donde quiera que esté. Ahora, sí necesitamos llamar a estos eventos. En realidad no necesitábamos esto, así que estoy tratando ¿cómo llamamos a estos eventos Bueno, bastante simple en el switch que creamos. Cuando terminemos de presionar el botón, llamamos, bueno, sí necesitamos una referencia a la puerta, así que vamos a crear una variable. Vamos a hacerlo de tipo actor y podemos hacerlo de tipo actor porque tenemos la interfaz blueprint Llamemos a esta puerta y hagamos que sea instancia editable y expongamos en spawn para que podamos editarla desde el editor y también al desove desde otro blueprint Voy a seleccionar esto y seleccionar la puerta y seleccionar esto y esto y seleccionar la puerta también. Entonces ahora tenemos una referencia a nuestra puerta. ¿Dónde está el cambio por aquí? Y vamos a conseguir esta referencia de puerta y mensaje de puerta abierta. Envía el mensaje de la puerta desbloqueada por aquí. Y luego tenemos que enviar el mensaje de registro por aquí. Entonces estamos terminando la superposición. Estamos enviando que esto está sin resolver, estamos fijando sin resolver, y estamos enviando cerradura Puerta Y cuando estamos empezando a superponerse, cuando la línea de tiempo haya terminado, estamos enviando desbloquear Puerta. Ahora bien, teóricamente, esto debería funcionar. Vamos a echarle un vistazo. Necesidad de empujar esta caja primero. Todo bien. Yo toqué el sonido, no debería haber tocado el sonido. Así que una situación agradable para usar el depurador. Veamos qué está pasando. Entonces voy a encontrar la puerta, interruptor de puerta múltiple. Voy a expulsar. Voy a traer esto por aquí. Voy a desacoplarlo, arreglar el zoom. Haz esto un poco más pequeño. Haz esto un poco más grande, un poco más. Aquí está. Seleccione la puerta de múltiples interruptores de la misma. Así otra vez. Volver al tutorial. A ver qué funciona. Un ocho para recuperar. Entonces esto estuvo bien, antes que nada, está haciendo rotación, lo cual no debería ser. Pero, ¿por qué se está ejecutando va a inyectar de nuevo? Entonces, el problema está por aquí, pasa que el rompecabezas está almacenado. Bueno, ahora mismo, debería resolverse porque tenemos esto Pero aquí, pasa que está resuelto, lo cual no es cierto. No tenemos un rompecabezas de matriz, así que es por eso que está sucediendo. Dice que es cierto porque no hay piezas seleccionadas del rompecabezas. Esa es una bolsa interesante. Entonces tal vez un código ahí que si es cero, no debería abrir sería necesario. Vamos a mover esto al interruptor. Bien, no abrí. Me mudo aquí, todavía no lo hace. Esto activó el pulso, así que está bien. Bien, antes que nada, cambiemos lo de la rotación. No debería rotar. Además, me olvidé de esto. No deberíamos estar estableciendo la rotación relativa y haciéndolo en el plano equivocado Va a volver al interruptor también. Así que eliminando la ubicación relativa, manteniendo la alondra, eliminando el ángulo abierto, establecer la ubicación relativa Conectado aquí, conectado aquí, dividir la nueva ubicación, conectado aquí. Por lo que la ubicación original de las puertas es por. Esto es un poco complejo, así que deberíamos guardarlo en comenzar a jugar, obtener promo de ubicación relativa a variable, conectarlo por aquí. Begin guarda la variable. Y vamos a traer esta variable. Vamos a dividir break. Vamos a conectar X aquí. Aquí vamos a conectar Y porque queremos que se queden igual. Y desde Z, queremos que esto vaya dos -13. Digamos, 260 Rackley parece estar bien. Veremos en el espacio de palabras más tarde al 60. Entonces ahora la puerta no debería um al menos trotar. No sube porque necesita que esto se solucione. Pero creo que había un bicho que no estaba subiendo de todos modos. Bien, un nuevo paréntesis. Vamos a crear algún código para llevar este tubo a esta posición cuando queramos. Vamos a copiar esta ubicación del tubo. Vamos a ir al plano de nivel que creamos este código por aquí y vamos a elegir el teclado uno Y vamos a dar click y crear una referencia a esta casilla porque la tengo seleccionada. Y voy a fijar la ubicación. Necesito pegar esto aquí. En realidad, voy a promover esto a una variable y compilarlo y pegarlo por aquí. Ahora bien, ya ves, podría pegar todo este vector porque este es un vector, básicamente. Puedo copiarlo desde aquí y simplemente pegarlo en una nueva variable. No pude pegarlo aquí, no hay forma de pegarlo por aquí. Puedo pegarlo la X, pero pega todo en una sola caja. Entonces solo conectando esto, llamemos a esta ubicación de caja. Y conectemos esto aquí. Entonces básicamente, ahora mismo, si muevo esta caja, presiono una, vuelve a subir aquí. Genial. Ahora, podríamos crear algunos códigos para pegarlo exactamente donde lo queramos. Entonces hagámoslo para el número dos. ¿Cómo hacer esto? Voy a colocarlo ahí. Voy a expulsar. Voy a seleccionarlo. Voy a copiar de nuevo esta ubicación porque si muevo esta caja ahora, todavía cambia de ubicación. Se actualiza en vivo. Entonces voy a dejar de tocar e ir a Mapa Tutorial y presionar el teclado dos. Y voy a crear un nuevo vector de tipo variable. Voy a compilar, pegar el nuevo valor, llamarlo box, trigger, location, y solo voy a duplicar este código. Y es una buena oportunidad para mostrarte otra cosa. Cuando tengo un vector como este, puedo hacer clic derecho sobre el vector y decir, reemplazar la variable con la ubicación del disparador de cuadro. Entonces si tuviera otros vectores aquí, también, agreguemos más, dos más. Podría reemplazarlos por ellos. Entonces, si es la misma variable de tipo y estás en el mismo blueprint, puedes tener esta opción por aquí Así que la ubicación del gatillo, la columna vertebral necesita conectar el objetivo porque ¿a quién estoy configurando la ubicación? Juguemos, y soy increíble empujando cajas. Todo bien. Creo que esto es suficiente para éste. Vamos a depurarlo en la siguiente lección. Te voy a ver entonces. Adiós. 25. Depuración y optimización del sistema de puerta de interruptor de puerta: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery Door Systems y Anteriormente, casi terminamos con nuestra puerta de múltiples interruptores que se desliza hacia arriba. Ahora, como que dedo lo que pasó mal. En los switches, no lo hicimos no puse la interfaz, así que necesitamos poner la interfaz I ViDOR. Y sobre la función resuelta, necesitamos conectar eso se soluciona y parece por error, cuando hice clic en la puerta y deshago algunas acciones, quito las piezas del rompecabezas, así que voy a agregarlas de nuevo El primero es este cambio de aquí, y el segundo es el de aquí. Asegúrese de haber seleccionado los interruptores y no el suelo o una pared. Entonces, teóricamente, ahora debería funcionar. Entonces si presiono dos, los teleps ahí, y si me paro aquí, sube muy, muy rápido Entonces baja muy, muy rápido. Entonces esto no me da suficiente tiempo para correr. Y el widget es un poco como puedes ver, es la parte de atrás que solo lo muestra aunque no me superponga que arreglaremos más tarde. Ahora, tampoco dice nada mientras la puerta está cerrada. Entonces arreglemos esta caja. Empecemos con el widget que está mostrando E cuando estoy superponiendo esto. Y en realidad, hagámoslo un poco más grande también. Entonces como esta historia es sólo así, sólo voy a traerla por aquí y hacerla un poco más pequeña. Y eso está bien. Ahora bien, ¿por qué el widget no dice nada? Básicamente, porque el default es cerrado y no cerrado, no decimos nada, y me molesta al abrir para decir algo Entonces esto es un error. Ahora bien, dice E, pero no vamos a molestarnos en arreglar la E. Ambos interruptores tienen que estar encendidos. Entonces presione dos, esto ahora solo debería decir E. Es No, no debería porque está cerrado. Entonces lo que vamos a hacer es hacer que la línea de tiempo sea un poco más grande. ¿Esta es la correcta? Ahora bien, esta no es la correcta. Puerta multiinterruptor. Aquí está. Vamos a la línea de tiempo. Establecer estos dos. Vamos a darle algo de tiempo. Digamos 5 segundos. Pero esto significaría 5 segundos para subir y 5 segundos para bajar. Entonces esta sería una puerta lenta. Entonces voy a presionar dos. Esto, es una puerta lenta, lenta subiendo y bajando lentamente. Muy bien, ahora, arreglemos la bolsa que cuando dé un paso al frente, reproduce el sonido Lo que vamos a hacer arregla esto, y vamos a usar un nuevo nodo para esto. Vamos a ir a nuestra puerta, puerta múltiples interruptores por aquí. En cierre. No, en abierto. Entonces básicamente, cuando estemos cerrando la puerta, vamos a obtener la línea de tiempo en sí, lo que no habíamos hecho antes. La línea de tiempo también es una variable. Lo podemos encontrar en el talón del componente. Podemos encontrarlo como una variable en sí misma. Entonces esta es una referencia a la línea de tiempo. Y si le damos un nombre a nuestra línea de tiempo porque esta también está disponible, podemos presionar F dos en la línea de tiempo y decir línea de tiempo de animación. Como pueden ver, también cambia aquí. Entonces, si tuviéramos un montón de líneas de tiempo, podríamos encontrarlas por aquí. Así que voy a conseguir esto como una variable getter, y voy a obtener la posición de layback Entonces, ¿qué hace conseguir la posición de Clayback? Básicamente, obtiene la hora actual de la línea de tiempo cuando se está reproduciendo, tiene una hora actual, y eso la devuelve. Entonces lo que vamos a hacer es que vamos a usar una sucursal. Aquí vamos a hacer una nota igual. Si esto es cero, entonces no juegues. No reproduzca el sonido, básicamente. Vamos a conectar esto aquí y false va a ir aquí porque ya está jugando. Cuando no está jugando, vamos a dar marcha atrás. No hay razón Hay una razón para revertir porque estamos configurando el estado para cerrar porque aquí estamos poniendo abierto. Entonces vamos a probarlo. Sin sonido. Entonces está funcionando. Hay sonido. Hay sonido. Si me vuelvo a poner esto, no hay sonido. Entonces funciona. Bonito. Vamos a traer el cuadro de texto. Vamos a traer uno nuevo porque estos están sobremodificados. Empecemos con el texto flotante donde deberíamos poner esto debería ponerlo aquí. ¿Qué va a decir? En primer lugar, digamos que va a decir que se trata de una puerta corredera. No he seleccionado esto. Esta es una puerta corredera. Todo bien. Pongámoslo ahí. Et también lo hacen entrar un turno. A lo mejor voy a hacerlo un poco más pequeño también. Sí, esto está bien. Vamos a traer la luz también. Creo que está bien. Y la colisión. ¿Cuándo debería chocar el jugador con esto? Hmm. Lo que quieras. Yo sólo haré algo como esto. Y creo que está bien. A lo mejor tal vez más así. Sí, está bien. Entonces pongámonos. Esta es una marcha deslizante. Esto lo vemos cuando estamos entrando desde aquí, vemos esto, es una puerta corredera, y averiguamos el rompecabezas. Genial. Ahora, ahora, para resumir lo que hicimos, creamos un switch Blueprint, que agregamos la interfaz de puertas BI En el gráfico de eventos, creamos una animación con una línea de tiempo, y activamos los eventos en start overlap y end overlap that based on the rules, they send a door message that I am solved and try to unlock the door or I am not solved and lock the door. Luego creamos el plano de la puerta, que es la puerta de múltiples interruptores Y basado en el mensaje que está enviando, o bien es desbloquear la puerta, que está tratando de abrirla jugando la animación de la puerta, o si se está cerrando, invierte la animación y está cerrando la Ahora, sigamos a la habitación contigua. Vamos a abrir el ojito. Entonces probablemente hay algo mal aquí. Entonces vamos a abrir ambos ojos. Nivel nueve y nivel diez. Básicamente, está bien. Nivel nueve nivel diez, realmente no importa. Entonces aquí, ¿qué vamos a crear? Vamos a crear una especie del mismo mecanismo, pero con dos puertas que irán para subir y bajar, y tendríamos tres botones que tienen que ser presionados en orden. Además de eso, también tendremos un plano separado que decide si ese rompecabezas está resuelto o no Y la puerta se estará comunicando con ese gerente, y el gerente se comunicará con la puerta. Por lo que los propios botones no tendrán interacción con la propia puerta. Es otro ejemplo de cómo hacer un mecanismo que abra una puerta. Pero creo que antes de continuar, deberíamos arreglar este error que habilita después de que la puerta se está cerrando y arreglar todo el resto porque hacerlo hacia el final será más trabajo por hacer en cada plano Entonces por aquí, aparece el plano. Aparece el widget. Y vamos a hacer esto en la siguiente lección. Adiós por ahora. Nos vemos entonces. 26. Fundamentos para una puerta corredera de rompecabezas de botones: Bienvenido de nuevo a Unreal Engine five, Blueprint Mastery, door Systems y Anteriormente, terminamos con nuestra puerta corredera, nuestra puerta de múltiples interruptores, dijimos antes de continuar en la puerta de botones y el gerente para fijar el widget en todas las puertas. Así que voy a cerrar todo aquí arriba con apenas cerca de la derecha arriba a la derecha, y voy a ir a abrir cada puerta en su propio orden. No importa. Sólo queremos tenerlos todos arriba. Y voy a ahorrar. Y también, vamos a necesitar el modo de juego en tercera persona, que encontramos en el modo de juego Blueprints en tercera persona Entonces tenemos este widget de puerta, en Door Widget. Y desde este widget de puerta en Door, realidad podemos encontrar referencias donde sea que esté usando el clic derecho, encontrar referencias por nombre, y luego usando estas dos vernáculas, en realidad Entonces usando esto, se abrirá una nueva búsqueda que nos mostrará en todas partes que esta función existe, este evento existe. Entonces lo que podemos hacer es crear una entrada por aquí que llamaremos. Va a ser el componente de colisión tipo box. Creo que esta colisión de caja sería déjame ver, componente de colisión. Ahora, supongo que la colisión de cajas va a funcionar bien. Entonces voy a ponerle nombre a esta caja. Collider, tal vez necesite L, para ser honesto. No estoy seguro. Voy a dejarlo ya que no importa. Y voy a sacar actores superpuestos de ese colisionador Y voy a verificar con la clase a personaje de tercera persona, si esto es obtener longitud, claro, solo longitud, no obtener longitud. Y si esto está por encima de cero, va a traer una sucursal. Voy a agregar viewport. Entonces ojalá esto soluciona el problema. Ahora, lo único que tenemos que hacer es ir a cada plano y encontrar las puertas de anuncios que realmente podemos encontrar desde el cuadro de búsqueda, dónde fue el cuadro de búsqueda Lo cierran. Podría haberlo cerrado. Aquí está. Así que solo podemos hacer doble clic en cada uno de estos y simplemente traer el colisionador de cajas y hacer clic en el siguiente es el modo de juego Entonces voy a venir en este y recoger el colisionador de cajas Entonces de esta manera, no nos vamos a perder ninguno de ellos. No tenemos que buscar en realidad manualmente. Sólo podemos ir a cada evento. Ahora bien, esto no es recomendable. Podría haber mejores formas de hacerlo. Pero fue una buena manera de agregar la búsqueda o planos. Como si creara una razón para hacer esto. Bueno, esta no siendo muy buena opción, pero espero que funcione. No es mucho, pero es una cantidad formidable. ¿Conectamos el correcto? Sí. Por último, estos dos, y no hay nada más en la lista. Sí, ese es el último. Entonces supongo que esta vez, probemos el recinto dos por aquí, otra puerta con tos, y no agregó los widgets porque no estaba Entonces supongo que si estoy aquí, sí, sí, lo actualizo Genial. Ahora, por lo que veo, mientras está abriendo o cerrando, sigue mostrando la E, que es un comportamiento que no queremos que haga. Entonces algunos problemas más por resolver, iremos a puerta de múltiples interruptores. Este es el indicado. Entonces cuando estoy bien. Entonces, si estoy cerrando, tal vez deberíamos agregar esto a todas partes. Pero está bien. Lo que tenemos que hacer es en realidad agregar este estado de interruptor aquí y decir que si la puerta se está cerrando o abriendo, en realidad, solo a esta, creo, no a todo. No necesitamos mostrar o cerrar el widget. No importa. Sigamos con la puerta de al lado. Ahora, comencemos a crear los activos para la nueva puerta. Entonces vamos a necesitar un plano de actor que vamos a llamar botón PP Voy a llamar voy a necesitar también un plano de actor al que vamos a llamar PP puzzle manager Y entonces vamos a necesitar una nueva puerta. Entonces vamos a ir a nuestras puertas y duplicar la puerta de múltiples interruptores. Voy a llamarlo botones rompecabezas puerta. Ahora, vamos a guardar automáticamente ya que estalló. La forma en que esto va a funcionar es que vamos a tener antes que nada, la puerta, que no será, pero realmente no importa. Va a cambiar después. Vamos a tener la puerta vamos a tener el guardar esto. Así que voy a salvar a todos, algo que me olvidé de decir. Este botón lo dice todo, pero también podemos controlar los tamizos Y también podemos encontrar guardar por todas partes aquí. Entonces vamos a necesitar tres botones. Volvamos. Vamos a traer tres botones. Uno, dos, tres, en realidad, dos, tres, y vamos a necesitar también el gestor de botones, el gerente de rompecabezas. Voy a traer esto aquí. Esto puede ser en cualquier parte de este mapa realmente no importa. Pero voy a tenerlo por aquí, así que sabemos que ese es el gerente. Ahora, la forma en que va a estar funcionando, es que los botones sabrán sobre el gerente y el gerente sabrá de la puerta. Así es en realidad como va a funcionar. Vamos a crear estas referencias. Entonces voy a cerrar todo aquí y sólo abrir los botones, el encargado, y la puerta. Rompecabezas de botones apagados. Bien, necesito encerrarlos aquí. No una ventana separada. Todo bien. Y a la no la puerta a los botones. Necesitamos crear una referencia de gerente. Entonces una nueva variable, vas a llamar a BP manager. Voy a buscar BP Manager. Una referencia de objeto, y vamos a llamar a este gestor de rompecabezas. Ahora, lo siguiente que necesitamos es que el gerente sepa de la puerta. Entonces en el manager, vamos a crear una nueva variable. Vamos a llamarlo. Vamos a encontrar son y vamos a llamar a una referencia de objeto. Vamos a convertirlo en una referencia de objeto, y vamos a llamarlo de PP. Observe que aquí, usé un actor, donde aquí, usé al propio manager. La razón es que no necesitamos crear nuevas interfaces y nada para el gerente. Es sólo un gerente. Si quisiera tener bastantes gerentes y enviarles sus propios mensajes, podría haber creado esto como actor e hecho una interfaz para enviar mensajes a los gerentes. También necesitamos que estas variables sean editables. Ya que necesitamos obtener una referencia en el editor. Y vayamos al editor. Y ahora que los hacemos visibles, ¿por qué no estoy viendo esto? Porque no he compilado. Bien, ahora que compilé, aquí está. Entonces voy a seleccionar al gerente, y aquí voy a seleccionar al gerente, y aquí voy a seleccionar al gerente. Y el encargado debería conocer la puerta, así que voy a seleccionar la puerta y voy a ahorrar. Ahora, vayamos a nuestro fondo. Abramos el plano. Necesitamos dos mallas estáticas. Va a duplicar esto, y para el primero, vamos a buscar nuestro botón. Aquí está. Voy a seleccionar el interruptor inferior. Tengo que encontrarlo en el navegador y luego pasarlo por aquí. Y para el otro, los hice enfrente. Realmente no importa. Lo voy a encontrar en el navegador y colocarlo por aquí. Entonces ahora vamos a la puerta. Vamos a necesitar una segunda malla estática. Voy a duplicar esta. Y seleccionemos el primero y vayamos a nuestro mapa. Encuentra la puerta se abre. Así, y encuéntralo en el navegador, y ve a la puerta y pásalo aquí. Consigue el siguiente, encuéntralo en el navegador, ve al plano y pásalo aquí. Uy. Sí, estos son los materiales correctos, ¿verdad? Y los voy a mover un poco más arriba hacia la izquierda. Y éste un poco más pequeño. Y tal vez aquí y un poco más. Todo bien. Vamos a revisar la puerta. Está un poco bien, un poco a la izquierda. Creo que está bien. A lo mejor un poco adelante un poco más. En fin, creo que está bien allá y los botones necesitan girar. Este y éste los van a seleccionar a todos y colocarlos un poco más altos. A lo mejor estos un poco fuera. Esto también y creo que estamos listos para comenzar a programar. Pero lo vamos a hacer en la siguiente lección. Así que adiós por ahora. Nos vemos entonces. 27. Crea la mecánica de rompecabezas de botones para puertas interactivas: Bienvenido de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, terminamos con la parte visual, la configuración de nuestra escena y la configuración de las imágenes y el mensaje de nuestros planos para la nueva puerta Ahora, sigamos con la programación del gerente. Vamos a abrir el gerente. Vamos a la gráfica de eventos. Y lo que necesitamos aquí son dos eventos personalizados. Y decir botón en otro botón de plegado personalizado encendido. Ahora, vamos a hacer algo complicado, pero tampoco mucho necesario, pero es una buena manera de demostrar otro contenedor variable. Vamos a usar el contenedor de variables de mapa. Entonces vamos a duplicar este Gr BIP, y le vamos a nombrar piezas del rompecabezas Entonces vamos a ir a contenedores y elegir contenedor mapa. Ahora, como pueden ver, por aquí ha aparecido un segundo tipo de variable, que vamos a establecer en bullying. ¿Qué creamos realmente por aquí? ¿Qué es este contenedor de mapas? Bueno, el contenedor de mapa sigue la regla que sigue el contenedor conjunto. Esto significa que no puede tener duplicado el primer tipo de variable. Al decir esto, quiero decir, el segundo tipo de variable puede ser varias veces igual, no importa. Pero el primer tipo de variable debe ser siempre diferente, no puede ser el mismo. Y, por supuesto, esta lista corresponde a la forma en que se ingresan las cosas Por ejemplo, ahora mismo, lo hicimos Edit instantáneo y lo expusimos en spawn y agregaremos tres variables Tengo que hacerlo desde aquí porque cada vez que agrego una, no puedo agregar otra porque no variable es la primera variable y la considera algo único. Por lo que no puedo añadir un segundo ninguno. Entonces agregando el primer non, como pueden ver, no puedo agregar un segundo, pero si elijo uno de los botones, y el orden aquí es importante. Entonces el primer botón es el izquierdo de la forma en que estamos viendo ahora mismo. Entonces voy a agregar una segunda variable. La segunda sería la media y la tercera variable, la tercera sería la correcta. Ahora, como tenemos un orden de uno, dos, tres, y tenemos un correspondiente de botón, podemos establecer un código del cual es la forma correcta en que estos botones deberían funcionar. Así que volvamos con nuestro gerente de rompecabezas. Vamos a crear otro vari br que llamaremos contraseña correcta Y no va a ser del tipo map, va a ser del tipo array, y va a ser del tipo booleano, container array y type booleano container array y type Vamos a compilar y ahorrar. Vamos a sumar tres elementos. Y digamos que la primera y la última debería estar encendida, y esta es la contraseña correcta. Podríamos exponerlo en un spawn y editable, hacerlo editable, así podremos establecer contraseña que queramos de Ahora, recuerde, tantas piezas del rompecabezas que tengamos, que muchos elementos de matriz correctos con contraseña deberíamos tener. Para este tipo de acertijos que estamos haciendo, la forma en que lo estamos haciendo. Ahora, volvamos con el gerente de rompecabezas. Y lo que tenemos que hacer es agregar un actor como insumo sobre ambos eventos. Así que vamos a colocar este plus por aquí. Vamos a agregar actor y aquí vamos a agregar también un actor. Y vamos a llamarlo puzzle y vamos a copiarlo y pegarlo al otro evento también. Entonces lo que vamos a estar haciendo es cuando estamos encendiendo un botón, vamos a estar agregando a este mapa. Ahora bien, ¿por qué vamos a estar agregando? Porque los mapas tienen la propiedad única que cuando agregamos algo que ya existe, simplemente actualiza el valor. Entonces, cuando estemos encendiendo un botón, estaremos agregando algo. Estaremos agregando ese actor que ya existe, y estamos encendiendo sus lingotes Cuando estemos quitando cuando estemos apagando el botón, estaremos agregando lo mismo pero encendiéndolo. Entonces esto va a estar actualizando nuestro valor. Ahora, el siguiente paso sería tener una sucursal a la que conectaremos a ambos. Y aquí tendremos una condición de que crearemos una función, pero no la creemos todavía. Lo siguiente que debemos hacer es obtener nuestro plano de Dor, digamos, desbloquear mensaje o mensaje de registro Y conectar con verdadero o falso. Porque si se resuelve el rompecabezas, estamos desbloqueando. Si el rompecabezas es falso, estamos cerrando la puerta. Ahora, vamos a crear la condición. Para la condición, vamos a hacer una función. Vamos a llamarlo puzzle solve. En realidad solo rompecabezas resuelto. No necesita un signo de interrogación. No me gusta tener signos de interrogación en variables o funciones. Y éste va a tener una salida, y va a ser pura porque aquí no vamos a estar poniendo algo. El resultado serían los bullianos dicen puzzle resuelto también y compilar y guardar y lo que vamos a hacer aquí, es bastante sencillo Vamos a conseguir nuestras piezas del rompecabezas. Ahora, hay dos formas de obtener valores y claves. Llamamos al primero, beso, al segundo valores. Entonces conseguimos el beso, nos besamos, y obtuvimos los valores, en realidad solo valores. Entonces como pueden ver, éste recibe nuestro beso, la primera parte, y esta obtiene los valores, que es la segunda parte. Ahora, sólo vamos a obtener nuestros valores. Y vamos a obtener nuestra contraseña correcta y vamos a comparar las matrices. Como pueden ver, elegí lo idéntico. Presioné igual, pero también trae esto idéntico. Esto es lo que queremos. Estas dos matrices, debido a que se trata de una salida de matriz, queremos que sean idénticas. Si son idénticos, significa que la contraseña es correcta. Si no son idénticos, significa que la contraseña es incorrecta. Vamos a compilar y guardar, y más o menos vamos a traer la función también conectarlo por aquí , más o menos, ese es todo el código del gestor. Eso sería. Ahora, sigamos con el botón. Voy a compilar y guardar éste. Y antes de ir al fondo, en realidad, sí, sigamos primero con el botón. Presionemos en componente y agreguemos un cubo de dos puntos que vamos a necesitar para comprobar si el actor está al frente. Vamos a traerlo aquí para que no tengamos que redimensionarlo externamente Hagámoslo un poco más grande que el botón. Sí, creo que es una distancia fina, y compilar y guardar. Vamos a la gráfica de eventos. Y en realidad, vamos al rompecabezas de DR, y vamos a copiar estos eventos por aquí que nos muestran el widget y habilitan la entrada. Vamos a volver al botón y pegarlos por aquí. El widget de actualización, vamos a crear una función coincidente, confirmar, y vamos a entrar en esta función, compilar y guardar. Tiene este problema con el error con el modo de juego. Necesitamos el juego uno desde la jugada de inicio. Vamos a traer eso rápido. Entonces vamos a comenzar a jugar. En realidad va a copiar todo el volver al botón, y enfrentarlo por aquí y crear esta variable, y ahora se compilará. Ahora, volviendo al widget de actualización, tenemos este código sobre nuestro hígado. Entonces, si abro el hígado y voy al widget, solo puedes copiar esto y volver al botón. Y pegarlo por aquí, conectar esto por aquí, y lo resolví, lo vamos a usar o si está presionado o no. Entonces voy a crearlo como una variable, y vamos a cambiarle el nombre a EEO Y vamos a cambiarnos a vamos ¿O sabes qué? Hagámoslo un poco más bonito. Duplicemos este texto de Wigen de actualización, y pongamos esto si está encendido, enciéndalo Y esto se encenderá. Entonces ahora sabemos exactamente lo que está haciendo cuando lo estamos presionando. Y no olvidemos conectar el modo de juego en tercera persona, compilar y guardar. Volver a la gráfica par. Y vamos a crear nuestro insumo E. Voy a ponerlo por aquí. Necesitamos algo de espacio. Así que voy a ponerlo por aquí. Él atornilla E, aquí está. Y lo primero que vamos a necesitar es la línea de tiempo. Entonces voy a agregar línea de tiempo. Te lo explicaré en un segundo. Entonces, la razón por la que necesitamos primero la línea de tiempo es porque necesitamos preguntar si ya está jugando. Así que voy a traer el componente de línea de tiempo por aquí. Voy a preguntar jugando. Porque si ya está jugando, no queremos poder volver a presionar el botón. Entonces voy a poner una sucursal, vaya a conectarla aquí, vaya a ponerla aquí. Y si es falso, entonces significa que la animación del botón ha terminado. Entonces este es el momento de tocar un sonido. Reproduce el sonido. Y el sonido que reproduciremos es botón. Ahora, la siguiente pregunta, la siguiente pregunta sería, si un botón está encendido o apagado. Entonces me voy a conectar está aquí. Y si está encendido, voy a fijarlo a que no está encendido. Y si está arriba, voy a configurarlo para que esté encendido. Y luego lo voy a conectar a la línea de tiempo para jugar y revertir. Pero se necesita alguna explicación para esto porque esta línea de tiempo tendrá una pista de flujo diferente. Así que dejemos esto para la próxima vez, y te voy a ver entonces. Adiós. 28. Finalización de la puerta corredera del rompecabezas de botones con planos: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, creamos nuestro gerente, e iniciamos nuestro botón. Entonces nuestro manager, consiste en un mapa de piezas de rompecabezas que en una variable, tenemos los botones que necesitan estar en un orden específico y la segunda variable que es un booleano, que activamos y desactivamos agregándolo Y lo estamos agregando porque como propiedad de mapa, si estamos agregando el mismo elemento, entonces solo cambia el valor. Ahora, lo mismo estamos haciendo para eliminar, no quitarlo, apagarlo el valor el segundo valor, el booleano, con agregarlo de nuevo, sino agregarlo En una función que se llama puzzle solves, obtuvimos los valores del mapa y verificamos si las matrices, y comprobamos si las matrices son idénticas a la matriz de contraseñas correcta. Asegúrese de haber seleccionado cada botón en el orden correcto cuando los estaba agregando en las piezas del rompecabezas del mapa. Ahora, luego continuamos y copiamos algún código en nuestro botón, básicamente el comportamiento de la caja que cuando overlock la caja, estamos habilitando entradas y actualizando el widget y agregándolo a la ventana gráfica y eliminándolo de la Y también cambiamos el widget de actualización para decir, apagar y encender. Ahora, continuemos con nuestro evento apremiante de que estamos comprobando si se está reproduciendo la línea de tiempo. Si no se está reproduciendo, estamos reproduciendo un sonido, y estamos encendiendo y apagando el botón. Ahora, dije que esta línea de tiempo necesita algunas explicaciones por qué jugamos desde el juego y hacia atrás. Y para ser honestos, aunque los tuviera de esta manera, realmente no importaría porque lo que vamos a hacer dentro la línea de tiempo es que vamos a crear un camión de flujo que arranca de cero, sube alto en uno, y luego vuelve a cero. Entonces la primera variable sería cero, la segunda variable , digamos, para un botón, digamos que el total debería ser un cuarto de segundo, es un botón. Entonces 0.12 en algún lugar ahí, 0.12. Digamos 0.12, el valor es uno. Y luego a 0.24, valor vuelve a ser cero. Vamos a alimentarlo a la pantalla. Verás, no me encajaba completamente porque había seleccionado éste. Entonces, para ajustarlos a todos, los estoy seleccionando todos y luego ajustándolos, y selecciono usar el marco de último kin. Ahora, como tenemos esto arriba y abajo, realmente no importa si lo estoy jugando al revés o jugando desde el principio. Importa si realidad fue el primero, esto es lo que importa. La primera vez, no debería ser inversa. Debería estar en juego porque si la primera vez estaría aquí, en realidad querría jugar. Entonces sí, la primera vez importa, la primera vez importa ser del juego. Entonces de caídas, lo estamos encendiendo y estamos jugando. Ahora para el movimiento, vamos a conseguir nuestra malla Top, y vamos a traerla aquí. Lo arrastraré y soltaré. Voy a establecer la ubicación relativa. Vamos a dividir esto. Comprobaremos la ubicación. Es cero, cero, cero, así que si lo muevo de esta manera, -1.6 Creo que eso es un poco bajo. No va a mostrar mucho. Entonces tal vez al menos tres menos tres. Sí, creo que menos tres está bien. Así que volvamos a cero, y vamos a acechar en la dirección amplia De 02 -0.3. Y para el Alfa, vamos a conectar esto. Y ahora, porque tenemos esta diapositiva aquí arriba, significa que vamos de cero a -0.3 y de vuelta a cero Ahora, tenemos que indicarle al jugador que el botón está encendido o apagado. Entonces obtendremos la malla estática, y al terminar, cambiaremos el material. Entonces vamos a establecer material y vamos a conectarlo para terminar. Y a partir del material, vamos a seleccionar y la selección se basará en iso y si es falsa, va a ser el material que tiene ahora, que es este. Y si está encendida, debemos tener un utilería puesta. Entonces apuntalamientos aquí está. Entonces ponemos props en true y props off en false. Ahora, lo que vamos a hacer es actualizar nuestro widget. Entonces se enciende. Dice, encender o apagar. Y nuevamente, basado en el suyo, vamos a traerlo de nuevo. Vamos a la sucursal y vamos a conseguir a nuestro manager, y vamos a decir botón encendido si es verdad y botón apagado si no es cierto. Y para la pieza del rompecabezas, necesitamos una referencia a este actor. Entonces para hacer esto, vamos a simplemente arrastrar un cable y llamarnos a nosotros mismos. Y así es como traemos una referencia al actor que está haciendo algo. Se requiere hacer referencia a sí misma. Entonces, retrospectivamente, estos dos podrían ser el mismo evento. Como si tuviéramos un evento y estuviera agregando o quitando y en lugar de verificar la pieza del rompecabezas, estábamos enviando un booleano, y ese booleano está encendido funcionaría igual de bien, pero no habríamos usado la variable map, lo cual fue una buena demostración Entonces todo tipo de variable eso también es v. Creo que podemos ir a probarlo. Así que vamos a jugar. Vamos a mover los jugadores comienzan de nuevo por aquí. Y al menos creo que podemos presionar botones. Es apagar el widget cuando lo estamos presionando, así que, después de un poco de búsqueda del alma, me doy cuenta de lo que está pasando, y lo que está pasando es que copiamos la puerta. Entonces cuando llamo a bloquear y desbloquear la puerta, si vamos al código de puertas, estamos quitando el widget. Entonces esto se arreglará cuando arreglemos la puerta. Entonces nuestro butcon está prácticamente listo. Estamos presionando, se vuelve verde, estamos presionando de nuevo, está girando. Y no perdamos el tiempo. Vamos a empezar a empezar por la puerta. Entonces abramos el plano de la puerta. En realidad no necesitamos un widget en esta tienda, así que no necesitamos ni siquiera un tubo de colisión, así que todo este código puede desaparecer. Y además no se necesita el modo de juego, pero no se necesita la ubicación relativa. Entonces vamos a eliminar esto también. Vamos a crear las variables. En realidad no necesitamos ninguna de estas variables. Podemos despejarlos a todos de manera segura. Mantengamos el ángulo abierto que le cambiaremos el nombre. No necesitamos esto. No necesitamos a la tercera persona. Básicamente solo necesitamos la puerta y el ángulo de la puerta, y tampoco necesitamos las funciones. Tan bueno por funciones. Así que vamos a eliminar la animación de la puerta, y vamos a hacer que el evento de desbloqueo de la puerta desbloquee la puerta porque copiamos y borró los eventos y la puerta de la cerradura. Y básicamente, no necesitamos todo este código también. Sí necesitamos una sucursal, y al final cambiaremos de posición. No necesitamos el widget y no necesitamos la animación de puerta. Así que vamos a traer estos dos eventos, y vamos a mantener la línea de tiempo y el código que viene con ella. Ahora, realmente no nos importa el estado porque es un mensaje directo, bloquear o desbloquear. No vamos a necesitar esta sucursal. Nos quedaremos con este que tiene el código de ¿ya se está reproduciendo la línea de tiempo? Vamos a traerlo aquí. Y la razón por la que queremos esta rama es porque si la línea de tiempo vuelve a estar en cero, cuando estamos cerrando la puerta, no deberíamos volver a reproducir la animación de bloqueo. No deberíamos tocar ni siquiera el sonido. Entonces vamos a conectar los fuertes al sonido, y voy a conectar esto al sonido, y tenemos que elegir un sonido Y el sonido es tubo de puerta deslizante. Entonces vamos a seleccionarlo. Y claro, para el lado de bloqueo, vamos a cambiar el multiplicador a 0.8. Cuando desbloqueamos, queremos jugar. Y cuando cerramos, queremos dar marcha atrás. Aquí hay algún código que no necesitamos. Y movamos esto a un lado porque necesitamos algo de espacio para hacer lo mismo casi mismo o la segunda parte de la puerta. Entonces voy a traer esto aquí. Voy a copiar y pegar el conjunto relativo. Voy a conectar esto aquí, conecta esto aquí. Y voy a duplicar el larp y conectarlo a Z y también conectar Alpha Y este ángulo abierto, vamos a llamarlo desplazamiento abierto. Y vamos a traerlo aquí y conectémoslo aquí y aquí con B. Así que ese es nuestro objetivo. Bueno, en realidad, uno de ellos necesita ser multiplicado por menos uno. Así que vamos a comprobar cuál es cuál. Entonces la puerta número uno es la parte inferior. Entonces esto va a estar bajando. Y el desplazamiento está alrededor, no, no, no. Esto también es mucho. Entonces vamos a menos diez porque no empezó desde el principio. Entonces sí, menos diez de 124. Entonces 130, si agrego 130 más 130, eso es 230 más 130. No, lo siento, lo hice mal. Tengo que ir al final de esto y agregar 130 Sí. Entonces 254. 130 parece ser el truco. Así que vamos aquí. Digamos desplazamiento, necesitamos compilar es 130. Y el segundo es el primero. Sí, el primero es el que tiene que ser opuesto. Entonces multiplicamos esto por menos uno para que sea negativo, y conectamos esto aquí. Creo que esto es todo y podemos ir a probarlo. Juguemos. Primero pongamos nuestro propio abrigo. No. No. Yo hice algo muy raro. Entonces, y para ser honestos, tiene sentido porque los valores no son cero. No tenemos cero hacia fuera estos valores. Y este es mi mal. Se suponía que esta era la puerta corredera, y agregué la puerta abierta arriba y abajo. No sé cómo explicarlo. Así que en realidad voy a borrar la segunda parte, y sólo voy a poner la puerta correcta. Voy a seleccionar la primera parte. Y si, porque esta es la puerta corredera. Voy a seleccionar esto, encontrarlo en el navegador, y ponerlo por aquí. Fijar la báscula también. Ahora, se estaba moviendo muy lento porque habíamos copiado de la línea de tiempo desde la puerta corredera, el vuelco. Entonces son 5 segundos. Podemos cambiar esto a 0.5. Y eso sería todo. Y no necesitamos el segundo conjunto de puerta relativo. Entonces conectamos de nuevo esto aquí y eliminamos el segundo larp, y el desplazamiento veremos ahora mismo Esto debería ser en Y, no en Z. no vamos arriba y abajo, vamos de izquierda a derecha, entonces esto sería todo Si esto está en cero, 00, digamos que se mueve aquí. Entonces menos 140. Entonces pongamos menos 140 aquí, menos 140 y compilando guardar Vamos a jugar. No está correctamente posicionada. Sí, creo que está bien. Juguemos. Todo bien. Bien, está funcionando Ahora bien, como pueden ver, porque estos dos botones están muy cerca uno del otro, y si expulso y así colisiones, cuando salgo de este, ya he ingresado a este, así que elimina el widget Déjenme volver a demostrar. Si estoy aquí y voy aquí, se quita un widget, y no podemos verlo. Entonces lo que podemos hacer es mover esto un poco más allá, tal vez aquí, mover esto un poco más allá. Y esto lo arreglaría. Otra forma de arreglarlo sería haciendo un sistema que verifique esto. Realmente no escucho una diferencia de sonido al desbloquear. A lo mejor este debería ser tubería de punto más bajo. Eso es mucho. Entonces dejémoslo 0.7, y creo que va a estar bien. Y tal vez la puerta debería ser un poco más lenta. Entonces hagámoslo 1 segundo. Creo que la cantidad de sonido que se reproduce debería ser la cantidad de movimiento de la puerta. Sí, tal vez 1.2, pero dejémoslo como está y ya estamos listos para la habitación contigua. Que sería la puerta que se desbloquea con un artículo. No vamos a crear un sistema de inventario completo. Vamos a traer esto por aquí también. Y en realidad necesitamos un texto aquí. Voy a copiar esto por aquí. Y más o menos es bueno. Sólo vamos a cambiar el tamaño de la caja, y vamos a ponerla así. Eso está bien. Y cambiemos el texto también para decirlo así el rompecabezas para abrir la puerta. Y está bien como está. A lo mejor doble patearla, moverla un poco más allá. Bien, está bien. Ahora, al lado, la puerta de al lado estará usando inventario, y ¿qué es un inventario, básicamente? Básicamente, es una lista, nada más. Entonces tienes en esta lista algunos elementos. Y a partir de estos elementos, o los muestras en la IIU o los manipulas a través de tu juego con otras cosas No estaremos creando una interfaz de usuario que represente esta lista, pero sabremos que tenemos el ítem o no. Entonces vamos a dejar esta pelota la próxima vez. Te voy a ver entonces. Adiós. 29. Crea un sistema de inventario con artículos seleccionables: Hola, y bienvenidos de nuevo a Area Engine cinco Blueprint Mastery Door Systems y portales interactivos La última vez terminamos con nuestra puerta de botones que se abre deslizando. Ahora, lo que hicimos fue crear tres botones, y creamos un gerente que almacenamos la información de los botones. El gerente también tiene una contraseña correcta. Entonces, cuando los botones están en el orden correcto o en el estado correcto, la puerta se puede desbloquear. Básicamente, la puerta se abre. Cuando son falsas, vuelven a cerrar la puerta. Ahora, continuemos con nuestro inventario. Como dijimos antes, un inventario es sólo una lista. Entonces, lo que vamos a hacer, vamos a ir a nuestro personaje en tercera persona dentro de planos de carpetas de tercera persona, personaje de tercera persona, y vamos a crear una nueva variable Y lo vamos a llamar inventor R. Esta variable será del tipo string, y será una matriz. Hay muchas reglas sobre qué tipo de contenedor sería el inventario. Pero para nosotros, una cadena servirá ya que le daremos solo una identificación a nuestros artículos. Así que continuemos creando nuestro artículo. Vamos a ir a Blueprints. Vamos a hacer click derecho. Vamos a crear un nuevo modelo tipo actor de clase, actor clase, y lo vamos a llamar elemento BP Voy a abrirla. Voy a cerrar todas estas cosas no necesitamos el personaje también, acabamos de crear el inventario. No vamos a necesitar hacer otra cosa. Ese sería nuestro inventario, esta lista. Tener una interfaz de usuario para representar esta lista sería la parte visual del inventario. Pero además de eso, es básicamente una lista, y esa lista podría llamar a las estadísticas sobre los ítems. Pero no vamos a entrar en tablas de datos y todo ahora mismo. Así que volvamos a nuestro artículo y agreguemos sus componentes. Entonces, antes que nada, vamos a necesitar una malla estática para representar el elemento. No vamos a fijarlo ahora mismo. Lo siguiente que vamos a necesitar es una colisión de esfera. Ahora bien, por qué una esfera no es un cubo, una caja Porque es un poco más fácil que los artículos sean colisiones esféricas. Por ejemplo, con muros con Al el jugador no detecta el patrón. Hay mucha hipótesis sobre por qué debería ser una esfera o no o una caja. Personalmente prefiero una esfera para los artículos. Lo tercero que necesitaremos sería un componente de movimiento giratorio. Cuando haga clic en esto, veremos que queda un poco a la jerarquía. Si cierro esto, no pertenece a la raíz morosa Bueno, esto se debe a que este es un componente independiente, es un comportamiento que se puede adjuntar a un blueprint y podemos crear nuestros propios componentes de blueprint Déjame mostrarte muy rápido. Ir a clase Blueprint y podemos hacer un plano un componente actor Llamemos a esto mi componente actor. Presioné espacio en vez de manera esto, y vamos a dit my c Como se puede ver, estos componentes son entidades separadas y no pertenecen a la raíz de fallas No borres esto porque no lo necesitamos. Y aquí podríamos tener algún comportamiento guionado para todos los actores Por ejemplo, el comportamiento del widget podría haber sido así que no tendríamos que repetir la colisión y todo con el actor Hablando de esto, repitiendo este código. Vamos a abrir la puerta de múltiples interruptores realmente no importa. Una puerta que tiene este comportamiento del widget. Entonces vamos a copiar esto. Vamos a ir al ítem, y vamos a pegarlo por aquí. Voy a crear una función coincidente para la actualización del Widget, que vamos a rellenarla ahora mismo. Voy a ir a la otra función por aquí. Voy a copiar esto y pegarlo aquí. Promocionar todavía está disponible porque este es el modo de juego en tercera persona. Voy a decir aquí, pick compile y la caja necesita cambiar a la esfera, ¿eh? Ahora, tenemos un problema. Esta es una esfera, y esto es un colisionador de cajas. Podríamos simplemente cambiar esto. Pero lo que vamos a hacer es simplemente entrar en esta función, cambiar esto a lugar de box collider a actor componente Una referencia de objeto. Voy a desconectar esto. Voy a confiar en una caja de componentes. Creo que este es un componente de caja. Conviértelo en un elenco puro. Pongamos una rama. En realidad, no. Solo mantengámoslo tal como está. Vamos a conectarlo aquí, y luego voy a lanzar a esfera. La esfera no se extiende así. Componente fundido a esfera. Voy a traerlo debajo de él. Entonces, si es esto, vamos a hacer esto. Y ¿puedo hacer esto también? Bien. Entonces sí necesitamos convertirlo en un elenco puro. Voy a desconectar estas cosas. Voy a convertir esto en puro reparto. Voy a conectar esto también a un elenco puro. Y voy a hacer un selecto. Voy a conectar esto aquí. Entonces si es verdad, si es falso, hacemos esta rama, y la voy a conectar aquí. Entonces, volviendo a nuestro artículo, podemos conectar la lanza Entonces, ¿qué acabo de hacer ahora mismo? Lo que hice fue ir a nuestro evento al aire libre. Yo cambié. Sigamos con la caja también usar colisionador. El tipo de componente de caja desde colisión de caja hasta componente actor general. Entonces seguí adelante y pregunté: ¿Este componente es una caja? Si es una caja, entonces todo bien, consigue actores superpuestos. Si es una esfera, entonces todo bien, consigue actores superpuestos. Creo que esto es un poco exagerado, pero vamos a comprobar si funciona Entonces voy a volver una puerta, ¿dónde está el comienzo mismo Presionemos play. parece estar funcionando. Todo bien. Así que hice bien las pruebas. Estaba funcionando, si rezo ahora, solo necesito recompilar estos planos Al igual que, abrí la puerta del hígado y esto no fue compilado. Tenía una advertencia porque las cosas cambiaron, pero no cambiaron mucho, pero también cambiaron. Entonces, si vamos a cada plano y compilamos, en realidad, podemos simplemente guardar todo lo que pienso Nosotros decimos todos, ¿compila todo? Tener un choque. Sí, ya ves, porque esto no fue compilado. A la zona realmente no le gusta hacer esto en planos. Ni en SE plus plus ni en ningún lenguaje de programación, hay que compilar realmente las cosas. Pero la compilación de Blueprint es mucho más rápida. Solo tienes que pulsar el botón compilar y sucede instantáneamente. Pero por eso también dicen que no debería haber muchos cambios en el código. Al igual que cuando tienes un código core, no deberías cambiarlo mucho. Creo que ya está. Creo que lo compilé todo. Genial. Ahora, voy a cerrar todos los ups a la derecha. Sólo me voy a quedar con el artículo. Y arreglemos los demás errores. Ahora el otro error es que estamos buscando una superposición de caja donde tengamos la superposición de esfera. Entonces voy a dar click en la esfera, ir a los eventos de superposición, comenzar solapamiento y solapamiento. Básicamente son los mismos eventos solo para la esfera en lugar de la caja. Entonces voy a controlar y conectar estos cables aquí. Asegúrate de conectarlo a los correctos, otro componente y no a nada más. Voy a traer esto aquí, traer esto por aquí, y tal vez debería haber escrito el código desde el principio, pero todavía tendríamos que cambiar esto. Entonces, cambiar esto a un componente de actor general y el casting al componente de lanza y al componente de caja parece haber funcionado Y ahora podemos tener cualquier colisionador básicamente entre estos dos, o podemos aumentar esto o hacer un sistema diferente aquí básicamente, o un paso previo Entonces ahora que tenemos el widget de actualización, en realidad necesitamos una última parte. Tenemos que conseguir el modo de juego. No, perdón, no ese modo de juego y elenco a GM. No, al modo de juego en tercera persona, convierte a reparto puro. Y voy a traer un setter y poner esto ahora, vamos a poner nuestras medidas estáticas Entonces para hacer esto, vamos a ir a Construction Script, y vamos a crear un mini sistema de ID de ítem. Vamos a llamarlo item ID system. Entonces tendremos una nueva variable. Vamos a tener que ser string, y vamos a llamarlo item ID. Ahora, haremos que sea instancia editable y expondremos en spawn Ahora, obtendremos nuestra malla estática. Vamos a establecer malla estática porque este no es este conjunto malla estática, establecer estática la función establecer malla estática, esto se establece el componente. Queremos establecer la función. Entonces, ¿por qué la función? Debido a que se trata de un componente de malla estática, y queremos establecer la malla de este componente. Vamos a hacer un selecto vamos a traer. No podemos hacer una selección y una cadena. Entonces lo que vamos a hacer es encender cadena. Voy a eliminar esta selección. Voy a duplicar esto y conectar esto por aquí. Vamos a tener dos casos, y vamos al caso cero aquí y al caso uno aquí. Ahora, para las medidas estáticas, vayamos a nuestro mapa. Seleccionemos nuestro triángulo vacío no collar. Va a cerrar el juego también. No lo necesitamos. Necesito encontrarlo y agregarlo por aquí. El mismo para el siguiente triángulo. Vamos a encontrarla y agregarla por aquí. Ahora, hagamos los casos. Entonces voy a tener esto que decir ID uno. Llegué aquí seleccionando el switch on string, y el segundo dirá ID dos. Y voy a quitar el pin tiene por defecto. Esto se desconectó porque cambié el nombre. Entonces nuestro artículo correcto es ID dos. Vamos a establecer un ID predeterminado, ID uno. Y si compila ahora y voy a Viewport, podemos ver que tenemos este triángulo por aquí y que nuestra colisión es muy pequeña Entonces aumentemos la esfera de colisión. Vamos a establecer un radio de 150. A lo mejor eso es mucho. Vamos a establecerlo 120100. Sí, 100 parece estar bien. Compilemos y guardemos, y llevemos nuestro artículo a nuestro mundo. Tenemos un artículo aquí y un artículo aquí. Ahora, quiero cambiar este ítem para que sea el correcto. Voy a ir a ID por aquí y seleccionar ID dos. Y tada, se convirtió en el otro ítem. Creo que esto es suficiente para éste. Te voy a ver en la siguiente. Adiós. 30. Trabajo básico para una puerta de ciencia ficción que requiere elementos clave: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery, Door Systems y Anteriormente, comenzamos a crear nuestros elementos, e iniciamos el modo de juego al comenzar a jugar como una variable, y copiamos este código para la superposición de inicio y fin de la caja y la cambiamos a una esfera. Ahora, también cambiamos la función add Door widget a event. En lugar de ser un colisionador de cajas para ser un componente actor. Y luego usamos este componente actor para emitir para verificar si es una caja o si es una esfera y obtener los actores superpuestos. Este es el guión de construcción equivocado. Queremos el script de construcción del ítem. Creamos un ID de elemento y cambiamos en base al ID, basado en cadena. Y en el caso uno de ID uno, establecemos la malla estática del ítem al triángulo. Y en el caso dos, establecemos la malla estática al triángulo que tiene algo de color. Ahora, continuemos con el código para agregarlo a un inventario. Lo que vamos a hacer es exactamente lo mismo. Cuando presionemos E, estaremos interactuando con este ítem. Entonces vamos a traer el teclado E. Todo bien. Y lo que queremos hacer queremos que suceda sólo una vez. Entonces lo que hacemos en la prensa es hacerlo una vez. Y no nos importa reiniciar porque no tenemos un inventario que se llene ni nada por el estilo. Ahora necesitamos una referencia al jugador. Y no sólo el jugador, déjame cerrar el juego. No lo necesitamos, no sólo el jugador, sino la instancia del personaje que está en el mundo de la plantilla de tercera persona, personaje de tercera persona. Entonces vamos a conseguir el panel del jugador. Esto nos da la instancia actual de lo que el jugador está poseyendo. Entonces vamos a emitir a personaje en tercera persona. Entonces básicamente, estamos recibiendo la pata actual y estamos preguntando, ¿ eres el personaje de tercera persona? Ya que sabemos que en nuestro juego, este siempre va a ser el caso. Lo convertí a un purecast y voy a conseguir inventario Y este es el inventario actual del personaje que está recorriendo el mapa. Para agregar algo aquí, solo vamos a presionar Agregar porque esta es una función de matriz, pero no funciona como el anuncio de mapa. En este caso, si hubiera un ítem que compartiera el ID, también lo agregaría como otra entidad a esta lista. Entonces si tuviera, como, dos de ID uno, entonces esta lista se llenaría con dos versiones de ID uno. Entonces esto básicamente sería. Esto sería actualizar nuestro inventario, y cuando lo hagamos, acabamos de destruir a Actor. Y esto destruiría al actor en el mapa, por lo que el ítem desaparecería. Y eso es todo. Eso es todo tener un artículo, recoger un artículo que vamos a hacer. Así que vamos a probarlo. Vayamos a nuestro mapa y traemos el inicio de los jugadores. De vuelta aquí, y podemos recoger esto y podemos recoger esto. Ahora, sólo para demostrarlo, vayamos a nuestro artículo. Y a partir de aquí, vamos antes de destruir, hagamos un bucle for. Para cada bucle, y para el cuerpo del bucle, vamos a imprimir cadena, que será el elemento array, es decir, el ID que acabamos de agregar aquí. Creo que lo hice silenciosamente, pero creo que ya lo entendiste. Entonces, cuando escoja el primer artículo, va a ser ID uno, cuando elijo el segundo, deberían ser los dos. Sí. Entonces nuestro inventario está funcionando. Vamos a conectar esto de nuevo aquí. Eliminemos esta depuración y compilemos y guardemos. Ahora, para la puerta, vamos a copiar la puerta de múltiples interruptores. Vamos a ir a Blueprint Doors multi switch door, y vamos a duplicar Y llamémoslo ítem D. Muy bien. Bueno, tal vez la puerta del artículo no es un buen nombre. Vamos a llamarlo puerta llave porque requiere un artículo. Consideremos este ítem como una clave. Así puerta llave. Llevemos la puerta de la llave también al nivel. Y vamos a abrirlo. Ahora, esta vez, voy a usar la puerta correcta, la que queríamos. Yo quería usar antes, que es esta parte de aquí. Creo que la parte inferior debería ser una. Ahora, en realidad, la parte superior debería ser una. Así que encuentra esto y colócalo aquí y voy a restablecer su ubicación también. Y voy a seleccionar el siguiente, encontrarlo y duplicarlo, Control C, Control V, y también configurarlo por aquí. Entonces ahora voy a arreglar las rotaciones también. Todo bien. En realidad, no, las rotaciones fueron correctas. Esta es la flecha de aquí. Entonces esta es la parte frontal. Entonces voy a traerlo aquí arriba. Muévelo un poco de esta manera y también arregle esto. Creo que este, Oh, no, sí tenemos el comportamiento del widget. Está bien. Compilar y guardar. Actualicemos nuestra línea de tiempo de animación para incluir la segunda puerta. Así que voy a mover esto por aquí. Es bastante fácil. Cuando obtienes la mano de ello, qué hace qué, qué es dónde, es más fácil manipular el código y agregar las cosas remove. Así que vamos a duplicar del conjunto de rotación del conjunto ubicación del conjunto de rotación del conjunto porque estos son muñecos en movimiento. No son muñecos rotativos. Y voy a traer la segunda puerta por aquí. Y sí necesitamos de nuevo este nodo larp para el eje establecido. Sí necesitamos conectarlo a Alpha. Y para los valores, tenemos una ubicación relativa aquí. Vamos a borrarlo. No es necesario. Entonces vamos a empezar a jugar, eliminar esto también y la variable y los acertijos, no los necesitamos. Y el ángulo abierto, no lo necesitamos. Esta variable, creo que no es necesaria. Sí, no lo fue. Si lo fuera, lo diría, y eso sería todo. Pongamos el escenario a bloqueado y volvamos a los valores. Entonces los valores. Este comienza en vamos a redondearlos hasta 51 25. Y éste está, de nuevo, al 51 25. Bien, están un poco estirados. Entonces arreglemos esto. Todo bien. Entonces esto es 115. ¿Esa es la correcta? Hará 115. Lo va a hacer. Bien, entonces empezamos 51 15. Entonces esta es la puerta número dos. Va y es 50, y esto es 115. Y el siguiente es 51 25. Nuevamente, Y 50, y a serían 125. Ahora, por donde van, éste va a 20. Entonces 20, y el de abajo va a menos cuatro menos cinco. Menos cinco. Genial. Tenemos nuestra animación completa. Lo siguiente que haremos es borrar el código porque esta puerta no se desbloquea ni se cierra desde otro lugar. Estaremos usando nuevamente la prensa E para estar comprobando si el jugador tiene la llave. Entonces no necesitamos los acertijos de verificación para obtener respuestas, y no necesitábamos estas dos funciones, estos dos eventos también. Los eventos que acabo de eliminar fueron el evento bloqueado Door y el evento Unlocked Door, que vienen de la interfaz que copiamos y la función check puzzles. Bien. Entonces tenemos claro ir y comenzar a codificar. Pero creo que esto es algo para la siguiente lección. La voy a dejar aquí por ahora. Adiós. 31. Bloqueo y desbloqueo de puertas con un sistema basado en artículos: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, door Systems y Anteriormente, terminamos con nuestra animación de puerta. Agregamos la nueva malla estática. Establecemos los números que hay que establecer, y también borramos el código de la puerta de la llave porque lo copiamos de la puerta de múltiples interruptores. Ahora, sigamos con la prensa E. Así que vamos al teclado E e iniciaremos la programación. Lo primero que tenemos que hacer es verificar si nuestra puerta está cerrada con llave. Entonces voy a traer una sucursal. Voy a conectarlo por aquí. Va a traer la puerta estado y comprobar si el IAM es igual a bloqueado Si no lo es, vamos a animar la puerta. Entonces estamos llamando a la animación de la puerta. Ahora bien, si no lo estamos, si está bloqueado, entonces necesitamos revisar el mecanismo de bloqueo. Así que vamos a crear un evento para clientes. Y nombra mecanismo de bloqueo que vamos a llamar aquí. Y nuestra E está completa. Ahora, vamos a programar el mecanismo de bloqueo. Lo que necesitamos primero es una nueva función que tenga una salida de un booleano Y llamemos a esta llave encuadernada. Dentro de esta función, vamos a conseguir capa de pata y de nuevo lanzar a tercera persona, así conseguimos nuestro inventario actual. Vamos a conseguir inventario de nuestro elenco. Ahora, con matrices, a excepción de AD, tenemos otro nodo especial que se llama punto, que puede encontrar un elemento, un elemento de la matriz dentro la matriz y devolver el índice de ese elemento. Cual será el ítem. Vamos a promover estas dos variables. Vamos a llamar a este ítem requerido. Vamos a hacer que sea instancia editable. Vamos a exponerlo en span también, compilar y guardar, y si traigo una rama, necesitamos un lingote de alguna manera Necesitamos tener un verdadero o falso. Entonces la pregunta aquí sería que es el índice mayor o igual a cero? Porque si está en los negativos, significa que no lo encontró. Si va a menos uno, significa que no se encuentra el artículo. Y voy a conectar esta condición por aquí. Si se encuentra el artículo, voy a eliminar del índice de eliminación. Ahora, asegúrate de elegir el índice de eliminación y no el elemento de eliminación porque estos dos funcionan de manera completamente diferente. Como puedes ver, esto elimina todas las instancias de item de un item de la matriz, donde esto simplemente elimina el índice que estamos llamando. Voy a conectar esto con la verdad. Y ahora tenemos un nodo de retorno. ¿Cómo hacemos esto? Bueno, podemos tener dos nodos de retorno. Esta es la magia, y conectamos esto aquí y decimos que se encuentra clave, y podemos conectar esto aquí y decir que la clave no se encuentra. Y claro, conecta el índice por aquí. Cuán duplicado esto controlo C copiar y pegar controlado. Así que básicamente, vamos a copiar y pegar estos dos de aquí a puro reparto. Entonces no tenemos tantos cables cruzados, y puede tener un poco más de sentido. Ahora, ¿qué hacemos? Obtenemos el inventario, comprobamos si podemos encontrar el artículo. Si no podemos, regresamos no encontramos ninguna llave. Si lo hicimos, lo estamos quitando y regresando que encontramos una llave. Y vamos a nombrar esta función, check o key. Y vamos a traerlo aquí a nuestro mecanismo de bloqueo. Entonces necesitamos una sucursal. Si encontramos una llave y la retiramos, deberíamos establecer el estado de la puerta para que se cierre de cerrada. Deberíamos actualizar Widget, pero no hemos establecido los textos, y sí necesitamos una variable para decir bloqueada y establecerla en false en realidad, no necesitamos esta variable. No sé por qué lo necesitamos. No hay necesidad. Nosotros sí tenemos el estado. Y hablando de estado y widget, vamos a arreglar nuestra actualización de widgets. Y necesitamos el estado de la puerta. Necesitamos un interruptor. Y no necesitamos este selecto. Simplemente copiaremos esto tres veces cuando esté bloqueado, dirá bloqueado. Cuando esté cerrado , dirá abierto. Y cuando esté abierto , dirá cerrar. En realidad, vamos a tenerla por cuarta vez. Eso no diría nada. Entonces, en el peor de los casos, vemos que E. Así que sabemos que tiene errores durante la apertura y el cierre Verás, cosas como esta son solo unos pocos nodos, básicamente, un nodo extra. Pero cuando estás jugando y ves un bug que has diseñado para ser molestado, como, oh, está mostrando un widget mientras se abre ¿Por qué? Y deja claro cuál es la culpa. Así que tener algunas pistas de profundización para ti siempre es bueno. Ahora, sigamos con bien, sí necesitamos mostrarle al jugador que la puerta ha sido desbloqueada. Solo hagámoslo agregando un lugar por aquí. No vamos al sonido desbloqueado. Realmente no me gusta el sonido desbloqueado para esto. Quiero decir, es una especie de sonido clave. Entonces tal vez suenen los botones. Usemos el sonido del botón. Entonces tenemos una manera de decirle al jugador que se ha desbloqueado la puerta. Debería intentarlo de nuevo y esta vez se abrirá. Ahora bien, cuando estamos en caídas, deberíamos traquetear la puerta, pero esta puerta realmente no puede sonar Se coloca muy mal. ¿Qué fue esto? Por lo que vi, el de abajo es entrar en 115. Todo bien. Coloquémoslo todo correctamente. ¿Correcto? No parece ser una puerta cerrada. Es decir, sí tiene estos spots quizá de los que disparar. No lo sé. Entonces lo colocamos aquí. Lo estamos desbloqueando con nuestra llave. Deberíamos tocar un sonido aquí, no debería ser ascensor. Debería ser la puerta de la Ciencia Ficción. Aquí está. Así que la puerta de Sci Fi por aquí, puerta de Sif por aquí Y en la ropa, multiplicador 0.8 pitch. Está bien. Todo bien. Ahora, volvamos al sonajero. Esta puerta no traquetea básicamente. Esta puerta debería hacer otra cosa y otra cosa que vamos a hacer es cambiar este color y hacer probablemente un sonido. Pero dejemos esto para la próxima vez. Te vamos a ver entonces. Adiós. 32. Agrega efectos visuales para mejorar las interacciones de puertas de ciencia fi: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery, Door Systems y Anteriormente, terminamos con el código para verificar si nuestra puerta está cerrada o no usando la llave E y una sucursal. Y si está bloqueado, estamos activando el mecanismo de bloqueo, y si no lo es, estamos activando la animación de la puerta Ahora, para nuestro mecanismo de bloqueo, utilizamos un cheque por función de llave que estamos obteniendo el inventario del jugador. Estamos encontrando si existe el artículo requerido, y si lo es, lo estamos retirando del inventario. Si no lo es, estamos regresando que no encontramos ninguna llave, y encontramos clave si la encontramos. Entonces creamos una sucursal, y en base a esto, usamos la puerta que se quedó cerca. Actualizamos el widget, y tocamos un sonido para expresar al jugador que la puerta ha sido desbloqueada. Y hablamos de crear nuestro nuevo mecánico de sonajero. Vamos a llamarlo reventar personalizado y llamarlo sonajero, que no será un sonajero, pero va a ser interesante Ahora bien, ¿cuál será la parte interesante? Lo interesante es que usaremos un nuevo nodo llamado D N y es un poco difícil de encontrar. Creo que lo pasé, aquí, esto do N. Como tenemos el do una vez, este es un nodo que permite que ejecución pase varias veces y luego se detiene. Esto es útil para limitar cuántas veces puede ocurrir una acción durante el juego, por ejemplo. Ahora mismo, para nuestro sonajero, lo que hacemos es cuatro veces, vamos a estar cambiando el material de la puerta Voy a obtener ambos de estos va a obtener material realmente establecer material obtener material, establecer material y conectarlos a ambos aquí y hacer una selección de aquí del material. ¿Qué voy a utilizar para el índice? Bueno, voy a usar un nodo flip lock, y seleccionaré el is A. Y luego voy a conectar los dos aquí porque quiero que la ejecución del flip flop sea la misma. Yo solo quiero diferenciar entre A y B. Cuando corre de A y cuando corre de B. Y para el material para los pliegues, queremos el original, así que esa será puerta vertical, vertical. Y entonces supongo que esto va a ser puerta vertical. Rojo. Ahora bien, si conecto esta chancleta directamente al D N, esto va a pasar tan rápido que no voy a llegar a verlo. Entonces voy a poner un retraso aquí. A lo mejor un poco más de espacio y conectar el delay a la chancleta. Ahora para el retraso, 0.2 es un poco grande, así que voy a convertirlo a 0.1. Para volver a llamar al D N, voy a llamar sonajero Entonces sonajero se está llamando aquí. Corre y se llama a sí mismo, y correrá un total de cuatro veces. Ahora, como un jugador puede probarlo muchas veces, sí necesitamos reiniciarlo. Entonces voy a hacer un evento personalizado y llamarlo reset. Hacer traqueteo. Y estaremos reiniciando cada vez que el jugador intente abrir la puerta Entonces reinicia, haz traqueteo. Toquemos un sonido también después de que empecemos a traquetear en realidad antes, vamos a tocarlo aquí Reproducir Sonido a D. Y el sonido sería negado. Sí, permiso denegado. Juguemos. Todo bien. Sí tenemos un problema con los widgets, pero creo que es porque todos estos se superponen. Así que voy a sacar esto un poco más lejos, tal vez aquí. Sí, está funcionando bien, obtener el artículo equivocado, no funcionar, obtener el artículo correcto Todavía no está funcionando. Y eso es porque no le hemos dado a la puerta un artículo requerido. Entonces ID dos es el artículo requerido. Vamos a equivocarnos. No está funcionando. Vamos a conseguir el correcto. Se abre. Genial. Es un poco lento. Esta es la puerta más lenta jamás creada. Cerré lentamente. Entonces arreglemos esto. Vamos a nuestra línea de tiempo. Y pongamos esto a, no sé, 1 segundo. Usando el último fotograma clave, todo bien. Y cambiemos también el material de la puerta cuando la estemos desbloqueando. Hagámoslo verde. Entonces voy a ir a nuestro abierto por aquí, tocamos sonido. La puerta está desbloqueada y consigue la parte superior. Este conjunto de material. Eso podría ser vertical abierto. Compilar y guardar. ¿Qué pasó ahí? Creo que debe ser loaden shader o algo así. Entonces está abierto. Yo cierro. Cuando termina de abrirse, no me muestra el widget. Cuando está abriendo y bien, así que vayamos a la puerta de la llave. Actualizar el texto del widget, puerta cuando esté cerrada. Yo soy no me estoy superponiendo. Bien, entonces este es el tema. El código es correcto. Está ahí. Es solo que la caja es un poco pequeña. En realidad, voy a cambiarlo a partir de aquí. Sí, creo que está bien. Así que consiguiendo la llave otra vez. Todo bien. No, sigue sin mostrar el widget cuando la puerta está cerrada al abrir. Bien. Entonces solo voy a conectar esto aquí. Y ambos agregan de nuevo el widget de puerta. Quiero volver a ver lo negativo. Ah, me gusta mucho lo negativo. Derecha. Está funcionando correctamente. Genial. Y ahora chocamos contra una pared de ladrillos. Entonces supongo que es el momento de hacer la puerta de teletransporte, que usaremos este increíble teletransportador, que también tiene pegamento de fiesta Para ello, vamos a crear un nuevo plano. Vamos a las puertas de la carpeta. Vamos a crear una nueva clase de actor de planos y llamémoslo BP teletransportador Compilemos y guardemos, y comencemos agregando los componentes del teletransportador Por supuesto, necesitaremos una caja de colisiones. Entonces, la colisión de caja sería de un componente. Necesitaremos malla estática para nuestra malla teletransportadora, y necesitaremos una partícula Creo que es partícula de Niágara. Aquí es un componente del Niágara. Agrega un sistema Niagara. Y también necesitamos una flecha. Ahora, seleccionemos nuestra malla que será la malla del teletransportador Vamos a atarlo y colocarlo por aquí. Y sí necesitamos girarlo, ¿verdad? Y para el partigi del Niágara, vamos a seleccionar el partige Lo vamos a encontrar también y agregarlo por aquí. Ahora, vamos a rotar esto Sí. Creo que ya está. Y nuestra caja debería ser un poco más grande y ancha, un poco más al frente. Eso está bien. Y llevemos nuestro teletransportador al mapa ¿Correcto? Y hagamos visible también la habitación contigua. A lo mejor muévelo un poco aquí. Y también vamos a duplicarlo aquí y vamos a rotarlo para enfrentarlo de la manera correcta. Hay una razón para ello que necesita estar enfrentando de la manera correcta. Pero vamos a continuar con esto en la siguiente lección, y aquí es donde la vamos a dejar esta vez. Adiós, nos vemos en la siguiente. 33. Crea un teletransportador para transiciones de nivel dentro: Hola, y bienvenidos de nuevo a Unreal Lensing cinco Blueprint Mastery Door Systems Anteriormente, terminamos con nuestra llave requiriendo puerta, y comenzamos nuestro teletransportador Agregamos algunos componentes y mallas, y agregamos la partícula de Niágara y la caja de colisión Sigamos con la programación del teletransportador. Vamos a usar el evento begin overlap de la colisión, y vamos a lanzar a dos personajes en tercera persona porque solo nuestro personaje debe moverse, y queremos una referencia al personaje también. Ahora bien, ¿cómo trasladamos a nuestro personaje de aquí a aquí, donde podríamos establecer la ubicación del actor Pero hay una nota especial llamada teletransporte. En motor irreal, y nos da dos entradas, destino y ubicación de destino y rotación de destino, lo cual es bueno porque cuando nos estamos teletransportando, queremos rotar al personaje de cierta manera Entonces no se teleporta y mira hacia atrás, por ejemplo, hacia la puerta del teletransportador Pero antes de continuar y averiguar dónde debería estar esto, toquemos también un sonido, que sería el sonido del teletransporte Tenemos este sonido, pero me gusta mucho este, el sonido de teletransporte VR Ahora, esto está incluido en el motor en caso de que no puedas verlo en tu cajón de contenido en la configuración, puedes habilitar el contenido del motor. En algún lugar mostrar contenido del motor. No lo hice clicar, pero esto debería estar haciéndola visible Ahora, continuemos con nuestra ubicación de destino y rotación de destino. Lo que vamos a utilizar para esto es que vamos a crear un sistema por aquí usando una escena así que vamos a agregar una escena, ¿qué es una escena? Básicamente, es sólo un punto. Entonces estamos hablando este punto que podemos mover a la izquierda justo ahí arriba, y podemos crear una referencia a él porque es llamémosle la raíz de la cápsula de teletransportación Esta será la raíz de la cápsula de teletransportación, y podemos tener podemos referenciarla donde está, donde se gira hacia dos y todo Pero no vamos a hacer sólo eso. Vamos a agregar una colisión de cápsulas. Eso va a ser engendrado en la escena. Así que cada vez que movemos la escena, también movemos la colisión. Debido a que no se agrega en el lugar correcto, solo vamos a restablecer su ubicación, transformarlo, y se cortará a la raíz. Ahora, también vamos a aumentar esto para que sea el tamaño del jugador. Creo que el jugador es que no puedo recordar nada que ver. Voy a abrir el jugador, seleccionar la cápsula. Sí, media talla de los 90. 90 es de tamaño medio, y el radio es 35. Eso va a ser delgado. Así que 35 de radio. Y ahora mismo, sabemos exactamente dónde va a desovar la cápsula del jugador Y agreguemos también una flecha. Voy a seleccionar de nuevo, el componente raíz porque no quiero que se agregue a la cápsula. Quiero que se agregue al componente raíz, y flecha y también restablezca su posición. Y ahora podemos ver claramente dónde está el jugador y hacia dónde está mirando. Así que voy a poner esto por aquí. A lo mejor aquí más adelante aquí. Creo que está saliendo y está cayendo aquí. Sí. A lo mejor más por el aire. Todo bien. Vamos a continuar. Ahora, no nos queremos cápsula y componente radicular. Queremos los objetivos, cápsula y el componente raíz. Entonces lo que vamos a hacer es crear otra variable, vamos a llamar target, el puerto, la y vamos a exponerla y hacerla span exponer en spawn también insens editable, y será del Vamos a compilar y guardar e ir a Teporter desde los detalles, vamos a seleccionar el otro teletransportador, y para el otro teletransportador, vamos a hacer lo mismo con este A lo mejor está un poco lejos. Así que vamos a seleccionar la raíz. Sí, creo que es una buena distancia. Y ahora en nuestro reportero de BPA, vamos a compilar. Y para el destino, vamos a utilizar a este reportero objetivo. Va a conseguir flecha porque eso es lo que necesitamos. No necesitamos la cápsula ni las manchas, para ser sinceros. Flecha hará el trabajo. Asegúrate de que sea la flecha uno porque la flecha se usa para el plano original Entonces nos vamos a transformar. Pero vamos a conseguir que el mundo se transforme porque queremos que esté en una ubicación mundial y rotación. Esta vez no estamos usando ubicación relativa local o rotación porque no queremos que sea relativa al plano Queremos que sea relativo al mundo. Entonces, por ejemplo, si voy aquí y selecciono este teletransportador y selecciono la raíz y la roto, quiero que se rote hacia aquí, base en el mundo, no hacia aquí, con base en el plano Ahora bien, ¿qué es también transformar? Bueno, una transformada es estructura de elementos de tres vectores básicamente. Y si lo rompo, podemos ver que tiene una ubicación, una rotación, y una escala. Entonces voy a conectar la ubicación a la ubicación de destino y la rotación a la rotación de destino. Y esto concluirá nuestro teleportal. Traigan nuestra cápsula por aquí. Presionemos play. Y nos estamos teletransportando Todo bien. Creo que esto es para éste. Te voy a ver en la próxima. Adiós. 34. Diseña una puerta basada en la física con programación de blueprint: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery Door Systems y Anteriormente, terminamos con nuestra puerta de teletransporte. Creamos un sistema usando una cápsula y un componente de pecado raíz y una flecha. En realidad solo necesitábamos la flecha, pero tenemos la cápsula para ver la colisión de nuestro jugador y el componente raíz para moverlo todo el tiempo. Ahora, usamos esta flecha para obtener la transformación que rompimos a los tres vectores y usamos la ubicación y rotación para usar el nodo de teletransporte para destino y destino de rotación Y luego tocamos el sonido. Y todos estos fueron desencadenados por el solapamiento de la caja del teletransportador. Eso es más o menos. Ahora es el momento de crear la tienda de física. Vamos a ir a nuestras puertas de carpeta. Vamos a hacer click derecho. Vamos a crear una nueva clase de modelo de actor tipo Voy a llamarlo PP Physics Door. Y vamos a abrirla. Ahora, para este plano, vamos a necesitar dos mallas estáticas Y vamos a seleccionar el mensaje. En realidad, es sólo una. Va a estar poblando ambos, y solo rotaremos uno de ellos. Y muévelo un poco. Estas puertas no deben estar tocándose. Vamos a moverlos un poco al centro del plano Deberían tener un hueco entre ellos porque como van a ser tienda de física, va a estar molestándolo si se están tocando Ahora, compilemos y guardemos, y llevemos al mundo a nuestro actor. Creo que hace falta que se mueva un poco por aquí. Todo bien. Lo siguiente que vamos a hacer es ir habilitar la física a estos elementos. Entonces voy a seleccionarlos a ambos. Voy a ir a la pestaña de física. ¿Dónde está la física aquí esta y seleccione simular la física. Pero eso no nos va a ayudar mucho porque si voy a jugar ahora, podemos ver que simplemente tropezan por ahí Esto no lo es en absoluto. Esto es solo escombros. Entonces eso es lo que queremos. Agradecidamente, hay algo que se llama física. Restricción, que es lo que vamos a utilizar ahora. La punta de la herramienta dice que esta es efectivamente una junta que le permite conectar dos cuerpos rígidos entre sí. Se pueden crear diferentes tipos de juntas utilizando los distintos parámetros de este componente. Bien, la palabra clave aquí, crea algo así como una articulación, como una bisagra. Nos permite controlar la rotación y los límites de movimiento, como los brazos mecánicos, por ejemplo, o el comportamiento de la muñeca de trapo en más avanzado Pero para nosotros, solo lo usaremos para establecer los límites para crear una puerta dinámica. Entonces, continuemos con ¿cómo usamos la restricción física? En primer lugar, tenemos que nombrar las puertas. Y entonces vamos a necesitar dos restricciones físicas. Entonces vamos a tener uno. Agreguemos una flecha. Entonces sabemos dónde está el frente. Bien, frente al plano es por aquí, pero realmente no nos importa eso Sólo vamos a rotar la flecha y desparentarla de la malla estática Sólo tienes que ir a rotar esto Muy bien. Y llama a esta puerta y a esta DR. Entonces esto estaría constreñido L, y esto estaría restringido. Y compilar, son opuestos en orden, pero no importa. Lo que vamos a hacer es seleccionar la primera restricción de visita. Y voy a bajar a la configuración y decir componente un nombre. Aquí, vamos a usar la puerta L. Asegúrate de que esta puerta L sea exactamente la misma que esta. Sin espacios adicionales, la capitalización podría ser importante. No estoy muy segura porque si no lo es, no va a funcionar. Ahora, como pueden ver, ya ha tomado la forma de nuestra puerta. Básicamente, nos muestra los límites de la malla, pero nos muestra también con esta línea por aquí que donde está nuestro pivote Entonces vamos a movernos a esta esquina de aquí, y este es nuestro pivote. Lo siguiente que vemos son los círculos redondos alrededor del punto de pivote. Lo cual deberíamos ir un poco más allá aquí. Bien. Ahora bien, ¿qué son estos círculos? Bueno, vamos a ir a continuación y veremos algunos límites angulares. Ahora, para nosotros, solo necesitamos un movimiento, así que bloquearemos el segundo, y bloquearemos el giro. Además, sólo queremos que sea en esta rotación, y vamos a establecer la primera rotación con un límite, y el límite sería 90 45 es un poco pequeño. Y se puede ver que nos muestra los límites de la rotación. Ahora vamos a hacer lo mismo por Dor R. Vamos a uno de estos por aquí. Vamos nombre R. Vamos a poner esto a bloqueado, y este es el límite y 90. Pero es opuesto. Sí necesitamos rotarlo. Ops. Bien. Y vamos a rotarlo 180. Así que vamos a probarlo. No va a funcionar perfectamente, pero es un buen comienzo. Vamos a traer aquí nos importaba, y estamos de paso, y la puerta se da la vuelta como una locura Ahora, hay un montón de opciones para arreglar esto. Jugaremos con unos ajustes simples. Por ejemplo, primero, tenemos que fijar una configuración. Por aquí, voy a seleccionar ambos. Tenemos el motor angular, que tenemos el motor de accionamiento angular. Está usando slurp en este momento, que es, como describe, alerta entre la corriente y la velocidad y la orientación del objetivo Pero lo que queremos es un giro y un swing, que descompondrá un poco el camino Entonces lo siguiente que haremos es seleccionar cada una de las puertas e ir a los ajustes de física, y habilitaremos la masa. Les haremos una masa de 80. Se puede jugar con los valores, y también aumentaremos la amortiguación angular Esto ojalá arregle A con el balanceo. Todo bien. Ahora bien, el único problema es que se quedan así. No regresan a su posición original. Entonces, esto debería haber sido arreglado por el swing y el giro. Pero probablemente, sí, me perdí no hice clic en la opción de swing, así que no tiene una orientación objetivo, porque el swing y giro hace que tenga una orientación objetivo. Significa ¿a dónde estoy tratando de regresar? Podríamos jugar con la velocidad objetivo y todo, pero esto es lo que necesitamos para que vuelvan a la misma posición. Entonces voy a compilar y guardar y presionar play. Cuando se abre y vuelve a la misma posición. Ahora, podrías jugar un poco, pero los valores, lo hacen más realista. No lo sé. Cuando hay dos puertas, trae un poco de dependiendo de la velocidad del jugador también. Puertos, pero creo que está bien. Una puerta es demasiado fácil. No, una puerta está bien, dos puertas son un poco demasiado duras. Entonces esto será para la tienda de física. Te vamos a ver en la siguiente lección que haremos el teletransporte a otro nivel Adiós por ahora. 35. Programar una puerta de cambio de nivel con efectos de transición: Hola, y bienvenidos de nuevo a Unreal Lenzing cinco Blueprint Mastery Door Systems Anteriormente, casi terminamos con nuestra tienda de física. Parece que se me olvidó agregar los sonidos. Abramos la tienda de física, y fue una buena oportunidad para mostrar otro evento de colisión. Esta vez, porque esta puerta realmente no se superpone con el jugador. Yo bloquea al jugador. Utilizaremos el calor del componente. Así que estoy recibiendo calor de componentes de esta puerta, y estoy recibiendo el calor de componentes de la otra puerta, y solo vamos a reproducir sonido. Y conectar tanto para mostrar sonido como para el sonido, vamos a usar el punto de Física Q. Y vamos a volver a tocar con el tono. Vamos a hacer un flotador aleatorio en rango, y va a ser de 0.8 a uno. Y ahora, tenemos un sonido horrible porque golpea demasiadas veces. Entonces mi conjetura es que este sonido necesita algunos ajustes de concurrencia ¿Qué son los ajustes de concurrencia? Están por aquí. Se trata de una configuración que controla cuántas instancias del sonido se pueden reproducir simultáneamente y nos permite limitar o gestionar sonidos superpuestos. Además, cuando un sonido puede comenzar y detenerse, y hay muchos ajustes con los que jugar ahí dentro, pero nuestro uso principal sería ese. Entonces voy a ir a los sonidos de la carpeta, y voy a crearla parece que ya los hemos creado. Entonces aquí está physis do C que tiene algunos ajustes ya preestablecidos para nosotros. Recuento máximo cuántas veces debería jugar. Vuelva a activar el tiempo cuando debería volver a jugar, limitar al propietario, como límite a propietario. Esto significa el plano que lo está reproduciendo, básicamente. Entonces, si tuvieras dos planos, no parecen que este conteo máximo de uno no sería lo mismo Ellos tocarían el doble de sonidos. Sí, aquí hay muchos ajustes. Eso es lo que vamos a utilizar. Entonces si agrego esto por aquí, ahora mismo, Sí. El sonido es mucho mejor. Ahora, otra cosa que noté es que realmente nunca expliqué y nunca usé el componente de rotación de los artículos. Funciona, pero si jugamos y mostramos colisiones, notarás que la colisión también se está moviendo, lo que en este momento, no es un gran problema, pero si tuviéramos muchos de estos, crearía una enorme falta de fotogramas Lo que haremos es que ingresaremos plano del ítem e iremos al guión de construcción y obtendremos este movimiento giratorio que es vamos a explicarlo ya que no lo hicimos Es un componente que hace rotar al actor. Hace la rotación en base las reglas y los ajustes que ingresamos aquí. Por defecto, está rotando en el espacio local y 180 grados. Ahora bien, hay una manera de hacer que esto sea responsable de un determinado componente y no de todo un actor. Y ese nodo se establecería componente actualizado. Así que vamos a conectar ambos aquí y vamos a conectar la malla estática por aquí. En realidad sólo una especie de copiar y pegarlo. Por lo que este movimiento giratorio ahora solo girará el componente de malla estática y no el resto del actor. Entonces, si vamos a jugar y expulsar, podemos ver que no funcionó Tengo una prueba en vivo. Es increíble. ¿Cuál es el artículo? Aquí está el conjunto de elementos componente actualizado, malla estática. Oh, creo que es porque lo conecté al guión de construcción. Debería estar en comenzar a jugar. Vamos a refrescarnos. Sí. Para que puedas ver el triángulo sólo se mueve. Sí. Por lo tanto, el componente actualizado no funciona realmente en el script de construcción porque necesita que el juego se ejecute para hacer algo. Entonces ya que en el script de construcción, el juego no se está ejecutando, por lo que el componente de actualización realmente no hace nada. Entonces es por eso que necesitábamos traerlo para comenzar a jugar en lugar de ofstruction script porque este es inactivo Está en el editor. Podemos ver que no gira. En fin, continuemos. Vamos a duplicar el plano para el teletransportador Y llamemos a este cambiador de nivel. Y vamos a traerlo aquí. Y por lo que estás adivinando, prácticamente tiene la misma configuración Necesitamos la misma configuración porque vamos a estar portando y portando hacia fuera, así que necesitamos todas estas funcionalidades. Ahora, antes de comenzar a programar esto, solo vamos a crear también un widget simple con una animación. Vamos a ir a hacer clic derecho en la carpeta de widgets e ir a crear un plano Widget y widget de usuario Voy a llamarlo W te desvaneces. Porque cuando estamos entrando y saliendo del mundo, deberíamos estar entrando y saliendo para que no quede mal Vamos a agregar un lienzo y vamos a agregar una imagen vamos a una imagen vamos anclar la imagen para que sea a pantalla completa y a cero los desplazamientos Y el color debe ser negro. Ahora bien, ¿cómo hago animaciones? Hay una pestaña por aquí cuando estoy dentro del plano Widget Si no lo estoy, la pestaña ya no está aquí, como pueden ver, pero dentro del plano Widget, aquí aparece una nueva pestaña, que se llama animaciones Agreguemos una nueva animación. Llamemos a esto desvanecerse. Animación. Vamos a llamarlo mi animación fade. No debería venir con espacios. Mi animación gorda y hagamos doble clic para ingresarla. Aquí tenemos la pestaña con todas las animaciones. Y aquí, cuando seleccionamos una animación, tenemos la configuración para usarla. Desde la configuración, vamos a seleccionar el botón Agregar y agregar Imagen porque tengo la imagen seleccionada. Si no tienes la imagen seleccionada, entonces necesitas seleccionarla básicamente y luego presionar Agregar y para esta imagen, aquí tenemos nuestra pista de animación que usamos un 0.5, así que 02.5, tal vez sea suficiente de animación Vamos a agregar un camión nuevo a esta imagen, y va a ser de color y opacidad En realidad, vamos a hacer opacidad de render. Por qué complicar las cosas. Ahora, empieza por defecto con uno donde queremos que sea cero, y en 0.5 segundos, queremos que sea uno. Entonces 0-1. Y con eso concluye nuestra animación. Compilemos y guardemos, y cerremos el fade. Widget aún no lo necesitaremos. De hecho, cerremos los artículos y la tienda de física. Y el personaje y la puerta de la llave y el teletransportador. Vamos a abrir el cambiador de nivel. Ya que vamos a estar cambiando de nivel, ya no necesitamos el teletransporte No necesitamos la ubicación del otro actor, pero sí necesitamos crear este widget, como hicimos en la jugada inicial del juego en el modo de juego. Vamos a abrirlo para mostrar Creamos el widget, y después, decidimos cuándo agregarlo al viewpod o cuándo eliminarlo del viewpod Ahora solo queremos crearlo nivel de propiedad debe ser el controlador Taer, y la clase debe ser pagada y agregaremos a Viewport El único problema es que en realidad necesitamos volver a abrir esto. Entonces voy a abrir el widget, y voy a buscar opacidad luego la opacidad y establecer el valor predeterminado Porque si dejaba que fuera uno como era, entonces en el momento en que lo agrego, aunque la animación no sea aunque la animación se reproduzca justo después, entonces vería una pantalla negra, y luego vería el fade. Entonces no sería el efecto deseado. Ahora, juguemos la animación fade. ¿Cómo íbamos a hacer eso? Vamos a llamar desde este widget, el fade, obtener mi animación fade, y a partir de eso vamos a jugar animación. Ahora, usando esta animación, vamos a hacer get y time, y vamos a agregarle unos segundos. Al igual que, vamos a agregarle 1 segundo. A lo mejor uno es mucho, tal vez 0.5. Y vamos a hacer un anuncio retrasado y conectar esto. Entonces pase lo que pase pasa después que la animación de la falsificación haya terminado. Ahora, conecta el sonido, y vamos a abrir nivel por nombre. Y el nombre, debería ser el nombre del siguiente nivel Tutor Map dos. Debe ser exactamente copiar y pegar aquí o mecanografiado, pero debe coincidir exactamente Ahora, necesitamos conectar el widget al objetivo porque está reproduciendo animación. Bien, está jugando esta animación, pero ¿a quién toca? La animación. Compilación guardar. Vamos a probar lo que creamos. Realmente no va a funcionar por completo. Juguemos. Y como te diste cuenta, Bien, claro, antes que nada, no tenemos un spone, no tenemos reproductor, pero el sonido realmente no sonó. El motivo es que solo estamos tocando un sonido de dos D como lo hacemos normalmente, y esto no es suficiente para esta situación. Debido a que estamos cambiando de nivel, esta entidad, este sonido de reproducción sólo existe en este nivel. En el momento en que intentamos abrir otro, entonces se inicia un procedimiento que está destruyendo las cosas en este nivel. ¿Cómo podemos tocar un sonido que vamos a estar persistiendo a través del nivel Lo que tenemos que hacer es engendrar sonido a D, que, como pueden ver, tiene una punta de herramienta más grande por aquí Esta función permite a los usuarios crear componentes de audio con ajuste especialmente para no espacializados, sin distancia En fin, tiene un montón de otras reglas. Pero lo que nos importa es que si abrimos esto, tiene una transición persistente a través de niveles. Entonces voy a hacer click en esto, y voy a usar el sonido del teletransporte Voy a usar el teletransporte VR uno. mí me gusta mucho esa. Pero este sonido no se reproducirá al instante. Se acaba de engendrar. No quiere decir que jugará. Lo trajimos al mundo, pero no pasó nada más. Para ello, solo vamos a partir del valor de retorno, esta es una parte importante que tiene un valor de retorno ya que reproducir sonido a D no tiene un valor de retorno. Esto nos da una entidad para manipular, para promover una variable, y hacer cosas con ella. Pero lo que queremos hacer ahora mismo es simplemente jugar. Y luego conectamos el nivel abierto. Y ahora, si tratamos de tocar, tenemos un sonido sonando. Pero para ser honestos, el sonido debería estar sonando antes del retraso. Y luego abrimos el nivel. Todo bien. Ahora, no vamos a estar usando este nodo, en realidad. No vamos a usar solo un nodo de nivel abierto. Estaremos creando un sistema que cuando ingreses desde el punto A, el sistema sabe que lleva al punto B y desde el punto B, va al punto C, y tal vez tengamos un sistema para decirle al juego que si lo teletransporto desde aquí, me estoy teletransportando allá atrás A lo mejor lo vamos a explicar mejor en la siguiente porque creo que este es un buen punto de parada para este. Adiós por ahora. 36. Sistema de puntos de ruta dinámico para niveles interactivos: Hola, y bienvenidos de nuevo a Unreal Engine cinco Blueprint Mastery Door Systems y Anteriormente, comenzamos con nuestra puerta de teletransporte, nuestro cambiador de nivel Ahora, agregamos widget pagado que cuando disparamos con la caja superpuesta, traemos a la existencia. Lo creamos, y lo agregamos a la ventana gráfica, y luego tocamos la animación y tocamos un sonido que generamos, y va a ser persistente a través de la transición de niveles Y después de un pequeño retraso, abrimos el nuevo nivel. Y esto nos lleva a discutir sobre tres cosas nuevas que encontraremos. Lo primero es la instancia del juego, que es una clase global, una clase que se está creando cuando ejecutamos el juego por primera vez, y se ha destruido cuando terminamos el juego. O sea, terminar el juego saliendo de la aplicación. Entonces esto se usa para contener básicamente variables globales. Es una buena manera de demostrarlo y cómo acceder a él durante el juego, durante cualquier momento que queramos, básicamente. Hay muchas maneras de almacenar estos datos un poco más complejos como los estados de los jugadores, y para nosotros, será un buen ejemplo. La otra cosa de la que quería hablar es de una estructura. Hablamos un poco de estructuras que transforman es una estructura, como si creo una variable transform, es una estructura de básicamente tres vectores. Y si lo rompemos, podemos ver estos tres vectores. Bueno, una estructura, por definición, es un tipo de datos personalizado que nos permite agrupar diferentes variables, ¿verdad? Ahora bien, esta estructura tenía tres variables distintas del mismo tipo. nuestra también tendrá dos variables del mismo tipo, pero es una estructura propia, una variable que contiene la información que queremos contener de manera habitual. Entonces antes que nada, vamos a ir a Blueprints. Vamos a hacer click. Vamos a ir a la pestaña Blueprint y seleccionar estructura Va a nombrar este cambio de nivel ST. Y nos da una variable por sí misma, y vamos a crear otra, y van a ser del tipo una cadena. En realidad, podría ser del tipo name, pero dejémosles cadena, y vamos a nombrar este nivel actual, y al otro siguiente nivel. Y esto es básicamente una estructura. Podríamos tener, por ejemplo, otro que diga la salud del jugador de carga y otro que diga que el jugador tiene capacidad para saltar o lo que quisiéramos. Es nuestra estructura, nuestro tipo de variables. Entonces vamos a guardar esto, y luego vamos a crear vamos a ir a Miscelánea e ir a tabla de datos. Y aquí, se requiere estructura de flecha pick. Vamos a elegir nuestro cambio de nivel ST y presionar Bien. Voy a nombrar este cambio de nivel DT. Y vamos a abrirlo. ¿Qué es una tabla de datos? Es una colección de datos estructurados utilizando la estructura que creamos que seleccionamos para que la use. Se organiza en fila y columnas que nos permiten almacenar, administrar y acceder fácilmente a este tipo de datos. Cada fila corresponderá a una instancia de la estructura, y tendrá sus propias variables. Vamos a crear algunas filas. En realidad, necesitamos más y para esos nombres, vamos a usar exit. A, en realidad, salida A, tutorial. Digamos salir Un tutorial. Esto sería exit, B, tutorial, y el otro sería exit. A, traslado, y el otro sería salida, B, traslado. Todo bien. Y cometí un error. No queremos nivel actual. Queremos volver a la estructura antes de hacer muchos más cambios. Queremos que esto sea decir que dos jugadores empiecen, básicamente. Inicio de jugador porque lo que vamos a estar cambiando es qué inicio de jugador se elegirá. Al igual que, por ejemplo, si salí del jugador Inicio A, pasaré a los siguientes niveles jugador Inicio B o jugador inicio A. Cuando salga del jugador inicio B, iré a los siguientes niveles, jugaré inicio B y ida y vuelta. Entonces vamos a crear un bucle que voy de una puerta, volviendo a la misma puerta de la que vine y eligiendo una de al lado, volviendo a es mejor mostrar, básicamente. Vamos a estar entrando por esta puerta. Vamos a estar saliendo de esta tienda. Al entrar en esta tienda, vamos a estar saliendo por la última puerta Uy, no esta, esta, por aquí Rellenemos esta información a nuestra tabla de datos. Va a ser inicio de jugador. Cuando seleccionamos cada fila, podemos ver aquí abajo el editor de filas, que podemos agregar la información. El siguiente nivel va a ser común. Pero para más mapas, será útil. Entonces nuestro siguiente nivel es Tutorial Map dos. Entonces todo tendría Tutorial mapa dos. En realidad, no todo. Estos los tendrían solo tutorial arriba, que es el primero. Tutorial. Empapado. Pasando de este nivel, vamos a tutorium dos Viniendo del mapa Tutorialm dos, volvemos al mapa tutorial Ahora bien, ¿a qué empieza este jugador al que me refiero? Primero vamos a llenarlo, y luego lo vamos a estar explicando. Entonces para la primera fila, va a ser salir una transferencia. Voy a copiar esto. El siguiente va a ser traslado de salida B. Y voy a copiar en realidad los nombres que hago este tutorial de salida B y este tutorial de salida A y este tutorial de salida B. Todo bien. Ahora, de la misma manera que usamos etiquetas para el peón del jugador, la misma manera que podemos usar etiquetas para los inicios del jugador Y si repasamos los detalles del inicio de los jugadores, se puede ver que tiene una etiqueta de inicio jugador objeto muy especial, que es diferente las etiquetas que ya hemos establecido. Entonces este sería el inicio del jugador titular. Ahora, vamos a duplicar esto. Vamos a agregar uno por aquí. Hagamos que se superponga con esto, que es la salida Bien. Creo que esto está bien. Entonces tendremos uno más por aquí. Y aquí sí necesitamos un teletransportador. Así que voy a simplemente duplicar esto y rotarlo así y traerlo aquí. Todo bien. Vamos a superponer los jugadores a partir de la salida. Realmente no importa la salida, para ser honestos. Todo bien. Y hagamos lo mismo para el mapa tutorial también. Va a guardar seleccionados. Ahora para este mapa, también necesitamos establecer la anulación del modo de juego. Entonces modo de juego en tercera persona, y vamos a traer un jugador inicio Esto de inicio Esto se ve un poco enorme. Sí, estoy lejos de donde se supone que debo estar. Bien, entonces necesitamos teletransportadores aquí, también. Entonces vamos a ir a planos, puertas, cambiadores de nivel, no teletransportadores. Esto de aquí. Todo bien. Duplicemos todo esto y vamos a rotarlos. Bien. Compilemos y guardemos, y volvamos a nuestro mapa. No, no agregamos las etiquetas en las unas, así que seleccionando la primera. El primero sería de esta manera. Vamos a por la etiqueta. La etiqueta es Exit A transfer, y la otra sería Exit B transfer y copy pegando los nombres, así que no ocurrieron errores Y creo que esto sería por éste. Y vamos a seguir en el siguiente vinculando todos estos juntos. Entonces empieza a tener algún sentido. Te voy a ver entonces. Adiós. 37. Anulación del modo de juego para personalizar la funcionalidad de aparecimiento de jugadores: Hola, y bienvenidos de nuevo a Engine five real, Blueprint Mastery, Door Systems y portales interactivos Anteriormente, terminamos con nuestras tablas de datos y nuestras estructuras. También terminamos con agregar etiquetas a nuestros inicios de jugador. Colocamos aperturas de jugador donde queramos entrar y salir por las puertas, y agregamos las etiquetas a los inicios del jugador que corresponden a con este inicio, no debería decir comienzo agradable. Error temprano atrapado, esto debería decir salir de un tutorial. Todo bien. Ahora, vamos a mantener el inicio del jugador justo aquí. Por ahora, también hicimos el segundo nivel, el Tutorial de dos niveles. Agregamos el jugador comienza aquí y las etiquetas correspondientes. También estoy comprobando si hay errores. Traslado de salida B. Todo bien. Y ahora sigamos y creamos nuestra instancia. Entonces voy a hacer click derecho. Voy a ir a clase de Blueprint. Voy a buscar por ejemplo. Y quiero la instancia del juego. Aquí está. Voy a seleccionarlo. Voy a llamarlo Puertas GI Tutorial. Y luego tenemos que ir a la configuración del proyecto. Y buscar por ejemplo. Y en lugar de instancia de juego, queremos que sea tutorial de puerta GI en clase de instancia de juego. Ahora, voy a cerrar los ajustes. No necesitan ser salvados. El autoguardado con cada cambio que hacemos Y voy a abrir la instancia del juego. Y aquí vamos a crear un evento muy sencillo. Vamos a hacer un evento personalizado y llamarlo transferencia de nivel y crear una entrada para ello. Va a ser del tipo string. Va a venir de. Vamos a estar promocionando esto a una variable. Y vamos a empezar con Get Data TB. No obtener nombres de fila de tabla de datos, obtener plano de fila de datos. Y este es el nodo que nos recupera la información de nuestra tabla de datos Podríamos tener una variable aquí con las tablas de datos que queramos, pero solo la usaremos manualmente seleccionándola manualmente desde aquí, cambio de nivel DT. Ahora bien, el nombre propio, donde viene esto será nuestro nombre de fila. Como puedes ver, de cadena, lo tradujo auto a nombre. Lo siguiente que haremos es que vamos a romper el cambio de nivel. Vamos a promover esto a una variable, y vamos a llamarlo capa activa. Inicio y luego vamos a abrir nivel mi nombre, y vamos a conectar siguiente nivel a aquí. Entonces, ¿qué hicimos? Creamos un evento de transferencia de nivel. Empezamos el vino de, que será el nombre de nuestro inicio de jugador actual, y luego encontramos esa fila correspondiente en la tabla de datos. Por ejemplo, este sería el tutorial de Exit A y el siguiente inicio de jugador que estamos guardando es Exit A transfer. Entonces, dentro de aquí, estamos almacenando salir una transferencia de jugador a inicio de jugador activo, y luego estamos abriendo el nivel que se supone que debemos abrir. Ahora, cuando abrimos el siguiente nivel, esta información de aquí se ha quedado aquí tal como es porque como dijimos, la instancia del juego es un plano global que almacena información a través de transferencias de nivel Volvamos a nuestro cambiador de nivel y cambiemos este nivel abierto Para llamar desde la instancia la nueva función, al nuevo evento. Entonces vamos a conseguir instancia de juego. Y así es como encontramos la instancia de juego como lo hicimos con el modo de juego. Vamos a emitir a GI Drs tutorial. Vamos a convertirlo en un elenco puro. Y ahora que sabemos que esta es la instancia, podemos obtener alguna información, que es el evento de transferencia de nivel de transferencia. Pero como pueden ver, este evento necesita que esto venga de. Entonces vamos a promoverlo a una variable, y vamos a estar exponiéndola en spawn y hacerla en IstanSeable Necesitamos que este reproductor arranque enchufe y vamos copiarlo para que venga de en el teletransportador Y en realidad, no necesitamos el teletransportador objetivo, así que podemos eliminar eso de manera segura Y para ser honestos, no necesitamos la cápsula ni la flecha ni la raíz. Sí, ya se ve mejor. Y por último, recuerda que en el inicio, dije que anularemos la funcionalidad donde nuestro modo de juego tiene una función preestablecida sobre cómo encontrar el jugador arranca. Vamos a sobrescribir este comportamiento y crear uno propio para anular un comportamiento que ya está prescripto, precodificado en cualquier blueprint precodificado en cualquier blueprint Podemos ir a las funciones, en realidad, no presionar el botón más, sino por aquí, aparece como un símbolo de anulación. Entonces presionando esto, se pueden ver las funciones que podemos anular en este blueprint Podemos seleccionar el comienzo de elegir jugador aquí está. Ahora, la lógica de cómo va a funcionar esto será conseguir todos los inicios del jugador que podamos encontrar. Busca el inicio del jugador activo. Si no lo encuentra, elija la ubicación de inicio. Haremos algún código para buscar la ubicación de inicio también. Básicamente, eso sería todo. Ahora bien, ¿cómo hacemos esto? Volvamos a la tercera persona Gao. Primero, voy a crear una variable local que va a ser del tapullan y colli player start Y cuando comencemos el plano comenzar el orden de las operaciones, lo voy a poner en verdad Entonces voy a conseguir todos los actores de plus y la clase podría ser inicio de jugador. Ahora bien, este es un nodo que es un poco pesado porque pasa por todos los actores del nivel que están cargados. Pero como está sucediendo antes de que comience el nivel ahora mismo, está bien. Ahora, de esta lista, voy a verter cada uno. Y voy a comprobar si no voy a comprobar voy a conseguir la etiqueta de inicio del jugador tag. Creo que se llama G player Start tag y voy a compararlo si es igual inicio. Voy a seleccionar una sucursal aquí. Y esto va a estar salvando nuestro inicio el primer inicio de jugador. Entonces voy a promocionar esto a una variable local y nombrar esta ubicación de inicio. Ahora, voy a ascender nuevo porque si no es el inicio de los jugadores, entonces voy a conseguir instantes de juego Voy a emitir a GI. Voy a convertir a Pure cast, y voy a conseguir que los jugadores activos comiencen. Y ahora a partir de esta jugada inicio tag, voy a comparar si estos dos son iguales. Si lo son, entonces ese es nuestro nuevo comienzo. Vamos a nombrar a este jugador inicio. Entonces si tiene la etiqueta start, es la ubicación de inicio. Si tiene la etiqueta del inicio del jugador activo, es el inicio de los jugadores. También necesitamos establecer jugadores de inicio no encontrados a caídas. Y ahora al final, necesitamos verificar si encontramos un inicio de jugador, si lo hicimos entonces Sí, promoví esto a una variable y hasta a una variable local. Así que voy a eliminar esto ahora y promover de nuevo a inicio de capa variable local. Entonces voy a conectar esto aquí. E. Vamos a traer el jugador empieza aquí. Y si no hemos encontrado, si esto no es cierto, entonces es falso, entonces el inicio del jugador es el inicio del jugador que encontramos. Si no se encuentra el inicio del jugador, esto significa que no encontramos el inicio del jugador activo, entonces vamos a establecer el inicio del jugador, no llegar a la ubicación de inicio. La convención de nomenclatura aquí no es la mejor. Vamos a probar nuestro sistema. Vamos a compilar. A lo mejor necesito compilar esto también, por supuesto, y compilar de nuevo. Y vamos a jugar. Entonces ahora me estoy apresurando, necesito agregar las etiquetas de inicio de jugadores Todo esto dice también empezar. Entonces este es el tutorial de salida B. Todo bien. Los otros los revisamos al inicio de esta lección. Entonces, teóricamente, esto debería funcionar ahora. Estamos aquí, podemos regresar. Podemos regresar, así que no podemos regresar. No veo nada. Entonces supongo que no he agregado al siguiente nivel las etiquetas de jugador, las etiquetas puerta a los teletransportadores Sí. Eso fue porque en este momento estaba tratando de averiguar qué hacer, pero no podía. Bien, volvamos al nivel original. Entonces yendo por aquí y yendo por aquí, funciona. Entonces si voy por aquí, llegamos a la última habitación. Pero hay algunas cosas más por hacer. Bien, esto no fue correcto. Veamos de qué vino todo. Pero acabo de pegar esto. Bien, funciona. Y me voy a ninguna parte. ¿Por qué me voy a ninguna parte? En primer lugar, dice trans Dice algo raro. Traslado de salida B. Pero sí tengo el mismo error en todas partes. Debería estar funcionando. Ts. Vamos a probarlo de nuevo. Bien. Entonces supongo que hubo algún error ortográfico Sí. Tenemos un sistema de transferencia que funciona. Genial. Supongo que esto es para éste. Te voy a ver en la próxima. Adiós. 38. 7 trabajos básicos para guardar sistemas para preservar los estados de puerta: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, terminamos con nuestro sistema de waypoint dinámico de red de múltiples portales No sé cómo quieres llamarlo. Terminamos de teletransportarnos de este nivel a un nuevo nivel que es la representación de este Salgamos de aquí y podemos ir y venir. De esta puerta a esta puerta y esta puerta a esta puerta, y luego de esta puerta a esta puerta y esta puerta a esta puerta. Pero todos estos están en un nivel diferente. Entonces para ello, creamos una tabla de datos que sus propios nombres corresponden a las etiquetas del nivel entrante, el nivel desde el que viajamos , y tiene los nombres de inicio del jugador también del nivel al que vamos y también tiene el siguiente nivel. Ahora, todo esto se basa en una estructura que es a partir de dos bebidas. Usamos esto en un evento. En la instancia del juego, que dijimos de nuevo, es un plano global, y creamos la transformación de nivel de la que vienes el venir viene de la puerta, y obtenemos que viene de, que es corresponde al nombre de fila de la tabla de datos, y obtenemos una salida de esa fila A través de las columnas, a través de la estructura, obtenemos el siguiente inicio de jugador activo y abrimos el siguiente nivel. Ahora, cuando se abre un nivel, anulamos el inicio de elegir jugador. Y creamos una pequeña función que busca a todos los actores iniciadores del jugador. Y entonces si uno de ellos tiene el inicio de la etiqueta, y mira a otro, si lo encuentra, que tiene la etiqueta de inicio del jugador activo Entonces si tiene sus etiquetas, está todo bien. Si no es así, entonces obtendremos un error. Pero si tiene sus etiquetas todo bien, si encuentra un inicio de jugador activo, establece ese inicio de jugador como el predeterminado. Ahora, continuemos con uso de este sistema para demostrar un guardado. Entonces lo que vamos a hacer es que vamos a agregar la puerta aquí y en el otro nivel. Escojamos la puerta de un lado, que es muy simple, no esta. En cualquier caso, sí, puerta unidireccional, ésta. Vamos a traerlo aquí. Bueno, aquí está relativo. Es un poco más grande de lo que se supone que es, pero vamos a hacerlo un poco más pequeño. Tal vez un poco más grande este 0.5. Digamos, 0.7. No, 0.6. Supongo que 0.55 Sí. Todo bien. Realmente no importa. Lo pongo enfrente, pero solo lo voy a rotar y está bien, porque estamos entrando desde aquí, así que la parte delantera debería ser así. Y necesito arreglarlo otra vez. Entonces 0.57. Sí, 0.57 Ese tipo de ajuste al instante. Todo bien. Ahora, pasemos al nivel de transferencia, el mapa tutorial dos. Dónde está el nivel por aquí. Y agreguemos de nuevo la puerta, que es aquella en la que está la puerta unidireccional. Esta vez, tenemos que hacerlo más grande. ¿Serían cinco? Cinco, es mucho. Dos, tres, 2.5, 2.2 parece bien. Vamos a llamar por ahí. Entonces tal vez 2.4. Sí, 2.4 parece estar bien. Todo bien. Lo voy a dejar como es, aunque tenga brechas, realmente no importa. Entonces esta puerta debería poder guardar, por ejemplo. Vamos a Mapa. Deja que los mapas codifiquen por color para que los encuentres fácilmente. Bien, el rojo servirá. Entonces lo que queremos hacer es poder entrar desde aquí, entrar a esta sala. Abre la puerta, tal vez regrese o vaya por el otro lado, y esta puerta aún debería estar abierta. Entonces comencemos con una lógica inversa. Empecemos por puerta. ¿Qué necesitaría cargar esta puerta para cargar su estado? Al igual que necesitaremos establecer de alguna manera el estado de la puerta. Y dependiendo del estado almacenado, porque estamos ahorrando solo en pleno abierto o solo cierre completo, necesitaríamos los grados finales de apertura o cierre. Entonces necesitaríamos establecer la rotación relativa. Vamos a por la larp también. Y vamos a hacer algo de espacio para estos nodos. Esto bastaría. No necesitaría una larp aquí. Yo necesitaría un selecto Y eso iría basado en el estado. Entonces cuando está abierto, es -90 grados, -90 o -90 Y cuando está cerrado o en cualquier otro estado, es cero. Bueno, para nosotros, solo estamos cargando abrir y cerrar, así que abrir y cerrar no ahorran los grados actuales. Y bloqueado sería cero también. Pero, ¿cómo sabe esta puerta qué puerta? Si tuviera diez de estos, ¿cómo sabe qué puerta es? Para eso, necesitaríamos crear un ID personalizado. Voy a borrar. ¿Este texto se usa en alguna parte? Encuentra referencias? No. Pero para la D, no voy a usar esto. Voy a usar una cuerda. Llamemos a esta identificación de puerta. Entonces esta identificación de puerta en el archivo guardado, diría, Bien, ID, esta puerta tiene su permanecido abierta o se quedó cerrada dependiendo de lo que tenga s. Para llamar a este cambio, debemos crear una llamada en la interfaz del blueprint Entonces vamos a ir a nuestra interfaz de Blueprint. Hacer puerta de carga. Y esta puerta de carga necesita devolver al menos el estado de la puerta. Por lo que necesitaría tener una variable que sea la enumeración de estado de puerta Pero cuando estamos teniendo un juego guardado, tal vez tengamos más de una cosa que salvar. Podríamos tener si está bloqueado como el elemento clave o no, no, ese es un mal ejemplo. A lo mejor tendríamos grados de apertura. Entonces tal vez tendríamos cosas diferentes para ahorrar y cargar. Entonces nuevamente, aquí es donde las estructuras vienen en cacería. Vamos a crear una estructura, una nueva estructura en planos, estructura, y llamemos a esta puerta ST, salvo Vamos a abrirlo, y para la primera variable, pongamos el estado de la puerta y que sea el estado de la puerta E. Y vamos a tener otra variable que sería la puerta IE. Y esto sería cadena. Y para ser honestos, si quieres cambiar el orden aquí, podemos ver este ícono por aquí, se convierte en una mano. Así podremos arrastrarlos y soltarlos arriba y abajo. Es mejor tener primero la identificación de la puerta. Voy a salvar esta estructura. Y en nuestras puertas BI, voy a poner una entrada de estadísticas de puertas, y será esta estructura. D, puerta, guardar. Entonces ahora esta estructura nos da cuando cargamos la puerta, nos da toda la información que hemos guardado para la puerta. Ahora mismo, es muy sencillo. Tiene apenas dos variables, la ID y el estado, pero podría volverse más compleja como quisiéramos. Entonces ahora volvamos a nuestra puerta. Y compilar. Y vamos a implementar la BI, las puertas I, la interfaz blueprint Y ahora tenemos acceso a este No, no lo hacemos porque no he compilado la interfaz del blueprint Pero ahora que lo hice, sí tenemos acceso a esta puerta de carga. Entonces voy a traer esto aquí arriba. Voy a conectar esto aquí. Voy a romper la estructura como hicimos con la transformación, y voy a conectar el estado de la puerta por aquí. Básicamente, este sería el evento que carga nuestra puerta. Cuando se llame a la puerta para que se cargue, de lo que hablaremos más adelante en otra lección. Esto es todo lo que necesita para cargarse. Ahora, una cosa más cuando estemos salvando la puerta y vamos a explicar más cosas en la siguiente lección. Cuando estamos salvando la puerta, necesitamos otra función. Llamémoslo conseguir puerta arranca. Y en esta función, vamos a tener una salida de la puerta ST guardar, y llamémosle puntos de puerta. Vamos a compilar y guardar y volver a nuestra puerta. Y haz doble clic en obtener estadísticas de puerta. Vamos a dividir la estructura. Vamos a conectar la identificación de la puerta por aquí y el estado de la puerta por aquí. Por lo que esta función se utiliza para obtener cualquier puerta que comience con bonos Ahora bien, de nuevo, si esta estructura tiene más variables, tendríamos que conectar más información al nodo de retorno. Creo que esto es para éste. Vamos a explicar el mecánico de salvamento en el siguiente. Adiós. 39. Crea la mecánica de guardado del juego para mantener el progreso a través de los niveles: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y portales interactivos Anteriormente, comenzamos con nuestro Dor Save. Creamos una nueva estructura, está sosteniendo la identificación de la puerta y las estadísticas de la puerta. Además, creamos dos nuevas funciones en la interfaz de blueprint, la puerta de carga y la puerta get starts, la puerta de carga tiene una entrada de estadísticas de puerta y las estadísticas getdor tienen una salida de estadísticas de puerta Luego continuamos en la puerta Y Way, creamos la puerta de carga de eventos desde la interfaz de blueprint Rompimos las estadísticas de la puerta. Establecemos el estado de la puerta al estado guardado de la puerta, y establecemos la rotación relativa en función de la estadística que cargamos en el estado de la puerta que cargamos. También llenamos el get door comienza con una nueva variable que se llama el ID de la puerta y el estado de la puerta. Y el ID de puerta debe ser una instancia editable y expuesta en spawn para que podamos llenarla por nuestra cuenta Porque cuando estamos salvando las puertas, necesitan una identificación única. Entonces cuando cargamos las puertas, ellos saben qué puerta es cuál para que se carguen. Ahora, hablando de guardar la carga, vamos a necesitar un nuevo tipo de blueprint, save game object blueprint Para crearlo, vamos a hacer clic. Vamos a ir a Blueprints, nuevo Blueprint cross, y vamos a buscar juego guardado Y está aquí. Va a seleccionarlo y nombrarlo So Puertas. Sí, entonces Door. Vamos a abrirlo. Ahora bien, este es el archivo que se está escribiendo en nuestra computadora. Se trata de un archivo serializado. Tiene esta propiedad siendo de clase serializable. Está ahí para encapsure datos del juego para que se almacenen Esto puede tener cualquier tipo de datos que queramos. Ahora mismo, necesitamos una estructura, una matriz de estructuras, básicamente, porque podría haber muchas puertas, puerta SD, guardar. Y vamos a convertirlo en una matriz. Llamemos a esta puerta puerta guardar. Inicia. Estadísticas de guardado de puertas. Sí. Vamos a cerrar esto. Ya no vamos a necesitar las puertas SO. Vamos a llamarlo pero no usarlo. Y vayamos a nuestra instancia de juego para crear nuestra mecánica de guardado. Ahora, lo primero que haremos es crear un evento personalizado. Y le vamos a nombrar salvo Puertas. Y la primera pregunta es, ¿existe el juego de guardar? Ahora, este nodo tiene nombre de ranura e índice de usuario. Podemos tener múltiples ranuras para ahorrar. Entonces vamos a promover la variable. Podría ser nombre de ranura uno, nombre de ranura dos, nombre de ranura tres. Pero cuando estás cargando y guardando, el nombre de la ranura debe ser el mismo que demostraremos esto mejor en acción. Entonces vamos a darle un nombre predeterminado puertas guardar uno. Pongamos una sucursal aquí porque es diferente cuando no tenemos un guardado en esta ranura y diferente cuando sí tenemos una pizarra en la ranura. Es como sobrescribir el guardado y guardar un nuevo artículo en esta ranura Empecemos por el nuevo artículo en esta ranura. Entonces en los pliegues, vamos a crear juego guardado. Y el objeto guardar juego serían las puertas SO. Vamos a promover esto a una variable. Vamos a llamarlo guardar objeto de juego. Ahora, no vamos a tener un mecanismo complejo para detectar nuestras puertas. Lo que vamos a hacer es simplemente conseguir a todos los actores de clase. Podríamos tener de etiqueta, pero la clase está bien. Y busquemos una puerta de ida. Y de todas las puertas que encontremos para cada una vamos a conseguir que la puerta se inicie. Entonces ahora, cada puerta que existe, básicamente, nos da las estadísticas. Y como es el primer guardado, la primera vez que guardamos, podemos simplemente obtener nuestro objeto de juego guardado, obtener nuestra variedad de estadísticas de puerta guardada y simplemente agregar todas estas estadísticas por aquí. Entonces nadie pensaría que hemos hecho de guardar, como pasamos la información al objeto guardar juego. Tenemos los inicios y los agregamos a esta matriz. Bueno, no exactamente. Todavía necesitamos al final de esto para cada bucle para guardar el juego en la ranura. Y aquí sí necesitamos una referencia de la ranura y el nombre de la ranura. Entonces nuevamente, por eso dije que estos están correlacionados. Están ligados juntos que estamos comprobando por esta ranura, no debemos cambiar el nombre de la ranura hasta que completemos todo lo que estamos haciendo con esta ranura. Este sería el caso que no existe un juego guardado. ¿Y si existe una partida guardada? Entonces vamos a cargar el juego en ranura y la ranura tiene que seguir siendo la misma. Y por qué estamos cargando porque sí necesitamos los datos de guardado actuales. Entonces queremos manipular estos datos. Entonces lo siguiente es lanzar a nuestro juego guardado SO puertas porque el juego que cargamos del lote, no tenemos subida solo un objeto de juego seguro. No sabemos cuál es. Entonces ahora mismo, cargamos las puertas SO. A lo mejor también tuvimos otras salvadas. Tuvimos un ahorro para las fijaciones. Tuvimos un guardado para las estadísticas de los personajes. Tuvimos un guardado para las misiones. Este es para las puertas. De nuevo, vamos a pasar por todas nuestras puertas. Entonces voy a copiar el get all actores de clase y el bucle de cuatro. En realidad, yo también necesitaba que las puertas se tocaran. Ahora voy a crear una variable, una variable Bolling y llamarla Nueva puerta Voy a ponerla por aquí. Entonces voy a conseguir nuestro objeto de juego guardado que no he establecido. Sí. Después del casting, debemos poner nuestro objeto de juego guardado en nuestras puertas. Guardar porque este es el salvamento que estamos manipulando. Lo conseguimos. Lo conseguimos cargar, mientras que lo creamos antes, lo guardamos instantáneamente porque son puertas SO, pero ahora que estamos cargando, no sabíamos de qué tipo era. Entonces lo lanzamos a puertas SO, y lo guardamos como el objeto de juego que estamos manipulando Ahora bien, este objeto tiene nuestra variedad de aperturas de puerta. Y para cada una de las puertas, queremos tirar de cada bucle para obtener la identificación. Y lo que vamos a hacer es conseguir también la identificación que obtuvimos de los cuatro bucles de toda clase de actor de puertas y comprobar si son iguales. Lo siento, no este igual tiene una cadena exacta. Y si son Entonces acabamos de establecer este elemento array. A partir de aquí, establecer elemento array de la matriz porque no queremos estas estadísticas. Estas son las estadísticas de guardado. Los que queremos están por aquí. Va a hacer un nodo de lectura para que quede más claro. Y leo aquí y leo aquí y por aquí. Las estadísticas que estamos ahorrando, los nuevos inicios vienen de todos los actores de clase, los que se ganan el mapa. Los inicios que estamos comparando, si tienen el mismo nombre son de esa lista. Entonces, si tienen el mismo nombre, necesitamos el índice de esa lista. Y luego apagamos la nueva puerta porque esta puerta no es nueva. Yo ya existe. Ahora bien, cuando termine este bucle de cuatro, vamos a hacer la pregunta ¿ sigue siendo una puerta nueva, o encontramos una y cambiamos las estadísticas? Si todavía es una nueva puerta, entonces vamos a agregar a esta matriz. Leamos esto por aquí y esto por aquí. Ir a fuego unspagt un poco. Y espera. Ahora, no es una nueva si es una puerta nueva, vamos a agregar a la puerta comienza desde el juego de guardar, agregar a la matriz. Y vamos a sumar las estadísticas que acabamos de obtener de las puertas del mapa. Todo bien. Ahora bien, este sería nuestro guardado para comentarlo, una prensa y voy a escribir guardar juego. Entonces ahora, esto tiene un comentario. Sé que no comentamos nada, pero al menos deberíamos mostrar comentando Creo que esto es para éste. Vamos a continuar con el juego de carga en el siguiente. Adiós por ahora. 40. Programación de sistemas de carga de juegos para el progreso guardado: Hola, bienvenidos de nuevo a Andrea Engine five, Bluepin Mastery Door Systems y Anteriormente, terminamos con nuestro mecanismo de ahorro. Comprobamos si el juego ya existe. Usamos un nombre de ranura para hacer eso. Y si existe, cargamos el juego, y lanzamos para comprobar si son nuestros objetos guardados del juego los que creamos. Almacenamos a una variable. Pasamos por todos nuestros actores. Obtenemos sus estadísticas. Establecemos una nueva variable de puerta, y nosotros para bucle todas las puertas guardadas que existen. Son lo mismo si la puerta ya existe, almacenamos los nuevos datos y verificamos las nuevas puertas. Si no es así, solo lo agregamos a la lista. Ahora, tal vez debería haber empezado desde la rama de la fuerza como lo hicimos nosotros, y creamos un juego seguro. Levantamos todas las puertas de ellos y los agregamos a la lista de los juegos seguros, y luego guardamos el juego de tragamonedas en tragamonedas. Algo que no hicimos por aquí que deberíamos. Así que voy a copiar este objeto guardar juego y guardar ranura porque los promovemos a variables por aquí. Y en el primer bucle, después pasar por todos nuestros actores en el mapa, luego vamos a guardar a slot. Ahora bien, ¿por qué lo hacemos por aquí y no por aquí? Debido a que se trata de un bucle for anidado, significa que para cada uno de estos, haga algo por cada uno de estos Entonces cuando esto termine, cuando esto termine, todavía tiene que pasar por cada puerta que haya encontrado. Entonces cuando ha pasado por todas las puertas que ha encontrado, entonces ahorramos a slot. Ahora, sigamos con el juego de carga. Entonces voy a crear un evento personalizado. Voy a llamarlo carga. Voy a llamarlo cargas de carga. Y comencemos a codificar. Entonces antes que nada, de nuevo, vamos a preguntar ¿existe el juego de guardar? Porque si no lo hace, no tiene sentido, no las nuevas puertas, el nombre de la ranura. No tiene sentido cargar nada. Sólo si es verdad, vamos a cargar. Si no lo es, no hay nada que cargar. Vamos a cargar juego de Slods. Y la ranura debería ser el nombre de la ranura. Ahora, de nuevo, tenemos que lanzar a O puertas y promover esto al objeto del juego guardado. Lo siguiente que hacemos es conseguir guardar las estadísticas de guardado de Dor. Voy a promover estas dos variables. Entonces vamos a conseguir a todos los actores de la puerta, una manera, de una puerta, porque esta es la que estamos salvando. Y vamos a verter cada bucle y vamos a conseguir que la puerta empiece. Esta no. En el mensaje uno porque el otro era una especie de llamada interna. Ahora, haremos lo mismo con las estadísticas de puerta segura. Vamos a un bucle for. Así que vamos a volver a crear nuestro bucle anidado y vamos a comparar los nombres de las puertas que acabamos de cargar por aquí en comparación con las puertas en el nivel Entonces vamos a igualar exactamente. Vamos a la sucursal Y si son iguales, entonces vamos a conseguir esta puerta. Esta es la referencia de puerta, y vamos a cargar puerta. Nuevamente, no este, el mensaje que establecerá las estadísticas de la puerta cargada. Todo bien. Y esto sería de carga. Al igual que nuestras puertas esta encuentra la puerta que somos esta en el mapa, entonces se ejecutará esta función. Establecerá el estado, y establecerá la rotación relativa en consecuencia. Y ahora viene la pregunta, ¿ cuándo ahorramos y cuándo cargamos? ¿Y cómo sabe el juego si es un juego cargado o un juego nuevo? Vamos a crear un sistema muy sencillo. Haremos un lingote en nuestro modo de juego, una variable de tipo Bullion, y llamaremos a este juego cargado punto de control o algo así Cuando iniciemos el juego, queremos que esto esté apagado. Pero nuestro primer salvamento, nuestro primer punto de control sería cuando cambiemos de nivel Es por eso que mantuve el plano del cambiador de nivel encendido. He estropeado algo. Sí. Bien. Entonces en este plano, cuando cambiemos el nivel y usemos el tutorial de GI para hacer eso, vamos a establecer el juego cargado a través y también vamos a salvar puertas Entonces, cuando pasamos por el nivel, estamos estableciendo que el punto de control esté encendido Cuando volvamos, sigue encendido porque el modo de juego, la instancia del juego es global. Contiene las estadísticas que ha establecido ahí dentro. Y cuando volvamos, cargaremos. ¿Cuándo esa carga cuándo vamos a cargar? Bueno, dentro del modo de juego, ya que el modo de juego se ejecuta cada vez que se abre un nivel, preguntaremos, ¿W es el modo de juego? Aquí está. Vamos a empezar a jugar. Después de que hagamos el widget, vamos a obtener el juego instantáneo. Vamos a emitir a GI. Vamos a convertirlo en un elenco puro, y vamos a conseguir cargar ese juego. Entonces si es un juego cargado, vamos a poner una rama aquí, vamos a cargar muñecas, que es una función que carga todas las muñecas. Ahora, lo último que tenemos que hacer es ir a identificarnos nuestras puertas. Demos una identificación a la primera puerta, esta, esta. Vamos a darle F uno. No sé por qué F, pero es una buena identificación. Digamos que esto es F dos. Ahora, como queremos que esta puerta se correlacione para corresponder, no correlacionarse con la otra puerta en el nivel dos, necesitan tener la misma identificación Entonces este sería F dos también. ¿Era un capital? Hmm. Iré a comprobarlo ahora mismo. Sí, usa capital. Bien, entonces estas tiendas comparten el mismo archivo guardado, por lo que compartirán el mismo estado. Ojalá, todo salga bien. Así que vamos a probar. Comprobemos que está cerrado. Estamos de paso por aquí. Estamos abriendo la puerta. Pasemos de aquí, y la puerta está abierta. Entonces nuestra carga segura funciona. Y si vuelvo a empezar el juego, deberían estar cerrados. Entonces sí, están cerrados. Y en el momento que pase de aquí, la dejé cerrada, por lo que estará cerrada. Ahora mismo lo guarda en el estado cerrado, así que está cerrado, pasando de aquí, abriendo la puerta, saliendo por el otro lado Realmente no puedo ver desde aquí arriba, pero puedo expulsar, y está abierto Entonces nuestro mecánico de carga segura funciona perfectamente, y creo que esto concluirá este, y vamos a seguir en el siguiente con nuestra puerta VFX. Adiós. 41. Diseña una puerta con manijas funcionales para una interacción inmersiva: Hola, y bienvenidos de nuevo a Unreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, terminamos con nuestro mecánico de carga y seguridad. Llamamos a nuestro juego de carga en nuestro modo de juego en tercera persona que cuando comienza cada nivel, ya que el modo de juego se está ejecutando, hicimos la pregunta, es un juego de carga, una variable que guardamos en la instancia del juego, juego cargado. Entonces si es así, cargamos el juego a través nuestro evento que creamos también en la instancia del juego, que carga el juego usando una especie de la misma mecánica. Pero en lugar de ahorrar, cargamos cada puerta. Después continuamos y agregamos el cambio en el cambiador de nivel, las puertas guardadas y el juego cargado a true Entonces el checkpoint, el juego de guardar inicia cuando vamos al siguiente nivel Y cuando volvamos, el juego sigue siendo un juego cargado, y podemos ver los efectos de guardar y cargar. Continuemos con nuestra puerta final, la puerta VFX que duplicaremos la puerta de un solo sentido Vamos a nuestras puertas. Encontremos la puerta de un solo sentido, y vamos a agregarle un manejado. Entonces voy a duplicar esto. Llamemos a esta puerta de efectos visuales, y vamos a abrirla. Ahora, para que sea más especial, vamos a cambiar el color a rojo de puerta. Y también vamos a agregar una nueva malla iniciada. Eso representará el mango. Así que vamos a llamarlo manejar. Y para la malla estática, usaremos el hígado. Creo que es una. No, dos. Sí, el hígado dos. Así que vamos a colocarlo en su lugar. Vamos a rotarlo. Vamos a traerlo aquí. Es un poco grande. Voy a hacer que sea de tamaño medio. Entonces 0.5 escala. Y traerlo un poco adelante, y eso está bien. Ahora, en la jugada de inicio, voy a guardar su rotación. Así que consigue rotación relativa, y voy a promover esta variable y llamarla manejar rotación relativa original. También agreguemos los sonidos de la puerta, para que podamos copiarlos y pegarlos. Vamos a traer esto por aquí. Cerremos todas las pestañas a la derecha, compilemos y guardemos, y llevemos Vamos a abrir doble puerta. Sí. Este tenía los sonidos. Entonces voy a copiar y pegar los sonidos de aquí a la puerta VFX Va a cerrar los dos. No los necesitamos. Y voy a cerrar debería ser el tono más bajo. No, eso es realmente abierto. A. Así que eso va a jugar desde inicio y el tono inferior debe ser desde abierto porque está cerrando. Y en realidad, ¿ sabes qué? Vamos a conectarlo para revertir y jugar. Entonces la puerta es más animada. Se abre y se cierra mientras está haciendo la animación de apertura o cierre. Y para hacerlo más completo, cambiemos la actualización del widget para decir cerrar al abrir y abrir mientras se cierra. Todo bien. Y no queremos eliminar el widget cuando se está abriendo o cerrando. Entonces esto debería ir al revés y el cierre debería ir a jugar porque cuando estamos cerrando, estamos abriendo y cuando estamos abriendo, estamos cerrando. Bien, creo que esto lo va a hacer. Ahora, agreguemos la animación de mango. Lo haremos antes de la vez, claro. Traeremos el asa y estableceremos la rotación relativa. Voy a agregarlo por aquí. Y vamos a aprender un rotador En realidad, ¿sabes qué? No vamos a utilizar el mango de rotación original. Vamos a justo lo que es esta rotación rara. Esto debería ser -90, 90 y cero. Todo bien. Sí, esa rotación fue muy rara. Si se estuviera guardando esa rotación, sería muy difícil. Ahora bien, por qué sucede esto, hay algo que se llama Gimbal ok y algo llamado quardans de la pantalla Y a veces estas cosas pueden estropearse un poco. Así que vamos de -90 y -90. A decir 40. No 400, 40 y -90. Creo que debería ser -40 también porque son 90 si lo giro hacia abajo. Es positivo 40. Pero aquí, es menos. Aunque veamos positivo en el eje aquí abajo. En fin, compilemos y guardemos. Y para Alpha, lo que usaremos, por supuesto, el camino más corto. Y vamos a crear un nuevo camión de flujo. Entonces, en el camión de flujo, llamemos a esto manejar drive. La primera unidad Alpha de una puerta. Bien. Entonces tengo que hacer esto el mouse si solo lo hago zoom, jefe de control no hace nada Entonces dos puntos, en realidad tres puntos. Uno es cero, cero. El siguiente sería, ¿ cuánto cuesta la primera línea de tiempo? Medio segundo. Entonces el asa debería ser la mitad de eso. Por lo que el total sería de 0.25. Eso podría ser cero otra vez. Y la mitad de eso sería 12.5. Entonces 125, y sería uno. Compilemos y guardemos, y conectemos nuestros mangos nuestro mango a nuestro alfa. Entonces esto significa que girará hacia abajo y girará de nuevo hacia arriba. Y ese sería nuestro mango. Así que vamos a traer nuestra puerta aquí. Que sea un poco bien porque tiene ese brillo Express play. Tenemos que viajar. Todo bien. Y se abre enfrente y el asa se queda por ahí. Pero podemos ver que está animando. Bien, entonces cambiemos hacia donde está abierto. Pongamos eso a 90. Y hagamos de la manija un niño de la puerta, así se mueve con la puerta. Y además, vamos a traer a nuestro jugador empezar por aquí para que no tengamos que viajar tres veces para venir aquí. Así que a la derecha. Cualquier cosa abierta, cerrada mientras estamos abriendo y cerrando. Vamos a moverlo un poco hacia un lado. Y agreguemos algo más. Agreguemos un efecto visual real para que ocurra cuando la puerta haya terminado. Pero hagamos esto para la siguiente lección. Te voy a ver entonces. Adiós. 42. Finalización de la mecánica de la puerta de manija con efectos de partículas y mejoras visuales: Hola, y bienvenidos de nuevo a Anreal Engine five, Blueprint Mastery, Door Systems y Anteriormente, comenzamos con nuestra puerta VFX. Cambiamos para hacer que la puerta abra y cierre mientras se cierra y se abre con E usando el interruptor y usando las salidas de apertura y cierre. Y también agregamos manejar una manija en la puerta que nos aparentamos a la malla Srtic Y lo animamos usando nuestra línea de tiempo estableciendo la rotación relativa del mango a un rotador estático Ahora, dijimos que vamos a agregar algunos efectos visuales, pero agreguemos algunas cosas más. Por ejemplo, agreguemos un sonido al mango, y esta vez, vamos a usar un componente de audio. Entonces para demostrar su uso. Entonces llamemos a esto sonido D. Entonces, ¿qué es este componente de audio? Como los componentes de malla estática y como otros componentes, es un shell. Es un caparazón de un tipo. Entonces este tipo es audio. Está vacío, así que tenemos que establecer qué tipo de sonido reproduce. Y no vamos a hacer esto en las cosas de detalle, lo vamos a hacer en tiempo de ejecución porque como es un componente de audio de la puerta, no desaparece. Cuando tocamos sonido a D, crea sonido y desaparece. Ahora es un componente. Entonces es un sonido que lo tenemos como variable en componentes. De hecho, puede encontrar el sonido de la puerta aquí mismo, componente de audio, y reutilizarlo y cambiarlo cada vez. Voy a traerlo aquí. Y al presionar E, voy a hacer una secuencia, y voy a parar, antes que nada, sea cual sea el sonido que este sonido de puerta esté sonando. Lo siguiente que voy a hacer es que voy a establecer un nuevo sonido. Entonces voy a usar el nodo set sound, conectado por aquí, tal vez un poco más de espacio. Y para el sonido, voy a elegir la manija de la puerta. Lo siguiente que tenemos que hacer es simplemente reproducir el sonido. Y eso sería todo. Pero usemos el sonido de la puerta, el componente de audio para un segundo uso. Voy a copiar y pegar todo esto. Voy a ir al final del final de la línea de tiempo. Y cuando estoy cerrando la puerta, no siempre, justo cuando estoy cerrada la puerta está cerrada, no abierta, queremos hacer algo de espacio para que esto sea más visible. Vamos a conseguir esto por aquí. Y al cierre al revés de la línea de tiempo, básicamente, vamos a conectar esta lógica. Vamos a traerlo aquí. Entonces ahora, cuando la puerta esté realmente cerrada, tocará un sonido cerrado. Así que escojamos puerta, cierre. Entonces ahora, nuestra manija reproduce un sonido, y cuando la puerta está realmente cerrada, en realidad está reproduciendo un sonido que se está cerrando que se cerró. Caldeé cerrar la animación terminada, básicamente. Vamos a probar esto. Vamos a compilar primero. Juguemos. Bien. Como se puede ver, cuando intenta reproducir el sonido de la manilla, se ve overetn por el sonido de la puerta cerrada Bien. Ahora bien, esto está sucediendo porque estamos deteniendo el sonido de la puerta y estamos reproduciendo un nuevo sonido sobre él. Entonces como este sonido no ha terminado, dónde está por aquí, no ha terminado de sonar cuando estamos cerrando la puerta, se detiene. ¿Qué es? ¿Por aquí? Se detiene. Dice un nuevo sonido, y reproduce un nuevo sonido. Lo siguiente que haremos es, uh ir a nuestro mapa y demostrar un poco el conseguir todos los actores con etiqueta porque demostramos el get all actores de clase que estamos consiguiendo todos los actores del mapa, y luego filtramos la clase, y luego averiguamos cuales actores son los que queremos. Ahora lo vamos a hacer con un get todos los actores de etiqueta, que no pasa por todas las clases, todos los actores en el mapa, solo pasa con los actores de tag. Es mucho más óptimo nodo. Para ello, antes que nada, vamos a traer nuestro sistema de partículas NS fuegos artificiales en nuestro mapa. Vamos a colocarlo en alguna parte. No lo activemos. Entonces voy a ir a sus detalles. Como pueden ver la partícula por defecto se activa en el momento en que la agrego al mapa. Ahora bien, si voy por aquí en los detalles y la búsqueda de auto active se apagará y ahora ya no habrá más partículas. Entonces busquemos también la etiqueta y vayamos a Tanques Actor y agreguemos la etiqueta P. ¿La vas a mover por aquí, moverla por aquí, verdad? Esto detrás de la puerta. Bien. Ahora, activemos esta partícula. Y hagamos un truco. Ya que quiero que esto suceda, nuevamente, solo cuando la puerta esté cerrada, activemos la partícula como cuando la puerta se haya cerrado por completo, luego la partícula se activa, no cuando la puerta se está abriendo. Pero sí quiero que esto sea común en ambas funciones. Ahora, podría separar esto y de hecho agregarlo en algún lugar aquí o después aquí porque actualiza el widget. Pero lo que podemos hacer es sólo mostrar un poco de truco aquí. Vamos a hacer una secuencia otra vez. Y ahora podemos tener esto como una funcionalidad separada, lógica separada para cuando la puerta se está cerrando. Ahora, voy a hacer conseguir todas las puertas con etiqueta. Y la etiqueta será P para partícula que acabamos de crear. Algo interesante sería ver que este está consiguiendo a este está consiguiendo todos los actores de etiqueta, no a todos los componentes. Tenemos nuestro componente en el jugador en la cápsula que de nuevo es P. Y aquí tenemos un actor con una etiqueta P. Un actor no es un componente. Entonces este nodo de aquí no buscaría la clase de jugador. Entonces si hago una cadena de impresión aquí, por cada dos, y en realidad, no necesito hacerlo. No puedo simplemente hacer una cadena de impresión y obtener la longitud de estas. Y conéctelo con la cadena de impresión. Lo que deberíamos ver cuando presiono play y abro y cierro la puerta es uno. Como puedes ver, no busca. No encuentra el componente de personaje que tiene ataque P. Es solo la búsqueda de actores. Eso fue sólo una demostración. No necesitamos la cadena de impresión. Pero lo que tenemos que hacer es obtener la primera copia de la matriz. Este es otro nodo de matriz que podemos obtener un número de la lista. Entonces vamos a emitir al sistema de Niágara, actor de Niágara. Porque sí conseguimos al actor, pero no sabemos qué tipo de actor es. Solo tenemos una etiqueta. Si fueran gepoactores de clase, podríamos filtrar la clase, y entonces podríamos tener acceso directo a esa Pero ahora que es GetOactos de etiqueta, necesitamos lanzar a nuestro resultado para preguntar si esta es la clase que queremos Y a partir de aquí, vamos a conseguir el componente Niagara. Creo que está en la parte inferior, sí, y establecer activar. Y como pueden ver, nuevamente necesitaba obtener el componente Niágara porque si dibujo de aquí, activar se puede ver directamente me lleva al componente Niagara. Se trata de un actor de Niágara, pero lo que estoy activando es el componente Niágara de ese actor. Entonces voy a configurar reset. También, esto significa tocar la partícula desde el principio, y toquemos un sonido cuando esto esté sucediendo. Y para hacer eso, vamos a no vamos a tocar el sonido sin fin. Juguemos 100 veces, 100 fuegos artificiales. No se correlacionará con la Partícula, la partícula se mantendrá viva después de los cien sonidos tocados Pero 100 sonidos, creo que es suficiente para lograrlo. Bien, entonces vamos a hacer N. Y en lugar de encontrarlo aquí, cual es una molestia, vaya a presionar N y haga clic. Tan solo trae a D N. Va a poner la N a 100. Yo voy a hacer el retraso por aquí, para que no reproduzca un sonido tras otro al instante. Vamos a hacer un flotador arreglado al azar. Entonces le damos un poco de aleatorización. Hagamos 0.5 a uno. Y vamos a tocar sonido a D. Que también vamos a tocar con un pitch. Vamos a hacer flotación aleatoria en rango. Y va a ser de 0.9 a 1.1. Para el sonido, vamos a elegir fuegos artificiales y luego vamos a necesitar llamar a esto de nuevo. Voy a crear un evento personalizado y llamar a D y fuegos artificiales. Voy a conectarlo por aquí y voy a hacer fuegos artificiales. Entonces esto crea un pequeño loop que jugará 100 veces, y luego ya no jugará. Pero antes de ir a probarlo, agreguemos también un poco de cinemática Agreguemos algo que podamos ver los fuegos artificiales en nuestro jugador. Para ello, voy a traer un actor de cámara. Y voy a hacer click derecho sobre la cámara y pilotarla. No Pivot, piloto, actor de cámara aquí está. Así que ahora en realidad estoy moviendo la cámara. Se puede ver aquí arriba, actor piloto actor cámara. Entonces ahora mismo soy básicamente la cámara. Entonces quiero una linda vista de donde quiero ver tal vez podría estar por aquí, para ser honestos, podríamos ver todo. Y voy a confiar en que vino Actor. ¿Y cómo poseo esta cámara? ¿Cómo cambio la vista? Bueno, hay un nodo muy sencillo llamado Bt view Par get Blend. Pero como pueden ver, no puedo llamarlo desde aquí. La razón es que necesito obtener el controlador del reproductor primero porque este es un controlador. El controlador cuenta con cámara y gestor. Este es quien se supone que debe hacer esto. Entonces, si solo estoy arrastrando de una ejecución aleatoria, no me puede dar esto De hecho, puede, si pongo objetivo de vista con mezcla y apago la contidad Lo puedo ver aquí. Se puede ver jugador del juego. Ahora, debido a que el juego del jugador y el administrador de cámara son hijos del controlador del jugador, se incluyen aquí en un sentido muy amplio de cómo funcionan las clases y heredan unas de otras De todas formas, vamos a hacer un objetivo de vista establecido con blend. Y si apago la contentidad, todavía no la puedo ver. Ah, aquí está. A lo mejor todo algo mal. De todas formas, desde el controlador del reproductor, podemos obtener esto. Ahora, el nuevo objetivo de vista serían nuestras operaciones de actor de cámara, y la anterior sería nuestro controlador. Voy a compilar y guardar, fijemos el tiempo de mezcla a 2 segundos, 2.5, y vamos a probarlo. Así que voy a presionar play voy a abrir la puerta, y cuando la cierro, se supone que debemos mezclar view target y ver los fuegos artificiales. Bien. Los fuegos artificiales funcionaron, pero la cámara no lo hizo porque dejé el pasador del tirón Eso fue anticlimático. Entonces la segunda vez es el encanto. Vamos a abrir y cerrar. Como pueden ver, todavía puedo mover al personaje, lo cual no es gran cosa. Pero si quisiéramos detener esto, podríamos simplemente ir por aquí, obtener p controlado y deshabilitar la entrada. Pero sí me gusta que pueda mover la alfombra, para ser sinceros. Y ahora no puedo mover la alfombra. Ahora, ya ves, el abierto se ha quedado, por lo que tendría que haber un nuevo código aquí para eliminar el widget, que en realidad podemos hacer fácilmente. Tipo de copia pega esto. El widget de eliminación del modo de juego. Et lo aclaramos un poco. Juguemos. Sí. Se elimina el widget, se abre la puerta y tenemos fuegos artificiales. Todo bien. Ahora, vamos a conseguir que el jugador empiece en el principio. El jugador comienza con un inicio de etiqueta. Entonces nuestro mapa está completo. Y vamos a repasarlo. Vamos aquí, nos acercamos a la puerta, se abre. Pasamos por aquí, se cierra. Utilizamos el plano de nivel para hacer esto. Creamos entonces un plano de puerta que se abre con E y se cierra Después seguimos adelante y creamos una puerta que se abre y se cierra y se abre frente a la capa. Lo hicimos una puerta doble y le agregamos algo de sonido. Hicimos una cerradura desde la puerta del otro lado, una puerta atajo. Que el jugador necesita estar de este lado para abrir. Fuimos e hicimos una puerta de rompecabezas con una palanca que necesita una sola palanca para abrir, y el hígado se abre, envía la puerta envía la puerta, el mensaje para desbloquear. Y luego creamos un sistema de dos palancas que la puerta revisa las palancas Creamos algo de física aquí con las cajas. Creo que fueron dos, sí, el tramposo, estamos presionando dos, y tenemos la puerta corredera por aquí con dos presostatos. Tenemos un pequeño rompecabezas con botones que la puerta se abre y se cierra si el rompecabezas es correcto. También tenemos una puerta de artículo. Si eliges primero el equivocado. Y luego tenemos el telepot. A otra ubicación del mapa. Tenemos nuestra tienda de física. Tenemos un teletransporte a otro mapa que demostramos la capacidad de guardar que podemos ver la puerta está abierta aquí Y si vuelvo a pasar, lo cerramos, vamos por aquí. Voy a expulsar, y podemos verlo cerrado, y estamos cambiando de nivel a través de todo este procedimiento, y luego tenemos nuestra tienda VFX Eso tiene un mango crea algunos fuegos artificiales y cambia nuestra cámara. Y creo que esto sería todo. Enhorabuena por llegar hasta aquí en el tutorial de la serie Door. Dominas lo esencial y estás listo para enfrentar los desafíos que te esperan. Gracias por seguirnos. Tu viaje no termina aquí, así que mantente curioso y sigue explorando hasta la próxima vez, feliz ganando.