Unreal Engine 5 UE5 Crea un juego ARPG al estilo Diablo de principio a fin | 3D Tudor | Skillshare

Velocidad de reproducción


1.0x


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

Unreal Engine 5 UE5 Crea un juego ARPG al estilo Diablo de principio a fin

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.

      Taller de diseño de juegos: creación de ARPG de mazmorras procedimentales de UE5

      3:33

    • 2.

      Fundamentos del juego

      18:24

    • 3.

      Creación del menú principal

      13:02

    • 4.

      Agregar el menú principal al puerto gráfico y salir

      10:30

    • 5.

      Mecánica de la pantalla de carga y creación de laberintos

      12:19

    • 6.

      Creación de una pantalla de carga

      16:44

    • 7.

      Agregar la pantalla de carga al modo de juego

      11:04

    • 8.

      Creación del algoritmo de laberinto

      13:30

    • 9.

      Creación del primer mosaico

      14:51

    • 10.

      Sistema de dirección personalizado

      11:47

    • 11.

      Encontrar mosaicos adyacentes

      13:45

    • 12.

      Mapeo de coordenadas y generación de mosaicos

      14:14

    • 13.

      Visualización del laberinto con flechas

      15:27

    • 14.

      Agregar paredes de castillo

      14:58

    • 15.

      Comunicación de planos con interfaces

      15:47

    • 16.

      Búsqueda de salidas disponibles

      10:26

    • 17.

      Algoritmo para la forma de laberinto base

      22:03

    • 18.

      Lección 3D 17 Desove continuo de mosaicos

      11:20

    • 19.

      Sistema de retroceso personalizado

      15:33

    • 20.

      Finalización de reglas de retroceso

      14:08

    • 21.

      Conexión de mosaicos después de la generación de laberintos

      20:34

    • 22.

      Corrección de errores y planos de decoración

      16:03

    • 23.

      Colocación de paredes en función de trazados bloqueados

      15:01

    • 24.

      Patrones de corredor predeterminados

      12:34

    • 25.

      Construcción de habitaciones y plan de ascensor

      15:36

    • 26.

      Plano de llave de pecho

      16:30

    • 27.

      Algoritmo del creador de habitaciones

      16:10

    • 28.

      Encontrar posibles habitaciones 2x2

      13:49

    • 29.

      Función del perímetro de la habitación

      13:23

    • 30.

      Listado de habitaciones y depuración

      15:56

    • 31.

      Creación de la estructura de la habitación

      14:18

    • 32.

      Función de habitación y fijación de paredes

      14:32

    • 33.

      Finalización de funciones de la habitación

      16:24

    • 34.

      Aleatorización de paredes internas

      12:42

    • 35.

      Agregar paredes de habitaciones

      18:55

    • 36.

      Puertas de habitaciones y segmentación del laberinto

      18:44

    • 37.

      Segmentación de las áreas de mazmorra

      12:48

    • 38.

      Finalización de la mecánica de segmentación

      13:46

    • 39.

      Categorización de áreas por tamaño

      12:00

    • 40.

      Reemplazo de piso por categoría

      15:46

    • 41.

      Categorías de habitaciones ocultas

      17:19

    • 42.

      Función de intercambio de pared a puerta

      21:07

    • 43.

      Colocación de puertas y sellos

      13:42

    • 44.

      Funciones de área de una sola puerta

      21:28

    • 45.

      Conexión de paredes de mazmorras

      13:53

    • 46.

      Decoraciones de pared

      16:57

    • 47.

      Ajustes de flecha direccionales

      11:30

    • 48.

      Ocultar flechas de depuración y crear antorchas

      15:21

    • 49.

      Luces de antorcha de desove

      14:16

    • 50.

      Efecto de parpadeo de antorcha

      16:29

    • 51.

      Sistema de luz de corredor

      16:20

    • 52.

      Mecánica de trampas y sistema de daños

      13:42

    • 53.

      Animación de trampas y SFX

      12:27

    • 54.

      Función de generación de utilería

      15:22

    • 55.

      Blueprint de decoración de habitaciones

      13:04

    • 56.

      Conceptos básicos del creador de utilería de habitaciones

      15:01

    • 57.

      Finalización de la decoración de utilería

      14:00

    • 58.

      Agregar elementos de física a habitaciones

      11:55

    • 59.

      Importación de Revenant y el plano de la torre Hellgate

      15:02

    • 60.

      Lección 3D 59 Integración de visuales y laberintos de la torre Hellgate

      13:42

    • 61.

      Fundamentos de elementos y tablas de datos

      16:04

    • 62.

      Comportamiento del elemento y widget del cursor

      14:16

    • 63.

      Animación de planos de pecho

      15:12

    • 64.

      Mecánica del pecho y sistema de caída de objetos

      13:42

    • 65.

      Cofres de habitación ocultos

      15:00

    • 66.

      Animación de objetos cerca del pecho

      20:00

    • 67.

      Animación de elementos de acabado con líneas de tiempo

      12:45

    • 68.

      Mostrar widgets de artículos e inventario

      15:21

    • 69.

      Recoge artículos y agrégalos al inventario

      11:39

    • 70.

      Contador de monedas y widget de recogida

      13:41

    • 71.

      Fijación de la funcionalidad del contador de monedas

      12:19

    • 72.

      Visuales de inventario en el juego

      13:13

    • 73.

      Actualización de los visuales de inventario

      14:25

    • 74.

      Generación del zoom cinematográfico del jugador

      20:23

    • 75.

      Correcciones de colisiones y detección de mosaicos de jugadores

      12:30

    • 76.

      Mecánico de techos de habitaciones

      17:47

    • 77.

      Mostrar y ocultar el mecánico de techo

      12:06

    • 78.

      Blueprint de visuales para ascensores

      13:16

    • 79.

      Cómo generar el próximo mecánico de laberinto

      15:19

    • 80.

      Generación continua de laberinto desde el primer mosaico

      14:49

    • 81.

      Animación de ascensores y efectos de sonido

      12:16

    • 82.

      Cinematografía de cámara para ascensor

      14:28

    • 83.

      Solución: problemas de mezcla de vistas de cámara

      16:39

    • 84.

      Animación de ascensores e inventario

      13:46

    • 85.

      Sistema de minimapa

      11:31

    • 86.

      Toques finales del minimapa y descripción de inventario

      19:39

    • 87.

      Sistema de salud del jugador y widget

      19:54

    • 88.

      Poción de salud de usabilidad de artículos de inventario

      17:08

    • 89.

      Barra de tiempo de juego y poción de tiempo

      13:00

    • 90.

      Poción de velocidad y efectos de partículas

      12:44

    • 91.

      Poción de ira y efectos de partículas

      15:37

    • 92.

      Música de combate y modo de combate Hellgate

      16:43

    • 93.

      Sistema de salud Hellgate y muerte

      11:11

    • 94.

      Sistema de animación y orientación de balas Hellgate

      14:59

    • 95.

      Disparo de balas Hellgate y SFX ligero

      15:13

    • 96.

      Widgets de ratón personalizados y malla renaciente

      13:11

    • 97.

      Animación de impulsos físicos y ataques cuerpo a cuerpo

      15:54

    • 98.

      Colisiones y efectos de planos de ataque cuerpo a cuerpo

      23:48

    • 99.

      Mecánica de apunte estático y disparo

      14:09

    • 100.

      Plano de bala del jugador y visuales

      10:38

    • 101.

      Disparo de jugadores y VFX

      13:29

    • 102.

      Animación y mecánica de la muerte del jugador

      11:59

    • 103.

      Sistema de detección de ratón

      18:14

    • 104.

      Interacción avanzada con el ratón para elementos

      15:56

    • 105.

      Sistema de interacción con ratón y entradas

      14:03

    • 106.

      Sistema de interacción de rango mínimo

      14:14

    • 107.

      Terminación de disparo estático y puntería

      20:20

    • 108.

      Bajo la mecánica del cursor enemigo

      17:32

    • 109.

      Correcciones de la plantilla posterior al proceso y la detección de enemigos

      20:18

    • 110.

      Arreglos de extensión de artículos y widget de pecho

      16:21

    • 111.

      Correcciones de widgets de elementos y código de ascensor

      8:10

    • 112.

      Ajustes del widget del artículo y funcionalidad del ascensor

      17:56

    • 113.

      Importación de personajes Morigesh y sistema de salud de IA

      12:45

    • 114.

      Retargeting de animaciones de Revenant a Morigesh

      15:44

    • 115.

      Comprobación de rangos de IA y guardias Hellgate

      17:54

    • 116.

      Mecánica de disparo con IA y golpes

      17:28

    • 117.

      Mecánica de golpes y aturdimiento

      17:08

    • 118.

      Variables de Blackboard y configuración del árbol de comportamiento

      7:41

    • 119.

      Configuración de variables de Blackboard y árboles de comportamiento de IA

      13:45

    • 120.

      Comportamiento de patrulla de IA y modo de pánico

      12:47

    • 121.

      Modo de ataque con IA y comprobaciones de la línea de visión

      12:13

    • 122.

      Optimización de volumen y búsqueda de caminos de navegación con IA

      11:14

    • 123.

      Volumen de navegación y optimización

      10:30

    • 124.

      Comportamiento de acabado de disparo y depuración

      14:19

    • 125.

      Corrección de errores finales y pulido de la jugabilidad

      10:17

    • 126.

      Parche de errores principales en el juego

      17:13

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

446

Estudiantes

2

Proyectos

Acerca de esta clase


Desbloquea tu potencial creativo con el taller de diseño de juegos: ¡creación de ARPG de mazmorras procedimentales de

UE5![
Haga clic aquí para ver el paquete de recursos]

¿Alguna vez has querido diseñar tu aventura de rastreo de mazmorras como Diablo?

Imagina crear tus propias incursiones épicas, completas con mazmorras generadas por procedimientos, enemigos implacables y botín épico, todo ello con Unreal Engine 5.

En el taller de diseño de juegos: creación de ARPG de mazmorras procedimentales de UE5, ¡le damos vida al juego de tus sueños!

Junto conmigo, Markos y 3D Tudor, te sumergirás en profundidad en Unreal Engine 5 para crear un ARPG completamente funcional desde cero. Ya sea que sueñes con crear mundos de fantasía épicos o aventuras de acción aceleradas, esta clase de Skillshare te guiará paso a paso a través del dominio del diseño de mazmorras procedimental, la IA personalizada y la mecánica de combate dinámica. ¡Convertamos tus ideas de juegos en realidad!

Lo que vas a aprender:

  • Domina Unreal Engine 5 para el diseño de ARPG: crea tu ARPG desde cero, incluidas mazmorras procedimentales, IA enemiga y mecánica de combate personalizada.

  • Generación de mazmorras dinámicas con algoritmos de retroceso: aprende a generar diseños únicos con texturas frescas y trampas en cada jugada.

  • Crea IA de enemigos inmersiva: crea enemigos desafiantes que patrullan, atacan y se adaptan a los movimientos de tu jugador.

  • Sistemas de botín y cofres interactivos: agrega recolecciones de elementos y mecánicas de tesoros para involucrar a los jugadores y mejorar la experiencia de juego.

  • Niveles de mazmorra sin fin: diseña un mecánico de ascensor que genere niveles sin fin, creando una exploración de mazmorra sin problemas.

  • Paquete de recursos personalizable: usa recursos prefabricados como materiales, efectos de partículas, texturas y mallas para optimizar el desarrollo y enfocarse en la creatividad.

Qué esperar:

Imagina diseñar mazmorras que generen diseños únicos en todo momento, llenas de iluminación atmosférica, cofres interactivos y trampas estratégicas. Imagínate luchando contra enemigos feroces que reaccionan a las acciones de tu jugador, con cofres de tesoros repartidos por todo el mundo.

Esta clase de Skillshare te guiará a través de la creación de estos elementos esenciales desde cero, asegurándote de que obtengas las habilidades necesarias para crear tu propia aventura de ARPG.

En el taller de diseño de juegos: creación de ARPG de mazmorras procedimentales de UE5, aprenderás a hacer lo siguiente:

  • Crea un generador de calabozos procedimental con un algoritmo de retroceso personalizado. Se te guiará en la construcción del sistema de laberinto y la generación de mosaicos de manera dinámica, asegurando un juego fresco en todo momento.

  • Crea habitaciones y entornos dinámicos, agregando accesorios, texturas y materiales para aportar variedad a tu mazmorra.

  • Implementa una mecánica de ascensor para niveles interminables, agregando progresión y desafíos a medida que los jugadores exploran más.

  • Diseña una IA personalizada para enemigos que patrulle, ataque y se adapte a las acciones de los jugadores, creando encuentros tácticos y atractivos.

  • Integra la física, la iluminación y los efectos de sonido para crear atmósferas inmersivas que mejoran la experiencia del jugador.

Desglose de la clase:

Este taller comienza con lo esencial: configurar un modo de juego de arriba hacia abajo y crear un menú principal completamente funcional. Te sumergirás en los planos de Unreal Engine, donde implementaremos algoritmos de generación procedimental, creando dinámicamente infinitas mazmorras con IA enemiga y accesorios ambientales.

A lo largo de la clase, sumergirás los dedos de los pies en lo siguiente:

  • Generación de calabozos procedimentales: uso de algoritmos personalizados para crear paredes, pisos y habitaciones para calabozos únicos.
  • Mecánica de combate de los jugadores: diseña ataques cuerpo a cuerpo y a distancia, junto con efectos de derribo, para mejorar el juego.
  • Comportamiento de IA: crea enemigos que patrullan, ataquen y se reposicionen tácticamente.
  • Elementos interactivos: crea elementos atractivos como cofres, trampas y elevadores para profundizar el desafío de tu juego.
  • Sistemas de interfaz de usuario avanzados: implementa un minimapa 3D, barras de salud, inventario y animaciones de recogida de artículos para una experiencia de usuario completa.

Tu paquete de recursos:

Para ayudarte a optimizar tu trabajo, esta clase incluye un extenso paquete de recursos que:

  • 21 texturas de interfaz de usuario para elementos HUD personalizados.
  • 133 mapas de texturas para crear materiales estilizados, junto con 53 instancias de materiales prefabricados.
  • 2 efectos de partículas preestablecidos para explosiones y fuego.
  • 17 efectos de audio para el diseño de sonido ambiental.
  • 63 mallas en 5 estilos de mazmorra preestablecidos (piedra, adoquines musgosos, madera, ladrillo y un tema de cámara oscura) con accesorios y antorchas.
  • Un efecto posproceso de resaltado para garantizar la visibilidad del jugador en entornos complejos.

Resumen de la clase

En esta clase, estamos dando el pistoletazo de salida al configurar el modo de juego central y el diseño en Unreal Engine 5, como sentar las bases para todo. Después de eso, comenzaremos a diseñar un menú principal realmente limpio y fácil de usar. Es una de esas cosas que hacen una gran diferencia, ¿sabes?

Una vez que eso esté solucionado, nos sumergimos en lo divertido: la generación de laberintos procedimentales. Aquí es donde comenzarás a crear mazmorras dinámicas, y todo se pone bastante bien. A medida que avanzamos, definiremos reglas personalizadas para la generación de habitaciones, para que no solo tengas que unir las cosas. Tendrás control sobre cosas como las losetas y los puntos de salida, para asegurarte de que la experiencia del jugador sea perfecta.

También vamos a trabajar en un algoritmo de retroceso personalizado que se asegure de que cada vez que alguien juegue a tu juego, se sienta fresco. ¡Nunca dos carreras serán las mismas! Luego, realmente nos sumergimos en el meollo con la IA y los sistemas de combate enemigos. Aquí es donde tu juego comienza a ser serio, desafiando a los jugadores y manteniendo las cosas interesantes.

Para terminar todo, nos sumergiremos en la configuración de un sistema de inventario para que los jugadores puedan recopilar artículos e interactuar con ellos sin problemas. Realmente combina todo y hace que todo el juego se sienta más interactivo y pulido.

Reflexiones finales

Al final del taller de diseño de juegos: creación de ARPG de mazmorras procedimentales de UE5, habrás creado un sistema de mazmorras procedimentales completamente funcional con entornos dinámicos, IA avanzada de enemigos y un sistema de botín, todo dentro de Unreal Engine 5. Ya sea que recién comiences tu primer juego o busques perfeccionar tus habilidades, esta clase te dotará de las herramientas y los conocimientos necesarios para crear un ARPG convincente que rastrea mazmorras.

¡Sigue escribiendo el guion, todo el mundo, y nos vemos en la clase!

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. Taller de diseño de juegos: creación de ARPG de mazmorras procedimentales de UE5: ¿Alguna vez has querido crear tu propio calabozo, como el legendario Diablo, completo con enemigos implacables y epicludio, usando el poder de no darse cuenta de usando el Bueno, ahora puedes dar la bienvenida al taller de diseño de juegos, realizando cinco, Dungeon procedimental, creación accional si Porque el juego de tus sueños puede convertirse en una realidad. En este curso, aprenderás a diseñar un GLP de acción completamente funcional utilizando planos avanzados desde generación de tangentes dinámicas hasta IA personalizada, cofres interactivos y sistemas de inventario Tienes todo lo necesario para sacar a la luz tu visión. Hola, soy Marcos, y me he asociado con dudo para traer este emocionante curso Nuestro objetivo es crear un sistema que genere niveles dinámicamente, completo con paredes personalizadas, accesorios e iluminación, mientras agrega funcionalidad de juego para darle vida a tu juego Desarrollaremos un generador de niveles que utiliza un algoritmo de backtrack personalizado para crear la estructura del dangon Esto sentará las bases de nuestros niveles procesales, asegurando que su juego se sienta fresco y único A continuación, construiremos habitaciones y dividiremos el nivel en varias categorías. Esto nos permitirá aplicar diferentes texturas, materiales y accesorios, para potenciar la variedad visual del dangon Añadiremos accesorios ligeros que aparecen automáticamente dentro de la mazmorra para ayudar a agregar ambiente al nivel a medida que se genera la mazmorra para ayudar a agregar ambiente al nivel a medida que se Una de las características más emocionantes que cubriremos es la mecánica del elevador, que permite un nivel sin fin medida que los jugadores avanzan, el elevador generará un nuevo generador para crear el siguiente nivel asegurando una exploración infinita También agregaremos borradores, cofres y un cofre de misiones para desbloquear el elevador para que progrese al siguiente piso Para que el ambiente se sienta más vivo, introduciremos activos físicos o interacciones dinámicas con accesorios y objetos en el mundo del juego Avanzando en el diseño de la interfaz de usuario, implementaremos un mínimo de tres D para ayudar a los jugadores a navegar por la mazmorra Adicionalmente, construiremos un sistema básico de interfaz de usuario para mostrar la salud y el sistema de inventario, y varios elementos como impulso de velocidad, tanto salud como pociones, todos malos a través de tablas de datos Para el combate, crearemos un personaje con dos habilidades primarias, un ataque de may que derriba a los enemigos y objetos, y un ataque para hacer presa como desde la distancia. También estaremos implementando un sistema de IA enemiga, que los enemigos estarán patrullando, disparando al jugador cuando esté a distancia, y reposicionándose para mantener una ventaja táctica Wo mejorar aún más la dificultad. Diseñaremos un edificio enemigo que dispara al jugador. Los enemigos de IA protegerán esta estructura, y cuando sea destruida, IA entrará en pánico o atacará agresivamente al jugador, agregando un elemento estratégico a la mazmorra En este curso, obtendrás acceso a un completo paquete de recursos que elevará el diseño de tu juego. Incluye 21 texturas de interfaz de usuario personalizadas, 133 mapas de tractura para texturizar activos para crear 53 materiales e instancias de materiales El paquete presenta 63% de líos de baldosas en cinco estilos de mazmorras preceptos, piedra, adoquines musgosos, madera, ladrillo y una cámara temática más oscura, lo que te ayuda a integrarlos sin lo que te ayuda a integrarlos en cinco estilos de mazmorras preceptos, piedra, adoquines musgosos, madera, ladrillo y una cámara temática más oscura, lo que te ayuda a integrarlos sin problemas en tu proyecto. Estos códigos te guiarán paso a paso en la construcción un sistema de mazmorras completamente funcional usando al motor cinco Vamos a sumergirnos y comenzar a crear nuestro propio mundo generado por procedimientos 2. Fundamentos del juego: Hola, y bienvenidos a Game Design Workshop y Real Engine cinco procedimientos Dungeon action RPG curso de creación Vamos a explicar de qué se trata todo este curso. Voy a demostrar, en primer lugar, mis increíbles habilidades de dibujo en pintura para hacer esto, y vamos a estar haciendo esto a menudo durante el curso. Ahora bien, lo que vamos a estar creando es un menú principal básicamente. Eso irá a estar generando un laberinto. Pero la forma en que va a estar funcionando, vamos a discutirlo un poco más con más detalle. Pero por ahora va a crear como caminos de serpiente que en algún momento, van a terminar. No podrán crear más, por lo que intentará elegir otra vía y crear otro camino de serpiente que acabará para ir ahora, y luego cada vez más. Vamos a estar haciendo esto desde un punto de partida, y vamos a ir hacia cualquier dirección en una grilla ficticia Si eso tiene sentido. Ahora, después de esto, vamos a crear nuestro propio personaje, que tendrá un ataque al centro comercial. Hagamos un puñetazo aquí. Mi ataque ML, y un ataque a tiros. Por supuesto, el coarcor vamos a poder movernos en todas las direcciones, eso está dado. Y además, vamos a tener un pequeño inventario, como, por ejemplo, si esta es nuestra pantalla, vamos a tener un inventario apareciendo e aquí, nuestro personaje podrá recoger algunos artículos haciendo clic en ellos o abrir algunos cofres que dejarán caer Sí, este es un ajedrez increíble. Como te dije, unas habilidades de dibujo increíbles. Sí. Y por último, lo que vamos a hacer es crear un personaje de IA. Pongamos dos cuernos a este personaje que tendrá un ataque de alcance No va a ser un arma, va a ser algo así como una daga. Y también nos pondremos eso que hacemos en la creación del laberinto, básicamente. Vamos a crear algo así como una torre que te dispara cuando estás dentro del alcance, algo así. Y básicamente, eso sería. La IA estará resguardando la torre y estará patrullando. Cuando la torre sea destruida, correrá alrededor del laberinto en modo pánico. Y cuando estés en el rango de la IA, te disparará, y cuando no estés en el rango, pero son agro. Intentarán encontrar un lugar al que disparar. Básicamente una IA muy simple. Vamos a estar usando árboles de navegación y IA para demostrarlos. Pero para ser honestos, esta escala de IA y la forma en que la hemos hecho será procesal porque nuestro laberinto algo que no agregué. El laberinto cuando lleguemos al final, digamos que este es el final. Iremos hacia arriba con un elevador y crearemos otro laberinto. No más pequeño, más grande que el anterior. Los más pequeños no tendrían ningún sentido. Pero sí, eso sería. Vamos a estar creando otro laberinto. Y como esto es infinito, y la forma en que lo estamos haciendo, vamos a usar un volumen de navegación que va a engullir nuestros laberintos, que no lo hace ilimitado porque esto sí tiene Pero vamos a estar usando esto para demostrar el patrón de navegación AI piensa, esto no sería óptimo. Esto sería para nuestro juego. Creará algo de framelg, pero está bien. Creo que este es un buen punto culminante para las explicaciones. ¿Hay una obra de arte, una forma de arte, como puedes ver Vamos a continuar en la siguiente. Adiós. Empecemos por crear un nuevo nivel al juego hostil porque este nivel se está llenando con nuestros activos de previsualización. Ahora bien, si eres nuevo algunas explicaciones, podemos encontrar los activos que hemos poblado por todo el mundo aquí en la caja de outliner Si selecciono algún activo en el mundo, me redirigirá a ese activo en el outliner En el outliner, podemos ver lo que hay dentro que hemos colocado dentro de nuestro mundo L et's go a crear un nuevo nivel. Vamos a los mapas de carpetas y haga clic derecho y seleccionemos el nivel. Esto creará para nosotros el nuevo ambiente que estará vacío. Voy a llamarlo nivel de juego. Va a presionar Enter. Ahora, se puede ver que hay un pequeño asterisco al lado de su icono Este asterisco significa que este activo no se guarda. También lo podemos ver si cambio de carpeta, por ejemplo, olvidé que no he guardado este activo. Podemos ver aquí abajo que dice un activo no guardado. Arreglamos esto, presionemos sobre este icono, y hará estallar el menú de contenido seguro y voy a guardar el activo. El atajo rápido sería el control guardado, y es el atajo para guardar todo. Como podemos ver archivo, Dave todos. Vuelve al navegador de contenido, vuelve a los mapas y abramos nuestro nivel. Ahora, podemos ver que este nivel está vacío ahora en el outliner No hay nada dentro de él. Yo quería traer algo dentro, pero no voy a usar nuestros actos ahora mismo. Yo solo voy a ir a este botón de aquí y presionar Vamos a agregar la iluminación direccional, para que podamos las cosas. No podemos ver nada porque no hay nada que ver. También voy a añadir una forma y seleccionar un tubo. Ahora podemos ver que hay iluminación y el tubo. También lo podemos ver en nuestra ventana gráfica. Mezcle la cámara. Y a los que no tienen conocimiento de motor irreal, como lo hice fue presioné click derecho y me moví con WA y D alrededor, manteniendo pulsado el click derecho U y A mueven la cámara hacia arriba y hacia abajo, y el ratón gira como un juego básicamente. Los murciélagos son más técnicos. Como podemos ver cuando seleccioné el cubo o la iluminación, la luz direccional. Podemos ver los detalles del panel aquí cambiados. Se trata de detalles para cualquier cosa que hayamos seleccionado. Junto a ella, hay otra pestaña llamada configuración del mundo. Si no tiene esta pestaña, la puede encontrar en la configuración de wd de ventana. Puede aparecer en cualquier lugar, pero puedes acoplarlo en la ventana gráfica donde quieras Dentro de la configuración de palabras, podemos encontrar mucha información sobre las reglas específicas de nuestro nivel. Algunas reglas específicas lo establecen en ajustes de muro. No vamos a molestarnos con todo en este momento, pero vamos a comprobar las reglas del estado de ánimo del juego, que son las reglas, digamos, la información más importante Es de lo primero que cuando presionamos play se está cargando en el comportamiento predeterminado. ¿Y a qué me refiero con comportamiento predeterminado? Si presionamos play, se puede ver el outliner se está llenando de muchas cosas más Estas son cosas necesarias para ejecutar el juego. Ahora mismo, tenemos el cubo y la iluminación, y por defecto, podemos controlar con el ratón y podemos movernos y hover Para cambiar todo este comportamiento, necesitamos cambiar la configuración. Hay varias formas de cambiar este comportamiento, y para nosotros, vamos a estar explotando cómo cambiarlo a través del modo de juego Ahora, para lograrlo, vamos a estar usando una plantilla y mucha de nuestra programación. Así que vamos a ir de nuevo al cajón de contenido y seleccionar Agregar y agregar característica o paquete de contenido. Esta es una forma de agregar a tus proyectos este pack de contenido, las plantillas que Areal ofrece, si no lo has hecho en la creación del proyecto Puedes agregar el Blueprint one, el Seplus plus one, o el paquete de contenido inicial Vamos a ir a Blueprint y seleccionar la de arriba hacia abajo. Voy a presionar otro proyecto. Será instantáneo para mí. Puede que no sea para ti. He vuelto a cargar esta información porque ya los he descargado en otros proyectos Ahora, cuando termine de descargar, abrirá el navegador de contenido en una nueva ventana, y podremos cerrar la anterior. Voy a hacer esta pantalla completa. Y veamos las nuevas cosas agregadas. Añadió la carpeta de personajes, que tiene los money kins para las animaciones. Creo que es un Many y Qin, y algunas herramientas de prototipado de nivel, y una carpeta de cursor para el clic de arriba hacia abajo La propia carpeta de arriba hacia abajo, que contiene un mapa que requiere de todo esto para funcionar. Y dentro de la carpeta blueprints, podemos ver las tres clases que en realidad vamos a estar usando mucho He estado usando mucho la palabra clases, y para aquellos que son nuevos en la programación, esto puede ser confuso. Por ahora, puedes considerar clases también como plantillas de programas, como Ser placas más específicas para crear objetos en nuestro mundo, y todo en nuestro mundo es un objeto. Por ejemplo, tenemos tres clases específicas de blueprint por aquí Tenemos la clase de personaje, y tenemos la clase de controlador y la clase od de juego. Cada uno de ellos está reprogramado con un comportamiento específico, y eso lo convierte en una clase. Y en nuestro caso ahora mismo, estamos usando el juego de la vieja clase, que es el responsable. Voy a cerrar esta ventana por aquí, que se encarga, como podemos ver en la configuración del mundo, del estanque de clase, del controlador, del hud, de muchas cosas Ahora, vamos a ir a anular gamed y seleccionar el gamed de arriba hacia abajo. Como pueden ver, ya cambió la información aquí más cerca de lo que queremos. Si presiono play, podemos ver al personaje de arriba hacia abajo cayendo sin cesar Si elimino la clase de peón predeterminada y uso none y presiono play, el personaje desapareció y la cámara se quedó donde originalmente la colocamos Lo que esto significa a través del comportamiento predeterminado del modo de juego, cuando tenemos un peón de clase predeterminado, siempre va a desovar al comenzar a jugar cuando presionemos Más información sobre el modo de juego es que se ejecuta por nivel. Esto quiere decir que está contenido en su interior. Contiene reglas para este nivel, pero podemos usarlo en muchos niveles porque podríamos querer tener las mismas reglas o muchos niveles. Podemos tener tantos modos de juego como queramos en nuestro juego, y siempre podemos anularlos aquí. Yo uso la palabra override porque podemos establecer un modo gay por defecto, era la configuración del proyecto cuando configuramos para el modo gay. Podemos encontrar que podemos poner uno por defecto que todos nuestros mapas van a estar usando. Oh, Mode es un poco de clase complicada. También es responsable de las cosas multijugador, y, puedo contener muchas reglas especiales. La capacidad que tiene para reiniciar en cada nivel. Déjame darte un ejemplo en pintura, hazla más visualmente dolorida. Oh. Si este es nuestro nivel, cuando lo cargamos, comenzamos con el modo de juego. ¿Por qué digo que empezamos con el modo de juego? Porque el modo de juego se ejecuta antes de que se abra el nivel. Cómo podemos ver claramente esto. El nivel en sí, tiene otro plano específico autónomo, llamado el plano de nivel Podemos demostrar esto yendo al proyecto, y yendo a este viento de aquí, y plano de nivel abierto Ahora bien, para los que son nuevos, esta es la gráfica de eventos que forma parte del plano Vamos a explicar un poco más adelante más cosas. Lo que voy a hacer es esto comenzar a jugar. Ellos nivelan plano. Esto significa codificar que cuando comience el nivel, imprima y cadena en la consola que tenga estas letras dentro de ella. Voy a copiar esta cadena. Voy a ir al navegador de contenido. Ir a planos abajo, modo. Si se abre así, suele suceder porque no hay código dentro de él, por lo que nos muestra las variables por defecto del blueprint La tina por defecto. Voy a compilar, ir a abrir fu plano completo Voy a hacer click derecho sobre el gráfico de eventos y escribir dado paso. Voy a pegar. Impresiones. Voy a corregir este molde A Gain. Planos. Compilar, y voy a presionar play. Como puedes ver, imprimió primero un modo de juego y por encima de él, el plano de nivel Esto quiere decir que el orden en que este corre es s primero el modo de juego, que tiene toda la información. Hablamos de, el controlador del reproductor, el teléfono del reproductor, de todo, y luego se ejecuta un plano de nivel contenido Algunas preguntas podrían aparecer en la cabeza de algunas personas sobre ¿por qué estamos usando esto y por qué no estamos usando eso? En la codificación, hay algo una referencia. Esto significa que quiero hacer algo, o algo más para hacer algo por mí. En general, si quiero comunicar algo con otra cosa como el juego me comunico con un plano de nivel. Tengo que tener una referencia. Hay una referencia. Entonces, tengo que tener una referencia para ti. Uno de los principios, uno de los principios, en realidad, pero una de las formas en que estamos pensando cuando estamos programando algo es sobre las referencias. ¿Cómo puedo obtener una referencia a esto y cómo consigo una referencia a eso? Hay muchas reglas. No voy a entrar en demasiados detalles, pero esa es una de las formas en que estamos eligiendo qué usar. Hay decisiones y reglas mucho más complicadas que hay que tomar a consideración. Pero, por ejemplo, una cosa que es importante es la referencia para un principiante, eso es algo a lo que tienen que acostumbrarse. Oh, ¿por qué estamos usando también el modo de juego y cómo lo vamos a usar? ¿Vamos a demostrar la capacidad del modo de juego para reiniciarse por sí mismo Esto quiere decir que cuando estamos cargando el nivel, queremos disparar cosas específicas que suceden. Y cuando recargamos el nivel, olvídate de ellos y recargarlos desde el principio En un ejemplo más específico, lo que vamos a utilizar es el modo de juego cree el menú principal. Vamos a crear una nueva diapositiva. Lo que vamos a estar haciendo es un programa que diga, Dow me el menú principal, el jugador presiona, o inicia, y luego inicia el juego, continuar con lo que hayamos hecho, o dejar el juego. Pero cuando el juego haya terminado, queremos recargar esto Lo que vamos a estar haciendo es que vamos a estar abriendo el nivel nuevamente de aquí. Entonces, cuando volvamos a abrir la etiqueta, queremos volver a mostrar el menú principal. Pero vamos a estar usando el modo de juego para albergar eso. Creo que esto es suficiente para la teoría. Para esta, te veré en la siguiente con más acción. Adiós. 3. Creación del menú principal: Hola, y bienvenidos al taller de Diseño de Juegos y Real Engine cinco llamadas de creación de PZ de acción de Dungeon procesal creación de PZ de acción de Dungeon En la lección anterior, comenzamos con creación de nuestro mapa en los mapas de carpetas. Y luego continuamos agregando la plantilla para personajes de arriba hacia abajo, y cambiamos el modo de juego en nuestra configuración de muro. También agregamos un cubo y una luz direccional, y demostramos la habilidad, bueno, no la habilidad, sino el orden de las operaciones que el modo de juego ejecuta primero, y luego el nivel de juego corre cuando estamos iniciando nuestro nivel. Ahora, voy a borrar estas cadenas, y también, voy a borrar el cubo y la luz de dirección, y voy a guardar todo. En esta lección, vamos a crear el menú principal para el widget para nuestro juego usando un plano de widget Ahora voy a ir a Contenido, click derecho, crear una nueva carpeta y ponerle el nombre U. Dentro de esta carpeta, voy a hacer click derecho. Interfaz de usuario y seleccione el blueprint del widget. Ahora bien, ¿qué es un blueprint de widget? Un blueprint de widget es una forma que real nos ofrece para crear interfaces de usuario Voy a seleccionar el widget de usuario de clase común. Hay muchas otras clases para cosas muy específicas que hacer. Lo que necesitamos es un widget de usuario. Voy a llamar a este WG. Menú principal. Y voy a abrirla. Antes de comenzar a programar el widget y el menú principal. Hablemos un poco de widgets para los que son nuevos. En primer lugar, podemos notar que esta gráfica se ve un poco diferente las gráficas que vimos en el plano del modo juego o el plano a nivel de juego La razón es porque estamos en la pestaña de diseñador del widget. También hay una tina gráfica que le parece más familiar a las otras gráficas. La razón es que en la tina gráfica, estamos haciendo la programación del widget, mientras que la tina de diseñador, estamos haciendo la parte visual del widget. O widget se ve en la pantalla. Para ello, estamos usando elementos de nuestra paleta, y los estamos configurando como queremos que se vean. Oh. Una cosa más, cuando estamos agregando algo en el lado visual del widget, podemos verlo aquí en la jerarquía. Ahora, comencemos con agregar un lienzo. Voy a soltar dragón aquí, o podría simplemente arrastrarlo y soltarlo aquí y va a ser lo mismo. Descripción de lo que hace el Cvass. Se puede encontrar al pasar el cursor sobre él y verlo Descripción de Opta Pero básicamente, es un elemento para decir dónde están nuestros widgets en el espacio en nuestra pantalla. Puedes tener cavaza más pequeña que tu pantalla. Se pueden tener lienzos dentro de las cavazas, no se recomienda tener demasiadas Oh, vamos a demostrar esto. Traeremos un botón aquí. Colócala dentro del lienzo. Puedo decirle donde en la lona quiero que sea o que tan grande. Y dependiendo de Canvas es en realidad lienzo a pantalla completa o parcialmente ese cavas, por ejemplo, podemos tener un lienzo en un widget más pequeño en una esquina o algo así Le dice dónde estar basado en estas convas. Ahora bien, si tuviera un segundo pantano de botón, eso complicaría Digamos, por ejemplo, quiero este botón exactamente debajo de este botón, y es difícil hacer un globo ocular sobre estas cosas Pero hay otras herramientas, como por ejemplo, una caja vertical o una caja horizontal, ahora mismo, vamos a necesitar una caja vertical. Y dentro de esta caja vertical, eliminé los otros botones. Quizá los necesite. Voy a traer otra vez una caja vertical y hacer de todo. Ahora puedo arrastrar estos ptones dentro de esta caja vertical. Y cómo estos botones están alineados verticalmente en esta caja. Ahora bien, el tamaño está determinado por la caja. Hay muchas maneras de cambiar el tamaño y todo. Tenemos que pasar por toda una experiencia de interfaz de usuario en este momento. Lo que vamos a hacer en realidad es colocar la caja donde queramos y dimensionarla lo mucho que la queremos. Para ello y guardo el mismo lugar en cualquier resolución porque esa es la e aquí. Siempre podemos compensarlo en base a este ancla. ¿Qué es un ancla? Le dice al widget dónde colocar en base a este ancla, pero en base a este punto. Entonces, si cambio la resolución ahora mismo, trata de mantener ese lugar, pero cuando voy a resoluciones poco ortodoxas, como que la pierde Eso se puede arreglar colocando el ancla alrededor, e intentará también mantenerlo. Nuevamente, mirar todas estas cosas no es muy fácil, pero hay otras formas de hacerlo Por ejemplo, si selecciono el cuadro vertical, y voy al panel detallado. Cuando selecciono todo, nuevamente, tenemos un panel detallado, como lo teníamos en el plano, el plano de juego, como lo tenemos en el nivel, cuando seleccionamos algo, y vamos a cada Oh, Cuando selecciono el panel de detalles de la caja vertical, puedo ver que hay un ancla. Empecemos con la opción de anclaje. Oh. Se puede ver que hay algunas posiciones de anclaje preestablecidas. Lo que vamos a elegir es el medio. Queremos anclarlo en medio de la pantalla. Pero como viste, esto no movió nuestro widget en medio de la pantalla. Trate de indicar dónde estaba. El motivo es porque está siendo compensado por estos valores de aquí, posición x y posición y. si elijo esta cosa que ese es el valor por defecto, vamos a ir a su punto de pivote original. Ahora bien, ¿qué es un punto de pivote? Significa que esta caja es er, por ejemplo, no centro, sino su punto de que estamos manipulando su tamaño comienza en esta esquina Ahora bien, si pongo cantidad específica de tamaño, como el 500 por 300, tal vez 300 tal vez 200. Bueno, queremos unos botones largos por ejemplo. Podemos decir que la posición x offset sería menos a 50. Y la posición y sería -100. Ahora se posiciona a mediados porque lo compensamos por estos valores. Pero, ¿y si quisiera cambiar el tamaño de mi widget? Ahora bien, esto ya no lo es, tengo que volver a hacer matemáticas. Para no volver a hacer todas estas acciones. Podríamos decir que la posición no está desplazada, en primer lugar, recomen la alineación, que es un valor 0-1, realidad puede ir a negativo y por encima La alineación es 0.5 y 0.5. Y esto lleva el widget a su centro. Alinear mi widget en un porcentaje en un valor 0-1 a su eje x y eje y Si cambio la talla, vas a ver que siempre se queda en el medio. Vamos a traer esto de vuelta a 100100200. Oh, compila y ahorra. Ahora, tenemos nuestro widget en medio de nuestra pantalla. Pero nuestros botones no son exactamente muy guapos como son. El uno debajo del otro, incluso en un menú mínimo, esto no debería suceder. Lo que vamos a hacer vamos a seleccionar los dos botones, ose la opción. Y en la alineación vertical, vamos a elegir la opción, ingresar alineación, ingresar alinear verticalmente. Ahora puedes ver que nuestros botones se ven mucho mejor. Una toma interesante aquí sería que cuando seleccionamos los dos botones, mantenemos estos ajustes en común, como que ambos tienen estos ajustes, así va ambos. Si selecciono con control escogido en cuadro vertical, puedes ver que estos ajustes desaparecen porque Establecer el desgaste debe basarse en algo. Como pueden ver, la ranura ranura de caja vertical está arriba aquí, y cuando selecciono cuadro vertical, la ranura de panel Cvas ranura está aquí arriba Entonces esto es establecer la posición dentro del Cvass donde aquí, estamos fijando la posición dentro de la caja vertical, la posición de alineación o lo que sea Ahora, hay muchas más formas de hacer esto. Podríamos haber puesto espaciadores entre estos botones. Este es otro. De hecho, demostremos esto. Digamos que ambos botones son de control y seleccionemos los dos verticalmente. Ahora, dos grandes botones. Los quiero más pequeños, para que me vengan bien algunas bases. Tráelo aquí entre los dos botones, voy a traer otro encima del otro botón. Vamos a traer uno debajo del otro botón. Ahora bien, si notaron otra punta de tirón real que podemos ver, cuando voy a poner el botón aquí, pone esta línea, esta línea azul por aquí con una pequeña R en la esquina que apunta hacia arriba. Esto significa agregarlo a la jerarquía anterior. Por ejemplo, la jerarquía anterior ahora mismo está en el cuadro vertical. Si trato de agregarlo aquí y pone una flecha abajo, agrega a la jerarquía de abajo, por encima del espaciador. Pero si tengo la flecha hacia arriba, agregaría a la jerarquía anterior, el panel Canvas. Vamos a probar esto. W para ponerlo aquí, va a liberarlo. Como puedes ver, se ha agregado en la jerarquía de Canvas. Yo yo califica aquí, lo va a poner en la caja vertical por defecto al final Voy a seleccionar los espaciadores, y voy a seleccionar. Como puedes ver, peló bases, y ahora los botones también se ven un poco mejor que tenerlos uno encima del otro. Con este escenario, podemos tener todo para sentir, y funciona de la misma manera. No tenemos que preocuparnos por las alineaciones verticales ni ninguna Ahora bien, estos botones deberían tener algún texto Cuando agregamos cosas en la caja vertical, agregamos 12, tres, cuatro, cinco elementos. Pero cuando estoy agregando algo a un botón, llevemos al botón. Entonces si agrego algo en el botón como un texto, y voy a agregar, digamos que quiero dos textos. No puedo hacer eso porque los botones solo consiguen un hijo. Esto significa que solo pueden tener una cosa dentro. Pero hay una manera de evitar esto. Puedes tener una cosa que tenga muchas cosas dentro de ella. Por ejemplo, puedes tener un botón que tenga una caja vertical dentro de él. Como podemos ver, la caja vertical puede tener muchas cosas dentro de ella. Eso se llama niños, y ¿cuántos niños puede tener un elemento? Bueno, voy a copiar este bloque de texto, y lo voy a pegar en el otro botón. Y voy a ir al primer bloque de texto, cambiar el texto en sus detalles. Denle el nombre. Y vaya al otro botón también, y como el bloque de texto dos. Creo que esto es suficiente para esta lección. Te voy a ver al siguiente. Adiós. 4. Agregar el menú principal al puerto gráfico y salir: Hola, y bienvenidos al Taller de Diseño de Juegos, soy real Lensing five Procesal Dungeon action ARPG En la anterior, terminamos con las visuales del menú principal En esta, comencemos a programar algunas cosas para que podamos ver este menú principal en nuestro juego. Ahora, vamos a pasar al modo de juego. Si no puede encontrarlo, está en la tina de contenido en la interfaz de usuario de la carpeta, y no, lo siento, en la carpeta de arriba hacia abajo, los planos plegados y el modo de juego está aquí Planos de arriba hacia abajo, gamede. No, yo nuestro modo de juego, vamos a arrastrar un cable. Ahora, vamos a explicar algunas cosas sobre este cable aquí. Lo hicimos antes con Imprimir cadena, pero no dijimos nada al respecto. Entonces qué es esto, esta es la línea de ejecución de planos. Lo que esto significa, en definitiva, es que esta ejecución controla el flujo de la lógica. Cuando se dispara un evento, sigue esta línea de ejecución para desencadenar las acciones que se van a realizar en un orden determinado. Básicamente, dicta el orden de las cosas que van a suceder. Entonces, vamos a demostrar esto. Si pongo una impresión. Y para la cadena, voy a poner uno, y luego poner, voy a copiar y pegar estos. Poner una cadena de impresión dos. Voy al mapa general, mismo nivel. Han seleccionado, y juegan. Oh, puedo ver uno, dos, primero imprimió uno, y luego dos. Ahora bien, hay momentos especiales que esto no sucede exactamente cuando estamos jugando con retrasos, cuando estamos desencadenando otros eventos que tienen retrasos, o tienen hay múltiples razones para que esto no suceda en orden, pero todos son muy específicos también Et's lo demuestran con un ejemplo. Si hago un evento personalizado. Esto significa que un evento propio, como comenzar a jugar es un evento prescriptado. Se bires cuando se ejecuta el plano. Cuando uso un evento personalizado, es un evento que creé, así que tengo que llamarlo. Llamemos a este evento personalizado en realidad prueba. Bueno, voy a poner aquí una cadena estampada de dos. Voy a cambiarlo a tres en realidad. Voy a llamar a mi evento personalizado aquí. Ahora bien, si conecto estos dos, juguemos, todo va a cobrar fi, uno, dos, tres. Pero si pongo un retraso aquí, digamos de 2 segundos de 0.2 segundos, puedo ver uno, tres, dos. Esto desencadenó aquí , pero como tiene un retraso, esperará la cantidad, pero esto continuará. Tener un retraso no hará que se detenga. Pero ahora vamos a entrar en un límite de cuatro bucles. Si tengo un bucle cuatro aquí, ahora ¿qué es un bucle cuatro? L et va. Oh, es un nodo de programación que inicia con un índice y termina con otro índice, y lo hace hasta que pasa por todos los índices. Para el cuerpo loop, voy a conectar esto aquí, y en realidad, lo voy a hacer desde dos, digamos, esto serían cinco. Y ve y presiona play. Ver uno, dos, tres, 45. Para este nodo, por ejemplo, esperó para completar este nodo, y luego continuó hacia la otra línea. En fin, a través de la práctica y la exploración del motor y la programación, gente va a conseguir más versos a estas cosas. Ahora, eliminemos todo esto porque no lo vamos a necesitar. No vamos a necesitar un evento de prueba. Y comencemos con traer nuestro widget en nuestra viewport. Yo voy a hacer esto. En realidad, necesitamos un evento personalizado, así como evento, y lo vamos a llamar show main menu. Cuando iniciemos el juego, queremos mostrar menú. Ahora cuando hagamos doble clic sobre esto, nos llevará al evento que creamos. O si tuviéramos una función aquí, hablaremos de funciones más adelante, nos abriría la función. Ahora, mostrar menú principal, vamos a crear Porque para traer nuestro widget al mundo, tenemos que crearlo de alguna manera. Tenemos que tenerlo como entidad, y la clase que vamos a elegir para el widget va a ser el menú principal de WG Ahora, Poseer jugador, vamos a usar el controlador del reproductor Y lo que significa este jugador poseedor. Básicamente, si tuviéramos un juego co local, tal vez, y hay algunos usos también en multijugador que estás mostrando widgets a otros jugadores y esas cosas, tal vez. Le dice al motor a quién pertenece este widget. Entonces, creamos el widget. Ahora bien, si voy a presionar arcilla, no pasará nada. No vemos el widget. El motivo es porque cuando estamos creando el widget, acabamos de hacer una variaa del mismo, hicimos una pequeña celda que contiene la información de este widget No le hemos dicho al motor, haga algo con estos datos de datos. Entonces, el valor de retorno es el widget que creamos. Si colocamos el cursor sobre los pines de un nodo, podemos ver algunos detalles más sobre ellos. Entonces, ¿harías referencia de objeto de menú principal, creamos un widget de menú principal, que es un objeto. Como dijimos antes, todo es un objeto. Y tenemos una referencia a ello. Lo que vamos a hacer es que vamos a promocionar esta variable, y llamarla W G menú principal. Ahora, tenemos nuestros datos, tenemos nuestro widget, y los almacenamos en esta variable, y queremos decirle algo a estos datos para que suceda. Voy a traerlo de las variables aquí porque cuando estamos creando una variable, se está almacenando por aquí. Voy a traer esta variable y decir agregar a viewport. Este es el comando para agregar un widget en tu viewport. Bueno, voy a conectar esto aquí. Y ahora voy a presionar A, y eso va un widget. Presiono los botones. no pasa nada. Pero vamos a programar esto ahora mismo. Y lo primero que vamos a programar es el botón quid Entonces, vayamos a nuestro modo de juego de arriba hacia abajo, menú principal del Widget, y vayamos al botón quid Ahora, si elegimos este botón, queremos hacer algo con este botón. Entonces necesitamos determinar su comportamiento. Para ello, tenemos que hacer clic es variable en los detalles. Voy a darle click aquí y nombrar este botón también Salir. T. Y ahora voy a ir más abajo en los detalles, y esta lista de eventos ha aparecido. Si deshago clic en la variable, desaparece. Si hago clic en la variable, aparece. Esto no quiere decir que no pueda usar el botón de otras maneras. Hay otras formas de usarlo sin ser una variable. Pero esta es la forma en que vamos a hacerlo ahora, y es la forma más común. Vamos a elegir el evento al hacer clic. O prensado. La diferencia entre estos dos es que cuando estamos clic, tenemos que hacer clic en el botón y cuando lo soltamos y todavía estamos en el botón, acepta esta acción. Bueno, presionado es que en el momento en que hacemos clic, sucede. No. En el botón clicado y. Sólo vamos a arrastrar una mesa y decir, P: No vamos a especificar jugador. No vamos a especificar las preferencias de dejar de fumar, solo vamos a dejarlo salir, y no vamos a ignorar las restricciones de la plataforma porque esto no es para ninguna plataforma específica. Oh, vamos a compilar y guardar, e ir a nuestro nivel de juego y presionar play. Ahora si hago clic en Salir, liberarlo de lo contrario no funciona, pero si hago clic y lo libero mientras está en Salir, es el juego. Creo que este es un buen punto de parada para esta lección. Te vamos a ver en la siguiente. Adiós. 5. Mecánica de la pantalla de carga y creación de laberintos: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Pecado real cinco Acción de mazmorra procesal Un curso de creación de Psy Anteriormente, creamos nuestra cadena de eventos desde el modo start play of game para mostrar nuestro menú principal, y creamos un evento personalizado que crea el widget, lo almacena en una variable y lo agrega a la ventana gráfica También programamos la funcionalidad del botón Quick con el uso del evento de conflicto, y usamos el nodo de juego Qi. Ahora, con lo que vamos a continuar es con la funcionalidad de inicio del juego. Pero antes de entrar a programar el botón de inicio, vamos a explicar un poco nuestro sistema. Entonces lo que vamos a tener es un generador de laberinto. Eso va a estar construyendo el nivel, como lo que quiera. Vamos a crear algunas reglas. Tendremos algunas reglas en el generador, cómo funcionará en la creación de un nivel. Pero ese nivel tiene un inicio y un fin. Y ese fin será desovar otro generador. Pasará de generador mas a generador ma a generador mas, y tendrá algunas reglas y cada vez más grande, etcétera Entonces, cuando iniciamos un juego, cuando presionamos digamos que tenemos el modo de juego, y desde el modo de juego, generamos el menú principal El menú mínimo puede twit o puede comenzar. Aquí es donde vamos a estar desove el generador de laberinto Ahora, ese generador de laberinto, necesitamos tener una opción que sea la primera, o es alguien en el medio o al final, ahí es cuando el jugador pierde. Entonces hay varias formas de hacer esto. La forma en que lo vamos a hacer es que vamos a exponer una variable. Esto es exponer una variable que va a estar haciendo tictac. Básicamente, va a ser un lingote que le diga al laberinto, eres el primero o no, lo cual es una forma muy sencilla de hacerlo Ya que vamos a estar engendrando a este actor, y cada actor vamos a estar engendrándolo Ahora bien, lo que esta variable hará por nosotros ahora para la primera parte de nuestro programa. Se diferenciará al laberinto que si eres el primero, luego avanza la carga Esto es cargar la pantalla de carga. Entonces tendremos una barra para cargar rellenando ya que el generador está construyendo el laberinto y está listo para jugar No. Empecemos. Comencemos por crear nuestro plano generador de laberinto. Vamos a ir al contenido. Vamos a ir a la carpeta de contenido, y clic derecho y nueva carpeta. Voy a ponerle nombre planos. Ahora, empezamos a tener muchas carpetas, y básicamente lo que podríamos hacer es simplemente hacer clic derecho sobre los planos y establecer color Voy a ponerla en azul. Al ir a la interfaz de usuario de la carpeta, haga clic derecho y establezca el color. Se lo voy a decir a azul claro. Y vas a necesitar cualquier otra carpeta rápidamente. Tal vez carpeta de arriba hacia abajo. Va a ponerla en verde. Y ahora puedo ir rápidamente de cada carpeta plegada en función de sus colores. Ahora, dentro de los planos de carpeta, vamos a hacer clic derecho y crear una nueva clase de blueprint Ahora, cuando hago esto, aparece el menú que me dice, ¿quieres crear una clase de plantilla o algo a partir de una plantilla que ofrezca de verdad? Si podemos s hay un montón de clases que se pueden crear. Lo que queremos ahora mismo es una clase de actor. Básicamente, es Un actor es un objeto que se puede colocar o engendrar en el mundo Básicamente, todo es un objeto que se puede colocar, pero todo tiene algunas reglas extra. El actor es el más vacío. Por ejemplo, el plano de personaje que tenemos nuestro personaje de arriba hacia abajo tiene, por ejemplo, una esfera de colisión, no una cápsula de colisión, lo siento, y una malla estática, y una dirección estrecha a punto Tiene el componente de movimiento, que es exclusivo de la clase de carácter. En fin, le estoy explicando a muchas cosas quizá ahora mismo. Entonces iremos a crear un actor. Y vamos a nombrar a este actor PP Mazen cinta todo y abrir el generador laberinto Voy a ponerlo aquí mismo. Ahora, lo primero que vamos a hacer es crear una variable. Vamos a ir a Variables y presionar este símbolo más por aquí. Y ya lo hizo un lingote como queríamos diferenciar si el laberinto es la primera pieza, o sigue construyendo Voy a nombrarlo en Tu. Voy a nombrarlo continuar. Quizá no sea el mejor nombre, pero ya haremos el trabajo. Ahora, voy a volver al menú principal y voy a ir al botón de inicio, que es variable, nombra a botón art. Y voy a presionar al click porque lo hicimos al click en lamer. Deberíamos hacerlo en botón de arte. También en click. Ahora bien, ¿cómo traigo al mundo a este actor? Utilizamos un nodo llamado actor de piedra de clase. La clase, vamos a estar seleccionando para ser el generador de laberinto. BP laberinto gener. Ahora, aquí tiene otra opción. Se llama transformar. Lo que es transformar, para los que son nuevos transformar es un grupo de información, es una estructura de información. Vamos a hablar de algo más sobre la estructura, pero no es una variable estructurada Es una variable única que contiene tres vectores. Y si hago clic derecho sobre él y lo divido, podemos ver que contiene la ubicación de transformación hijo, la rotación de transformación spon, y la escala de transformación spon, que es tres unidades vectoriales Uno de ellos es un rotador. Los otros dos son sólo vectores normales. Esto quiere decir, queremos popawe a este actor, pero ¿dónde queremos engendrarlo con qué rotación, y qué Por ahora, no por ahora, en realidad, vamos a engendrarlo en el lugar cero, cero, cero del mundo, cero, x, cero, y cero, y con la rotación normal y la escala predeterminada Antes decíamos que le vamos a especificar esto a este generador de laberinto, si es un continuar o no. Hay muchas maneras de hacer esto. Te voy a mostrar rápidamente dos formas. Vamos a ir a este spawn y de aquí a partir del valor de retorno, obtenemos el, la referencia real a lo que spond el actor que charcamos Yo puedo hacer desde aquí, lo que puedo hacer es establecer continuar como pueden ver, el objetivo es actor que acabamos de patear. Y el valor, podemos fijarlo en sí o en no. Otra forma de hacer esto, voy a borrar esto es ir al generador de laberinto e ir a la variable continuada, que es edición de instancia y está expuesta en span. Esto significa que si compila ahora mismo y guardo, vuelve al menú principal y vuelve a seleccionar esto porque no se actualiza automáticamente A veces lo hace. Yo voy a volver a seleccionar este generador de Maze Ahora tengo esta opción por aquí. No voy a marcar esto, sí, voy a dejarlo no, y cuando esta cucharas, por defecto, se apagará. Ahora, para nosotros, esto está por defecto desactivado y queremos apagarlo. Cuando estamos desconchando el laberinto para continuar, aquí es donde vamos a estar cogiéndolo Entonces, para demostrar que hemos engendrado esto en el mundo, vamos a ir al generador de laberinto Vamos a ir a su gráfico de eventos, y en start clay, vamos a traer cuerda, y ellos laberintan como propios. Ahora, antes de vivir aquí, deberíamos hacer una cosa más. Estamos echando a perder el generador de laberinto. Pero lo siguiente que deberíamos estar haciendo es eliminar nuestra parte visual del widget. Desde nuestro viewpot. Y para ello, vamos a quitar de parte. Este es el nodo que se utiliza para ello. Y para el objetivo, vamos a tener uno mismo. Objetivo generalmente en nodos significa quién está haciendo esto. Si vamos al modo de juego y a la derecha, eliminamos de parte. Vamos a ver sensible al contexto, no existe. Pero si me quito esto, lo podemos encontrar. Como puedes ver pertenece al widget de categoría. Entonces esto significa que está haciendo algo para un widget. Voy a darle click. Y si conecto esto aquí, no pasará nada porque el modo de juego no es un widget, solo dispararé un error o nada. Pero si conecto el menú principal del widget, que hemos guardado en nuestra referencia aquí para eliminar de Parent, sabrá que este widget menú principal, digamos que hemos creado cinco de estos, y solo hemos guardado uno de ellos. Este de ellos que hemos guardado como variable se eliminará del padre. Ahora, voy a borrar esto y vamos a dejar esto y eliminar de padre. El propio objetivo. Estamos en el widget, en pila y guardar, y vamos a jugar. Ma pulse play, Maze gen tiene pone y se elimina el widget. Creo que este es un buen punto de parada para este. Te voy a ver en la siguiente. Adiós. 6. Creación de una pantalla de carga: Hola, y bienvenidos al taller de Diseño de Juegos bajo motor cinco Curso de creación de RPG de acción Procesal Dungeon Curso de creación de RPG de acción En la lección anterior, agregamos que realidad creamos el generador de Blueprint Maze, y lo generamos a través de nuestro menú principal Botón Inicio También agregamos una variable en el generador de laberinto que expusimos para poder configurarla cuando estamos desove el laberinto, y esta variable fue la variable continue, que diferenciará para nosotros si esta es la primera pieza, o es una pieza que continúa el juego? En esta lección, vamos a continuar con la creación de los primeros pasos de la lógica, que es mostrar la pantalla de carga o no. Voy a eliminar esta pantalla de impresión aquí, sonar, y voy a presionar B y hacer clic, o de lo contrario podría tener clic derecho y escribir rama, y voy a traer una sucursal. Ahora bien, ¿qué es una sucursal? Básicamente una sucursal es una declaración I. Es cierto o falso basado en una condición que hemos aplicado. Y la condición aquí sería. Entonces, básicamente, ¿continúa el laberinto desde antes, o es la primera pieza? Ahora, ya que creamos el menú principal en el modo de juego. Necesitamos crear otro widget para hacer la pantalla de carga, y eso nos lleva a crear un nuevo widget. Entonces vamos a ir a la carpeta UI. Voy a hacer clic derecho y voy a Interfaz de usuario, Blueprints de widgets, y voy a seleccionar widget de usuario nuevamente Voy a nombrar a este WG cargando cargando. Y voy a abrirla. Yo para traerlo aquí, y voy a guardarlo todo. Ahora, vamos a estar usando un cavas de nuevo. Y esto no es un problema porque en cualquier caso, menú principal se ha eliminado de un padre cuando empezamos. Por lo que tener otras convas no es un problema. No es que tener dos convases, o e tres o cuatro sería un tema enorme Ahora, voy a seleccionar una imagen, agregar como fondo, y voy a anclarla a pantalla completa. Voy a poner a cero las compensaciones. Como puedes ver, llena toda la pantalla. Voy a ir en ajustes de pincel, una nueva configuración que estamos explorando, que es básicamente cómo se ve algo. Traemos un botón. En realidad, vamos a demostrar. Dónde está el juego, podemos ver que cuando coloco el cursor este botón cambia de color Entonces voy a nuestro menú principal y voy a diseñador. Pick en los botones. Podemos ver a continuación la ranura y los ajustes de alineación. Podemos ver que hay estilo de apariencia, que tiene muchos ajustes para establecer el estilo de botón, cómo se ve. Ahora, volvamos a cargar, y vayamos a nuestro ajuste de apariencia. Entonces en estos ajustes, tenemos este color de pincel. Podemos seleccionar una imagen que queramos, pero por ahora, sólo vamos a usar la habilidad de tinte. Ide y convertirlo a un color negro. Y tenemos un fondo negro para nuestra pantalla de carga. El siguiente elemento que necesitamos se llama barril de progreso. Este es otro elemento único como los botones. Cuando los presionamos, hacen algo. Esta es una barra que llena en base a un porcentaje. Quiero decir un poco antes de que lo consigamos. Vamos a ver que hay un estilo. También están los ajustes que conocemos, los ajustes que colocamos en la posición, el anclaje, la alineación, y el estilo, que también tiene muchos ajustes. También hay debajo de él otro escenario que se llama progreso, que es exclusivo de la barra de progreso. Si aumento el porcentaje, se puede ver que llena esta barra. Es Progreso Martín. Sí. Y tiene algunas habilidades para ser llenado en base alguna dirección y muchas otras opciones. Ahora, para nosotros, solo cambiaremos tal vez los rellenos de fondo y la imagen. Entonces, lo que vamos a seleccionar va a ser la opacidad de la barra T. Esto es lo que queremos para nuestra imagen de fondo. Y esto es también lo que queremos para nuestra imagen de campo. B y opacidad de barra. Oh, un poco. No queremos que la parte del progreso esté ahí arriba. Queremos que la parte del progreso sea acorde en el medio. No vayas a las compensaciones de posición. Y para el tamaño, en realidad podemos mordernos. Pongamos alineación Y X como en el medio. Buen punto. Y. Ellos 1,500 tal vez 600, 1,600 o X tamaño, y digamos 50 se ve bien o talla y. ahora, vamos a engordar con el color Vamos a llenar la barra b. Pongámosla en 1%. Ahora, voy a ir a tinte de imagen de fondo y seleccionar algo un poco más grisáceo. Más. Esto está bien. mejor poner un punto Alfa, lo mejor poner un punto Alfa, para que haga una prohibición, no lo hace, pero también lo hace si aumentamos a disminuir, 2.3, se puede ver prohibición. 0.8, y algo está bien. Ahora bien, si voy a cambiar el tinte en la imagen de relleno, van a ver que realmente no cambia el color que quiero. Esto se debe a que esto se está llenando con esta opción aquí, aquí relleno de color y opacidad, que es un ajuste diferente para el color de la imagen que aplicamos Entonces vamos a cambiar el color por aquí. Lo vamos a poner en rojo, un poco más oscuro, un poquito más. Este 2.8. Bueno, tal vez 0.9 vino, y tal vez darle un verde cero también un poco más ligero hacia la luz naranja. Bien, creo que se ve bien. Y ahora tenemos una barra de carga espeluznante o plogra cuadrada no tradicional Bien. Ahora el siguiente elemento que necesitamos es un texto. Voy a traer una variable de texto, que es sólo una variable que estamos escribiendo texto. Voy a anclarlo al centro. Voy a poner a cero las compensaciones. Tamaño, vamos a alinearlo a 0.5. S cinco. Este, tal vez tres. Tres está bien. Esa longitud, vamos a escribir primero el texto. En el texto de llegadas. Tenemos diferentes opciones de nuevo. Entonces en este caso, tenemos contenido, que es lo que está dentro el texto. Debajo de él, podemos manipular nuestro texto nuestra fuente, nuestra opacidad final polar Lo haremos en un segundo. Ahora, para el texto, vamos a escribir flo en mayúsculas. Vamos a dimensionar esto hasta la fuente que es ojos de fuente. Yo ciento 30 forte. 35. Esto se ve bien. Un ojo aquí si está exactamente en el, está casi en el medio Está bien, está bien. Cambiemos el texto también. Nosotros No color rojizo el blanco es fino, cualquier cosa. Puedes cambiar el pacity o uno o el perno base, luz tardía, regular a lo que quieras Para nuestros propósitos, ahora mismo, esto está bien. Podríamos ir a animar el texto y desvanecernos y desvanecernos a través de la bañera de animación, crear una animación, pero no vamos a hacer la compilación Y Ahora, ¿cómo vamos a utilizar esta barra a través del juego para aumentar bien su porcentaje En primer lugar, le vamos a nombrar barra de carga y hacer que sea variable porque queremos hacer algo con ella. Y queremos hacer algo con alguna parte de la parte visual del widget que hemos dicho? Tenemos que convertirlo en una variable. Si quisiéramos cambiar el texto, por ejemplo, teníamos que hacerlo variable. Queríamos cambiar la imagen de fondo? Tuvimos que convertirlo en una variable. Oh, barra de carga, ahora es una variable. Vamos a la gráfica, y vamos a traerla para mostrar algo. Y cuando arrastre de esto, puedo hacer qué porcentaje. Y este porcentaje es el valor 0-1. Básicamente, es una variable de flujo que se establece por completo. Como podemos ver que es el mismo valor que aquí 0-1. Podemos establecerlo en dos, pero no va a tener ningún efecto. Es por debajo de cero o por encima de cero. Entonces es una variable de cero a uno. Fuera. Y esta es la forma en que fijamos el porcentaje. Pero cuando yo cuando creo el widget, por ejemplo, en el modo ga. Lo guardo en una variable. Si este widget tuviera la barra de progreso, este widget por si acaso tiene estos dos botones como variables. En este widget, puedo llamarlo aquí g mode. Puedo llamar a estos dos botones desde esto porque tengo una referencia al mismo. C es el botón de inicio para ello. Puedo obtener una referencia al mismo. Entonces de la misma manera lo haría al crear el widget de carga y almacenarlo en una variable, podría obtener mi variable de referencia y llamar al botón de inicio o la barra de progreso. Pero esto también está llamando a algo una y otra vez. Lo que vamos a hacer es que vamos a crear una función que tenga, vamos a ir a la gráfica. Voy a copiar esto entrar en la función. forma en que creé la función es una función aquí y presiono el símbolo más, y crea una nueva función. Así que voy a crear una función y pegar esto en. Entonces cuando yo cuando quiero todo esto en realidad, puedo llamar a esta función desde el propio widget. U Esto lo voy a demostrar en un segundo. Ahora bien, para los que conocía, ¿qué es una función? Bueno, en definitiva, es un conjunto de instrucciones que se pueden llamar fácilmente y repetir. Al igual que cuando uso un cierto conjunto de instrucciones a menudo, puedo ponerlas en una función y no escribir ese conjunto de instrucciones cada vez que las necesito. Hay muchas reglas sobre la función. Una regla importante es que no pueden involucrar el tiempo fácilmente. No se pueden tener nodos de retardo o nodos de línea en iones puede haber cosas que se llaman funciones puras. Hay cosas que de todos modos, me estoy poniendo demasiado en ellas. Por ahora, consideremos a las funciones un conjunto de instrucciones que podemos llamar cuando queramos. Y en este caso, el conjunto de instrucciones que queremos es establecer el porcentaje de la barra de carga. Ahora, cuando llamo a una función, puedo tener algunas entradas, como por ejemplo, vamos a traer la función aquí. Ahora mismo, es solo llamar a la función para hacer lo que sea que haga. Si arrastre este cable por aquí, dice, agregue pin al nodo. Hagamos esto. Creé una variable de entrada para esta función. Vuelvo a la gráfica. Puedo ver que esta función ahora tiene esta variable en porcentaje. Puedo hacerlo de otra manera que puedo agregar elegir la función y bajar a sus detalles en entradas o salidas porque función puede tener una salida. Por ejemplo, digamos esto como una acción, devuelve verdad. Yo tendría una rama que si esto sucediera, vuelve verdadero, si no sucede, devuelve falso. Pero voy a igualar demasiado en detalle. Ahora bien, esta es la otra forma de agregar entradas o salidas a la función. Vamos a usar esto mucho después, y lo vamos a explicar mucho mejor. Pero por ahora, vamos a usar esta entrada en porcentaje y nombrar la función en porcentaje. No hay ninguna razón real porque como puedes ver, esta función es la misma que esta. Además de eso no quiero estar llamando a la barra de carga cada vez. En cuanto al rendimiento, no es realmente un gran problema. Llamar a la barra de carga cada vez desde la referencia. Ya que estamos usando la referencia de todos modos. Es solo por eso me facilita simplemente llamar por ciento. Creo que este es un buen punto de parada para este. Te voy a ver en la siguiente. Adiós. 7. Agregar la pantalla de carga al modo de juego: H. Hola, y bienvenidos de nuevo al taller de Diseño de Juegos, y real Engine five procesal Dungeon action ps curso de creación En nuestra lección anterior, creamos nuestra pantalla de carga, nuestro widget de carga, y creamos la función para establecer el porcentaje de la barra de carga. También diseñamos en bares y todo. Y ahora vamos a agregarlo a nuestro puerto de vista. Vamos a ponerlo en nuestro juego. Así que vamos a alojarlo de nuevo en el modo de juego. Con eso, quiero decir, vamos a crear un evento. Te show cargando. Y vamos a copiar y pegar el código aquí. Vamos a eliminar esta parte. En realidad, no todo. Vamos a deshacer. En lugar del menú principal, vamos a elegir el widget de carga. Estamos mostrando cargando, estamos creando el widget. Lo estamos almacenando en una carga variable. W ¿underscoreding? Voy a conectar esto. Es un poco más recto y trae la variable Carga de Madera. W G. Empezamos a tener cosas aut aquí, así que comencemos a comentar. Al ir a seleccionar el evento de inicio de juego, vaya a presionar C, y escriba B Anu. Entonces voy a seleccionar los dos en realidad. Para llevarlos a un lado y escribir pulse C y escriba Widgets. Voy a hacerlo un poco más grande. Y voy a seleccionar el menú principal del espectáculo. Tipo mostrar menú principal. Y lo mismo en el tipo de carga show ping. Y voy a cambiar el color de este comentario a algo así como azulado. Y hemos empezado a tener algo de orden aquí. Ahora vamos a compilar y guardar, y esto trae nuestro widget a nuestra ventana gráfica Ahora bien, ¿dónde llamamos a esto? Volvamos a nuestro generador principal a nuestra sucursal continue. Vamos a dar esto por ahora. Ahora bien, si es verdad, si es continuar, vamos a ver más tarde qué está pasando. Pero si es falso, vamos a seleccionar, vamos a encontrar un nodo llamado Get game mode, y esto nos da acceso a nuestro modo de juego actual. El problema aquí es que este es un nodo genérico Get game mode. Significa que devuelve un objeto genérico basado en el modo de juego, como podemos ver en el valor de retorno. Entonces cuando quiero mi modo de juego específico, este modo de juego, usamos un nodo que se llama casting. ¿Qué significa “casting”? Es básicamente pregunta lo que sea que seamos objeto que estamos probando si es de una clase específica. Voy a hacer pedir al modo de juego de arriba hacia abajo. Entonces ahora estoy consiguiendo el juego de, y estoy preguntando, es este el juego d que se está ejecutando en el juego el juego de que en realidad está activo en este momento. Si es así, podemos sacar un cable del fundido puro. Si no lo es, no será lo más puro, lo siento, desde el final del reparto O si no lo es, fallará. Ahora, cuando saco un cable de la parte de éxito, también tengo otra variable que dice, S BP juego de arriba hacia abajo d Esto significa que en realidad podemos llamar directamente a nuestro modo de juego de arriba hacia abajo que estamos usando en este momento. Esto significa que tengo acceso a todas estas variables que creamos y almacenamos cuando se están creando. Si no se crean, estas variables estarían vacías. Ahora, volvamos al generador M. Como pueden ver, tiene este ejecutar pines, y cuando cometí el error antes llamé a este elenco puro. Quería demostrar que hay una manera no tener esto como ejecutar. Se llama convertir a fundido puro, eliminar los pines de ejecución para hacer que el nodo sea más versátil nodo. El reparto aún fallaría, lo que resultaría en una entrada no válida en la salida, lo siento. Lo que esto significa es que crea una variable de éxito. Entonces podemos tenerlo, por ejemplo, en una rama, si había posibilidad de que esto no fuera nuestro modo de juego. 02, por ejemplo, código de error. Este plano, y podríamos tener como si esto es falso, entonces decir error, el juego está mal, por ejemplo Pero no vamos a hacer esto. Sabemos que nuestro juego va a ser este. Entonces lo que vamos a hacer es bebernos de aquí y promover variable Y en realidad, esto podría hacerse antes de la sucursal. Voy a tomar esto aquí. Y cuando promovimos a variable, usaba el nombre como BP top down game old. Entonces esto es muy conveniente para nosotros. Y tenemos esta referencia, y podemos simplemente arrastrarla y soltarla sobre la variable que creamos. Oh, cuando arrastras y sueltas con el mouse, puedes obtener un get o un set. Un get es obtener la variable, un setter es algo lo que estamos configurando la variable Hay un atajo rápido para esto. Si arrastro con control y lo suelto, o si arrastro con lt y lo suelto, obtiene un getter o un setter con lt. Ahora, rete esto A partir de aquí, vamos a seleccionar la pantalla de carga. Ahora, yo nuestro continuar es falso, entonces estamos mostrando la pantalla de carga. Si presiono play ahora, presione iniciar juego, podemos ver nuestra pantalla de carga, aquí está. Hemos agregado con éxito la pantalla de carga. Ahora, profundicemos un poco más en cómo va a funcionar nuestra pantalla de carga y cómo va a funcionar nuestro generador de laberinto. Oh, voy a abrir la pintura. Consideremos esta nuestra barra de carga. Y como decíamos, vamos a estar llenando la barra de carga en base al porcentaje de nuestra generación de laberinto. Pero si consideramos a esa generación Maze, hablemos un poco sobre la generación M, cómo va a funcionar. La forma en que va a funcionar es que va a estar agregando algo que vamos a llamar un azulejo. Y va a estar agregando mosaicos basados en algunas reglas, y va a crear una forma. De un laberinto de lo que sea. Ahora agregando estas fichas y creando las formas en que el jugador se va a mover, por ejemplo, va a estar creando bloques y cosas. Llamemos a esta fase uno. Llamemos a esta fase uno. Esta sería una manera fácil de llegar a la carga, eres este porcentaje basado en cero a máximo i madera Esto es una x no una t Así que cero a max sería el porcentaje de la barra de carga. Pero después de eso, nuestro laberinto va a hacer otras cosas, va a estar creando muros, va a estar cambiando materiales, va a estar desconchando cosas Entonces esa fase es un poco de interrogación, qué tan grande es cuánto porcentaje va a ser de esta barra de carga. Entonces lo que vamos a hacer, vamos a poner falsos. Digamos que esto es 0.2%, esto es 20%, lo siento porque es valor 0-1 Entonces esto va a tomar 0.3%, por ejemplo. Vamos a establecer porcentajes falsos porque realmente no sabemos ni siquiera cómo va a responder a esto la computadora del jugador. Algunas acciones están basadas en GPU, algunas acciones están basadas en CPU. Entonces sí, vamos a estar estableciendo porcentajes falsos. Esto suele ser lo que ves cargando barras yendo, deteniéndose, subiendo a un punto con una gran velocidad y luego deteniéndose y luego avanzando porque para los que son usuarios más avanzados, algunos for loops tardan más. Entonces para los bucles congelan la cama puede haber bucles anchos que congelen completamente la computadora. Aquí es donde suele ser esta la parte en la que no podemos ni siquiera una tina en ciertas barras de carga. Sí, de todos modos, depende de que haya formas hacer esto siempre más avanzado y hacerlo sin fisuras y poder controlar tu computadora por completo y ser muy específico con un enorme conocimiento técnico y parte de diseño en el juego. Pero para nosotros, vamos a utilizar algunas formas básicas. Ahora, voy a cerrar esto, y creo que este es un buen punto de parada por ahora, y vamos a demostrar estas acciones en la siguiente. Digamos, por ejemplo, tendremos un mosaico mínimo de cero a un mosaico máximo y estableceremos un porcentaje de esta barra el porcentaje de cero a mosaico Mx. Vamos a parar aquí. Te voy a ver en la siguiente. Adiós. 8. Creación del algoritmo de laberinto: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos, Y real Engine five Procesal Dungeon action Un curso de creación de Ps Anteriormente, terminamos con la barra baja de Dan, y explicamos cómo se va a llenar. Utilizamos el modo de juego para engendrarlo. Y a esto lo llamamos patear nuestro Me desde nuestra referencia de modo de juego Ahora, en esta lección, continuemos con las matemáticas requeridas para llenar la barra de carga. Vamos a crear una función. Vamos a nombrar a este lc calcular la carga de baldosas. Eso está bien. Vamos a hacer esta función. Vamos a seleccionar la función tal como se abrió y l la pura. Como decíamos, las funciones son como plantillas de código que podemos repetir a menudo. Y sus funciones, hablamos un poco de ellas. Son para realizar operaciones. Esto significa que necesitan una salida, y no tienen una línea de ejecución. Podemos ver una línea de ejecución aquí, pero si la traigo al gráfico de eventos en un arrastre aquí, se puede ver que no tiene una línea de ejecución. Si queremos que esto se ejecute, necesita tener una salida que podamos conectarla a alguna parte, y requiere la información de esta función. Por regla, la función pura no debería tener setters en ellas, no debería alterar los datos Sólo deben hacer operaciones. Se pueden alterar datos dentro de una función pura. Puedo poner un setter aquí, pero como que derrota el propósito de las técnicas de optimización opt que tiene irreal para usar Ahora, cuando creé una nueva salida, agregué un float para mí porque tengo lo dejo alrededor con las variables. Para ti, si no es un flotador, puedes escoger el tipo e ir a flotar. Podría ser un bulion por defecto. Vamos a nombrar a esta salida dos pares tocan dos por ciento. No. Tenemos nuestra función, tenemos algunas funciones, y necesitamos algunas operaciones que se hagan aquí. Para ello, vamos a necesitar en primer lugar, dos variables, va a ser una variable, va a ser y la otra variable va a ser actual es. Como se puede ver, mis variables son enteras porque listo explicar que estaba haciendo algo, pero se mantuvo el tipo. Para ti, si no es un entero, de nuevo, puedes dar click en el tipo y pasar de Bleion o lo que sea a integer Ahora, vamos a traer estas dos variables aquí. La fórmula para encontrar, digamos, la percenta de los mosaicos actuales hacia los mosaicos machos sería dividir los mosaicos actuales con los mosaicos máximos y multiplicar eso con 100 Sin embargo, lo que queremos es calcular las proporciones de los mosaicos máximos a los mosaicos actuales en forma de porcentaje. Entonces, para hacer eso, simplemente invertiremos esta división y dividiremos los mosaicos máximos a los mosaicos actuales. Y debido a que estos son enteros, y la división de esto va a dar un flotador, sólo vamos a hacer que esto haga que el motor, considere esto un flotador Entonces vamos a hacer dos conversiones de flotación. Voy a copiar esta conversión y conectarla aquí. Ahora vamos a dividir esto y multiplicarlo por 100. Ahora, lo que tenemos es la representación de la proporción de mosaicos máximos a los mosaicos actuales. Pero queremos que esto llene hasta el 40% de la barra, no vaya por encima del 40%. Entonces lo que vamos a hacer es dividir de nuevo por 40, 40 dividido por este factor de escalado, y es escalar porque las teselas actuales van a estar cambiando, y vamos a conectar esto con el porcentaje. Lo que hace esto en realidad se está normalizando, significa que lo pone en contexto A que 40 es el máximo. Espero que esto se entienda. Fuera, vamos a seguir llenando la marca de carga con este porcentaje. Y en realidad vamos a demostrar esto, cómo lo vamos a hacer. Demostrar algunos porcentajes. Entonces voy a arrastrar de aquí y una carga de Madera. Y aquí está la variable que almacenamos el modo de juego de arriba hacia abajo. Cuando arrastre desde aquí, arrastro directamente desde el modo de juego de arriba hacia abajo porque hemos almacenado este modo de juego como una variable. Oh, vamos a establecer por ciento, que es la función que hemos creado. Y conecta esto aquí. Si lo dejo como e, lo que va a hacer es más allá de cero. Pero digamos, por ejemplo, nuestros mosaicos máximos son 20, y nuestro mosaico actual lo es. Entonces esto debería llenar nuestra barra de carga al 20%. Y creo que efectivamente, 40% estaría aquí, el 50% en alguna parte de aquí. De hecho, vamos a llenarlo con 20 de 20. Sí, ahora construyó el 40% del bar, creo que 50 está en algún lugar de aquí. Y funciona correctamente. Ahora, una cosa más que tenemos que hacer, creamos estas dos variables, estilos máximos y mosaicos actuales. Lo que debemos hacer es exponerlos en Saw, realidad solo los estilos máximos, no los mosaicos actuales, exponerlos en Saw y hacerla instancia comestible Entonces cuando vamos a nuestro menú principal en la gráfica, vamos a compilar y guardar, no lo ha audado Pero si vuelvo a elegir el generador de laberinto, ahora podemos ver que tenemos estilos máximos por aquí con el valor predeterminado de 20. Dos explicaciones más. ¿Qué significa esto el valor predeterminado? Cuando creamos una variable en el blueprint en cualquier blueprint En primer lugar, requiere compilar el plano. Entonces si por favor compila, entonces podemos ver en los detalles sobre el valor predeterminado que podemos poner cualquier valor que queramos para este blueprint cuando no se establece desde ningún otro lugar, el valor que establecemos para un valor predeterminado se mantendrá cada vez que lo pospone Y la otra cosa de la que quería hablar era la instancia editable Entonces, lo que significa engendrar un plano es que, por ejemplo, si traigo aquí este generador de edad, traje una instancia de esta clase Como hablábamos, todo es un objeto, y las clases son formas de decirle a los objetos qué hacer en un modo preestablecido de plantilla. Y cuando los estoy trayendo al mundo, estoy trayendo instancias de ellos. Sí. Eso es lo que quería agregar porque ya usamos la Instancia editable dos veces o tal vez más, y no hubo explicación al respecto Ahora, restablecemos nuestros valores a los valores predeterminados. Voy a eliminar esta nueva variable. Voy a establecer mosaicos actuales a cero, y voy a establecer mosaicos máximos. En realidad, lo voy a dejar 20 ¿Cuál sería nuestro próximo movimiento ahora mismo? Nuestro siguiente movimiento sería posponer el primer azulejo para el laberinto Y para ello, necesitaremos un plano de azulejo. Voy a ir al contenido. Voy a ir a planos, y voy a crear un nuevo blueprint de tipo actor y llamarlo archivo de subrayado PP Antes de continuar realmente y comenzar a desovar azulejos y todo, hablemos un poco sobre nuestra generación de laberintos Comencemos con este primer azulejo que vamos a desovar. ¿Qué significa esto? Bueno, la forma en que nuestro laberinto va a estar funcionando, va a estar mapeándolo en base a una cuadrícula bidimensional, cuadrícula x e y. Y esto estará representado por valores de negativo y positivo y cero. Y nuestro primer estilo, lo consideraremos como un azulejo 0.0. Ahora, cuando queremos agregar algo, digamos, por ejemplo, en Norte, vamos a estar sumando en X es el valor para y Sur e y es el valor para oriente y oeste. Pero nos aseguraremos de eso cuando lo estemos haciendo en las direcciones mundiales. Entonces digamos para Norte, queremos aumentar uno, la x y la y permanezcan iguales, o para Sur, queremos deca x, cero on Lo mismo se podría hacer para y si quisiéramos para izquierda y derecha este y oeste, básicamente, será 0.1 y cero punto menos uno Esa es nuestra coordenada interna que esta pieza pertenece al punto cero. Esta pieza pertenece al 1.1. Esto pertenece a un punto menos uno, etcétera. Pueden ser 25. Cualquier número, esta será nuestra representación están mapeando los almacenados en una variable. Ahora, además de eso, lo que necesitamos a la hora de responder ile, tiene cierta corbata. Entonces lo que vamos a estar haciendo tomando este tamaño y multiplicándolo por el, la ubicación de la maza, por ejemplo, si nuestra primera baldosa es 600, si nuestra primera baldosa es 600, ocupando este espacio Cuando sumamos el segundo, digamos, por ejemplo, norte, serían 0600 multiplicados por uno y 600 multiplicados por cero, así que encajará exactamente aquí Nuestros cuadrados, nuestros mosaicos serán los mismos porque 600 multiplicados por cero y cero está aquí y cien multiplicados por uno, nos lleva a la ubicación mundial de x es igual a 100, donde esta x es cero. Oh, creo que esta es suficiente explicación por ahora a medida que avanzamos con la creación del laberinto. Vamos a explicar más cosas, pero esta es una primera introducción sobre las variables que vamos a crear en la siguiente lección para almacenar esta información. Preguntándote una siguiente. Adiós. 9. Creación del primer mosaico: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos y motor real cinco procedimientos Dungeon acción RPs curso de creación Entonces, en la lección anterior, creamos la carga de baldosas calc, la función que calcula qué porcentaje de mosaicos actuales fuera de max es el 40% de la barra y nos da un porcentaje de la misma Ahora, también hablamos un poco sobre las variables y la cuadrícula bidimensional de nuestro laberinto y cómo vamos a mapear nuestros mosaicos que se generan en una cuadrícula bidimensional Ahora, comencemos a crear algunas funciones y variables que vamos a utilizar para manipular estos datos y crear reglas sobre ellos y generar el primer mosaico Entonces lo primero que voy a hacer es crear una función llamada archivos propios. Por supuesto, vamos a necesitar la rama continue, así podemos diferenciar si este es el primer estilo que genera basado en todo el juego, o es una pieza continua Vamos a usar esto porque vamos a tener una pieza de introducción, como vamos a tener un globo que represente cómo el jugador se metió en este laberinto Y cuando continuemos, ese slot, que engendraremos el globo será el slot que nuestro elevador nos lleve del nivel anterior al siguiente nivel Entonces cuando estamos creando el primer azulejo, que tomar en consideración que cuando el laberinto anterior, vamos a traer pintura. Entonces, si tenemos nuestro laberinto en el nivel uno, digamos, el cero en el eje D cero. La siguiente pieza que vamos a engendrar, el siguiente laberinto este es un laberinto Laberinto de agente, como quieras llamarlo Pero la siguiente pieza que queremos engendrar, donde quiera que genere arriba y se cree a sí misma, queremos tener una correspondencia con el laberinto de abajo que tenemos una elevación de aquí, y vamos a subir Entonces esta pieza de aquí tiene que estar vacía. Y en la primera pieza del maíz, digamos que el inicio está aquí, esta pieza queríamos que fuera el globo al que venimos. Venimos de. Vamos a continuar con esto. Ahora bien, por eso necesitamos que esta rama se divida entre dos acciones si se trata de un continuar o no en el primer mosaico. Ahora, como hicimos en el menú principal y usamos el nodo spontor, lo mismo que haremos aquí para patrocinar desde clase, y la clase que vamos a usar es la baldosa BV Vamos a dividir la transformación spon. Ta ubicación. Hablé un poco sobre ubicaciones en las explicaciones anteriores, y lo que quería agregar fue que cuando estamos en el nivel, hay un sistema cartasiano de x, y, y z, de esto es de lo que estaba hablando que nuestro primer laberinto Z cero, y el segundo laberinto estará en Z, digamos rojo. esto es de lo que estaba hablando que nuestro primer laberinto Z cero, y el segundo laberinto estará en Z, digamos rojo En el mundo, tenemos un sistema ctsan que llamamos las coordenadas mundiales Este es un pequeño paréntesis para quienes necesitaban esta información Ahora, cuando estamos desove el generador de laberinto, lo estamos generando en 000x0 Este es el centro de nuestra palabra digamos. Y cuando estamos desove la primera vez, podríamos usar el 000, pero eso significaría que cuando volvamos a volver a sonar un laberinto, esto volverá a desovar en la Entonces lo que vamos a hacer aquí, vamos a usar un nodo llamado get acto location. Debido a que el propio objetivo de este nodo, nos da como valor de retorno, la ubicación que generó el laberinto de BP en Ahora lo estamos respondiendo desde el menú principal, son 000. Cuando lo respondamos desde otro lugar más tarde, probablemente el elevador, va a obtener la ubicación de esa espona para agregar el azulejo En fin, continuemos. ¿Qué más vamos a necesitar? Entonces, un poco de optimización, no mucha optimización, no vamos a hacer mucha optimización, sino un poco. Cuando estemos desove el siguiente laberinto, deberíamos poder eliminar el anterior Entonces no se carga en RAM y acciones. Por ejemplo, tendremos una cuadrícula de navegación que se utilizará desde la IA. No debería estar calculando todas estas cosas en el mas anterior. Por ejemplo, si tenemos artículos, no debería estar calculando los elementos si están colisionando, o los elementos de física no deberían estar funcionando Entonces necesitamos una lista para destruir las cosas después de que elegimos. Y para esa lista, vamos a crear una variable y será del tipo actor. Vamos a teclear actor e ir a tipos de objeto y seleccionar referencia de objeto. Ahora vamos a explicar un poco más adelante sobre las referencias a objetos blandos y las referencias a objetos. Pero no vamos a optimizar tanto. Vamos a estar usando referencias a objetos. Pero después me digrego. Ahora, vamos a usar a este actor, que es objeto. Lo que queremos nombrar a esta lista son actores para destruir. Lo que quiero analizar más ante esta situación es que como dijimos, estamos poniendo esta variable a algo. Pero esto contiene sólo una información, una variable. Pero si quiero una lista de variables. No, además del tipo de variable, también tenemos un tipo contenedor, como dice en la descripción de herramientas Por ejemplo, para este, necesitaremos una matriz. ¿Qué es una matriz? Cambiemos este primer tipo de variable. Nosotros hemos traído esto. Segundo, ¿qué es una matriz? Básicamente, es una lista. Es una lista de los mismos tipos de datos, una colección de elementos si se quiere. Por ahora, tenemos una lista de actores. Pero si cambio el tipo de variable, sería una lista de buiones, por ejemplo, o una lista de enteros, una lista de Por ahora, vamos a dejárselo al actor. Referencia de objeto, es la otra pantalla, es lo que voy a escribir. Ahora bien, si elijo el conjunto, como podemos ver, se requiere una lista. Si utilizo la g, me da una lista. Entonces, ¿cómo puedo agregar un solo actor a esta lista, una sola variable La forma en que lo hacemos es que usamos un getter y desde el getter, estamos usando el nodo en arrays tenemos un montón de nodos únicos para manipular datos Vamos a conocer a algunos de ellos durante este curso. Voy a conectar esto aquí. Ahora cuando esto corre, llaga nuestro primer estilo en esta lista que vamos a ser actores para destruir cuando pasemos al siguiente nivel? El segundo de todo, lo segundo que necesitamos es lo que llamamos el sistema de coordenadas, el sistema de notas de coordenadas, los valores de coordenadas. Para eso, vamos a crear otra variable, y la vamos a llamar es. Y vamos a cambiar esto a un punto. Ahora, ¿qué es un punto in? Es básicamente un vector de dos d. Además, voy a cambiar de array a variable única. Ahora bien, si compilo, el valor predeterminado es actualmente cero, cero. Esto es lo que queremos para la primera pieza. La primera frialdad que queremos es 00. Ahora, tenemos que guardar esto en alguna parte. Además de las matrices, hay otro tipo de variable llamada variable de mapa, que es básicamente una matriz bidimensional con algunas reglas adicionales. Vamos a crear uno. Voy a crear una nueva variable. Voy a llamarlo gon. Ngon mapa. No, en realidad, me voy a ir solo a mí, mapa de Dang Dang mapa sería mejor describe el tipo de variable también Entonces voy a ir aquí a los tipos de contenedores, y voy a seleccionar el mapa. Se puede ver como dos variables. Entonces esto es lo que es un mapa. Es como una matriz bidimensional, pero primer tipo de variable tiene que ser único. L et's compilan y demuestran esto. Por ejemplo, si agrego el punto clave, el 8.00, y trato de volver a agregar algo. No me permite, mientras que si voy a la matriz y agrego ninguno como actor, puedo agregarlo de nuevo. No importa si tenemos duplicados. Voy a borrar esto, voy a volver a las llamadas, y en realidad, voy a sacarlas a colación. Mapa. Voy a volver a p y eliminar también el valor por defecto que agregué. Ahora, la primera serán las coordenadas. El primero yo que tenemos en este mapa. El segundo sería el propio actor de azulejos. Entonces podría tener ya sea las coordenadas o al mismo tiempo, el actor al que quiero hacer referencia. Voy a teclear azulejo. Voy a archivar el azulejo BP. Voy a usar una referencia de objeto. Voy a cambiar el tipo de variable. Me está pidiendo que cambie el tipo de variable porque la traje en la gráfica. Esto quiere decir que ya lo ha registrado. Si no lo hubiera traído a la gráfica, solo estaba aquí creando la variable, y voy y cambio el tipo de objeto. Se puede ver que no le afecta. Pero en el momento en que la traigo en la gráfica, la afecta. Voy a deshacer. Voy a traer aquí esta ginebra. Y en cuanto a la matriz, voy a agregar Ahora, este anuncio tiene una regla especial que si estás agregando algo que ya existe, ya que tiene que ser la primera clave tiene que ser única. Se anulará la clave existente. Entonces esto no es un mecánico a prueba de fallas agregar cosas, sino porque sabemos que esto va a correr solo una vez al inicio de la licitación, porque es el primer azulejo, esto es a prueba de fallas que agregará la pieza correcta Ahora, voy a conectar aquí las coordenadas actuales, y voy a conectar al actor, también el valor de retorno del actor spawn a este mapa de mazmorras En nuestro sistema de mazmorras, en nuestro mazmorra de laberinto, lo llamemos Tendremos una regla especial. Esa regla dirá que en los bloques especiales no engendran cosas Entonces necesitamos una lista de los bloques especiales, no engendrar cosas. Para esa lista, vamos a utilizar las coordenadas de la propia mazmorra Entonces voy a duplicar la variable de coordenadas actuales , copiar y pegar Y voy a cambiarle el nombre a Salas especiales, por ejemplo, todos los azulejos especiales en realidad. Azulejo especial. Y voy a hacer también una lista una matriz. Ahora, podría haberlo hecho un conjunto que tenga las mismas reglas que el mapa o la primera clave. Algunas de las reglas son las mismas. Significa que tienen que agregarse de manera única. Pero solo voy a usar una matriz ya que son un poco más fáciles de manipular. Voy a traer azulejos especiales con sujeción. Voy a conseguir un getter, y voy a agregar esta matriz, las coordenadas de este mosaico Creo que este es un buen punto de reventar por ahora. La siguiente legión, vamos a decidir y describir cómo vamos a definir el punto de salida ¿Dónde está la siguiente pieza? ¿Dónde voy a estar pateando esta pieza? ¿Dónde va a desovar la siguiente pieza? Vamos a definir la ordenanza de Nora Southwest. Muchas gracias. Adiós. 10. Sistema de dirección personalizado: Hola, y bienvenidos de nuevo a Game Design Workshop motor cinco Procesal Dungeon Action Simios creación En la anterior, iniciamos la cadena de eventos, la función del Span para el estilo. Y agregamos a los actores para destruir array. Te explicamos un poco sobre los rayos. También creamos la variable dungeon map, que es una variable de un punto int y un actor Y también agregamos las coordenadas a la matriz de mosaicos especiales. Pero dijimos que las fichas especiales serán fichas para no spon estaremos sosteniendo la regla para no engendrar cosas en nuestro Por ejemplo, no queremos que en la primera baldosa espone una torreta o un cofre. H. Vamos a guardar continuar creando otra variable para el listado. Esta vez, va a ser la lista de la variable noreste oriente, suroeste. Este será un tipo de lista muy singular. Esta lista por aquí, la lista MP o la lista de matrices o que como dijimos, se pueden cambiar en tiempo de ejecución. Esto significa que puedo agregar cosas o eliminar cosas en esta lista durante el juego. Lo que vamos a crear es una enumeración antigua, lo que no importa si estás en blueprints o en Sets plus, las enumeraciones no pueden cambiar durante el Nunca lo es. Pero sería un logro tremendo. Ahora. Veamos cómo creamos esta variable. Esta variable no se puede crear en la lista aquí porque la lista aquí contiene cosas que son cambiables Para nuestra lista, lo que va a ser cambiable va a ser el valor Pero la lista misma debe crearse aquí. Para crear esto. Tenemos que ir al Cajón de Contenido, ir a nuestros planos de carpeta Vamos a crear otra carpeta ahí dentro. Voy a llamar a esto o nums para fold. Ams. Voy a hacer click derecho, ir a la categoría planos, enumeración de mangueras Vamos a ponerle nombre a esto Oh, vaya a sumar cuatro variables. Vamos a abrirlo, y esto es lo que vemos enumeración Lista de variables, y tenemos este botón que agrega enumeradores de enumeración Si trato de renombrar un enumerador t cuatro, tenemos nuevo enumerador cero, uno, dos, tres, trato de nombrar este cero, verás que va a estallar un error El nuevo enumerador cero ya está en uso. Pero esto nuevamente tiene nombres únicos. Ahora, cambio 01. Por ejemplo, voy a mantenerlo cero. Mi error. Poner la mayúscula en R, no es sensible a mayúsculas y minúsculas. Entonces tener el capital R realmente no cambia. Ahora, voy a borrar estos nombres. Tengo que dar un nombre. Entonces comenzaremos con el primero llamando. Y para Norte, segundo llamando E para Oriente, el tercero voy a llamarlo sur para S para Sur, y el cuarto voy a llamarlo W u Oeste. Tenemos noreste suroeste. Entonces esta es nuestra lista predeterminada. Antes de pasar a aquellos que quieren una definición, una definición más precisa sería que se trata de una programación de mecanografía de datos que nos permite definir la de constantes de nombre que representan valores específicos Por ejemplo, nuestro menú de opciones, o podríamos tener normales fáciles itmare infierno eculties Eso es Usar para programar para hacer nuestro código un poco más claro que tener, por ejemplo, un montón de pólenes, un montón de ramas, encender y apagar cosas o cadenas o de todas formas Vamos a continuar. Vamos a traer esta lista nuestro generador de blueprinting M, porque lo vamos a necesitar mucho Coy debería haberle dado el nombre de dirección. Dirección E. Voy a crear una nueva variable. Yo lo nombro. Erecciones, solo direcciones Ahora, aquí no lo vamos a encontrar fácilmente. Entonces voy a ms hay muchas acciones tipo pset. Ahora, nos da la variable que creamos e direcciones, que tiene la lista de noreste Sur y Oeste. Voy a cambiar un solo tipo ibru de A, compilo, y dejar que te muestre algo Ahora, como pueden ver, en realidad, lo vamos a traer, podemos verlo en los detalles. Tiene un menú desplegable con nuestras opciones con Nordeste, Suroeste, y una de ellas es la persistir el valor elegido Pero aunque haya almacenado todos estos valores, uno de estos valores, el que se le agrega. Si voy a establecer las indicaciones en va a ser una de estas opciones. En realidad dirección, no es un buen nombre para esta variable porque vamos a usar esta variable para definir nuestro punto de salida de nuestro actor engendrado B ahora mismo, lo que tenemos que hacer está bien donde va a desovar nuestra siguiente pieza Entonces voy a cambiar el nombre a Última salida. Oh, sí. Esta es nuestra última variable de salida. ¿De dónde salimos el último? Oh, ve a compilar, Dave. Y ahora hagamos una salida aleatoria. Ahora, vamos a repetir el sistema. No es una mala técnica, pero la mejor también. Lo vamos a hacer va a tomar make array. Si arrastré de esto, no podría obtener make array porque esto es sensible al contexto Yo no lo estaba. Escribo M array, va a hacer lo mismo. Pero lo que hicimos fue hacer una matriz con un comodín como variable. Entonces, lo que voy a hacer es también ponerme sensible al contexto, obtener de ray una copia, por ejemplo, y conectar esto aquí. Entonces volví el comodín a un tipo de nuestra meración. Ahora que tenemos aquí esta matriz, para eliminar el get or up. Voy a volver de aquí en adelante y conectar esto aquí, borre esto aquí. Voy a agregar o alfileres y hacerlo al oeste. Pero estos son pequeños trucos para mí no tener que crear una matriz con todas las direcciones y obtener una aleatoria esa matriz que creé. Sólo estoy haciendo una matriz temporal que será recogida de basura. Ahora esa colección carbach es una gran cosa también. Hay muchas explicaciones. No vamos a entrar en ello. Oh, creé una matriz que no va a quedar retenida en una variable y devorando memoria, por ejemplo, lo que sería negligencia porque solo un rayo de R Valores de enumeración no es Pero de todos modos, solo quería mostrar cómo podemos hacer alguna manipulación con nodos y pasar del comodín a nuestra propia variable Ahora bien, lo que esto hace es como un aleatorio de fuera de este elemento dom y lo promueve a nuestra variable. Lo llama a nuestra última salida. Entonces cuando esto corra, hemos decidido que nuestra última salida va a ser esta. De hecho podemos demostrar esto con una cadena de impresión, conecto este valor aquí. Esto en realidad no nos mostrará nada. No nos muestra nada porque no hemos conectado el primer azulejo pone. Voy a conectar esto aquí. Compilar. Voy a pre. Como podemos ver, si presiono play de nuevo y comienzo, nada, presiono y comienzo. De nuevo al oeste. A es Rundo Una razón por la que solo t al oeste y al sur. Bien. Tenemos un Norte. Sí, funciona. Obtiene una aleatoria, tres veces. Creo que este es un buen punto de sopping para este. Vamos a continuar con el siguiente definiendo el punto de salida, no el punto de salida, el punto de introducción, que vamos a estar también en algunas reglas. Eso es todo para éste. Adiós. 11. Encontrar mosaicos adyacentes: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Real Engine five Procesal Dungeon action RPG curso de creación En la anterior, creamos la última salida IO Blue, y creamos la enumeración que hicimos Y explicó algunas cosas sobre las enumeraciones. También demostramos que estamos obteniendo un punto aleatorio a través del tramposo Mar A por aquí, y ahora mismo no necesitamos esto, y sigamos con la salida opuesta. Ahora, podemos hacerlo fácil para nosotros mismos y no tener una salida aleatoria opuesta y simplemente verificar que todas estas dos variables nunca sean las mismas. Otro cheque que es no. Lo que podemos hacer es simplemente conseguir lo contrario de lo que es nuestra salida. Por ejemplo, pintar. Si esta es nuestra caja, y estamos saliendo de arriba, la introducción debería ser desde abajo Si estamos saliendo del oriente, la intro debería ser el Creo que es una regla simple, y nos facilita un poco las cosas en estos momentos. Vamos a crear posteriormente algunas comprobaciones, por lo que una variable nunca viene con otra variable. Pero por ahora, sigamos adelante con lo que estamos haciendo. Ahora, para hacer esto. Nosotros Necesitamos una manera de encontrar a los vecinos, las celdas adyacentes, como quiera llamarlo, Lo que está alrededor básicamente nuestra primera, nuestras primeras coordenadas como nuestras coordenadas son cero, cero, cero, x, cero, y ¿Cuáles serían los vecinos en una cruz? Porque estamos construyendo con una cruz. Esa es también una información sobre nuestro calabozo, cómo hace que el calabozo cómo hace que el calabozo sea creador. Vayamos a pintar otra vez. Ahora, como pueden ver, puse flechas en el Nordeste Sudoeste. No tenemos flechas en el noroeste o noreste, o esto requeriría un tipo diferente de edificio. Pero para nosotros ahora, vamos a hacer lo básico de tener apenas Noreste Suroeste y continuar con esta lógica. Ahora Para conseguir los vecinos de esta coordenadas actuales. Vamos a necesitar otra función. Va a ser una función pura otra vez porque es un cálculo matemático. Vamos a crear una nueva función. Vamos a llamarlo base de cruz de viento en él. Esta es la ortografía para adyacente. Enviados. En fin, no importa. Si sigues cometiendo un error ortográfico, si es el error ortográfico constante, realmente no importa porque puedes encontrar tu función. Pero la ortografía es algo importante. Ahora, entremos en esta función. En realidad, está abierto. Ahora, lo que vamos a necesitar es un insumo. Vamos a necesitar una entrada de coordenadas. Voy a ir a entradas, y voy a seleccionar un punto in. Y voy a ponerle nombre a esto ds. Como dije, ds, el punto en es dos d vector. Eso significa que tiene una x y una y. No tiene una z. Así como podría e con la transformación. Entonces puedo hacerlo con cordones, pero no quiero usar split porque si uso split, se ve así, y voy a tener que arrastrarlo de aquí desde aquí. De todas formas va a ser un desastre. Entonces voy a recombinar los dos, lo que voy a hacer es, voy a arrastrar esto aquí y escribir break in break in point Ahora, es un poco más claro, que no va a estar al final para ser. Porque lo que tenemos que hacer es que vamos a necesitar sumar manualmente una en las coordenadas superiores o restar una Y también hacer lo mismo o y. así obtenemos nuestras coordenadas norte-sureste oeste. Porque vamos a definir que nuestro norte es el seno más de x. Sur es nuestro menos menos en la palabra dirección x, y comer es la dirección positiva en, y nosotros es la dirección negativa en y. Oh. Ahora, he atraído y agregado manualmente los valores. Pero necesito hacer los puntos. Lo que voy a hacer es como hice el hacer un rayo. De hecho puedo hacer en punto. Puedo tener este nodo por aquí que crea otro en punto. La mayoría de las cosas se pueden crear temporalmente así. Ahora necesito esto cuatro veces. Ahora, conectemos todo, todo. Vayamos aquí, va aquí. Nos veremos obligados a spagetificarnos un poco. Voy a arrastrar de la y aquí a la 0x0y, y de la y aquí a esta cero y, y voy a hacer lo mismo con x aquí aquí, y va Ahora bien, lo que esto significa en definitiva es que estamos creando un punto final de neu variable con desde la posición actual más uno a x o más menos dos x más uno y más menos uno y tenemos una ubicación cruzada para encontrar a nuestros vecinos desde nuestro punto actual. Ahora, voy a hacer un rayo como lo hice antes, y voy a agregar pines. Vamos a conectar esto aquí y aquí esto aquí, y vamos a dar clic en la cruz de vino adyacente y crear una salida, que va a ser una matriz, y llamarlo llamarlo j. Por último, necesitamos conectarnos al nodo de retorno, la matriz que acabamos de hacer a adyacente. Ahora, antes de continuar, demostremos lo que creamos. Así que vamos a entrar en la función en primer estilo, y vamos a poner un rt br de nuevo. L et's traen esta función por aquí. No lo seleccioné para que sea puro, solo voy a seleccionarlo ahora, seleccionando la función en cualquier lugar que esté. En el talón de detalle, se puede ver esta opción pura. Voy a seleccionar esto. Para las coordenadas, ahora mismo puedo usar las cunas actuales. Y lo que al instante podemos ver es que no podemos conectar esta variable a esta porque esta es una caja. Tiene un símbolo de una caja, que es nuestro símbolo de matriz, donde este solo tiene un símbolo de pin, este punto redondeado aquí. Oh, como podemos mostrar todo, todas las listas de elementos de esta matriz. Lo que podemos usar es algo llamado bucle for para cada uno. Ahora, hay un foreloop también. Vamos a traerlo. Ningún ejemplo. Entonces, ¿cuál es la diferencia entre estos dos? En primer lugar, expliquemos lo que hacen. Lo que hacen se basa en un índice que o nos fijamos o lo obtenemos de una matriz. Esa es alguna acción que podemos programar, que se llama body loop. Y cuando se completa, conecta el pin terminado. Ahora, como pueden ver, estos tienen algunos pines diferentes en este lado también. Este solo nos da un índice, por ejemplo, si pongo el índice 55-55 Significa que va a indexar, el primer índice que damos cuando se dispara el bucle corporal sería 55. Y la razón por la que sabemos que es 55, porque si cubrimos, dice ejecuta body loop para cada índice de índice de inicio a índice de stop, inclusive Esa es la palabra clave, inclusiva. Esto significa que correrá 55, y correrá 65 también. Ahora bien, este nos da un elemento array. Entonces, cuando estamos usando para cada bucle de una matriz, en realidad obtenemos el elemento correspondiente al índice también. No, conectemos esto antes de la cadena de impresión. Y ahora queremos señalar este elemento A. Voy a conectar esto aquí. Va a eliminar este bucle. Y nuestras coordenadas son ahora mismo cero y cero, cero sobre y y cero x Así que debería darnos un más uno en x, un menos uno en x, un más uno en y, y un menos uno en y manteniendo el correspondiente opuesto a cero. Voy a compilar. Estoy en el overp Lo siento. Ir al nivel M. Ve a guardar todo y presiona play. Ahora juego de estilo, podemos ver las coordenadas aquí arriba. Si es demasiado rápido, podemos abrir algunas opciones extra en la cadena de impresión, que tiene toda la duración, algunas otras cosas o avance. Nosotros, pónganse esto. Si yo, por ejemplo, ahora, se quedará más tiempo. Ahora bien, si lo probamos con diferentes valores, llamemos al generador ma, en lugar de los potro actuales, voy a dividir esto Seleccione, digamos que partimos de uno y uno. Debería actualizar correctamente como lo hizo los valores. Una cosa más antes de cerrar para esta lección. Creo que deberíamos poner alguna explicación encontrar cruz adyacente al orden del que están viniendo. Como dijimos, norte es más en x, y sur es menos en x y oeste menos en y, y plus es este. Voy a ir a la función. De hecho puedo ponerlo como una descripción sobre herramientas, pero lo prefiero en el nombre La tengo aquí. Renombrarlo con F dos en el espacio y norte noreste oeste. Puedo tener esto y explicarme el orden en que vienen estos. Ahora, creo que esto es suficiente para éste. Te voy a ver en la siguiente. Adiós. 12. Mapeo de coordenadas y generación de mosaicos: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos y Curso de creación de Real Engine five Procesal Dangon Action RBC Anteriormente, creamos nuestra fina cruz adyacente a la función Norte-Sureste Oeste. Y vamos a recombinar esto en realidad. Tenemos una entrada de una entrada de punto int, y estamos exportando tenemos una salida una matriz de t puntos. Ahora, demostramos la capacidad con un bucle delantero de agregar cualquier coordenada nos da los vecinos, los vecinos cruzados Entonces ahora conectemos esto aquí y en realidad dejemos esto también. Ahora, lo que queremos es conseguir lo contrario de la última salida. Para ello, lo que vamos a utilizar es esta lista de aquí. Voy a conseguir copia. Ahora bien, la diferencia entre una copia y una referencia es que cuando estoy recibiendo una copia, estoy obteniendo un duplicado básicamente del elemento real. Fue de la referencia, en realidad puedo manipular la fuente, la entidad real de la matriz. Entonces lo que necesitamos es una copia. Y ahora vamos a usar un nuevo nodo. Vamos a usar un nodo selecto. Déjame demostrarlo. Vamos a escribir select. Como puedes ver, tenemos este nodo por aquí, lo que nos da algunas opciones y un índice de un comodín y un valor de retorno. Ahora, basado en este comodín índice, viejo comodín porque puede cambiar a muchos tipos En realidad vamos a usar la am que tenemos. Por ejemplo, voy a conectar la última salida aquí. Yo auto convertido. Ahora bien, este valor de retorno es un entero porque solicitamos una selección de un entero. Si solo iba a solicitar select, se puede ver que todo es una tarjeta Y. Entonces podemos usar este nodo en muchos casos diferentes. No, hacemos un primero norte, cero porque las matrices están numeradas por cero, yendo a uno, dos, tres, etcétera Oh, Norte es cero este serían dos, Sur sería uno, y oeste serían tres. Pero con base en el índice que es entrante, viene al sur , elige dos, cuando es un Norte elige el correspondiente. Pero el problema con esto es que si viene Norte, entonces estamos seleccionando norte. Si viene Oriente, entonces estamos seleccionando oriente. Lo que queremos es invertir estos números. Pero cuando viene al norte, queremos al sur, pero aquí vamos a elegir uno. Cuando está al sur, queremos al norte, así que aquí vamos a elegir cero. Cuando está al este, queremos al oeste, y donde está al oeste, queremos Oriente. Entonces ahora podemos invertir eso básicamente en los ingresos, lo que obtenemos de esta matriz. Ahora para finalmente llegar a nuestra meta en todas estas acciones sería decirle al programa que esta caja debería tener estas coordenadas en nuestro mapa, nuestra bidimensional debería tener el inicio. Bueno, no el inicio, sino el bloque de intro, por ejemplo, llamémoslo intro De hecho, vamos a crear un plano para eso. Vamos a la carpeta Blueprint. Vamos a hacer click derecho. Vamos a seleccionar una clase de plano. Voy a hacer actor. Vamos a llamarlo BP intro o globo o lo que sea. Vamos a usar un globo. Por eso dije globo. No. Ya que queremos que intra se genere ahí, debemos decirle al laberinto que esto debe mantenerse vacío Estas coordenadas. Entonces, ¿qué voy a hacer si vas a azulejos especiales? Uy. Ya me equivoqué aquí. Estoy adivinando que esto pasó. No debería tener ningún elemento. Voy a borrar esto. Azulejos especiales deben ser un cero elementos. Yo supongo que esto pasó porque yo creé el elemento a partir de aquí Duplicé esta variable, así que podría haberla guardado o por error, podría haber agregado o para alguna nación. Así que los azulejos especiales estarán vacíos. Ahora, voy a copiar estos mosaicos especiales, pegarlo y cambiarle el nombre a stt Pero vamos a tener otra lista, nuevamente, vamos a traer esto aquí con control y seleccionar AD y agregar esta variable desde get Ahora, vamos a usar esta lista cuando estemos construyendo el laberinto, para crear algunas reglas para decir, no coloquemos nada aquí porque tal vez queramos colocar algunas cosas ahí nosotros mismos, como vamos a hacer ahora mismo. Digamos que queremos proponer este azulejo de introducción, Pon este spot Voy a utilizar de nuevo a este propio actor porque así es como responden los actores del mundo. Y voy a seleccionar el en O. Es una R. Oh, vamos a ir en realidad a este plano La forma en que pasé a él es que seleccioné estas cejas, lo que significa navegar a un set, lupa por aquí, y me lleva al plano, como si estuviera en otra carpeta, eso es esto, listo para Ahora, voy a hacer doble clic en él, y voy a agregar una malla estática y seleccionar para la malla estática seleccionada automáticamente aquí, un tubo. Tenemos un tubo. Tubo SM. Bien, dejemos este tubo por ahora. Entonces sabemos dónde está nuestro intra. Ahora, encuentra la ubicación. Como dijimos, cuando divido esto, recombine struct. Sí. Se pueden dividir también los propios vectores. Pero lo que queríamos era recombinarnos para demostrar que esto era una transformación Ahora si lo divido, puedo ver la ubicación, la rotación. Tengo mis coordenadas locales o una matriz bidimensional. Pero, ¿qué se traduciría eso en coordenadas en el mundo? Debido a que esto necesita coordenadas de palabras, no se puede generar en base a uno y dos, menos uno y menos dos, en qué parte del mundo Pero para eso, vamos a crear otra función, otra función pura para poder darle coordenadas, y nos da una ubicación de palabras. Oh. Vamos a nuestras funciones, presionemos de nuevo este símbolo más y agreguemos una nueva función. Llamemos a este punto ubicación. Creo que ya es suficiente. Como dijimos, necesitamos otro insumo aquí. Va a conseguir la ordenanza puntual en estos agujeros. Y va a tener una salida de un vector. Tenemos un espacio w de x y y z Digamos esto. No sería genial si puedo conectar esto aquí y tú solo podrías trabajar. Pero lo que tenemos que hacer es romper esto. Recuerdas cuando hablamos en pintura sobre el tamaño de la pila, como ¿qué tan grande es nuestro tipo de laberinto real? Bueno vamos a necesitar crear esta variable. Voy a presionar nuestra variable aquí, voy a cambiar su tipo entero. Voy a llamarlo ile es. Porque sé el tamaño de las baldosas R, que 600, voy a escribir 100. Este es el valor predeterminado, pero podemos hacerlo instancia editable y exponer en spawn Para que podamos cambiar. Tenemos diferentes mosaicos, cuando estamos desove el laberinto, vamos al menú principal y gráfico, archivo Actualicemos esto. Recúpalo, y no pasa nada porque no he compilado este plano Y ahora tenemos tamaño de baldosa. Podemos ajustarlo por nuestra cuenta si tenemos diferentes tipos de baldosas, 400 por 400 o cualquier número que muramos. Voy a compilar y guardar nuevo, y volver a nuestra ma. Ahora, tenemos este tamaño de mosaico que es cien, y si multiplicamos esto por x, lo multiplicamos por y. vamos a vector. En realidad, porque con vectores. Ahora esto es Los vectores son flotadores. Entonces, si solo trato de hacer de esto un vector, no sucederá. Ahora, siempre puedo hacer un cambio de dos flotación, y va a crear flotación. Pero real hoy en día nos da la opción de ir a este pin, hacer clic derecho y convertirlo a lo que quiera. Voy a elegir un flotador. La precisión única no importa para nuestro Por lo tanto, tal vez un procedimiento más grande para nosotros porque estamos multiplicando enteros Y bueno, para ser honestos, porque merece la pena ubicarlo y podríamos estar desovar el laberinto Floto. El poderío no importa o no importa. Oh, de aquí, ahora puedo hacer tor. Y este es mi valor x, y este es mi valor y. Y por el valor z, sólo voy a agregar esto al tor asi. El llenado es importante. Sí. Entonces, como esto es cero, va a estar sumando el eje Z desde nuestra ubicación del actor. Y la razón por la que estamos agregando esto es porque este es nuestro punto de partida. Y cuando después vamos a estar desove próximos laberintos, como arriba e incluso con un punto de partida diferente 002000, digamos Podría ser 500 por 600 X y algunos Z. al azar es por eso que necesitamos agregar la ubicación del actor así Los próximos laberintos que se van a construir van a tomar en consideración que su ubicación es relativa a la ubicación de los actores a la ubicación de los laberintos, la ubicación del constructor de Mazes Oh, voy a poner esto aquí. No especificamos mucho este plano. Voy a compilar, voy a guardar, y voy a volver a esto en primer estilo, y voy a traer multa tation, ir a hacerlo puro, por lo tanto va de nuevo, y voy a conectar esto aquí y esto aquí. Ahora si juego, debería engendrar. De hecho lo podemos ver porque tenemos la pantalla de carga. Entonces vamos a la pantalla de carga. Vamos al panel de cavas y pongamos la visibilidad a oculta. Compilar y guardar. No hay pantalla cargada. Pero supongo, no lo estamos viendo porque no hay luz Arreglemos esto. Llevemos la luz a nuestro nivel. Vamos a ir a la caja de aquí arriba que se agrega rápidamente al proyecto. Vamos a ir a las luces y agregar esa luz direccional. Volvamos a jugar. Realmente no puedo ver ninguna caja porque nuestra cámara no era el lugar correcto. Oh, supongo que esta es nuestra introducción. Entonces, en algún lugar por aquí está nuestro generador de laberinto. Ahora, creo que este es un buen punto de parada para este. Y en la siguiente, deberíamos empezar a diseñar nuestro azulejo para poder ver nuestro primer azulejo. Adiós. 13. Visualización del laberinto con flechas: Hola, y bienvenidos a Game Design Workshop y Real Engine cinco procedimientos Dungeon action RPG curso de creación Anteriormente, creamos la función de ubicación de teselas finas, que multas basadas en coordenadas, y en función del tamaño de nuestro mosaico, la ubicación de nuestras coordenadas pares, la palabra ubicación. Oh, agregamos esto a nuestro código, y también generamos nuestro bloque de introducción Eso en realidad debería estar desove un poco más alto, así que solo voy a agregar aquí y hacer un vector agregar matemáticas Voy a sumar a los Zaxs, 300. Voy a conectar esto aquí. Por lo que ahora va a engendrar un poco más alto que el resto de nuestro laberinto Ahora, un detalle más antes de empezar a hacer los mosaicos, como decíamos, necesitamos agregar esto a los actores para destruir array. Voy a traer a los actores para que destruyan. Yo sólo voy a presionar add. Y voy a agregar este actor también, que es el resultado del desove actor PP intro Ahora vamos a compilar y guardar. Vamos a abrir nuestra pila. Ahora cuando lo abrimos la primera vez, nuevo, el plano se abre así Solo necesitamos abrir editor de planos completo. Nuevamente, en caso de que alguien se lo pregunte, este es el valor predeterminado tina por defecto de este blueprint, también se puede encontrar en los valores predeterminados de clase por aquí en el detalle Voy a enganchar esto aquí. Y comencemos. Lo que vamos a hacer primero es agregar algunas mallas de ático y algunas flechas en nuestra tina de componentes Entonces, para verlas, vayamos a nuestra ventana gráfica. Y vamos a presionar agregar una malla estática. Estamos agregando una malla estática. Vamos a nombrar esta malla. Cuatro. Y este es un componente de malla estática. Entonces necesita que se agregue una entidad de malla estática en estas propiedades aquí mismo, porque esto es lo que le está diciendo al blueprint es que tienes una malla estática No le dice al plano, qué malla estática. Pero vamos a ir aquí en la puñalada detallada e ir a propiedad de malla estática y seleccionar nuestro piso Ahora, ¿hay dos pisos, el 400 por 400, y el piso llano. Este es un piso 600 por 600, así que vamos a usar este. Ahora, como dijimos, nuestro norte es el eje positivo sobre x, y nuestro oeste nuestro este es el eje positivo sobre y Para hacer las cosas un poco más visuales para nosotros para que podamos decir cuál es fue con solo mirarlas en el mapa. Vamos a sumar cuatro flechas. Addr primero. Entonces voy a copiar y pegar. 43 veces. Oh, voy a volver a nombrar también en flecha flecha norte flecha sur y flecha oeste. M. Ahora. Debido a que estas flechas son pequeñas, aumentemos también su tamaño. Voy a seleccionarlos todos e ir a escala y aumentarlo en un factor dos, básicamente. Ahora son un poco más grandes. Vamos a rotarlos correspondientemente. Voy a presionar el rotador, que E, rotar la segunda flecha, la flecha este, y rotar ahora la flecha sur Gire la flecha hacia el oeste. Todo eso está bien y bien. cuatro flechas que muestran dirección, pero no estamos teniendo ninguna información especial sobre lo que es qué. Entonces si veo esto, no tener herramienta seleccionada ni nada, no voy a poder decir es este norte, es Occidente. Pero agreguemos algo de texto en cada flecha. Texto, texto de flecha, seleccionando la flecha. Seleccionando la última flecha y texto. ¿Por qué los estoy seleccionando? Porque cuando los selecciono, lo agrega automáticamente como hijo del componente seleccionado. Si hubiera seleccionado la raíz, le agregaría los componentes de texto parentales a la raíz Ahora están parendados a la flecha. Entonces, si estoy cambiando la dirección de la flecha, también lo hace el texto. Ahora, voy a sacar los textos Un poco más adelante. En realidad, como se puede ver, porque las flechas se renderizan con e de dos, nuestro texto, se agrega automáticamente con 0.5. Entonces básicamente se escala uno si lo pongo fuera del padre de la flecha Yo me crié a la raíz del plano, no hago raíz, solo toque Se puede ver que volvió a uno, uno, uno, pero el texto permanece del mismo tamaño. Volvemos y lo padres a la flecha, que estaba al norte, veo que volvió a 0.5 0.5 0.5, pero pad el tamaño. Esto se debe a que la flecha misma se escala en dos. Fue como cuatro, sería 0.25, por ejemplo, Demostremos este adjuntar. De nuevo, lo hice una raíz. Yo el uso de la palabra. Por eso. Aquí, la flecha o voy a volver a tocar el texto. Se puede ver que es 0.5. Ahora bien, si devuelvo la flecha a dos, el texto se va a quedar 0.25 porque ahora estoy escalando mientras tengo esto de niño. Entonces el motor piensa que estoy pensando que todas estas matemáticas automáticas suceden al mismo tiempo. Voy a volver a desparentarlo. En realidad no necesitaba unparent. Sólo voy a uno, uno, A. Voy a rotarlo un poco. Rota al revés, así que voy a esto también. Voy a cambiar en los detalles el texto de texto a n para norte. Aquí. Ahora, nuestras flechas están en la ubicación cero con ese cero. A lo mejor esa no es la mejor opción porque deberían estar un poco más altos que el piso. Ahora mismo, están exactamente en el piso. Entonces voy a cambiar de ubicación. Yo controlo seleccioné cada uno de ellos. Voy a cambiar la ubicación a net. O 100 o 50, sólo un poco más arriba. 90 k Ahora bien, para los que son nuevos, la forma en que me mudo aquí es la forma en que estoy moviendo al editor. Esto significa que manteniendo pulsado el botón derecho y usando AWS T&E, muévase Oh. Ahora que tenemos n, no del todo centrados aquí. Muévelo. Lo muevo, no puedo centrarlo con el tema de espaciado de cuadrícula actual. Pero porque son diez, si lo pongo en cinco, lo mejor se centra bien. Sí. Es centros mejor cinco. Pero si no estuviera centrándose ni en cinco, claro, podría ponérselo en uno Lo vuelvo a activar y ahora mismo, podría simplemente apagar esto y el chasquido estaría apagado. Lo mismo que podemos hacer con la rotación con los grados, y lo mismo que podemos hacer con escala controlada por estas opciones de aquí. Ahora, pongamos más textnra, llamemos en realidad a este textrander Voy a ir al otro textnder. Voy a ponerle escala a uno. Recuerda tener esto bloqueado, así escala todo en uno. Si tienes esto desbloqueado, tienes un componente de escala, y ten cuidado si esto es incluso escalado, lo bloqueo, escalará esto en consecuencia Vuelva a bloquearlo. Establecer uno, 11. Otra vez. Vamos a traerlo aquí. Vamos a rotarlo. Esto realmente sabe qué. Esto debería ser así. Lo traigo aquí. Voy a cambiar el texto a West W. E one. Bien. Hagamos el oriente. Este fue el. Ahora, ya ves, porque estoy rotando incluso largo girarlo. Y esta en realidad es la flecha del este. Entonces, voy a reiniciarlo transformar y rotar y volver a ir. Lo restablezco marcando la flecha en negrita aquí cuando mueves algo y te pregunto si quieres restablecerlo a la propiedad predeterminada por aquí con esta flecha Voy a ponerlo de esta manera. Voy a rotarlo de esta manera, esta manera, y vamos a defraudarlo más abajo. W E de cambio para disparar de nuevo, un poco más abajo. Creo que se ven bien. Ahora, en la flecha oeste, hagamos la flecha correcta esta vez. Voy a poner el texto a Ws en otra parte. Voy a cambiar la rotación. Correctamente. Escala a uno, y ponlo un poco más abajo aquí abajo. Archivando bien, para el último, Sur, Baje, S para el texto, y deje en consecuencia. Por supuesto, establecer la escala en uno, y nosotros establecemos la ubicación. Ahora tenemos una dirección noreste suroeste para ver dónde están nuestras posibles salidas y entradas Por ejemplo, si vamos a jugar ahora mismo, podremos ver la pantalla de carga. Sí. Entonces vayamos a nuestra pantalla de carga, vayamos a nuestro panel de cavas, y hagamos que sea oculto compilar y guardar, para que podamos ver realmente lo que estamos construyendo Si presiono play, la cámara no se ve correctamente. Pero si expulso, presiono Alt y S, por ejemplo. No por ejemplo, ese es el atajo para expulsar. Puedo volver a moverme libre en el editor editor. Podemos ver el noreste suroeste, pero no podemos ver las flechas. El motivo es porque hay una opción a las flechas. Lo mostraremos después. Entonces hay una opción a las flechas para hacerlas ocultas en el juego. Bueno, ahora, como pueden ver, nuestra salida es probablemente está en el norte porque el sur opuesto es nuestro bloque de introducción Como puedes ver, esto no está exactamente centrado, y la razón es que si vamos a la apertura al bloque de introducción, vamos a la ventana gráfica Se puede ver que el centro es en realidad esta esquina de aquí, no el centro de la plaza. Entonces por eso se ve. No necesitamos esto. Por eso no se ve centrado. Pero si se tratara de un pivote central de tubo, entonces se habría centralizado. Ahora, creo que esto es suficiente para éste. En realidad, vamos a mostrar de nuevo las flechas, la variable de juego oculto, ir a la ventana gráfica, al puerto Ti, no al generador de laberinto Seleccionemos todas las flechas y vamos a luego ganar opción en los detalles. Acabo de escribir aquí HID, y voy a apagar esto el Si compila y guardo. Actuar. Ya podemos ver las flechas y la salida es del oriente, por lo que nuestra introducción es del oeste Eso es todo para éste. Te voy a ver en la siguiente. Adiós. 14. Agregar paredes de castillo: Hola, y bienvenidos a Game Design Workshop underal Engine cinco procedimientos Dungeon action Bz Anteriormente, comenzamos a crear la flecha de mosaico. Agregamos algunas flechas, agregamos piso, y agregamos algo de texto para indicar la dirección de las flechas, en base a nuestras coordenadas. Oh. Cómo usamos las coordenadas, básicamente. No, ahora. Empecemos algunas cosas más para que este calabozo un poco más se sienta como si solo tuviera piso, si presionamos play, se ve raro Piso en medio del cielo. Entonces agreguemos algunos extras, hazlo más como mazmorra No, lo que vamos a añadir es lío estático. Ser pasado uno. Cuatro. Entonces tenemos cuatro de ellos. Podemos nombrarlos dos pared uno. Pared dos. Y cuatro. Ahora bien, a esto porque había escrito HID, sólo estaba mostrando opciones con HID en ellos. Entonces lee esto, para que pueda verlo todo. Y para la malla estática para todo esto, seleccionaré todo. Y como este es un atributo común, puedo agregarlo a todos ellos. Voy a seleccionar de nuevo y esta vez el 400 por 400. Y en realidad, voy a cambiar el material también. Tengo que hacer esto seleccionando cada uno de ellos y usar el ladrillo poner arcilla de ladrillo B. No tengo idea de cómo pronunciar esto. Pero esto es lo que estamos usando. Y voy a seleccionarlo en todo. Este material en este piso es del paquete de arranque original de motor real. Ahora, vamos a moverlos para crear algo así como paredes. Pero antes que nada, voy a cambiar la escala en realidad para que sean dos. Quizá un poco más largo 2.3, en altura, y necesito desbloquearlo antes. Gracias. Ahora, voy a copiar, copiar este valor e ir pegarlo al resto. Esa es otra opción que tenemos. Podemos copiar incluso conjuntos de opciones completos, como puedo copiar toda la categoría de propiedad transformar, por ejemplo, y si el otro elemento tiene lo mismo, pegar, y debería haber funcionado. Nuevamente, propiedades de pila en categoría, y Propiedades basales en categoría. Bien. Ahí vas. Obras. Es. Ahora todos ellos tienen las mismas propiedades. Ahora, el tema ahora se convierte en eso porque esto se multiplica por dos, es 400 por dos, crea 800 piso, no un piso 600, lo que no es un gran problema para nosotros en este momento porque necesitamos la habitación extra. Vamos a colocarlos en los bordes, tal vez. A lo mejor me equivoco, a lo mejor Nuestra talla no es 600, es 800. A lo mejor me informaron mal. De las tres personas D sobre los bienes. Pero está bien. Simplemente podemos cambiar nuestro tamaño de baldosa a 800. Sigamos Podemos hacerlo al valor predeterminado en tamaño de baldosa del generador Maze, al menos 2800 o también podríamos haberlo hecho aquí en el menú principal. Ahora mismo, tenemos que hacerlo el menú principal seguro porque el antiguo valor predeterminado habría sobrepasado porque no se habría actualizado aquí Ahora, Archivo guardar, guardar completo. Nuestros azulejos son 800. Ahora. Vamos a colocarlos más o menos. Ahí. Ellos sí tienen que crear una caja. Cuando los reemplazamos aproximadamente y en realidad los hacemos fríamente. Un poco más bajo porque como se puede ver el a la misma altura que el piso, los materiales pueden superponerse, y no queremos que esto suceda. A medida que baja. Sí, esto se ve bien. Realmente no importa. Sí, está bien. Ahora mismo, tenemos algo que parece paredes. Vuelvo a expulsar, lo de algún lado. Tienes algo que parece paredes. Cuando colocamos los artículos encima de ellos, como paredes y todo, tal vez necesitemos reajustar de acuerdo a lo que vemos Vayamos al generador de laberinto y en realidad tile el azulejo BB, en realidad agreguemos una cosa más. Vas a agregar un texto. Otro renderizado de texto. Eso va a colocarlo aquí arriba y girarlo mira a la cámara. Oh, no pude deshacer porque dejé que se pusiera. Y cuando estás jugando en cualquier editor, los cambios necesitan una cierta combinación para guardarse también. Bueno, en realidad. Pero cuando estás jugando en editor, básicamente no hagas cambios. Esa es una de las reglas. Se puede. Como dije, se puede ahorrar. Si tienes un nivel que quieres jugar y expulsar y mover algo, puedes y en realidad puedes guardarlo Es el botón k. Déjame demostrarlo. Pasemos al nivel de juego. Si presiono play, voy a expulsar ahora mismo. Por ejemplo, quiero mover no esto porque esto se ha generado a través de nuestro plano, sino que quiero mover, por ejemplo, la iluminación direccional No vamos a la luz direccional digamos que es otra mesa de actores. Quiero mover su ubicación. Y tal vez rotarlo también algún otro grado. Si presiono K seleccionándolo, podrás ver el estado seguro para K. Cuando deje de jugar, mantendrá la rotación y ubicación o escala que le he configurado. Volvamos esto al valor predeterminado, y volvamos a nuestro plano Ahora, volviendo a nuestro texto, me va a gustar esto, fechado en realidad. Y para el texto, lo vamos a estar sintiendo desde otro lugar y Shona aumentará el tamaño Y vamos a hacer esto con tamaño de arte de 26, voy a ponerlo a 30. 40 50, 50 se ve bien. Lo puse en alguna parte de aquí porque va a hacer una frase. En realidad, voy a hacerlo por aquí. Voy a ir al guión de construcción. Ahora. Hablo un poco sobre guión de construcción. Lo que hace es crear cosas y fis información, y manipula el plano básicamente A lo mejor vamos. Voy a conseguir este nuevo texto, que no nombré nombre al número de archivo. Voy a traerlo aquí con control, y voy a poner texto. Voy a conectar esto primero que nada. Para el texto, voy a cambiarlo para que suene realmente texto, lo que hace en cadena a texto. Ahora, voy a hacer una pluma aquí, que significa en la cadena de arriba a la cadena de abajo. Para la primera cadena, voy a tener pila es O B, en realidad voy a crear un mosaico variable. Cuando le puse una palabra, no le gustaron dos palabras porque tenemos el número de texto número de texto, y ponemos una puntuación t delante de él. Ahora, puedo compilar y cambiar esto a madera. Oye, voy a cambiar esto a la variable de número T de N a entero. Voy a traerlo aquí, y voy a conectarlo a B. Ahora bien, donde este número ty va a ser llenado con información que va a estar en spawn Si compilas y no funcionaste en la primera vez, dice, no se puede analizar el valor predeterminado cae. Yo no voy a entrar en ello. Se puede compilar de nuevo, y está arreglado. Oh. Va a ser Esto va a ser llenado en instancia editable y exponer en spawns Cuando estamos generando un azulejo, por ejemplo, nuestro primer azulejo en el generador de laberinto, ve a nuestro primer azulejo de desove St a azulejo. Ahora tenemos este número de mosaico aquí, y el primer mosaico es cero. Para compilar y guardar, veamos cómo se ve. Yo expulso. El número es cero. Ahora, no me gusta que expulsemos cada vez Sólo voy a traer una cámara. Dios. Va a ponerlo a cero, cero, cero, o un poco más arriba. Mira hacia abajo. Mi lo ponemos aquí y lo hacemos en un ángulo. Ahora si empiezo, no hizo nada porque no la hemos configurado para poseer esta cámara. Vamos a ir a un plano de nivel ahora mismo, como la cámara, ir al plano de nivel Haga clic y cree una referencia. Voy a ponerme más fresco de eso, voy a mezclarte con Blend. Conecta el nuevo objetivo, esta cámara y conecta esto a Bigin play, compile y seven play Y ahora estamos poseyendo esta cámara. Bien. Entonces tenemos el número de baldosa es cero, tenemos las flechas, y en realidad tenemos algunas paredes, que esta pared está un poco fuera de su esta pared. Lo que dejé que se superpusiera, lo puse apretado, un poco más bajo. Bien, vamos a jugar. Anuncio. Tenemos nuestro número de tiempo, tenemos nuestras direcciones, y tenemos un comienzo que aleatoriza cada vez. Ahora bien, lo que tenemos que hacer es hacer un camino a cuando tenemos nuestra salida de, y cuando sabemos que estamos bloqueados desde el oeste, estas flechas así que estén ocultas. Pero esto es algo que vamos a dejar para la siguiente lección. Adiós por ahora, nos vemos en la siguiente. 15. Comunicación de planos con interfaces: O Hola, y bienvenidos a Game Design Workshop y real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, agregamos algunas paredes en nuestro azulejo, y también agregamos texto de número de mosaico que agregamos al script de construcción. Como decíamos esto corre antes de que el Blueprint genere en el mundo, mientras que si lo tuviera, por ejemplo, en la jugada de inicio, correría el momento Fue después de que estaba desove. Oh, ahora, sigamos con nuestras flechas con los ojos en base nuestras salidas en función qué lado está bloqueado y cuál no ¿Vamos a usar en realidad esto también para averiguar cuándo estoy construyendo la siguiente pieza, si la anterior, dónde está la salida, dónde puedo construir realmente ir a hacer eso, vamos a necesitar una función, pero no vamos a necesitar ninguna función. Por si acaso quieres crear más tarde tus propios azulejos, tu propio laberinto. Vamos a crear y tal vez tengamos un laberinto que creó un montón de azulejos. Si tienen las funciones, en realidad, no si tienen las mismas funciones, sino si tienen cierta adición al blueprint que se llama interfaz blueprint, pueden ejecutar las mismas Se pueden usar desde el mismo algoritmo Déjame explicarte pintura morder. Digamos que tenemos un algoritmo que dice, Vamos a crear algoritmo en realidad. Si la baldosa actual es igual a la baldosa Mc, p? Si no es igual, entonces pon tile. Esto es lo que estaremos creando más adelante. Cuando un azulejo de desove y yo queremos alternar sus flechas, ya que cuando nuestra mecánica de desove nos da una referencia a lo que engendramos, podríamos llamar directamente una función que está dentro Digamos que en nuestro plano de azulejo, azulejo. Y si tuviera P voy a hacer. Y a esta función no le gustaría. Si tuviera, como, cuando estoy seleccionando una clase, si le pongo una caja aleatoria aquí para seleccionar de diferentes fichas, clases aleatorias. No me gustaría que esté dibujando de esto y ejecutando una función específica de este plano Entonces, aquí está lo que donde vienen las interfaces de blueprint. Tienen un montón de nombres de funciones con entradas, salidas, lo que sea que pueda hacer una función, en realidad, que se pueden compartir algunas clases de las que seleccionamos. Entonces, cuando estoy teniendo una función BI, una función de interfaz de blueprint aquí, puedo estar enviando un mensaje independientemente a la clase, independientemente no es una palabra independientemente a la clase, pero estoy generando, siempre y cuando la clase tenga esta interfaz de blueprint, dentro de ella, como heredada en Te voy a mostrar cómo agregar esto ahora mismo. Entonces básicamente, ese es uno de los usos de las interfaces de blueprint No vamos a ir sobre lo que es más óptimo. Hay otras formas de enviar información. Hay despachadores de eventos, hay referencias directas, hay un montón de formas de hacerlo. Pero, ¿qué es más óptimo o no? Depende de muchos factores. Y por lo general no se trata de que los problemas no vienen de ahí. Suelen ser problemas de colisión. Suelen ser problemas de navegación, el lío de navegación y con la IA, diferentes tipos de problemas crean problemas mucho más severos en los juegos. Pero siempre, puedes usar el perfilador y comprobar donde tu juego tiene hipo Ahora, agreguemos esta interfaz, pero para agregarla, necesitamos crearla. Así que vamos a nuestra carpeta Blueprints. Haga clic derecho, vaya a crear una nueva carpeta, en realidad. Se llama a esta carpeta, BI, interfaces Blueprint. Vas a entrar en esta carpeta. Vas a ir a Blueprints, click derecho e ir a planos y seleccionar interfaz de blueprint Voy a nombrar a este BI plt Homes. Y voy a abrirla. Ahora, cuando lo abro, aquí, nos da ya una nueva función para agregar. La primera función que añadiremos es una función para encontrar la siguiente salida. Porque para donde estamos, necesitamos, antes que nada, encontrar la siguiente salida. Así que encuentra Entonces vamos a necesitar dos entradas para esto. Van a ser del tipo e dirección. Oh, ya es para mí porque es la última variable que creé, y vamos a nombrar a este ingreso. Erección. E ir a salidas y crear otra variable. Va a ser otra vez de la dirección e, y esta va a ser la salida. Ba esta función va a estar haciendo cosas para encontrar la dirección en función de la dirección entrante, ¿dónde está la salida? Porque no queremos que la salida sea la misma que la dirección entrante. Porque entonces vamos a hacer ping pong de ida y vuelta. Y la siguiente función serían las flechas de ogle, para establecer la visibilidad en función de si la ruta está bloqueada o no. Ahora bien, como pueden notar, para los que son nuevos, aquí no puedo colocar ninguna codificación. Esto se debe a que en las interfaces de blueprint, les debemos en el plano real al que los estamos agregando. Y la razón es porque podríamos querer la misma función con las mismas entradas y salidas. Eva hace algunas matemáticas diferentes, algunas operaciones diferentes dentro de ella. Pueden estar trabajando de manera diferente en baldosas BV. También pueden estar trabajando de manera diferente en la baldosa BV, pero las entradas y salidas serían las mismas. En fin, continuemos. ¿Cómo agregamos esta interfaz en nuestro blueprint? Para ello, vamos a ir a los valores predeterminados de clase, lo siento, configuración de clus, y vamos a ir a interfaces tina e interfaces implementadas Vamos a seleccionar Agregar y llamar al BI Mase viene. Ahora, bajo nuestras funciones variables y variables se ha creado una nueva categoría llamada interfaces. Si abro esto, puedo ver claramente que no he compilado esto. Puedo ver claramente nuestras dos funciones. Las funciones que estabas viendo antes era una función que probé del registro, pero no funcionó bien. Entonces sí, estas son nuestras dos funciones ahora mismo. Compilar de nuevo y compilará. Siempre compile su plano de clase I. Dave, y luego cierra antes de hacer cosas en tu plano que lo hayas agregado. Ahora, nuestro siguiente paso antes de comenzar a arreglar estas funciones, no fijarlas, sino crearlas sería crear una variable para controlar la información de si una dirección está abierta o no. Si alguna dirección tiene acceso, podemos ir hacia adelante o está bloqueada. Y como pueden ver, ya estaba jugando con esto, y esta es una variable de mapa que creé. Empecemos desde el principio aualmente. Digamos que, por ejemplo, no es un mapa. Digamos que es una sola variable, y va a ser del tipo direcciones. Cree una nueva variable de las direcciones de tipo, y luego seleccione la variable de mapa, el contenedor de mapa. Y la segunda parte de esto sería un Bolan. Dirección encendido apagado. Esto es lo que creamos aquí. Voy a llamar a esta variable direcciones. Ahora, voy a necesitar otra variable, que de esta vez volvería a ser un mapa, y voy a tener ambos lados a e d. Voy a nombrar esto opuesto. Voy a compilar y guardar. Y para estas dos variables, necesito establecer algunos valores predeterminados. Entonces voy a ir primero a direcciones. Voy a añadir uno. Voy a decir que esto es oeste. Voy a agregar otro, decir que esto es sur, agregar otro, decir que esto es este, y voy a agregar otro que va a estar al norte. Voy a dejar el En parte, la segunda clave como als. Ahora bien, ¿por qué no presioné siempre agregué un add four? Y entonces porque si uno de ellos es norte y el valor por defecto es norte, no puedo agregar otro. Como puede ver, dice que no se puede agregar una nueva clave porque ya existe. Ahora, voy a hacer esto por direcciones opuestas también. Y esto sería sur, enfrente es norte. Esto sería oriente, así que frente es poniente. Esto sería poniente, así que enfrente está el este. Y esto sería el norte, que enfrente es el sur. Voy a compilar y guardar. En realidad usemos primero las indicaciones. Vamos a nuestra función de flechas Tal. Ahora, se creó como un evento donde lo quería como una función. Entonces voy a borrar esto. Voy a eliminar esto e ir a queso el sistema un poco porque no me va a permitir que funcione fácilmente. Lo que voy a hacer para hacerlo pasado es que solo voy a agregar la pila de parámetros, volver a nuestro plano Ocho flechas totales de función. Añádele algo. Vamos a esto. Agreguemos el Esto está bien. Esto, compilar y guardar. Vuelve aquí, voy a borrar la salida y compilar y guardar. Y ahora lo tengo como función. Ahora, para nuestra función flechas totales. Vamos a obtener las indicaciones del mapa. Y cuando estamos manipulando información del mapa, realidad no podemos obtener como una matriz Tenemos que recurrir a array, una de las dos claves. Voy a conseguir ese. En realidad son claves y valores. No son dos llaves. Es e y los valores de De todos modos, voy a conseguir claves y voy a o a cada bucle de las claves. Te explicamos algunas cosas sobre qué bucles antes, ahora va a ser muy fácil. Voy a conseguir dirección otra vez, y voy a encontrar un valor. Encontrar un valor basado en una clave es posible. Lo voy a hacer es conectar esto aquí, el elemento array desde el bucle fore, y estoy encontrando la clave desde las direcciones. Y en realidad voy a sacar todas mis flechas. Uno a o Lo que necesitamos es un let basado en las indicaciones. Entonces voy a conectar la flecha norte con el norte. Voy a conectar la flecha Sur con Sur, para conectar este este, oeste a oeste. De esta matriz que está seleccionando rayo basado, basado en esta selección basado en las direcciones. Voy a e visibilidad, y también voy a propagar a los niños Y la visibilidad que se establecerá se definirá en base al resultado del hallazgo. Ahora, tiene dos pines opcionales. Uno de ellos es si encontró el artículo porque hay un caso de ellos solicitando algo que no está dentro de las direcciones hacia arriba. Y el otro es el valor de los datos. Voy a conectar esto a la visibilidad, y voy a conectar esto aquí. Base esto aquí e incompleto. Voy a establecer terminado. Devolver nota que completamos la función. Ahora, voy a compilar y guardar. Y vamos a probar esto, por ejemplo. Pongamos las flechas Tg aquí mismo. Compilando decir Cuando presiono play, no se debe mostrar ninguna flecha porque las tenemos de manera invisible Nosotros los tenemos que todo está bloqueado. Pero si presiono, digamos que Norte y Sur están abiertos, va a estar funcionando. Sí, está funcionando. Oh, creo que esto es suficiente para éste. Te voy a ver en la próxima. Adiós. 16. Búsqueda de salidas disponibles: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Re lensing five Procesal Dungeon action Un curso de creación de Pus En la lección anterior, hablamos un poco sobre las interfaces de planos, y también creamos algunas variables, la variable de dirección, que contiene toda la información para Occidente, Sur Este y Norte y la visibilidad acordada de las flechas en forma booleana Y también creamos el mapa de direcciones opuestas, que tenemos las direcciones y lo contrario de ellas. También creamos la función de flechas totales, que estamos tomando las indicaciones y mirando a través de cada una de ellas y encontrando la flecha adecuada de acuerdo para establecer la visibilidad dentro o fuera. Ahora, sigamos con la búsqueda de salida. Un poco de vapor reventó aquí. No importa. Entonces, sigamos con la búsqueda de nuestra salida. Lo que primero tenemos que hacer es promover la dirección del ingreso a una variable en caso de que la necesitemos después. De hecho podemos usarlo libremente en esta función, sólo porque aquí tenemos este ingreso. Déjame mostrarte una genial y real Ahora, déjame mostrarte una funcionalidad genial y real. Si renombro esto, para ser más claros, Destinos de ingresos, pongamos aquí una S. Mientras estoy dentro de la función, puedo llamar a cualquier entrada que esté llegando a esta función, simplemente escribiendo la e, dirección de ingresos. Claramente, esto es diferente en una categoría diferente. En realidad no está en ninguna categoría. Significa que está dentro de esta función. Puedo llamarlo como una variable, siempre y cuando esté en esta función. Si salgo de esta función a la gráfica y pego esta variable, vas a ver que no existe. Ahora cuando una variable no existe, podemos hacer clic derecho y crear una variable para hacerla, y mantendrá los datos y el tipo de datos y estas cosas. Ahora, eliminemos esto. No lo vamos a necesitar. Volvamos a nuestra función. Oh, conecta esto aquí. Tenemos direcciones de ingresos. Nuestro primer paso debe ser que nuestro mapa de direcciones se actualice, que esta dirección sea en realidad una dirección móvil. Es libre de moverse desde un lado. No bloquea. Entonces debemos encender las flechas. Pero lo que vamos a hacer es conseguir la dirección opuesta. Vamos a encontrar el valor de la dirección del ingreso, que solo puedo arrastrar de aquí, no importa, y luego voy a agregar al mapa. Y por qué voy a sumar, como explicamos, porque estamos agregando un valor que ya existe, simplemente cambia el valor. No agrega uno nuevo. Entonces voy a conectar esto aquí y establecer el valor verdadero y conectar la miseria Ahora bien, el siguiente paso que debemos hacer es averiguar cuál de estas direcciones es libre para crear una salida. Lo que vamos a hacer es en realidad duplicar direcciones. Todo este sale. Voy a compilar, y como esto es un duplicado, ya tiene nuestros valores. Ahora bien, lo que voy a hacer es quitar las direcciones de ingresos, que en realidad deberían ser las llamadas a dirección de ingresos. Ese muchos es solo uno. Aquí lo vivo. Ahora, ya que quitamos un valor de aquí, la dirección del ingreso, el resto de los valores deberían ser libres para continuar nuestro edificio Me, como encontrar la salida que queremos. Entonces voy a conseguir las llaves. Ahora bien, esto serían solo las respuestas posibles, y voy a conseguir un ítem aleatorio. Voy a promover esto a una variable, y voy a llamarla posible salida. Este año este año. Ahora, tenemos una posible salida. Ya que lo decidimos y clasificamos a una variable, deberíamos retirarlo nuevamente de las posibles salidas. Voy a conectar esto aquí. Voy a conectar esto aquí, y se va a quitar. Por lo que ahora esto se quedará con dos posibles salidas. Lo siguiente que debemos hacer es agregar en las direcciones como y diciendo add, me refiero a actualizar el valor de nuestra posible salida. Y esto, lo convertirá en verdad. Entonces ahora mismo, compilar y guardar, el siguiente paso sería comerse con los ojos las flechas. Ya que actualizamos los valores en las direcciones, la función La que creamos a flechas Togal, actualizaremos nuestras flechas Al final, llevemos el nodo de salida, conectado aquí y conectemos la posible salida a la salida de salida. En realidad podríamos nombrar esta salida, no posible salida. Compilar y guardar. Ahora, vayamos a pintar y a explicar qué va a hacer realmente este código. ¿Cuál es la teoría detrás de esto? Ahora mismo, tenemos una caja, nuestra caja de azulejos, y decidimos tener una salida, digamos al azar desde este lado, y como esta es la primera caja, esta sería nuestra introducción Bloque de introducción. Ahora, estamos encontrando una salida aleatoria en el primer azulejo del teléfono. La segunda pieza que vamos a construir. Pongámoslo en amarillo, en realidad. La segunda pieza que vamos a construir, será automáticamente automáticamente. Vamos a ejecutar la función, por supuesto, para hacer eso. K que este lugar es su entrada y decidirá aleatoriamente un lado para continuar. Tomemos, por ejemplo, que sigue subiendo. La siguiente pieza, también sabremos que aquí hay otra salida, y digamos que continúa así. Ahora estás viendo a dónde voy con esto. En realidad va a terminar yendo aquí, y no va a poder continuar. La forma en que lo estamos construyendo es como una serpiente como un gusano. Crea una salida más. Lo que haremos es crear un algoritmo como un algoritmo de track buck para aquellos que estén un poco más avanzados. ¿Qué es un algoritmo de seguimiento de dólar? Significa que a corto plazo, coloca algo, coloca algo hasta que las reglas dicen que no se puede colocar algo. No hay más colocación en base a esto. Entonces vuelve atrás y comprueba si puede comprar otra manera de ir. Ahora bien, esta es una explicación muy aproximada. Esto es lo que vamos a hacer. Pero para nosotros, exactamente, queremos ir un paso atrás. Al igual que un algoritmo de retroceso más tradicional solo va a ir de aquí Encontró un lugar que no puede continuar, así que regresa. ¿Puedes encontrar algún otro lugar para continuar? De hecho, elegiremos un bloque aleatorio para hacerlo creando aleatoriamente mazmorras que ramifiquen la mazmorra en diferentes lugares Fuera, nos estamos adelantando demasiado. Creo que este es un buen punto de parada para este. La siguiente lección, podemos comenzar construyendo esto y explicando algunas cosas más. Adiós. Nos vemos en la siguiente. 17. Algoritmo para la forma de laberinto base: Hola, y bienvenidos al taller de diseño de juegos bajo motor cinco procedimientos Dungeon acción RPG curso de creación Anteriormente, creamos la función find exit, que cos la dirección del ingreso a nuestra variable, y hace algún cálculo y agrega elimina direcciones de nuestra variable de dirección. Actualiza las estadísticas, qué flechas así que sean visibles, y desde nuestras posibles direcciones, estamos quitando la dirección de la que venimos. Y luego estamos almacenando una dirección aleatoria de las que quedan, y estamos quitando eso también y también cambiando las flechas, las direcciones, variables para hacer visibles las flechas. Y luego sumamos flechas con la función que creamos antes. Ahora, también explicamos un poco sobre nuestro algoritmo que va a ser un algoritmo de retroceso Para aquellos que necesitan una explicación más sobre elalgoritmo y lo que es Básicamente, es una técnica para resolver problemas de manera incremental probando soluciones parciales y luego abandonándolas si no son adecuadas Para nuestro ejemplo, intentará crear para colocar otra baldosa, si no puede colocar otra baldosa, retrocederá a una posición anterior, como dijimos a una posición previa aleatoria e intentará crear más mosaicos a partir de ahí Ahora, comencemos a crear algoritmo. Vamos a ir a Even graph en el generador de laberinto, no a la baldosa. Nosotros, en el generador BPM, vamos a ir a VNGraf. Vamos a crear un evento personalizado. Llamemos a este campo de evento personalizado. Ahora bien, la primera pregunta que debemos hacer es con una rama, ¿hemos terminado son nuestras fichas actuales con iguales a nuestras fichas mac? Voy a traer esto hasta aquí, y voy a conectar esto. Se hace la primera pregunta. Si es cierto, hemos terminado de construir la primera parte de nuestro. Si no, que es la parte más jugosa, deberíamos empezar a construir. Ahora, Nuestra siguiente acción será aumentar en uno los mosaicos actuales. Voy a pegar esto aquí, voy a hacer un plus uno, y voy a poner los mosaicos actuales. Yo lo estamos incrementando en uno, también podríamos agregar plus plus, que es incremento en, que aumenta en uno Pero esto también está bien. Para la siguiente parte, viene la parte más difícil porque aquí viene básicamente una pregunta múltiple. Y para ello, necesitamos una función. Qué va a hacer esta función. El primer paso de nuestra pregunta será encontrar no la cruz adyacente, sino la cruz adyacente que estén vacías. Vamos a crear otra función, y la llamaremos base vacía. La ortografía correctamente, quizá. ¿Quién sabe? No. Lo que vamos a hacer es que vamos a obtener nuestras coordenadas actuales, y también obtendremos la función que creamos la cruz de hallazgo adyacente. Y de esta lista que hemos explicado, estamos obteniendo todo lo adyacente a nuestras coordenadas. Vamos a para bucle, para cada bucle. R y vamos a hacer algunas pruebas. La primera prueba que debemos hacer es, ¿estas coordenadas ya pertenecen al calabozo Si ya pertenece, significa que tiene un azulejo, así que no deberíamos b ahí. Voy a conseguir nuestro mapa de mazmorras, y voy a conseguir nuestras llaves, y voy a preguntar si las llaves contienen algún artículo Y el ítem sería el elemento array de los vecinos adyacentes. Oh, esta es nuestra primera pregunta. Pongamos una rama. Conectemos esto aquí. Ahora bien, si esto es cierto, deberíamos continuar. Y la siguiente pregunta sería, ¿pertenece a las coordenadas de entrada forzada? Como por ejemplo, el bloque de intro o para los siguientes niveles, el bloque elevador del anterior Me. Oh, veamos si estas coordenadas también están siendo contenidas en una copia pega esto en la lista de fuerza vacía. Ahora, cuando tenemos una rama y tenemos dos cosas que queremos que sean verdaderas para continuar de lo verdadero. Tenemos la variable. En realidad no los dos. Lo cambiar esta frase a si tenemos una rama y queremos comprobar si alguna de las condiciones es verdadera, podemos usar esta o nodos. O Boulan lo que significa que si esto es cierto, o esto es cierto a esto Esto quiere decir que si alguna de nuestras condiciones es cierta, la rama disparará de verdad. Lo que queremos es que ninguna de las condiciones sea verdad, así que dispara de falso. Ahora, necesitamos otra condición, y la condición estaría en ¿qué tan grande puedo construir el laberinto? Al igual que, ¿qué significa el max en x e y, puedo ir en el layout Para ello, necesitamos una nueva variable. Vamos a crear una nueva variable a partir de variables plus. Vamos a elegir una variable y establecer su nombre M s y cambiar su tipo a un entero. Se trata de un entero, claro, porque no hay medios bloques. Sólo hay uno, dos, tres, cuatro, cuántos bloques queremos. Y al tener solo una variable, solo podemos crear laberintos no cuadrados porque se generará aleatoriamente Pero si los pasillos máximos están algo cerca de lo que es el tamaño del laberinto, lo que pueden sentir, entonces va a ser squash Si quisiéramos diferenciar entre x e y y crear paralelogramos, entonces necesitaríamos tamaño máximo x tamaño máximo y Ahora, para nosotros, solo necesitamos el tamaño mac. Ahora, para nosotros, solo necesitamos el tamaño mac Vamos a traerlo aquí. Lo que queremos hacer es comparar mayor o moller Dije lo contrario. Si es mayor es ésta, si es más pequeña es ésta. La x y la y, así que necesitamos duplicar esto. Conectado aquí. Oh, si tenemos nuestras coordenadas actuales, que no son nuestras coordenadas actuales en este momento, es este elemento array real, que voy a romper aquí porque es un punto in y yo la x e y se separan. Oh, si mi x es mayor o mi y es mayor que el tamaño may, entonces estamos fuera de límites Pero al mismo tiempo, queremos usar los valores negativos también, por lo que nuestro laberinto se ramifica incluso desde detrás de la estrella. Si empezamos aquí y apenas empezamos a sentirnos en el eje positivo de x e y, este es nuestro espacio de construcción. Pero si empezamos aquí y allá lo negativo también, entonces nuestro tamaño y los triples Lo que vamos a hacer es que vamos a multiplicar esto por menos uno, para que podamos negarlo, y conectaremos estos dos Esto es un desastre. Traamos lo positivo los mayores arriba y los negativos abajo y conectemos esto aquí. Lo que podemos hacer es crear algunas notas de lectura haciendo clic en los propios cables. Esto conecta aquí, así que voy a conectar esto aquí. Voy a traer esto de vuelta y conectar esto aquí. Y hagamos otro aquí, nosotros aquí. Ahora, ¿sabes qué? Sólo vamos a duplicar esto es variable aquí, tal vez conectado aquí. Listos pueden ver mi error. Bien, porque cuando está tan espaguettificado, es difícil darle sentido. X va aquí y y va aquí. Y esto no es necesario. Bien. Ahora es un poco mejor. Ahora bien, lo que voy a hacer es volver a usar la marcha o una o lógica. Voy a conectarme a esto aquí porque si algo de esto es t, entonces volverá verdad. Si todos ellos son falsos, volverá falso, así que estamos dentro del laberinto. Y un bonito truco poco nifty y real también tiene es que puedo llevarme estos Puedo hacer clic derecho, y puedo colapsarlos, función. Voy a hacerlo puro y llamarlo. Tecnología fuera de vocales. No, no creé la salida porque no la habíamos conectado. Pongámoslo en una variable. Llamemos a esto fuera de límites. Mecanografía de rebote. Vamos adentro y conectemos actuar aquí. Compilar y guardar. Volvamos a nuestro get empty adyacente y creamos otro pin en este o y conectarlo aquí. Pasé un poco más allá de esto. Sí, podemos concretar más pines haciendo clic en el pin del anuncio como lo hice aquí. Debí haberlo exed. En fin, continuemos. La lógica es la parte importante. Ahora, tenemos digamos que todo es falso, y todo está de acuerdo a nuestro plan, que es correcto. Y uno de estos adyacentes está completamente vacío. No pertenece ya al laberinto. No es forzado a vaciar, y no está fuera de límites Déjame comprobar muy rápido fuera de los límites, que no pasa nada Si el tamaño ma es mayor que la X. Ahora bien, eso es lo contrario. Si la x es mayor que el laberinto, y si la x es más pequeña, y esto. Eso significa que, por ejemplo, si x es menos diez y el tamaño es menos cinco, es s, y es, está fuera de límite. Esto es correcto. Entonces, si estos son correctos, tenemos las coordenadas, pero no tenemos cuál es, Noreste, Suroeste, ¿dónde están estas coordenadas? También necesitamos esta información. Entonces lo que vamos a hacer es crear una variable temporal si bajamos aquí en la lista de variables. Podemos ver ahora una nueva opción, las variables locales, que son las variables, como se puede ver, obtener vacías adyacentes que pertenecen sólo a esta función. Esto quiere decir que cuando se ejecuta esta función, están obteniendo sus valores predeterminados. No almacena ninguna información sobre ellos. Oh, ya que esta es una función pura, en realidad podemos usarla. Lo que vamos a hacer es que vamos a llamar a esto, primero vamos a convertirlo en un mapa. Y la primera clave la clave serán las direcciones, la rameración La variable, la segunda variable sería el punto de coordenadas. Oh, tengo que traerlo aquí. Digámoslo también. A cationes. Ahora, vamos a nombrarlo. A No hay ubicaciones disponibles. Es el adyacente válido. Bien. Pero tenemos válido adyacente. Y aquí vamos a sumar a esta válida adyacente. Este valor que proviene de la matriz. Vamos a conectarlo aquí. Ahora bien, ¿cómo sabemos si es nororiente sur u oeste? Lo que vamos a hacer es que vamos a usar un nodo select aquí. Y para las opciones, vamos a conectar el índice de matriz. En realidad, esto no funcionó muy bien. A veces no te da las opciones Zake. Hagamos una selección. Así con un comodín, y si lo conecto, todavía no me da las opciones. Entonces, vamos a quesarlo un poco y obtener la última salida de aquí y hacer una selección de aquí. Voy a conectar esto también aquí y luego conectarme aquí, y eliminar esto. Esto no funcionó. Vamos a intentarlo de nuevo. Vamos a traer la exit y de index array, voy a elegir Vamos a conectar esto aquí. Y. Aquí tenemos los valores. Voy a conectar esto aquí primero, y después voy a desconectar esto. Así es como traemos este selector. Increíble. Traemos de la matriz. Hacemos una selección, traemos una variable de nuestras direcciones e. Lo conectamos al selecto, por lo que mostró las opciones en lugar de tenerlas como variables. Podría haber habido una manera más fácil de hacer esto. En fin, ahora, como sabemos nuestro índice corresponde a este índice del rayo, porque este es el que estamos para looping Sabemos que el primero es Índice cero es norte. El primero es el número uno es Sur, número dos es el este y el número tres es el oeste. Entonces podemos hacerlo correspondientemente aquí norte nouth, oriente oeste Ahora bien, lo siguiente que necesitamos es una salida en esta función Voy a seleccionar esto y a partir del completado del bucle de cuatro. Porque si lo agregamos aquí, entonces cada vez que el cuerpo de bucle disparado se higaría completo. En realidad en la primera, quedaría fig completa. Voy a conectar esto aquí, y voy a cambiar la salida a una variable de mapa, en realidad e variables de direcciones que hará un mapa a partir de ella. Y el segundo volvería a estar en el punto. Así podemos conectar nuestro adyacente válido. Llamemos también válidos los valores. Por qué agrego los valores en esto y no aquí en este nombre porque si tienes los mismos nombres, puede confundir el motor y por lo general no te deja, pero en caso de que te lo permita, puede confundir el motor al empaquetar el juego en muchas otras Entonces sí, es mejor tener diferentes nombres para las variables locales para las variables que no son locales en tu blueprint y también para las notas de retorno y todo La creación de nombres de variables es algo mejor hecho con mucha explicación como valores adyacentes válidos. Tal vez esto debería haber sido válido laberinto cruzar valores adyacentes. Más explicaciones sobre los nombres de las variables, mejor. Oh. Ahora mismo, hemos terminado con esta función, punto vacío adyacente, y estamos devolviendo esta lista. También creamos esta función checkout of bones, y creo que es un buen punto de parada. Te voy a ver en la siguiente. Adiós. 18. Lección 3D 17 Desove continuo de mosaicos: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos y motor real cinco procedimientos Dungeon action bs curso de creación En la última lección, dejamos con la creación de nuestro get empty adyacente. De hecho, pasamos por nuestros vecinos. Fundamos a los vecinos cruzados, y los cuatro miramos a través de cada uno de ellos. Comprobamos si pertenecen al mapa de Dungeon, si pertenecen al vacío forzado, o si están fuera de los límites creando esta función it por esta función it Entonces, entonces si no pertenecía a ninguno de estos, lo agregamos a una variable llamada valid adjacent, que es una variable local en esta función, y le dimos este valor con nuestras notas de retorno cuando se completa el bucle for. Sigamos con nuestro laberinto. Algoritmo de construcción. Ahora, vayamos a par graph, y vamos a traer esta pequeña y agradable función que hicimos, que es conseguir vacío adyacente. Pero no lo hicimos puro. Va a hacer clic en compue y ahora es uno puro. Ahora, tenemos esta lista. Lo que queremos hacer con esta lista es verificar si la última salida pertenece a alguna de estas. Entonces, lo que voy a hacer es que voy a encontrar la última salida. Si no encuentro la última salida, entonces necesitamos retroceder, entonces no hay forma posible de continuar porque todos los adyacentes vacíos no corresponden en la salida que queremos El bloque quiere salir de ahí, pero el siguiente bloque en realidad no es válido. No, no vamos a hacer la pista trasera ahora mismo. Lo que vamos a continuar si encontramos la última salida. Voy a poner una sucursal aquí, vamos a conectar esto aquí. Y desde que fundamos nuestra última salida, y existe. Significa que puedo construir un nuevo bloque. Significa que finalmente puedo tener una nueva coordenada. Voy a traer los Cordones actuales y voy a conectarlo para conectar esto aquí. Ahora que tenemos nuestras nuevas coordenadas, necesitamos encontrar la ubicación en la que generaremos el nuevo mosaico Oh, vamos a traer clase de actor propio. Y vamos a seleccionar de nuevo el mosaico de clase, mosaico P, y vamos a dividir la transformación. Ahora, para encontrar la ubicación que necesitábamos, creamos una función para esto, que se llama no fini location Voy a conectar esto aquí. Voy a conectar esto aquí, y por fin podemos tener un nuevo bloque. Ahora, que responden al nuevo bloque. Nuestro número de mosaico no debería ser cero. Nuestro número de azulejo debe ser nuestro arn tiles. Porque ahora mismo, hemos agregado uno y cero más uno es igual a uno, así que este es nuestro primer mosaico con base cero de conteo. Lo siguiente que debemos hacer es sumar esto al dang. Voy a traer el mapa dangon, y voy a agregar colocar esto aquí Y va a traer aquí las coordenadas actuales y el valor de retorno del actor spawn al actor de la mazmorra Además, tenemos que llamar desde aquí a la salida de búsqueda. Sí, me mas coms encuentran salida. Queremos el mensaje uno porque si hubiera seleccionado la salida. Podemos seleccionar esto. Como puedes ver, tiene un objetivo diferente. Probablemente no hubiera funcionado porque este color de aquí significa que lo estás llamando en este plano, incluso si he conectado el objetivo Pero de todos modos, debería ser el plano. El mensaje cuando tiene esta carpeta por aquí, significa que está enviando un mensaje. Ahora, voy a borrar esto, y voy a conectar esto aquí. Y para la dirección entrante, vamos a elegir el último. Salida. Y. Y nuestro valor de salida sería establecer nuestra última salida. También hay que agregar a este actor para que se destruya, así que voy a llevar a los actores a destructor Voy a hacer un add en la matriz y conectar esto aquí. Vamos a mover todo un poco. Aquí, y tal vez hacer los cables un poco menos pagiados. Luce mejor ya. Ahora bien, cuando todas estas funciones han sucedido, lo que debemos hacer es alrededor construido de nuevo. Si hago clic aquí, pueden ver, me lleva al inicio, y esto continuará hasta que se cumpla esta condición o esto o ahora encuentre un problema. Demostremos lo que creamos. Voy a ir a la variable Mi talla y seleccionar un número. Digamos cinco. Hagamos que esta instancia editable y expongamos en Spone, para que podamos configurarla desde el menú principal de este spon Pero actualicemos esto también Vamos a compilar primero. Actualicemos esto también. Y tenemos tamaño de laberinto por aquí. Máximo de mosaicos 20, por supuesto, también necesitamos llamar al evento de compilación después de nuestro evento de primer estilo de generación Entonces vamos a llamar aquí a nuestra compilación y compilación. Vamos a p. vamos a pre inicio, y se molestó. ¿Por qué fue un error? Ahora funcionó. Aquí aquí aquí. ¿Por qué es este callejón sin salida? Tener Ops Aquí de nuevo, este es un callejón sin salida. Vengo de aquí, me estoy quitando esto. Aquí. Algo está pasando con las flechas. Así que vamos a ir al azulejo BP, y vamos a nuestras funciones de interfaz. Probablemente encuentre salida. Comprobemos qué estamos haciendo en la dirección que viene. Estamos encontrando lo contrario. Estamos agregando que de lo contrario estamos viniendo. Lo estamos quitando de la salida de claves de lista. Estamos agregando la salida, y estamos alternando flechas Pasa de dirección de ingresos. Sí. Este es el problema aquí. Verás, estamos quitando la dirección de ingresos. Estamos quitando una manera de que podamos salir. Lo que deberíamos estar quitando es lo contrario de la dirección del ingreso al principio. Entonces si compilamos play ahora Sí, tenemos dos flechas y termina con una flecha Bien, genial, y mantiene esto vacío. También. Tenemos algo que ha empezado a crear laberinto, un laberinto de gusanos, partimos de aquí. Veamos algunas veces más si retrocede. Y vamos a cuántas piezas es. 11. Cómo decimos este máximo. Oh, llegué al final. Por eso. El final. Adivinando. Digamos cinco. Entonces esto es cero, uno, dos, tres o cinco. Este es el final. Por eso se detiene aquí. Todo bien. No, creo que este es un buen punto de parada. En la siguiente lección, vamos a hacer la lógica Bata. Adiós. Nos vemos en la siguiente. 19. Sistema de retroceso personalizado: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos y real de creación de ARPs de Acción de Mazmorra Procesal Engine five creación de ARPs de Acción de Mazmorra Anteriormente, creamos el inicio de nuestro algoritmo, nuestro algoritmo construido. Creamos mucho, en realidad. Creamos la primera pregunta que es que nuestro algoritmo ha llegado a los mosaicos MC. Después agregamos una ficha extra, una extra al mostrador de las baldosas. Hacemos algunas preguntas, por ejemplo, si nuestros adyacentes vacíos a nuestro alrededor son válidos, y encontramos la ubicación de nuestras nuevas coordenadas, si son válidas, y generamos el azulejo Agregamos a la lista de destruir, agregamos la lista de la mazmorra, encontramos una nueva salida, y seguimos construyendo Ahora, continuemos con nuestro bucle de bactra. Oh. Ahora, tenemos que volver a hacer algunas preguntas. Entonces, vamos a abrir pintar y explicar esta parte de nuestro algoritmo lavid con más detalle Ahora, digamos que tenemos nuestro calabozo que se está creando Déjame copiar y pegar esto. En algún momento, no puede crear más. Se ha intentado ir, y ya no hay espacio para seguir adelante con las reglas que tenemos hasta ahora. Entonces, ¿qué hacemos? Vamos a hacer una pregunta muy sencilla. Vamos a decir el bloque aleatorio choose 11 de los que hemos creado e intentar ver si hay una salida que sea válida. Pero también, vamos a estar haciendo una pregunta más que si hemos visitado una cuadra, y seguimos construyendo a partir de esta cuadra, bla bla bla a Roa, es edificio continuo, y encuentra al final otra vez No queremos volver nunca a esta cuadra. Entonces crearemos otra lista que pondremos los bloques que hemos visitado. Entonces crearemos otra lista a partir de los bloques que estamos visitando, para que nunca más los visitemos. La razón es pero desde mi perspectiva, crea una mazmorra mejor, una mazmorra más ramificadora de lo que lo haría sin ella En fin, esta es nuestra regla. Vamos a implementarlo. Ahora, para ello, necesitamos una nueva función. Ahora, vamos a crear otra función, y llamemos a esto. Trate de doler camión. Lo primero que necesitaremos es duplicar nuestro mapa de mazmorras Voy a llamar a ese duplicado z. Creo que está bien. Voy a traer esto aquí y voy a traer nuestro mapa de mazmorras también Ahora, del mapa de mazmorras, voy a seleccionar las llaves Y voy a conseguir la longitud, en realidad. Puedo obtener un elemento aleatorio de la matriz directamente, y voy a promover una variable local, el entero, el índice de salida, no el punto final. Y voy a nombrar esta ubicación aleatoria. Voy a conectar esto aquí. Comprobemos si esta ubicación aleatoria está dentro de nuestro visitado en realidad tengo esto aquí. Ubicaciones. Voy a revisar las dinas. Y voy a necesitar en la llave para encontrar voy a necesitar sólo voy a conseguir. Hay una referencia, necesito una copia. Voy a conseguir esta ubicación aleatoria. ¿Por qué lo hago de esta manera? Voy a explicar en un segundo. La forma en que lo estoy haciendo de esta manera es porque quiero explicar que si elegí, si hubiera conectado esto aquí, iba a conseguir un nuevo azar. Si la guardo en una variable, entonces estoy obteniendo esta variable que guardé. Pero si estoy recibiendo de este nodo por aquí, entonces voy a obtener un aleatorio un nuevo aleatorio cada vez que algo está solicitando algo del azar. Lo mismo hubiera pasado si tuviera un int aleatorio. Si estuviera solicitando dos veces, entonces obtendría dos números diferentes. Y todos los nodos aleatorios, como, por ejemplo, un aleatorio en rango, funcionan así. Darán un valor diferente todo lo que esté conectado a ellos. Vamos a continuar. Ahora bien, si esto es cierto, entonces queremos terminar con esta función por aquí. Entonces, vamos a tener una salida, y será del tipo lean, y vamos a nombrarlo. No. Voy a conectar esto aquí, y voy a colocar la salida. Ahora bien, porque estoy terminando la función aquí, no quiere decir que si tengo cosas aquí, no se ejecutarán si esto se ejecuta falso. Puedo tener muchos nodos de retorno dentro una función en función de donde quiero que termine la función. Entonces. Aunque si es falso, voy a ir a la lista de Nangon, nuestro mapa de Dungeon Voy a traer esto aquí. Voy a presionar d. Voy a conectar esto aquí. En realidad, de este captador, sólo voy a poner esto aquí También, necesitamos viento podemos conseguir el objeto también. Y error instantáneo. No quiero el mapa de mazmorras aquí. Quiero la ubicación visitada aquí. Estoy encontrando desde el mapa dangon y estoy agregando a la ubicación visitada Oh. Ahora, he agregado a la ubicación visitada, la nueva ubicación que estamos probando si puede tener una salida. Sea incluso si esta ubicación no tiene salida, todavía queremos agregarla a las ubicaciones visitadas. Ahora bien, ¿cómo vamos a comprobar si hay una salida a ésta? Vamos a necesitar abrir nuestros peines I maze y agregar una nueva función y nombrar a esta función nueva salida Voy a compilar y guardar los bi coms, mas coms, e ir a nuestras llantas Ahora, esta nueva función aparece aquí. Sin embargo, esta nueva función necesita una salida. Nosotros, agreguemos una salida. No sería salida. Y necesita otra salida de dirección de salida. Vamos a llamarlo. Va a ser a partir de las direcciones de tipo, las direcciones de enumeración, y ahora podemos compilar y guardar realmente y volver tile Esta es una función. Ya no es un evento. Vamos a abrirlo, y vamos a crear algunas cosas aquí. En serio, ¿sabes qué? Terminemos primero esta parte. Y entonces vamos a hacer eso. Entonces, voy a llamar a la nueva salida como mensaje porque estamos mandando un mensaje. Es una interfaz de blueprint. Y si es verdad, no quiero una N. Quiero una sucursal. Si esto vuelve verdadero, entonces significa que no tenemos salida, entonces no regresamos ninguna salida. Copiamos y pegamos el nodo de retorno. Ahora bien, si esto es falso, vamos a estar estableciendo la última salida a la dirección de salida, y vamos a estar estableciendo nuestras coordenadas actuales A W es la ordenanza de aquí. Vamos a leer un poco a spaghetti pi aquí, va aquí. Aquí. Un poco mejor. Yo quiero hacer esto. Bien. T arriba. Siempre es bueno amarrarlo un poco. No, vamos a devolver esto con agujeros. Hemos encontrado una salida. Podemos seguir construyendo. Creo que deberíamos conectar esto aquí. Llamemos a esta función. Mochila, que no será pura, que va a ser una verdadera función. Y vamos a poner una sucursal por aquí. Y tenemos que hacer algunas cosas más. Ahora bien, si iba a colocar, digamos, nada de salida, así que seguimos construyendo con nuestros nuevos datos. Si iba a correr desde build, entonces pasaría por esta comprobación, lo que realmente no importa, pero agregaría un extra a los mosaicos actuales, y no queremos que esto suceda. Entonces vamos a crear otro evento personalizado. Y vamos a llamarlo continuar construir, y vamos a conectarlo a la rama de aquí que estamos tomando para adyacentes vacíos Vamos a seguir construyendo desde falso. Significa que si ninguna salida es falsa, vamos a seguir construyendo con nuestros nuevos datos que serán pasados aquí. Se comprobará la ordenanza que hemos establecido, y va a funcionar en consecuencia. Ahora, ¿qué pasa si ninguna salida es cierta cuando no tenemos otra salida? Bueno, vamos a hacer una pregunta muy sencilla. Nuestras ubicaciones visitadas y el mapa de mazmorras son de la misma longitud para hacer esto Voy a pedir longitud, lo que nos da el número de entradas en este mapa o array o conjunto? Y si estos dos son iguales, y no hay salida, entonces ya no podemos vencer al laberinto. A vamos a parpadear por el bien de los bugging. Yo no puedo construir. Y así nuestro código no falla, estableceremos nuestros mosaicos principales. Al máximo estilos, y vamos a llamar build. Esto significa que si el laberinto ya no puede construir, establezca nuestro mosaico actual dos estilos máximos y salga esta base de construir la mazmorra Ahora bien, cuando esto no es cuando el mapa de mazmorras no es igual a las ubicaciones visitadas, solo deberíamos correr de nuevo el tri para retroceder Y esto no va a crear un problema porque no será infinito, porque cada vez que estamos corriendo el backtrack y estamos seleccionando un nuevo punto, lo estamos agregando para visitar esas ubicaciones En algún momento, estas dos variables serán las mismas. Básicamente no serán los mismos porque estarán en un orden diferente, sino que estarán conteniendo la misma información. Por lo que saldrá y saldrá de nuestro construido. Creo que esto es suficiente para éste. Continuaremos con el siguiente rellenando el nuevo código de salida. Te veré entonces. Adiós. 20. Finalización de reglas de retroceso: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Rail Engine five Procesal Dungeon Action At Ps curso de creación Anteriormente, creamos nuestras reglas personalizadas para el retroceso. Dijimos que si no podemos encontrar un adyacente entonces vamos a tratar de dar marcha atrás Oh, tenemos las llaves del calabozo, lo que sea que se haya hecho Almacenamos el índice aleatorio de esta matriz que obtenemos de las claves, y verificamos si está visitado en la lista de ubicaciones visitadas. Si está en la lista de lugares visitados, estamos saliendo con caídas Si no es cierto, que no hay salida. Entonces vamos y corremos esto de nuevo para encontrar otro posible. Ahora bien, si no es cierto, entonces no está contenida en las ubicaciones visitadas, entonces estamos agregando esta ubicación a las ubicaciones visitadas. Estamos tratando de encontrar una nueva salida. Si no podemos encontrar una nueva salida, devolvemos false y ejecutamos esto de nuevo. Y si encontramos una nueva salida, almacenamos a las variables, almacenamos las coordenadas, y vamos afuera, y continuamos construyendo a partir de un nuevo evento personalizado. Ahora, cuando estamos tratando de encontrar una nueva salida, estamos comprobando si las ubicaciones visitadas son tantas como hay en la lista de mazmorras Entonces lo siento, usando la longitud de estos dos mapas, y si son iguales, salimos con un mensaje que ya no podemos construir. Configuramos nuestros mosaicos máximos a los mosaicos actuales, y volvemos a ejecutar el constructor y esta vez volverá de ser verdadero. Ahora, salimos de aquí sin llenar la nueva salida en la baldosa BP. Así que vamos a hacer eso. Vamos a abrir nuestra función nueva salida que hemos creado en la interfaz del blueprint, y comencemos a crear algunas reglas La primera regla que deberíamos tener es que llevemos la sucursal. Consigamos las posibles salidas, y vamos a conseguir la longitud. ¿Esta longitud es igual a cero? Como, ¿hay alguna salida posible? Porque si no hay salidas posibles, entonces tal vez deberíamos solo flechas, antes que nada. Por si acaso algunas flechas están equivocadas. Y luego vamos a regresar sin salida. Ahora bien, en caso de que esto no sea cero. Aquí es donde viene la parte interesante. Lo interesante podría ser duro. En fin, vamos a llegar de lo contrario. Vamos a seleccionar uno rondo. Y vamos a fijar la salida. Yo traje salida, la traje de los variabs, sosteniendo t y trayéndola aquí y soltando, lo que consigue un setter Voy a conectar esto. Aquí. Ahora, estamos haciendo lo mismo que con find exit, pero con algunos cambios. Ahora, vamos a agregar direcciones y agregar la dirección de salida. Vamos a agregarlo a t, y lo vamos a quitar de nuevo. Voy a traerlo de nuevo. Voy a arrastrar una mesa desde aquí. Retire la salida de las posibles salidas. La próxima vez, podemos elegir probablemente no habrá la próxima vez porque estamos configurando este estilo para que nunca más se vuelva a visitar a través de nuestras ubicaciones visitadas. Pero de todos modos, no, vamos a flechas feas, he llamado las flechas de Toggle equivocadas en ambas. Pero sí, está bien. Lo más correcto sería hacer éste con el nodo amarillo. Pero, vamos a leer el correctamente. Porque cuando tenemos un nodo amarillo, significa auto. El objetivo es uno mismo y es básicamente, eso es todo. Significa que te estás apuntando a ti mismo. Incluso aquí tiene yo, pero por alguna razón, esto es mejor. Y esto es esto es un pin, en realidad, me he estado refiriendo al pin como un nodo, de todas formas. Estamos hablando de flechas, y luego necesitamos de nuevo el nodo de retorno. Esta vez encontramos una salida. Deshacemos clic en esto, y conectamos salida a salida dirección. Entonces ahora esto vamos a obtener alguna información. Ahora, vamos a tratar de ejecutar esto. Como podemos ver. Bien. De hecho, veamos que sucede. Vayamos a nuestro gráfico de eventos, y pongamos un retraso aquí. Pongamos un retraso de 0.2 segundos. Sí. Eso está bien. Y vayamos a nuestro menú principal. Hagamos esto más grande. Hagamos tamaños de pila. Bien, 200 puede ser un poco grande, pero digamos 100. Veamos tamaño y bastaría, creo, diez por 10100 Y si contamos los negativos, veamos diez Así juega. Ya lo expulso, y podemos sed tratando de construir nuestro laberinto Construyendo una mazmorra, se nota aquí con retroceso, retroceso Cuando no puedes encontrar otro, ves cuando esto da forma esta forma cuadrada o paralela, trata de retroceder. Ahí está. Creo que esto es de las últimas piezas, es 100 Bueno, por lo que puedo decir, lo puse en lo contrario. A lo mejor deberíamos cambiar, a lo mejor deberíamos poner este número hacia este lado. Bien, vamos a esto, vamos a nuestro azulejo. Esto es del norte, debe ir desde el Sur. L et's volver a ejecutarlo. No. Bien. ¿Por qué? Yo sólo lo cambio. Bueno, no importa. Vamos a deshacer. ¿Qué está pasando aquí? Es correcto. Le doy la vuelta a la cámara. Mi mal. Es correcto. Da marcha atrás, crea Vamos a probar y jugar un poco a la prueba Pongamos mil. Pongamos esto a 50. Pongamos este 20.1, así que es un poco más rápido Y rechazar y jugar. Ing fuera. Sí. Crea un nivel, lentamente, pero lo hace. Esto no va a faltar. Queríamos hacer un error un poco. Hagámoslo como queremos poner mil piezas, pero en un laberinto tamaño de cinco. Entonces esto no va a caber. Veamos este ejemplo. Aquí ahora debería decir que en algún momento puso nuestro mensaje de error. Yo no puedo continuar. Construirá una caja humilde, no una caja porque estamos rastreando el dólar Imprimió el mensaje. El laberinto no puede construir más. Cómo abrí esto. Presioné la tecla de mosaico, la que está al lado de una. Entonces, si hago esto, puedo ver los últimos mensajes. Entonces como pueden ver, también puedo ver lo que he estado haciendo pinchando sobre fondo, por ejemplo. Entonces, tenemos Mace no puede sino más. Y tenemos estos pequeños huecos aquí y por aquí porque nuestro seguimiento de espalda para no ir Tiene algunas ubicaciones visitadas, así que elegí no hacer esto. Ahora bien, el problema que podemos ver instantáneamente es que algunos de los, algunos de los bloques, aunque tengan acceso a otros bloques, no tienen la flecha. Y eso es por cómo se construyeron los laberintos. Estamos actualizando algunas flechas, pero algunas no estamos actualizando. Déjenme darles un ejemplo sobre esto. Vamos a pintar en la papelera. Ahora, digamos, por ejemplo, que estamos construyendo herramienta de pintor, estamos construyendo el primer bloque, y estamos consiguiendo esta salida. Ahora estamos construyendo el segundo bloque, y estamos habilitando esto, y estamos tratando de salir de aquí Entonces estamos construyendo este bloque. Estamos habilitando esto y tratamos de salir de aquí. Ahora estamos enmarcando este bloque. Estamos habilitando aquí y tratamos de salir de aquí, lo cual no podemos Entonces esto realmente se pone realmente no, si tiene una flecha porque trató de ir aquí. No puede construir, pero encontró algo, así que hay acceso a él. Ahora, intentemos retroceder desde aquí. Estamos retrocediendo desde aquí, así que estamos habilitando esto. Se trata de ir por este camino. Vaya, así que estamos habilitando esto. Ahora bien, fuimos por aquí, y estamos habilitando esto. Y queremos ir por este camino. Bueno, no podemos. Entonces estamos habilitando esto pero no lo estamos habilitando aquí. Entonces cuando esto sucede muchas veces, como vimos, en el gran laberinto que acabamos de crear. Podemos ver que esto va a pasar mucho, y crea un patrón que algunos de ellos van a ser así, y algunos de ellos serán así, y no van a tener el último porque el último venía de aquí y decía que no pueden continuar o no puso una flecha. Simplemente trató de dar marcha atrás. Entonces, arreglemos esto. Entonces, nuestras flechas en el laberinto son realmente correctas. Pero esto lo haremos en una segunda fase. Nuestra primera fase fue construir un valioso basado en los valores que tenemos, porque 1005 lo hará si los mosaicos máximos no son ajustados, siempre va a crear una cosa cuadrada. Entonces pongamos algo mejor. Pongamos este tres, y pongamos esto en 20. Lo que crea. Revisé de nuevo. Sí, algo así debería ser más de un primer nivel. Tiene una cosa pequeña, y luego ahí continuamos, podemos estar aumentando los inicios de tamaño principal y azulejos. En realidad, dijimos demasiado. Creo que este es un buen punto de parada, y seguiremos con eso en el siguiente. Adiós. 21. Conexión de mosaicos después de la generación de laberintos: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, y motor real cinco Procesal Dungeon acción RPG curso de creación Anteriormente, creamos la función new exit, que estamos encontrando una nueva salida si es posible cuando el generador de laberinto solicitó en el algoritmo Pack track. También demostramos nuestro laberinto en juego. Y nos damos cuenta de un problema con las flechas direccionales. Así que vamos a arreglar esto. Vamos al generador de mayo. Voy a detener la emulación, y voy a crear un nuevo evento átomo Y voy a nombrar este evento decorando, por ejemplo. Bueno, las flechas no son decoración, pero esta sería básicamente nuestra fase dos. Ahora, vamos a necesitar una función para arreglar todas las conexiones que no se conectan que tenga algún sentido. Sí, en realidad vamos a nombrarlo así. Fijar no unos. Voy a poner entre paréntesis, s, visibilidad. Bien, entonces lo que vamos a hacer para lograr esto es que vamos a llevarnos todo el calabozo. Vamos a coger todas las llaves. Y a partir de ahora los procesos, seremos un poco más lentos que uno corriendo de esto. Porque a partir de ahora, vamos a ir, vamos a estar mirando por todo el calabozo y agregando algunas reglas Esta no sería la forma más óptima de hacerlo, y los planos no serían la forma más óptima de hacerlo Excedente plus sería mucho más eficiente para crear cosas como esta. Pero en aras de mantener las reglas separadas, podemos mirar hacia nosotros miramos a través de la mazmorra muchas veces y hacemos acciones específicas Ahora, hay otro problema con tener demasiadas acciones en un bucle. Se trata de cómo para bucle para cada bucle o para recuentos de bucles. Hay un límite máximo que irreal detecta si se trata de un bucle sin fin Si esto va por mucho tiempo, irreal podría estar diciendo que este es un bucle interminable Entonces en realidad no cuenta los índices. Cuenta también, cuenta el índice por supuesto, pero en su mayoría cuenta cuántas acciones están sucediendo dentro del bucle. También hay en la configuración del proyecto si vamos y encontramos bucle infinito. Número máximo de iteraciones de bucle. Como puedes ver, se trata de iteraciones lo que importa. Ahora, podría haber cambiado un poco, pero si te encuentras con un problema de bucles infinitos, aumenta esto a un número mayor. Sí, creo que este es un número máximo. En fin, eso es algo de información extra. No creo que necesitemos cambiar esto. Creo que el número estuvo bien, pero dejémoslo aquí. Si te encuentras con este problema, también hay otra forma en planos de engañar al sistema, poniendo algo de retraso antes de algunas acciones Pero de todos modos, continuemos. Así que vamos a pasar por todas nuestras coordenadas de mazmorras. Y a partir de las coordenadas de esta mazmorra, vamos a verificar si hay vecinos válidos, básicamente, para adyacentes válidos, ¿pertenecen a una mazmorra, la siguiente Y si lo hacen los vecinos, entonces vamos a ayudar a nuestro bloque, habilitar la dirección de la flecha hacia ese lado. Acción simple, pero hay una cosa. No deberíamos estar haciendo esto realmente en el primer azulejo. Pero, ¿por qué no? Hagámoslo en la primera baldosa. También. Entonces, lo que voy a hacer es obtener del elemento L. Si no quería que esto pasara en la primera baldosa, lo siento. Yo no quería que pasara en el primer azulejo, simplemente igualaría esto a cero. Entonces si este es el primer índice, No hagas nada. Esto es básicamente lo que queríamos mostrar. Entonces, si es el primer índice, no hagas nada. Y podemos tener algunas reglas extra si es el índice 24, por ejemplo, no hagas eso. Pero hay otras formas de habilitar reglas como esta más eficientes. Ahora, si comprobamos nuestras funciones, solo tenemos et vacío adyacente. Lo que necesitamos es lo contrario de esto. Entonces, vamos a crear otra función. Vamos a llamarlo obtener F. D un adyacente. No. Piensa que estamos llamando a esta función desde nuestras ordenadas. Se necesita una coordenada porque necesitamos encontrar lo que hay por aquí. Vamos a ir a insumos. Vamos a seleccionar un punto in como tipo de variable. Voy a nombrar estos puntos. No, ¿qué hacemos con estas coordenadas? Bueno, encontramos la cruz colindante. Tenemos este hallazgo socent. Entonces obtenemos nuestra lista de rossócentes. Y luego iteramos a través esta lista con un para cada look Y vamos a comprobar si esto está contenido. En realidad, necesitamos la mazmorra aquí, la variable mazmorra, mapa de mazmorra Y si podemos comprobar si esto contiene este punto final. Si todos los vecinos o algunos de los vecinos están siendo contenidos, en esta lista. Significa que son parte del calabozo. Si no lo son, entonces son un lugar vacío. Entonces, necesitamos un mapa para generar esto. Necesitamos almacenar cada variable en un mapa porque necesitamos la ordenanza, y también necesitamos la dirección que conocemos aquí, es noreste Sur Norte Sureste Oeste. Por lo que nuestro rayo Índice corresponde al Noreste Norte Sureste Oeste. Ahora, voy a crear una variable local. Vamos a llamarlo Das válido. Mundo en serio. Sí, está bien. Va a ser del tipo E. Y va a ser un mapa, y la segunda clave estaría en. Vamos a traer esto aquí y seleccionar Agregar. Vamos a hacerlo nuestro para obtener el nodo select porque si lo consigo elegir aquí, no habilita las opciones. Aquí no me permite habilitar para habilitar las opciones aquí. Entonces voy a traer la última salida. Voy a hacer nuestro en realidad desde el índice y AR voy a los elegidos. Voy a conectar la última salida aquí. El habilita las opciones. Voy a conectar esto aquí, y luego voy a desconectar esto. Solo agrega opciones. Voy a conectar el elemento RA e ir al norte sur oeste. Ahora nuestra lista se está llenando correctamente. Cuando terminemos, necesitamos un nodo de salida para dar nuestros resultados y hacer esto realmente. Así que vamos a crear una salida del mismo tipo que válida adyacente. En realidad, creo que sólo puedo hacer esto. Salida. Si arrastre y suelte algo aquí, aunque arrastre y suelte aros Si arrastro y suelto este, crearía un nodo válido para mí. Esto, no lo necesito. Una salida Un pin de salida para mí. Conecta esto aquí. Compilar y guardar. Y volvamos a nuestra solución no hay conexiones de conexión son visibilidad. Voy a traer esta función por aquí, se llena adyacente. Voy a conectar esto aquí. Y a partir de aquí, voy a conseguir las llaves. Tengo una matriz con noreste sur y oeste que puedo para bucle. Y luego voy a conseguir mi trapeador de mazmorras. Voy a encontrar el elemento array actual. De este actor, voy a sacar Acciones. Y agrega el elemento correspondiente, conecta esto aquí y configúralo a true. Al final de esto, tan solo alternamos flechas, lo que podemos hacer al final o podemos hacerlo aquí. Realmente no importa. Es lo mismo. Pero lo que debemos hacer es alternar flechas. Como mensaje. Porque, como decíamos, esta podría ser una baldosa diferente. Podría ser para nosotros. Ahora tenemos un azulejo BP. Podría ser cualquier actor. Si elegimos tener la variable como actor, no la haremos ahora porque estropeará el laberinto y será t como mensaje. Entonces ahora, vamos a explicar lo que hicimos aquí a los que no lo entendieron es que como estamos consiguiendo su fied adyacente, y estamos pasando por las direcciones, estamos encontrando esa dirección así que esté en. Entonces estamos obteniendo las indicaciones que deberían estar encendidas para el mosaico actual que estamos comprobando, y los estamos habilitando. Les estamos diciendo en compilar y guardar, y veamos si funcionó. En realidad, aún no lo hemos llamado, o no va a funcionar. Vayamos a la primera construcción y llamemos a nuestras decoraciones, función de decoración, evento, no función, y todas nuestras conexiones ik no conectadas. Ahora, si juego, tan lejos. Podemos ver que creó estas cruces. Bueno, tenemos algunos callejones sin salida que se suponía que no fueran callejones sin salida, pero arreglaremos esto donde se suponía que eran callejones sin salida. Eso es lo que se referían. Como, por ejemplo, aquí, porque cuando estamos tratando de colocar algo, estamos habilitando la flecha. Esta es la razón por la que esto sucede. Ha ocurrido en todas partes mot. Así que sí. Pero el primer problema está arreglado. El primer problema es que las cosas que se están conectando a algo siempre deben tener una flecha. Ahora, antes de continuar y arreglar esta parte que las flechas están apuntando hacia ninguna parte cuando estaba comprobando si podía jugar algo. Vamos a crear la barra de carga. Vamos a progresarlo y ver cómo se ve. Entonces vamos a ir a cargar. Vamos a elegir a los Cvas y volverlos a visitarlo. Compile y guarde, y vayamos a nuestro generador de laberinto y agreguemos nuestra carga. Tenemos nuestro porcentaje establecido y nuestra función de carga de culk, función Vamos a copiar y pegar este código aquí. Vamos a venir aquí, y vamos a colocarlo aquí mismo. Ahora, solo colocarlo no hace nada si no lo estamos conectando. Entonces vamos a conectarlo. Esto se puede acercar un poco y en realidad vamos a comentar algunas cosas todo este pas. En campo, deletreaba el laberinto. Nosotros por archivos. Pilas. Enorme comentario. No tiene ningún sentido. Puedes poner el comentario que quieras. Esta es la forma en que me ayuda. Los comentarios son personales. Esto es lo que yo lo entendería mejor. Vamos a continuar. Pongamos a empezar a jugar. Eso es suficiente. Compilemos y guardemos, y juguemos. Y podemos ver nuestra carga pero siendo llenados en dos 40% cuando se hacen las baldosas. Vamos a parar. Volvamos a cargar. Vamos a poner esta guarida invisible en realidad, compilemos y guardemos, y sigamos arreglando nuestros callejones sin salida. Entonces, lo que necesitamos va a ser una función que la llamaremos vientos callejones sin salida, tal vez. Arreglar salidas falsas. Sí, arregla salidas falsas. Así que vamos a crear una función. Llamémoslo arreglar salidas falsas. Y entrémoslo. A, vamos a necesitar Primero que todo, vamos a explicar lo que vamos a hacer. De hecho vamos a hacer lo mismo que hicimos aquí. Así que vamos. Todo esto. Como aquí. Pero en lugar de cordones, usaremos el mapa de mazmorras Y vamos a conseguir las llaves. Llaves. Vamos a conectarlo aquí, así que vamos a iterar a todo el mapa Copié el Sí, copié la función equivocada. Suprimir esto, eliminar esto. Copié get field adyacente, pero queríamos las conexiones fijas que no conectaban. Entonces voy a copiar esto, voy a ir a arreglar las salidas de fas. Vamos a iterar a través todo el estiércol y en lugar de obtener campo adyacente, simplemente nos vamos a quedar vacíos Y aquí aún no tenemos coordenadas. Entonces lo que realmente hacemos es que vamos a cambiar esto conectado aquí, y vamos a hacer clic derecho y encontrar referencias, lo que nos llevará a donde lo usamos. Que está aquí en la sección de construcción, y vamos a conectar a los cordones los cables actuales, porque esto es lo que aquí necesitábamos, pero cuando lo usamos, en salidas f fijas, lo necesitamos así. Vamos a conectar esto aquí. Ahora, tenemos las claves del adyacente vacío y en vez de t, vamos a ponerla en false. Si compilo juego, no funcionó. Y la razón es porque nosotros no lo conecté. Así que volvamos a May Gen. Vayamos a VNGraf para decorar y obtener esta VNGraf para decorar y Arreglar salidas falsas. Compilar y guardar, y vamos a p. Es tipo de trabajo en algunos en uno, o puedo ver dos, puede ser más, pero no en todos. Pero este es un tema que resolveremos en el siguiente. Te voy a ver entonces. Adiós. 22. Corrección de errores y planos de decoración: O Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos y re motor cinco procesales Dungeon accional Ps curso de creación Anteriormente, en la última lección, creamos la función de visibilidad de flecha de conexiones fijas no conectadas que toma las teclas de todas las mazmorras, como todas nuestras coordenadas Una vez que el campo adyacente obtiene las claves del campo adyacente y en función de la dirección, estamos habilitando la visibilidad de las flechas. Ahora, también creamos la función get filled adjacent pure, que usamos, que obtenemos los adyacentes, verificamos cuáles de ellos pertenecen a la mazmorra, y así es como se está creando nuestra lista Y ahora nosotros lo último que intentamos hacer es arreglar las salidas pálidas. Entonces, como que descubro w por qué no funcionó. Si vamos a vaciarnos adyacentes, sólo obtiene los que están en los límites de la mazmorra Entonces los que están fuera de la mazmorra, realmente no los consigue. Entonces no podemos verificar si hay callejones sin salida si están en el borde con esta función. Lo que vamos a hacer es que hay muchas soluciones. Podríamos crear un buling aquí para tomar esto en jaque y tal vez no tomarlo en jaque Podríamos crear una nueva función que simplemente no tenga esta comprobación, pero me gusta usar lo que ya tenemos. En fix falls salidas, no vamos a conseguir el vacío adyacente. De hecho volveremos a obtener el campo adyacente. Y desde el campo adyacente, lo que vamos a hacer es básicamente muy diferente a lo que hicimos. Así que en realidad no necesitamos eliminar mucho. Pero lo que necesitamos es el actor de las coordenadas actuales. Entonces vamos a conseguir al actor de las coordenadas actuales, y vamos a obtener sus direcciones. Básicamente, en el azulejo en el que estamos, obtener las indicaciones, y de las direcciones, obtener las llaves. Ahora bien, no necesitamos esto aquí, pero sí necesitamos esto aquí. Desde las llaves, vamos a estar comprobando es una dirección que contiene aquí. ¿La dirección que estamos comprobando tiene un adyacente válido. Si lo hace, todo está bien. Si no es así, entonces apagamos el apagado. Pero esto podría ir falso. Esto podría ir aquí. Conecta esto aquí. Esto es un poco desordenado. Déjenme esperar. ¿Cómo podemos hacer que esto se vea mejor? Podríamos estar promoviendo algunas cosas en variables. Sólo voy a desenredarla un poco. Es un poco más claro de lo que vemos. De cada baldosa, estamos obteniendo las indicaciones. Estamos consiguiendo al actor de sus coordenadas. Estamos encontrando en el mapa de peligro. Estamos obteniendo las indicaciones de ese actor, y desde todas las direcciones, estamos comprobando si cada dirección tiene un adyacente válido. Esto es un poco más pesado, pero está bien. Vamos a compilar y guardar ID conectar las flechas togal, así que necesitamos conectar esto El actor que estamos comprobando. El actor checando está en flechas, guardar cumplimiento, y vamos a comprobar que esta vez funcione. Parece estar funcionando. Ahora, para un chequeo puro, preciso, porque el problema eran los bordes del laberinto. Pongamos 202 mil 2000 e cien, lo que sea. Enorme número, por lo que crea una caja. Entonces revisamos solo los bordes. Tienen flechas, y ahora se han ido. Y ahora tenemos una dirección más clara con las flechas que donde podemos caminar y donde no podemos. Entonces creo que es momento de comenzar a hacer que esto parezca más una mazmorra con muros, con apoyos, con objetivos y Entonces voy a cerrar esto. Vamos a devolver esto a 20. Si se ve bien, creo que se ve bien. Podemos tener algunas habitaciones, podemos tener punto de pata, y punto final Entonces, ¿cómo vamos a hacer esto? Hay muchas formas de otras baldosas, hay formas de desovar habitaciones dentro de Vamos a demostrar algunas formas. Por ahora, lo que vamos a hacer es que vamos a ir a nuestro azulejo P. Cierra estas flechas. Y voy a añadir aquí a un niño actor. U Es actor, que básicamente significa que podemos agregar otro plano dentro de este plano Para nuestros propósitos, se va a utilizar para tener un plano que tenga todas las decoraciones en una sola y habilitamos y deshabilitamos algunas de ellas. En algún momento, hablé de referencias, referencias duras y referencias suaves. Una breve explicación sería que es para administrar dependencias y uso de memoria Una referencia dura es apuntar directamente al activo u objeto, asegurando que siempre se esté cargando en la memoria. Ocupará ese espacio de memoria, por ejemplo, vayamos a nuestro nivel. Vayamos al Mapa de Sis. Podemos ver las dependencias que siempre requiere para funcionar Requiere no he agregado mucho, pero podemos requiere que la arcilla de ladrillo esté siempre en la memoria, requiere que la vegetación, el motor de script esté en memoria basado en los activos que hemos usado, haciendo referencia en nuestros mosaicos Básicamente. Aquí el piso, las paredes, todo lo que es referenciado por el laberinto y mantenido en una variable. Si voy aquí, por ejemplo, y hago de esto una referencia suave al modo de juego. Significa que si ejecuto este generador de laberinto en otro mapa que no tiene este modo de juego. Por supuesto, va a producir algunos errores en los lugares que lo he usado, pero no lo cargará a la memoria. Entonces cada dependencia del modo de juego no se cargará en la memoria porque no estoy llamando al modo de juego. Si tuviera dentro de DOA elenco al modo juego, que en realidad tenemos al principio, eso lo negaría porque el casting lo obligaría a cargarse en la memoria Obligará al plano a cargar el modo de juego de arriba hacia abajo en la memoria porque lo estoy lanzando y lo está sosteniendo Aunque si no tuviera este elenco y esta era una referencia suave, no lo cargaría. Entonces, básicamente, las referencias blandas contienen una referencia al activo u objeto sin cargarlo inmediatamente en la memoria hasta que se llama. Hay mucha optimización de hacerlo. No vamos a estar haciendo eso. Es como dicen, cuando tengas un problema, revisa el perfilador. Esa es siempre la regla, construirla y luego verificar los problemas. Para nosotros, no creo que tengamos ningún problema. Ahora, vamos a necesitar a este niño actor. Y estará sosteniendo todas las referencias de todos los artículos que necesitamos para mantenerlos en un solo lugar y mostrar cómo los utilizamos. Una mejor manera sería solo poseer, por ejemplo, cualquier utilería por encima del que mostraremos también en algunos otros algunos activos especiales Ahora, vamos a crear este actor infantil. Vamos a ir al contenido. Vamos a ir a planos, vamos a hacer clic derecho y seleccionar una clase de blueprint y seleccionar actor Y vamos a nombrar a este BP Decoraciones. Vamos a llamarlo decoraciones BP. Yo presento, voy a guardar todo, y vamos a abrirlo. Ahora, la voy a traer aquí al lado de la baldosa. Voy a cerrar esto porque ya que tenemos una decoración directa será hijo de azulejo. Tenemos un acceso directo el uno del otro. Ahora voy a ir al azulejo BP y seleccionar las decoraciones, decoraciones BP. Vamos a agregar algunas paredes. En primer lugar, voy a agregar algunas mallas estáticas, todas ellas en realidad. Les voy a nombrar muro digamos muro n norte es muro para Sur, luego todo para comer y muro. W para Occidente. Y lo que voy a hacer es ir al guión de construcción y traer aquí cada una de estas variables. Mientras mantengo el control, estoy consiguiendo getters. Sólo un recordatorio. Y voy a hacer ray. Almacénelos como información en una matriz para su uso posterior. Voy a promover esta variable, voy a llamarla muros. Y voy a conectar esto con el guión de construcción. Compilar. Ahora vamos a poner algunos mensajes estáticos a las paredes. Voy a seleccionarlos a todos. Y voy a ir a nuestra lista. Voy a controlar y acercarme un poco, esperar a que desaparezcan. Bien. Nosotros esto es todo. Combinado 67a9 67. Yo creo. Sí, esto lo parece. Vamos a colocarlos espaciándolos. Oh, podemos espaciarlos. Los podemos ver aquí. Si tienes dos pantallas, esto podría ser un poco más fácil para ti. Pero voy a tener esto así . Voy a tener esto. Esto y los voy a estar moviendo los pupilos del lado correcto. Digamos que este es el lado correcto. Voy a fijar los valores después. Realmente es el lado correcto. Este es el muro norte, por lo que sería como 90 grados en algún lugar de aquí. Eso es suficiente de colocación visual. Voy a volver a poner esto aquí atrás aquí arriba y voy a revisar sus coordenadas 0390 Vamos a redondear hasta 400. Estaría bien menos e -400. Cheque Sí. Está bien. Decoraciones, y voy a rotar estas salas de este lado, creo, y la ubicación será lo contrario de esto. Voy a copiar y pegar la ubicación simplemente negar formas opuestas Y voy a la pared. Cien 100. Esto sería de 100 o cien -400. Toma el eje. Algo anda mal. Esto debería ser el st opuesto de 400, 400 fue. Ahora tenemos muros. Ahora. Oh, yo compila y juego. Ahora tenemos bordes, algunas paredes. Creo que este es un buen punto de parada para este. En la siguiente, de co, vamos a despejar el camino. Nos vemos en la siguiente. 23. Colocación de paredes en función de trazados bloqueados: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, Curso Real Engine five Procesal creación de Real Engine five Procesal Dungeon Action RPC Anteriormente, agregamos el azulejo de decoraciones encima de nuestro azulejo blupin como actor infantil Usamos las decoraciones de clase BP para este actor infantil, y creamos primero las decoraciones BP. Agregamos algunos muros, y los agregamos a una matriz en el script de Construcción. Ahora, también depuramos, para ser honestos, la gran función de salida falsa que elegimos para usar otro sistema al que describí al principio, que es justo esta vez obteniendo las direcciones del mosaico del mosaico actual que estamos comprobando, obteniendo de las direcciones si hay un adyacente válido hacia esa dirección, y establecemos la ser falso estar apagado en la visual de las flechas, y nosotros las flechas dobles. Ahora, Y para ser honestos, en realidad podemos mover estas dos f, estas dos funciones por aquí antes de decorar. Y vamos a avanzar también en la barra de carga. Nuestro gusto. Digamos que este es otro 5%, así que iremos al punto cero. La vida. Y luego vamos a decorar. Como puedes ver, a partir de ahora, solo vamos a estimar qué es una acción y cuánto porcentaje de la carga se necesita. Depende de nosotros. Depende de nuestras pruebas. Como dije, hay formas más complicadas de hacerlo y tenerlo como porcentaje, pero necesitaría muchos cálculos y mucho más código. Ahora, volvamos a arreglar nuestras decoraciones, nuestras paredes, para tener un diseño básico para nuestro laberinto. Para ello, iremos a nuestro generador de laberinto B. Vamos a ir a Even graph, iremos a decoraciones ahora que está vacía, y vamos a crear otra función. Llamemos a esto diseño básico. Llamemos a esta función aquí. Vamos a entrar en esta función. Y lo que vamos a hacer es bastante sencillo. Llamaremos a cada actor para que llame a cada propio niño ductor para hacer algo, y eso sería ocultar las paredes en base a ocultar las paredes en base las direcciones que tenemos por aquí. Entonces voy a cambiar el nombre de este conducto hijo por los cors. Y también, lo que voy a hacer es, como dije, ahora que sabemos que este actor va a ser hijo de este actor, podemos tener una referencia directa a él, es decir, que al empezar a jugar, voy a llamar tenedor. Sí. Actor. Y luego voy a echar a azulejo BP. Ahora bien, esto crea una dependencia. Ahora bien, esta decoración necesita tener el azulejo BP como actor padre. Si no lo hace, entonces no va a funcionar. Esto es lo que básicamente son las dependencias. Oh, voy a promover esto a una variable. Sabemos que es como no fallar elenco. Siempre va a tener éxito. Y en realidad, lo que voy a hacer también es crear una dependencia en el azulejo BP del generador de laberinto. Y voy a llamar azul a este generador, y voy a ser del tipo generador. Oh, como lo llamamos maze gen Mazen BP maze gen object reference Ahora bien, por qué esto realmente no importa. Ya que vamos a estar generando un azulejo y va a ser generado a través del generador de laberinto, entonces en la memoria, el casting aquí no crea mucho hussle Hace cast, que es una carga pesada porque está pidiendo la referencia de clase en la clase, pero ya se cargará en la memoria. Porque el azulejo está desove antes de que se generen las decoraciones Ahora, vamos a crear ese generador, hagamos que en realidad sea instancia editi y expongamos en spawn Así que no tenemos que lanzar ni nada. Podemos simplemente ir a nuestro generador de laberinto, vamos a nuestro gráfico de eventos, y vamos a nuestro azulejo de desove, que está aquí Vamos a restablecer esto porque no se actualiza. ¿No compilé? Sí, no compilé. Y en realidad voy a, hay una B. Ahora bien, cuando abrí esto, expuso a un dueño. Podría usar esto como yo y luego aquí en el dueño de BP. Dueño, entonces podría echarle esto al generador y hacerlo así. Pero prefiero la forma de exponer sobre el engendro. B a nuestro voy a borrarlo en auto. Y como puedes ver ahora , decidió actualizar. Entonces me voy a hacer auto en el generador. Y ahora tenemos una referencia directa cuando se trata de patas. Sólo hay una baldosa que no tiene, que sería una primera baldosa de cuchara. Entonces esto necesita ser actualizado también con cell pon first tile, y luego en nuestro bucle construido. Necesitamos actualizar también hijo actor P tile para tener el generador como auto. Ahora, volvamos a nuestras decoraciones, compilemos y guardemos, y creemos otra función, y llamemos a esta función. Digamos esconder muros. Sin esta parte extra. Bien. Ahora, vamos a conseguir nuestro azulejo BP, y vamos a obtener indicaciones, y vamos a obtener las claves de las claves, vamos a bucle for para cada bucle. Entonces vamos a hacer la pregunta sencilla. Vamos a encontrar el valor de P. Y pregunta, ¿ eres visible o no? Ahora, el problema viene cuando tenemos nuestras paredes arregladas, y vamos a pasar por todas ellas. Y ¿cómo sabemos qué muro es cuál? Bien, tenemos el nombre, los tenemos en un orden. Pero, ¿y si los coloqué en el orden equivocado? W Siempre tengo que verificar el orden de cada array, y si corresponden, No. Hay otra manera realmente fácil. Podemos ir a cada pared y poner un remolcador, algo que se llama remolcador Entonces voy a buscar algunos detalles para remolcador y presionar el elemento Por ejemplo, voy a poner para el muro n, el N remolcador. Y para la pared S. voy a poner el tirón S para la pared E. voy a poner el ug y para el muro W, voy a poner el remolcador W. ¿Por qué elegí estos nombres? Porque corresponden a nuestra matriz de cadenas, básicamente a nuestra lo siento, no a la matriz de cadenas a nuestra matriz de enumeración Oh, voy a comprobar si esta es lo que voy a hacer es convertir esta enumeración en cadena básicamente Hay una cadena, y esto nos da el nombre de enumerador a un valor de cadena Y lo que puedo hacer, hay un nodo que se llama componente en. Voy a conectar esto aquí. Lo convertirá automáticamente a nombre. Y seleccionar si el componente tiene el tirón correcto que estamos comprobando, luego establece su visibilidad. En realidad ops en ganancia, no la visibilidad. Porque si hacemos la visibilidad, entonces es un poco menos óptima. Pero lo que tenemos que nuevo oculto sería cierto. Lo que tenemos que hacer también es fijar su colisión también. A ninguna colisión. Porque entonces si no lo hiciéramos, tendríamos muros invisibles bloqueándonos. ¿Qué son las etiquetas? Básicamente, se trata de un sistema para identificar objetos para crear identificador para objetos que es menos pesado, por ejemplo, luego constantemente lanzando dos, obteniendo todos los actores, y comparados con conseguir actores con remolcador o si verificar algo específico tiene una etiqueta Se puede agregar a los componentes. Se puede agregar a los actores también los valores por defecto de clase. Se puede ver que hay una etiqueta que cuenta para la etiqueta de actor. Entonces la pregunta no sería componente tiene etiqueta sería actor tiene etiqueta comparado con lo que estamos comprobando ahora mismo para componentes. Entonces, una pequeña explicación de lo que hicimos de nuevo, estamos obteniendo cada lista de dirección de mosaico que tiene tanto información si están dentro o fuera, estamos iterando a través de la lista Entonces estamos iterando a través de cada muro para cada iteración de la lista Este bucle dentro de un bucle se llama bucle anidado, básicamente Así que para cada componente de este bucle recorre algo más, y estamos comprobando si el componente de la pared tiene la etiqueta de la enumeración que hemos convertido en una cadena Cierto. Correcto aquí. Si tiene la etiqueta, existe. Y si el valor es verdadero, porque si el valor es verdadero, significa que no hay muro, significa que nuestra flecha es visible. Significa que nuestra flecha es visible, estamos apagando la pared. Ahora bien, si vamos a jugar, antes que nada, conectemos esta función. En realidad nos hemos conectado, ¿no? Sí, tenemos. Bien. Esto está vacío. No hemos pasado por todas nuestras mazmorras, así que mazmorra, Esta vez vamos a conseguir los valores, no las llaves Entonces vamos a iterar a través de cada actor, no por las coordenadas Vamos a hacer bucle. Entonces a partir de cuatro bucles, vamos a obtener operaciones, que serán las últimas. Entonces a partir de aquí, nos vamos a esconder. Ahora, tenemos que lanzar. Ahora ves ahora tenemos que echar a, ¿cómo llamamos las decoraciones? PP. Ya pueden ver, ahora no puedo lanzar dos decoraciones BP. No lo encuentro porque decoraciones es un actor infantil. Devuelve un componente actor hijo. Entonces tenemos que conseguir Actor actor niño actor. Por lo que este es un componente y es un componente de actor infantil, que ha lanzado dos decoraciones BP. Como esta es la celda, y esto es lo que hay en la celda. Voy a convertirme a un elenco puro, éste, y voy a esconder murciélagos. Básicamente, eso es todo. Entonces parece una función simple. Es pesado porque tiene toda esta información, necesita del actor, que necesita un niño, que el niño que necesitamos lanzar para conseguir la decoración, y dentro de aquí, también estamos haciendo muchas más cosas. Entonces algo que se ve aquí y óptimo podría no estar al final. Compila y guarda, y juguemos. Y ahora tenemos una zona agradable. Creo que esto es para éste. Te voy a ver a continuación. Adiós. 24. Patrones de corredor predeterminados: Hola, y bienvenidos de nuevo al taller de diseño de juegos, Real Engine five, Procesal Dangon action BZ creation Calls En la última lección, agregamos algunas referencias del generador a la baldosa y la baldosa al actor hijo, que son las decoraciones BP, y creamos la función hide wall, que toma esencialmente la baldosa BP. Obtiene las direcciones de él, y de la dirección que pasa por las llaves, encuentra qué llaves son visibles y oculta las paredes en consecuencia. Y también cierra la colisión. Ahora, cuando creamos el laberinto así, lo que podemos notar instantáneamente, es que es un poco plano. No tiene algunas formas de girar a la derecha y a la izquierda. Es un área abierta, que por supuesto, podríamos decorar con algunas habitaciones y algunos accesorios, y quedaría bien Pero vamos a crear un poco de complejidad de dónde puede ir el jugador y no. Para ello, vamos a actualizar un poco nuestra función existente de dejar de jugar. De conexión fija no conectora. Ahora mismo, lo que estamos haciendo es que estamos consiguiendo cada cuadra y diciendo, tú bloqueas, ¿estás atado a cualquier otro bloque? Y si la respuesta es, sí, entonces establecemos esa visibilidad esa flecha a visible hacia el otro bloque. ¿Y si pudiéramos preguntar si hay otro bloque, y señalo hacia su dirección, crearía una flecha? Por ejemplo, vamos a pintar. R: Cuando nuestros bloques hacen esto de aquí con flechas, que están buscando la habitación contigua, están creando lo contrario, están buscando la habitación contigua, están creando lo contrario, están buscando la habitación contigua. Y nuevamente, crean lo contrario, pero ahora nos quedamos con esto. Pero si modificamos el código en lugar de cuando tienes un bloque, entonces este bloque solo abre esta flecha. Entonces conectamos todas las flechas que son los Laberintos tratando de averiguar si hay otro bloque Por ejemplo, si había un bloque aquí, y luego continuó así y nunca trató de ir por este camino, como digamos que vino de aquí, entonces tenemos otro bloque aquí. Y luego trató de ir por este camino. No trató de ir por aquí, así que aquí no hay flecha. Entonces básicamente, mantenemos nuestro gusano serpiente como patrones de la ma. Entonces para hacer esto, en realidad solo necesitamos agregar algunas cosas aquí. Que es cuando estamos iterando a través de los adyacentes disponibles, lo que haremos es apuntar esa dirección en nuestro bloque original O bloque que estamos probando desde el Dungeon Mac. Mapa. Entonces lo que tenemos que hacer es encontrar ese bloque de los bloques válidos. Voy a enrollar esta base de valor, el valor que estoy comprobando. A partir de eso, voy a usar la mazmorra para encontrar al actor apropiado Ahora, voy a obtener direcciones opuestas porque queremos que aparezca la flecha opuesta. Y voy a enrollar de nuevo de los otros elementos. Esa dirección opuesta. Voy a conectarme aquí. En realidad, en lugar de tenerlo siempre cierto, solo voy a tenerlo igual que el bloque de direcciones. Ahora bien, aclaremos en las líneas aquí porque hay demasiadas. Haz este original, vamos a conectarnos aquí. Tal vez tenga más bajo aquí también. Para aquí, solo necesitamos uno, no necesitamos dos Tal vez podamos variable local, todo esto. Adyacente. Ahora bien, esto no es realmente necesario en las cosas un poquito Aquí. Aquí. Aquí. Ya no necesito línea. Puedo romper. Aquí. Ahora, es un poco mejor. Podría ser mucho mejor si promovemos esta tan variable y conectamos con todo. Pero creo que es legible. Uno, acércate un poco más. Creo que es mucho más legible posible como puede ser ahora mismo. Entonces, veamos si esto funcionó. Compilar. Vamos primero. Ahora podemos ver que tenemos algunos lugares que están bloqueados. Pero la mayoría de los lugares lo son. Tenemos corredores, realmente tenemos, debe haber algún error porque esto debería estar disponible para el acceso Dame un segundo para comprobarlo. Sí, theta es, no estoy alternando las flechas en lo correcto Voy a cambiar las flechas en el primer bloque de comprobación. No voy a cambiar las flechas en el segundo bloque de comprobación. Entonces si conecta esto aquí en realidad. Podría ser arreglado. Tendrás algunas guaridas. Esa razón es acción que estoy comprobando. Oh, sí, estoy sumando a la misma dirección que estoy comprobando. Entonces voy a obtener las indicaciones de aquí. Queremos que la dirección se agregue a las direcciones del bloque opuesto. No el que estamos comprobando actualmente, sino el que está respondiendo a ese cheque. Por lo que este complemento tienen las direcciones del campo adyacente actor. También compilar y V, funciona. Lo único que no funciona es el primer azulejo. Estar en el primer azulejo, no estamos alterando flechas Así que vamos a hacer eso. Vamos a ir a nuestra función en primer azulejo. Y vamos a arrastrarlo aección. Y vamos a conseguir las llaves. Y cada uno. En realidad, podemos no necesitamos pasar por todos ellos. Necesitamos un bucle for. Podemos simplemente agregar éste como compilar y volver a guardar. Y ahora es mucho más viable. Vamos a comprobarlo de nuevo. Sí, tenemos un bonito laberinto y podemos ver que hay algunas paredes que crean una ruta. Ahora. La siguiente parte lógica sería cuando tenemos nuestro laberinto, tenemos algunos hodors, algunos caminos que son en su mayoría se pueden bloquear, algunas partes que no están cerradas, lo siguiente sería agregar algunas reglas a las ocho habitaciones Aunque, ya que queremos que cierta habitación sea una salida y algunas ciertas habitaciones sean, por ejemplo, un cofre que sostiene la llave de salida. Eso sería más sabio poner primero en el laberinto. Ser, por ejemplo, si creo una habitación aquí, entonces limita mucho donde pueda poner las llaves. Ese es yo dije que las llaves en esta caja, entonces de pronto, la habitación dividirá automáticamente estas áreas un poco mejor. Entonces, si me he extendido alrededor de bloques que no son viables para las habitaciones, debería estar versado en lógica Creando todas las habitaciones. No obstante, lo son. Sea que les haga ser capaces de espaciar más afuera. Al tener un mapa que tienes lugares con xs no colocan aquí, limita mucho donde se pueden construir habitaciones. Entonces esta es la forma en que lo vamos a hacer. Y creo que este es un buen punto de parada por ahora. Lo que vamos a hacer en la siguiente es crear el plano del elevador y el plano del cofre, y luego encontrar una manera de engendrarlos Eso es todo por ahora. Adiós. Te canta en la siguiente. 25. Construcción de habitaciones y plano de ascensor: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, actualizamos nuestra función para las conexiones Pi que no conectan en lugar de buscar alrededor de cada bloque una ubicación de campo válida, ubicación que pertenece al Laberinto, para estar comprobando, si ese campo, en realidad verificamos las ubicaciones de campo, pero estamos comprobando ahora que si esa ubicación de campo, nuestro bloque que estamos comprobando tiene una flecha hacia él, deberíamos activar la flecha opuesta a esa ubicación. Entonces básicamente, llevemos pintura y por ejemplo, pintura Neda amarilla Entonces, por ejemplo, si nuestro bloque tuviera una flecha hacia este lado, y digamos una flecha, hacia este lado, y el bloque opuesto tenía una flecha hacia este lado y este lado, Ahora, nuestro bloque que está comprobando de aquí a este bloque. Esta es la comprobación que se está haciendo. Dice, tengo una flecha hacia ti. ¿Tienes una flecha hacia mí? Si no lo haces, entonces crea una flecha. Además, si no tiene una flecha y esta tiene una flecha, en realidad la apaga porque la hemos configurado Hemos agregado, no establecido porque AD es un setter para mapas si el valor existe Entonces, si no tengo una flecha, entonces no tienes una flecha porque estamos obteniendo el hallazgo de nuestras direcciones en el bloque de cheques original. Ahora bien, en este, dijimos que seguiremos creando algunos bloques en todo nuestro laberinto que no podremos tener habitaciones, como tenemos el bloque elevador y el bloque de caja, la caja con el bloque clave. Entonces es más fácil decir en las reglas que cuando estamos, digamos, por ejemplo, queremos que el elevador esté en las últimas cuadras. Entonces digamos que esta es la última caja, pon L aquí, última caja, y queremos de segunda a última, tercera a última. Digamos que queremos que la caja el elevador, perdón, esté en una de estas habitaciones. Ahora bien, si se están creando estas salas. Si estas baldosas, no las habitaciones se están creando en una habitación, entonces nuestro elevador no podría estar en la habitación, y nuestro código se estrellaría. Por lo que sería más fácil para nosotros establecer lugares que en todo el laberinto no creen una habitación porque tenemos reglas al respecto y dejamos el resto del laberinto para poder crear habitaciones siempre que sea posible. Ahora bien, vamos a ver estas cosas en acción con mayor claridad, creo. Oh, lo primero es lo primero. Vamos a crear los planos que usaremos para el elevador Estantes de los planos. Así que vamos a hacer click derecho sobre nuestra carpeta de planos. Vamos a elegir el plano, y vamos a seleccionar Actor Entonces vamos a nombrar a este elevador BP. Entremos al elevador y agreguemos una malla estática. Y va a ser Ahora, esto es solo para mostrar ahora mismo, así que solo pondremos algo lo que sea. Pongamos una mesa. Pongamos esto. Esto es grande. Queremos algo más pequeño. Sí. Esto lo haremos bien por ahora. Esto representará a nuestro elevador. Voy a compilar y guardar, y vamos a crear otro plano AEP est. Gran est. Bien. Vamos a abrirlo, y vamos a una malla estática. Hizo este mes estático. Tenemos un cofre, creo, el primero. Bien. Por ahora, compilar y guardar. Pero tenemos algunas representaciones de ellas cuando estamos haciendo las reglas en el laberinto donde construirlas. Ahora, sigamos con nuestra decoración. Creamos los azulejos básicos. Y como creamos los mosaicos básicos, aumentemos también nuestro bit de barra de carga. Entonces voy a copiar y pegar este conjunto por ciento c sin que el c cargue realmente. Pero voy a eliminarlo después. Sea a partir de ahora, estamos fijando un valor que queremos en la pre oración, y esta vez será 5.0 0.5 porque estábamos desde el 0.45 con el fijo no conectando y las salidas fs fijas Ahora, sé honesto, porque esto va a estar pasando un poco rápido. Aquí podemos poner algunas demoras falsas. Pongamos un retraso de 0.1. Entonces damos la ilusión de que la computadora está pensando. Ahora, vamos a necesitar una nueva función, y vamos a llamar a esta función en elevador. Y luego vamos a entrar en esta función. Ya estamos en Y lo que necesitamos, en primer lugar, es nuestro mapa de mazmorras variables de mazmorras Ahora, vamos a sacar las llaves de esto. Y para engendrar nuestro elevador, vamos a usar el último índice Que es el último azulejo colocado en el laberinto. Ahora, vamos a conseguir esto esta esta copia del último índice, así que tenemos nuestra ordenanza, y vamos a promover estas coordenadas a una variable que vamos a llamar ubicación del elevador en caso de que la necesitemos. Ahora, vamos a conseguir nuestros azulejos especiales, los azulejos que no queremos que se construya nada sobre ellos, y vamos a agregarles esta ubicación de elevador porque no queremos que se construya nada más sobre las baldosas especiales Ahora, lo siguiente que hacemos es crear un perímetro alrededor del elevador. Entonces nada va a desovar alrededor del elevador. Entonces queremos agregar realmente el perímetro de esta baldosa a las baldosas especiales. Y para ello, vamos a necesitar una nueva función. Y esta vez va a ser pura porque sólo va a hacer algunas operaciones matemáticas. Va a ser una especie de copia de nuestras fichas cruzadas. Simplemente obtendrá las fichas de la vista también. Entonces Todas las ocho direcciones alrededor de una baldosa. Entonces vamos a hacer esta función. Vamos a crear una función. Llamémoslo en perímetro de teja única. Correcto. No lo he hecho. Y entremos en esta función. Ya estamos dentro. Hagámoslo ase uno desde el principio. Y para la entrada, claro, vamos a necesitar algún punto t o hacer coordenadas las coordenadas verifican. El nombre es dos puertos. Ahora, vayamos a nuestra cruz de viento de viento adyacente. Entonces vamos a copiar esto. Y volvamos a nuestra función. Vamos a pegar esto, el abajo, y voy a conectar los cables aquí. Ahora, tenemos la cruz. Lo que necesitamos básicamente es más, lo que sería cuestión de organización en estos momentos. Como, por ejemplo, los colocaríamos el Noreste entre el Noreste, el Suroeste entre el Sur y el Oeste, o los mantendríamos igual que antes y los agregaríamos a continuación. A lo mejor voy a hacer eso. Manténgalos igual que antes, y en los nuevos a continuación. Bien. Entonces voy a necesitar o más, y voy a necesitar el más uno de los x y el más uno de los y Entonces voy a necesitar El más uno para el x y el menos uno el y, luego el más uno ops, tomar más uno de la y, y el menos uno de la x, y luego ambos en el menos uno. Aquí, Ahora, realmente no importa cuál es cuál o qué queremos hacer. Pero podemos entenderlo. Ahora mismo no. Vamos y continuemos con esto. Entonces tenemos el elevador de desove. Agregamos la ubicación del elevador, y ahora vamos a usar esta nueva función f single pero no he creado una salida. Entonces, vamos a crear una salida. Vamos a convertirlo en una matriz. Llamemos a esta baldosa perimetral ps. Y conectemos esto aquí. Volvamos al elevador. Ahora, vamos a obtener la ubicación de nuestro elevador. Vamos a para bucle a estas ordenadas, que son el perímetro de esta baldosa Y ahora los vamos a agregar al azulejo especial. Voy a copiar y pegar este código de aquí por aquí. Voy a conectar esto aquí y esto aquí. El único problema con esto sería que si una baldosa del perímetro no estuviera en la mazmorra, se agregaría a baldosas especiales Por lo que los mosaicos especiales contendrían coordenadas que no están en la mazmorra Podríamos haber usado algunas reglas para decir que si los azulejos especiales no están en la mazmorra, hacer algo al respecto, pero también podemos filtrar esto aquí para no tener eso Voy a conseguir el mapa del calabozo. Voy a traerlo aquí. Voy a preguntar si contiene las coordenadas que estamos agregando y si las contiene, voy a usar una rama para agregarlas. Si no, no los agregue. Voy a compilar y guardar. Y por ahora para ver si está funcionando, vamos a engendrar el elevador Entonces, lo vamos a eliminar después porque vamos a estar generando todos nuestros apoyos en cierto punto Entonces, ahora voy a engendrar actor de clas para depurar, y vamos a ver qué va a ser si se genera en la última, va a dividir esta va a dividir Va a obtener la ubicación del elevador. Y vamos a conseguir Dungeon Mp también. Y el mapa de Dungeon, vamos a encontrar al actor en la ubicación del elevador, el azulejo Y a partir de eso, voy a conseguir la ubicación del actor. Voy a conectar esto aquí. Y para la clase, voy a seleccionar. Tor. Y podemos dejarlo así por ahora. No necesitamos eliminarlo. Y voy a promocionar en realidad esto a ribal llamado Elevador Bien. Eso está bien. Compilar y guardar. Juguemos. Y no hay elevador porque no estoy llamando a la función. Oh, llamemos a elevador. En nuestro gráfico de ventilación en el corting. Empecemos y juguemos. Tenemos nuestro elevador, y está en nuestro último azulejo. Entonces estamos partiendo de aquí, y tenemos nuestro elevador aquí que nos llevará a la siguiente mazmorra Creo que esta es una buena parada por ahora. En la siguiente, vamos a spond nuestro pecho. Adiós. 26. Plano de llave de pecho: Hola, y bienvenidos a Taller de Diseño de Juegos n motor real cinco Procesal Dungeon Action P Z Creation Calls Última lección, comenzamos a decorar nuestro laberinto con nuestro elevador. Y en esta, vamos a seguir con nuestro pecho que vamos estar dejando caer la llave para el elevador. Entonces, lo que hicimos en el elevador es que obtuvimos el mapa de mazmorras Obtuvimos las llaves del mapa de mazmorras, y obtuvimos el último índice porque el elevador estará desove en la última ranura Entonces agregamos esa última ranura a la baldosa especial, así que nada más genera ahí, y creamos una función para encontrar el perímetro de una sola baldosa agregando las ocho coordenadas direccionales básicamente Entonces, después, agregamos estas coordenadas a las fichas especiales y filtramos si están contenidas en la mazmorra arriba o no, y luego engendramos el elevador para su depuración Ahora, vamos a crear una nueva función para generar el cofre. Pero vamos a llamar a esta función p est. En realidad no los estamos desovar, así que tal vez el nombre no debería ser elevador de desove Debe ser crear ds elevador, y esto debe ser crear cordones est. Porque como dije, vamos a eliminar el código más tarde del elevador, éste, y vamos a estar generando todos nuestros apoyos en otro lugar del algoritmo Volvamos a crear los núcleos para el cofre. Ahora, vamos a conseguir de nuevo nuestro En realidad, podemos copiar y pegar el código de aquí. Podemos obtener el mapa de Dungeon, las llaves, y en realidad, solo necesitamos eso Entonces voy a pegar esto aquí. Y lo que necesitamos es de nuevo, último índice. Y vamos a dividir este yo dos. Entonces podemos tener la mitad ¿dónde está el medio de nuestro calabozo? También podríamos hacer estilos mac divididos por dos, y sería lo mismo. Pero esta también es una buena manera. Por si acaso queremos actualizar el laberinto más tarde para tener algunas fichas adicionales, por ejemplo, además del cuerpo principal. Digamos, por ejemplo, estamos desovar algunas zonas secretas. Estamos generando algunas cosas extra fuera del algoritmo común que construyó la mazmorra Oh, vamos a conseguir la mitad de ellos. Y vamos a promover esto a una variable local. Llamemos a este índice del tesoro. Y ahora, ¿por qué estoy promocionando estos dos índices del tesoro? Es porque quiero comprobar desde la mitad de las fichas y arriba si hay un lugar para desovar nuestro cofre del tesoro Porque no queremos que nuestro cofre del tesoro se genere en la primera baldosa, por ejemplo, las dos primeras, tres fichas Podría basarse en cómo se ramifica nuestro laberinto, y esta sería una de las omizaciones que ocurre Pero deberíamos intentar que esto suceda un poco menos. Entonces vamos a estar comprobando la mitad de lo anterior del laberinto. Y para ello, vamos a estar usando un wild loop. En realidad, déjame traer pinturas por un segundo. Entonces lo que hicimos es, si tenemos los mosaicos totales, nuestro laberinto, en realidad, vamos a este nuestro mapa de mazmorras Entonces conseguimos el último índice. Este último índice, y lo dividimos por dos. Digamos que son 20, así que ahora hay este diez. Ahora, fijamos este diez para que sea el inicio de nuestro índice de tesoros. Esto es diez. Vamos a hacer un bucle Y que verifique. Si el índice del tesoro es igual a esta mitad, porque no lo tendremos exclusivo. Entonces queremos por encima de la mitad del laberinto, no exactamente en el bloque, digamos, por ejemplo, en el en el índice que representa. Entonces Pero debido a que hay un caso de que esto va a correr sin fin, ya que los loops, wi loops son un poco esto necesita una edad Sí. Pero los wi loops son un poco desagradables, digamos, pueden congelar tu computadora hasta que completen su tarea porque se están ejecutando en la forma en que los estamos ejecutando ahora mismo, está en el hilo principal, así puede congelar completamente tu computadora. Entonces para evitar eso, vamos a crear también intenta variable. Y diremos try por, por ejemplo, 30 veces. En realidad, lo que vamos a hacer es sí, algo así. Estilos Mac divididos por dos básicamente. Si esto está por encima de este número, entonces corte el bucle y. Ahí no encontró ninguna ubicación válida. Así que vamos a establecer acation manualmente, que sería exactamente el medio Así que sí. Eso es de lo que quería hablar de wi loops, que son difíciles, y no deberían usarse realmente en tiempo de ejecución. Pero para nosotros, este tiempo de ejecución no es exactamente tiempo de ejecución porque estamos construyendo sobre la carga. Entonces no lo estamos haciendo en tiempo de ejecución del juego, que FPS son algo importante. Lejos. Hagamos esto. Vamos a traer el wi loop. Esta cosa peligrosa. Y vamos a tenerlo por condición que índice de medida sea igual al último índice dividido por dos. Si esto es cierto, esto va a estar ejecutando el bucle del cuerpo. Cuando este término caiga, saldrá. También hay un tooltip que lo explica un poco mejor que yo. Oh. Desde ahora no tenemos otras condiciones para agregar a las habitaciones especiales. Esto suele ser en la mitad más uno porque vamos a estar incrementando esto en uno. Pero primero, hagamos que nuestro falle sea seguro. Vamos a hacer una nueva variable local, va a ser de entero otra vez. Vamos a nombrar este precio. Primero que nada, aumentemos esto en uno. Y hagamos una pregunta. I R tris igual al último índice dividido por dos, porque cada vez que agrega uno, comienza desde cero. Cuando esto es cierto, significa que esto tiene la mitad de nuestro laberinto. Entonces, si esto es cierto, vamos a establecer el índice del tesoro 20, y esto saldrá de nuestro bucle. Ahora, solo en K, bueno, para nosotros, serán todos los casos. Cuando trice no es igual al 50% del laberinto, obtendremos nuestro índice de tesoros, lo haremos más una t, y vamos a obtener nuestro mapa de Dungeon, y vamos a encontrar al actor y necesitamos al actor y necesitamos las coordenadas Entonces voy a conseguir las llaves aquí. Voy a conseguir una copia y conectar este más uno. Y luego voy a encontrar a ese actor. No, voy a comprobarlo. En realidad, lo siento, no necesito que el actor lo revise. Sólo necesito las coordenadas para verificar. Si están contenidos en las baldosas especiales. Si está contenido en los azulejos especiales, voy a hacer nada. Si no está contenido en las fichas especiales, voy a establecer nuestro índice de tesoro variable del tesoro. Tesoro más uno. Bueno, porque estoy agregando antes de la sucursal, no significa que esté configurando. Por eso lo hice de esta manera para explicar esto. Cuando estoy agregando algo y comprobando los mosaicos especiales, básicamente, si las coordenadas Así que cuando estoy agregando a este índice antes de la rama, no significa que lo esté configurando. Solo estoy sumando para obtener un valor, un número, y estoy comprobando en base a ese número, algo que quiero. Y si lo que quiero no es cierto en este caso, entonces estoy poniendo ese número al índice del tesoro. En fin, continuemos. Ahora bien, este bucle y ha terminado de una forma u otra. Si ha terminado con el índice del tesoro cero, necesitamos saber. Voy a comprobar si el índice del tesoro es cero. Si es cierto, voy a poner el índice del tesoro a la mitad del laberinto. Si no es cierto, realmente no importa porque significa que esta rama ha corrido y ha encontrado un nuevo valor. Lo siguiente que voy a hacer es que voy a conseguir de nuevo las coordenadas. Voy a llegar de aquí. Voy a agregarlo a los mosaicos especiales. Voy a promocionar este ps. El get necesita el índice de edad. De lo contrario va a estar obteniendo el primer índice cero, que sería el bloque de inicio. Voy a promocionar esto a una variable también y llamar a esta ubicación. Ahora para depurar, llevemos nuestro elevador BP del actor telefónico del elevador de ocho cables, volvamos a crear Cordones est En lugar del elevador, voy a elegir el est grande est. En lugar de la ubicación del elevador, sólo voy a poner aquí est ubicación. Voy a eliminar esto, y voy a promover esta tan variable. Sí. Actuar. Para compilar y guardar, y vamos a jugar primero. Y, pero de co me olvidé volver a llamar a esta función. Crea el cofre del núcleo después de crear el elevador del núcleo. Ahora, b milagro, no vuelve a funcionar. Oh, no, lo es. Aquí está. Tenemos el cofre. Está en una esquina. No importa. Está en el número 11 desde 20 M. Y es diez más uno. Entonces el bucle Y funcionó correctamente. Como si partiéramos de cero, tenemos que ir por aquí, conseguir la llave y volver e ir a nuestro elevador. Vamos a crear otro. Por aquí, el elevador está aquí. Sí, ¿por dónde empezamos? Empezamos Aquí. Empezamos aquí. Esto lo podemos ver. No sabemos si las llaves aquí, podríamos pasar por aquí, podríamos ir. Crea algunos escenarios de juego válidos a partir de lo que puedo decir. Estamos empezando por aquí. Podemos ver instantáneamente el elevador. Sí, escenarios válidos por aquí. Bien. Creo que esto es para éste. Te voy a ver en la siguiente. Adiós. 27. Algoritmo de creador de habitaciones: Hola, y bienvenidos a Game Design Workshop, Unreal Engine five Procesal Dungeon action RPG curso de creación Anteriormente, creamos la función de cofre de crear coordenadas en el generador de laberinto. Se utilizó el mapa de Dungeon. Obtuvimos el último índice de las claves. Nos dividimos por dos, y lo almacenamos en una variable que llamamos índice del tesoro. Ahora, creamos un bucle while que comprueba que si bien el índice del tesoro es igual a la mitad del índice, luego agregamos uno a una variable trice que parte de cero, y se nos comprueba si esa variable es igual a la mitad de la longitud Dijimos que si esto es cierto, significa que no podemos encontrar un índice de tesoro válido, así que establecemos el índice del tesoro a cero y salimos del bucle Y, o bien, si no es igual, entonces tratamos de encontrar una opción válida que no esté en las fichas especiales, para nosotros, es más uno ya que no tenemos otras reglas especiales de empate en este momento. Entonces cuando salimos del bucle, si es cero, lo que significa que intentó encontrar uno y no pudo, entonces colocamos las fichas del tesoro exactamente a la mitad del índice, y luego cuando era falso, nosotros Agregamos el nuevo índice del tesoro que cuando es falso, significa que encontró un nuevo índice. Agregamos ese índice a nuestra matriz de mosaicos especiales, y agregamos las coordenadas a la ubicación del cofre. Y después, engendramos para depurar un cofre. Ahora, es el momento de agregar estas llamadas salas a nuestro juego. Así que tenemos más variedad y mecánicas más complejas a nuestro laberinto. Para ello. Primero llevemos pintura y expliquemos algunas cosas que se necesitan para nuestra lógica. Si por ejemplo, tenemos cuatro cuadras, olvidemos los bloques especiales. Digamos que hay cuatro cuadras en nuestro laberinto. Lo primero que haremos es si estamos comprobando desde esta habitación, por ejemplo, lo siento, no desde esta habitación. Empecemos por abajo a la izquierda porque así es como vamos a estar comprobando. Vamos a empezar desde la posibilidad de abajo a la izquierda. Y vamos a estar pidiendo desde este azulejo para comprobar si hay un azulejo aquí o aquí. Entonces ni norte y oriente. ¿Hay un mosaico en esto en estas coordenadas? Si hay un mosaico, entonces estaremos creando una matriz para esto, y estaremos para hacer un bucle En realidad, no es mucho. Puntos. Estaremos creando un bucle cuatro con esta ordenanza. De todos modos, dentro de este bucle for, comprobaremos algunas reglas y de hecho tendremos muchos cuatro bucles para verificar cada regla específicamente. Entonces queremos exagerar todo en un bucle for, va a ser más confuso si tenemos un montón de reglas aquí y ramas y todo, entonces tenerlo separado Este bucle cuatro hace esto, este bucle for hace esto, este bucle fo hace esto, luego tenerlo todo en uno. Y luego cuando esto sea suficiente, lo agregaremos a una nueva variable Ahora bien, ¿por qué digo una nueva variable? Porque esta vez, usaremos una estructura, una variable llamada estructura. ¿Qué es una estructura? Una explicación aproximada sería una lista personalizada de variables de nuestra elección para mantenerlas en una estructura, para mantenerlas en un formato que podamos juntar todo este tipo de variables. Por ejemplo, tenemos un bulion para asgun, por ejemplo, Tenemos un entero para amo. Tenemos un entero para el maná. Tenemos un flotador de por vida. Para nuestro caso, será una estructura hecha de arrays Y eliminar todo esto, una estructura hecha de arrays que serán las coordenadas de las habitaciones. Entonces será una matriz de 0.0, entonces será 0.1, será 11, será 1.0 si y está aquí y aquí. De todas formas, No, usaremos esta estructura para tener todas las posibilidades porque después de que ésta corra por estas tres coordenadas adicionales, entonces ésta correrá para las siguientes coordenadas, y luego ésta correrá para las siguientes coordenadas, y esta correrá para las siguientes coordenadas. Y va a ir uno hasta que sienta que es todo el laberinto, y tenemos una lista con las posibles habitaciones. Ahora, por supuesto, nuestras habitaciones serán de dos en dos. Y para mayor cantidad de habitaciones, si elegimos este sistema, que no es muy óptimo para habitaciones más grandes, sería como si agregáramos coordenadas adicionales como verificaríamos este bloque también, si quisiéramos un dos por tres, o si quisiéramos un tres por tres, verificamos las coordenadas de abajo y abajo. Ahora, hagamos esto. Entonces Algo familiar, primero. Vamos a crear una función. Tenemos un montón de funciones. En algún momento, podemos categorizar nuestras funciones para que sean por ejemplo, podemos poner las puras en la categoría P. Creamos la categoría de aquí, puras Ahora tenemos no dice puro, dice poner. Puro. Bien, para que podamos elegir todas nuestras funciones puras y agregarlas a esta categoría, por ejemplo. Hagámoslo muy rápido. Entonces estamos encontrando todas nuestras funciones que dicen puras y las estamos sumando a la categoría puras. Entonces básicamente, tenemos muchas funciones puras en estos momentos. Estos son nuestros bloques de construcción. Digamos, y esta es nuestra matemática. Ahora, continuemos creando una nueva función, cantemos el símbolo más aquí, y llamemos a esta función encontrar posiblemente habitaciones dos por dos habitaciones. T de dos en dos. Ahora bien, esta será una función un poco pesada ya que va a tener un múltiplo next for loop. Entonces vamos a conseguir las llaves del calabozo. Por cada coordenadas, vamos a verificar si son una habitación válida. Entonces para hacer eso, voy a crear una variable local, y voy a hacerla del tipo b. id habitación válida. Sólo por el bien de ello, hagamos lo contrario. Digamos que la habitación válida está encendida al principio. Entonces el valor predeterminado de aquí, necesitamos compilar para establecer el valor predeterminado. El valor predeterminado de la habitación válida así que sea t Ahora, vamos a traer esto aquí, en realidad, con un setter, y podría simplemente configurarlo aquí para que sea verdad No necesito el valor predeterminado, pero podría ser del predeterminado al comping save Y ahora vamos a crear una nueva variable llamada R. Y va a ser del tipo en punto. Y el punto tipo es porque son coordenadas, y va a ser un array contenedor, y vamos a traerlo aquí, y vamos a limpiarlo. La razón por la que estamos limpiando en realidad y configurando la variable aquí para que sea cierta es porque vamos a estar revisando cada habitación, voy a estar llenando esta información. Queremos que esta parte del bucle cuatro esté restableciendo la información antes de hacer nuestras comprobaciones Porque cuando hacemos nuestras comprobaciones, cuando hacemos el resto de los cuatro bucles, porque aquí va nuestro bucle F, No serán cuatro bucles para cada bucle, eso será para las coordenadas vecinas de este, las grabaciones de vecino de habitación. Necesitamos crear esta función. Va a ser una pura otra vez. Entonces vamos a estar tomando como dijimos en pintar las siguientes coordenadas x a ella, la x más una, la x y más una, y la y más una para crear una habitación de dos en dos habitación. Y luego vamos a que ellos revisen algunas reglas. Ahora, vamos a crear esta función. Pero antes de crearlo, lo que vamos a necesitar básicamente es de nuevo una parte de las coordenadas finas, la fina adyacente. Entonces vayamos al puro , busquemos adyacente. Cruzo adyacente. Y vamos a copiar. Copiemos todo y borramos lo que no necesitemos. Oh, Nueva función. Llamémoslo hacer dos por dos s. Hagámoslo uno puro, y pongámoslo en la categoría puro. Por supuesto, necesitamos una salida sería s. ray endpoint, por supuesto, de nuevo. Ahora, vamos a necesitar una entrada, que serían cables, y esto no necesita ser una matriz. Es solo un punto final de coordenadas ipari. Y peguemos lo que obtuvimos de la otra función. Ahora, no necesitaríamos los menos. Necesitaríamos el más uno. Es x más uno. Es y más uno, y es x e y más uno. Ahora, necesitamos que las habitaciones originales también se coordinen. Entonces, vamos a conectar esto aquí. Vamos a eliminar esto, y vamos a conectar esto también aquí. Tenemos todas las coordenadas de habitación, el más uno en x, el más uno en y, y el más uno en cada una de ellas y las coordenadas originales en una matriz, que sacamos como coordenadas de habitación. Volvamos a nuestra función, busquemos posibles habitaciones, y llevemos aquí esta nueva función pura, que no agregué a la categoría. Ahora, ejecuto la función equivocada. Añado hacer coordenadas de dos por dos habitaciones. Aquí estamos, y vamos a forop a través de ellos. Ahora es el momento de las reglas, las reglas maravillosas Y la primera pregunta, por supuesto, debería ser, ¿ pertenecen a la mazmorra Entonces vamos a conseguir nuestra variable de mazmorra una copia pegada aquí. Y te voy a preguntar si contiene esta información, que es la información de todas las coordenadas de la habitación. Ahora bien, si no contiene, vamos a esa habitación válida falsa porque esta no es una habitación válida. Todas estas coordenadas no pertenecen a una habitación válida, y esto significa que estamos saliendo Si lo son, deberíamos agregarlos a nuestra nueva variable, matriz de sala de variables locales, at y conectemos. Si este disparador cae, solo por un poco de optimización, cambiemos esto para cada bucle a para cada bucle con break. ¿Qué significa esto? Esto significa que podemos rematar este recuento de cuerpos cuando queramos. Si los disparadores, van a poner esto aquí, esto significa que no recorrerá todas las coordenadas. Siempre que encuentre una coordenada que no esté dentro del calabozo, detendrá esta comprobación Entonces, si multiplicamos esto por 1,000 digamos mosaicos, esto realmente tendrá un beneficio sobre cuántas veces se ejecuta nuestra función. Ahora, continuemos con una pregunta sim. Es habitación válida Si es cierto, debemos continuar con la siguiente prueba. Si no es cierto, entonces no deberíamos correr todas las demás razones por las que tenemos que mantener esta habitación. Creo que este es un buen punto de parada para este. Vamos a continuar con las siguientes reglas sobre la siguiente. Adiós. 28. Encontrar posibles habitaciones 2x2: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Re motor Cinco Procedimientos Dungeon Action ApS Creation Courts Anteriormente, creamos nuestras posibles dos por dos habitaciones, las primeras partes de esta función, y también creamos la marca dos por dos cuerdas de habitación, que esencialmente toma las cuerdas que tenemos más uno en la x más una en la y y más una en ambas para crear las dos por dos. Ahora, entonces nos fordop, y comprobamos si pertenecen al mapa de Dungeon Si no lo hacen, salimos de nuestro bucle for anidado. Y si lo hacen, los agregamos a la matriz de habitaciones. Como decíamos, vamos a sumar a una estructura que serán todas las matrices de habitaciones. Sigamos ahora mismo con otra regla. Sigamos con la regla que es hace está contenida en nuestras salas especiales. Oh, vamos a conseguir nuestro arreglo de habitaciones. Porque ahora mismo, los teníamos en hacer de dos en dos. Ahora mismo, si es cierto, lo hemos almacenado en la matriz de habitaciones. Vamos a pasar por alto con break nuevamente desde la verdadera rama de la habitación válida porque si es válida, continuamos, si no es válida, dejamos de fumar, y conectamos la matriz de habitaciones Vamos a traer los azulejos especiales, especiales. Sí, azulejos especiales. Lo siento. Vamos a preguntar si contienen artículo, alguno de los que tenemos. Vamos a poner una rama para lograrlo. Si está contenido, entonces vamos a establecer las caídas drom válidas, y vamos a romper Si no está contenido, entonces todo está bien. No necesitamos hacer nada. Esta habitación es válida. Y entonces vamos a volver a preguntar cuando se complete esto, si es válido porque si hemos frenado, queremos salir y no ir al siguiente paso Ahora, el siguiente paso requiere un paso más que poner algún código. Requiere la habitación ST de la que hablamos, la estructura de las habitaciones. Entonces vayamos al contenido. Vamos a la carpeta de planos. Vamos a hacer clic ligero y crear una nueva carpeta. Y pongámosle un nombre a estas carpetas. E ingrese a esta carpeta y haga clic derecho nuevamente y vaya a planos y seleccione la variable de estructura Ahora, vamos a nombrar a estas habitaciones de subrayado ST. Sí, habitaciones ST. ¿Por qué no? Está bien. Habitaciones ST. Vamos a compilar y guardar, y vamos a estar agregando una variable, que ya tiene. Va a ser del tipo punto de tinta. Y ahora va a ser del tipo array. Llamemos a esta sala artes. Esta es una forma de crear una lista de matrices, básicamente. Tenemos una estructura con la lista de la matriz, y luego creamos una matriz con esa estructura. Entonces, vamos a crear una nueva variable en nuestro blueprint, va a ser del tipo S, rooms, y va a ser una matriz, que ya es es Y vamos a nombrar a este ST mes y. ahora, vamos a necesitar una variable temporal de una estructura, si agregamos un índice aquí, podemos ver que el índice es de en sala cods que tiene sus propios elementos Entonces para agregar esto aquí, voy a eliminar esto ahora, debería ser cero elementos. Para agregar esto aquí, vamos a crear una nueva varia llamada Ros Rom en realidad Y cuál sería el punto aquí sería para Esto es una matriz. No debería ser una matriz. Debe ser una sola variable. Estamos confundidos. Por qué estoy viendo una matriz aquí. Así estructuras. Esta es una variable de estructura, y tiene esta matriz dentro. Entonces, básicamente, lo que hemos hecho es que tenemos una matriz de una estructura con matrices, si eso tiene sentido. Lo que necesitamos es hacer en esta estructura es fijar miembros en salas ST. Porque esta es la forma en que estamos cambiando los datos sobre nuestras estructuras. No podemos si establecemos habitaciones, no enviamos miembros, colocamos habitaciones por encima del nodo. Hay un conjunto de habitaciones ST, y hay un conjunto de miembros en la sala ST. Entonces, si configuro las habitaciones ST como la variable, entonces significa que cambias toda la variable. Si pongo miembros, entonces puedo cambiar los miembros de la estructura. F ejemplo, si esta estructura tuviera como describí antes, una variable de salud, una variable arma, una variable amo, entonces podríamos estar configurando a los miembros de decidir qué queríamos de este nodo de aquí. Por ejemplo, ahora mismo, tenemos coordenadas de habitación. Quiero establecer las coordenadas de la sala de miembros. Hemos tenido otro valor. Salud. Por ejemplo, podría haber seleccionado un pin el valor de salud y no actualizar el resto de la lista. Lo que necesitamos no es el setter regular, es que necesitamos establecer miembros Es un nodo único para las estructuras. Si la habitación es válida, vamos a estar configurando a los miembros. Vamos a configurar la habitación que acabamos de crear, la matriz de habitaciones para que sea miembro de esta estructura de sala. Entonces lo que vamos a hacer es conseguir que nuestras habitaciones ST se arreglen y agreguen estructura. Entonces, nuevamente, tenemos una estructura que tiene coordenadas internas. Almacenamos estas coordenadas, que es en forma de matriz. Los almacenamos en nuestra estructura, que tiene una matriz dentro de las coordenadas, y luego usamos esta estructura para almacenarla en una matriz de este tipo de estructura. Espero que esto tenga sentido. Ahora bien, esto sería básicamente si lo dejamos tal cual, pero esto crearía una lista con todas las posibilidades. Como, por ejemplo, vamos a eliminarlo. Yo tenía una habitación aquí, una habitación aquí, una baldosa, no una habitación, una baldosa aquí, una teja aquí, una baldosa aquí, azulejo aquí, azulejo aquí. Hagamos una grilla. G. Si estoy, necesitamos más teja. Yo estoy comprobando este, estoy comprobando Y si estoy comprobando este, estoy comprobando esto. Pero éste se superpone. Entonces tiene una posibilidad. Obtenemos las coordenadas de todo lo que básicamente está disponible para nosotros. Necesitamos algunas reglas más para aclarar esto. Y como tenemos esta maravillosa estructura por aquí, matriz de estructuras por aquí que acabamos de crear, podemos hacer otra regla antes de agregarlas. Podemos preguntar. Vamos a conseguir esta estructura, esta matriz de estructuras, traerla aquí, y vamos a o o cada lop con break de nuevo. Y vamos a conectar esto. Esto. Vamos a traer esta sucursal en realidad, por aquí. Y vamos a preguntar, si alguna de estas coordenadas son nuestras coordenadas de comprobación, básicamente, si están en alguna de estas coordenadas. Para ello, como podemos ver, no podemos simplemente verificar un igual desde aquí. Se va a desconectar porque este es del tipo ST. Es una estructura. Para verificar si hay una estructura, tenemos que romper. Como lo hicimos, me dejaron traer actor. Como hicimos en el actor de spa la transformación, la dividimos. Es de la misma manera Pero al contrario. Transformar es una estructura. También podemos dividirlo si queremos. Pero debido a que está en un bucle de cuatro, podemos incluso en un bucle de cuatro. Podemos dividirlo aquí y obtener directamente la variable. Pero solo quería mostrar el nodo break. Vamos a recombinar. Si tenemos una estructura que tiene muchos elementos, dividir en los cuatro bucles no sería tan visualmente bueno. En fin, sigamos con el bucle de cuatro. Conecta esto aquí. Y vamos a preguntar, en realidad, necesitamos un descanso aquí para cada bucle con break. Descanso. Conecta esto aquí. En realidad necesitamos una sucursal aquí para preguntar si sigue siendo una habitación válida. Porque si no es una habitación válida, deberíamos romper. Aquí no estamos comprobando algo, pero si rompemos aquí, también estaremos rompiendo aquí. Voy a poner una sucursal aquí y preguntar si esto está contenido en la habitación. Voy a conectarme. Si está contenido, entonces estamos poniendo poldrum a agujeros y estamos rompiendo Es falso, estamos rompiendo. Intenta volver a correr, es falso, estamos rompiendo y luego necesitamos otra sucursal con es válida. Y si es falso, estamos rompiendo de nuevo y volviendo al bucle original, que inicia para las siguientes coordenadas. Ahora bien, la razón por la que agregamos el aquí es porque estas son las coordenadas que estamos comprobando aquí. Y estamos comprobando si alguna de las habitaciones tiene estas coordenadas en ellas. Si lo hacen, se rompen, esta no es una habitación válida, continúe con la siguiente. Y ahora podemos conectar esto aquí. Y si todo es verdad, si todos nuestros cheques son ciertos, entonces estamos agregando a las habitaciones ST. Creo que esto fue mucha información. Deberíamos tomar un pequeño descanso aquí y continuar con el siguiente. Adiós. 29. Función del perímetro de la habitación: Hola, y bienvenidos a Game Design Workshop Under Engine five Procesal Dungeon action RPG creation Course Anteriormente, creamos continuamos en realidad el hallazgo posible de dos por dos habitaciones. Creamos la estructura de la matriz de habitaciones. Y hicimos algunas pruebas. Verificamos si la habitación está dentro de baldosas especiales, si es descanso y seguimos revisando la habitación contigua. También verificamos si nuestra habitación está contenida en alguna de las habitaciones que ya agregamos rompiendo la estructura que creamos a través de la matriz de habitaciones ST, que es una matriz que contiene muchas estructuras que tienen una matriz variable de coordenadas. Y luego comprobamos si están contenidos, contienen alguno de nuestros arreglos de sala de cheques. Si no lo hacen, estamos agregando significa que nuestra habitación es válida, no pertenece a ninguna otra habitación. No pertenece a ningún azulejo especial, y está dentro de nuestro calabozo Agregar las coordenadas a nuestro sistema, matriz de habitaciones ST. Ahora, el único problema con problema. No es un problema. Es una elección de diseño en realidad con esto es que las habitaciones canpawe una al lado de la otra Por ejemplo, agreguemos algunos más. La consistencia amarilla como mis malos dibujos. Son consistentes. Consiste mal. Entonces, si tuviéramos una habitación en estos bloques, entonces otra habitación podría engendrar aquí, lo que personalmente no me gustaría porque crea dos habitaciones una al lado de la otra Podrían tener una puerta, puede que no tengan una, pero siempre tendrán una pared separándose, lo cual no me gusta la posibilidad de no tener una puerta en realidad. Podríamos hacer algún código si dos habitaciones se superponen, dos cambian tal vez siempre poner una puerta en un lado o cualquier lado Pero me parece más divertido aprender a crear un perímetro en la habitación o esto como variable. Y entonces podemos hacer lo que queramos por el perímetro. Por ejemplo, podríamos crear otras reglas si detectamos una habitación que podamos atravesar tres o cuatro, creamos un corredor entre ellas o no vamos a estar haciendo eso. Nos quedaremos en nuestras dos por dos habitaciones. Pero creo que es más versátil tener conocer los perímetros de los dos por dos o tres por tres o dos por tres o de dos por tres o lo que sean las habitaciones que hayamos diseñado Ahora bien, ¿cómo vamos a hacer esto? Vamos a crear una función. Va a ser increíble. Vamos a hacer una función. Vamos a llamar a esta función perímetro de sala de viento, establecer perímetro de habitación. Lo que va a estar haciendo, va a estar encontrando el perímetro de la habitación. Va a estar agregándolo a las habitaciones especiales y a las salas especiales de acción a las habitaciones perimetrales de la habitación. Y vamos a necesitar una nueva variable. Y tendremos que eliminar algunos muros. Ahora bien, ¿por qué es eso? Volvamos a pintar. Vamos a estar necesitando cuando tengamos una habitación, las paredes que se están utilizando son estas paredes de bloques. Entonces esto quiere decir que cuando tenemos una habitación, estas paredes, si están puestas , se quedan encendidas. Entonces tenemos que encontrar la manera de eliminar estas paredes, y simplemente mantener las paredes de la habitación que queremos. Vamos a hacer eso. Nueva función. Vamos a llamarlo conjunto perímetro. Porque está configurando todo. Nosotros, vamos a necesitar una entrada, y eso sería de tipo array, y sería nuestra matriz de habitaciones. Llamemos a esta función porque si no la llamamos, esa es una carrera. Encuéntralo posible dos por dos habitaciones al final donde estamos agregando nuestra habitación ST nuestras habitaciones se arreglan a la habitación st, y luego estamos agregando esta habitación ST a las matrices de salas STs. Ahora, al final aquí, nosotros así que ese perímetro de habitación. Porque este es el fin. Dijimos que la habitación es válida, entonces como es válida, su perímetro. Voy a conectar nuestra matriz de habitaciones con la matriz de habitaciones aquí y volver a nuestra función. Ahora bien, sabemos que a partir de esta matriz, el último es el spot original. Entonces si vamos a nuestra marca dos por dos cuerdas de habitación, podemos ver ese tercero, el último, hemos configurado esto es las coordenadas originales. Entonces aquí es donde comienza nuestra habitación. Aquí es donde empieza. A partir de estas coordenadas, si obtenemos el último índice, sabemos que son tres. El último índice tres, podríamos haber establecido sólo tres. Pero por si acaso queremos que las habitaciones sean más grandes, por ejemplo, cuatro por cuatro sería mejor obtener el perímetro de la habitación para el último índice. Ya que sabemos que el último índice siempre serían nuestras coordenadas originales de comprobación para la habitación. Porque el resto de las coordenadas son las coordenadas que estamos comprobando. Este es el original Oh, ¿qué vamos a hacer a partir de esto? ¿Por qué es importante esto? Porque ahora voy a romper esto. Como es un dos por dos, solo voy a menos uno en x, y luego voy a durar dos en x Este tipo de lo hace inválido para habitaciones más grandes? Tendríamos que cambiar esta cantidad si fuera mayor a dos b dos. Ahora bien, ¿cuál es esta cantidad? Si volvemos a nuestra pintura, y eliminemos esto. Oh, maravillosos dibujos otra vez. Se trata de habitaciones. Si esto es 0.0. Si voy menos uno en x, este es el valor x, este es el valor y. Menos uno es -1.0, x, esto es y Si voy más dos, sería 01, dos, será 2.0. Si voy más dos, sería 01, dos, será 2.0 Voy a hacer lo mismo en y Así que voy a traer esta caja por aquí, esta caja de aquí, esta caja de aquí, esta caja de aquí, esta caja de aquí, esta caja aquí, esta caja de aquí. En realidad, porque lo estoy haciendo en ambos, voy a traer esta caja por aquí, esta caja por aquí, esta por aquí y por aquí. Entonces esto sería menos uno menos uno, esto sería más dos más dos. ¿Cómo voy a pasar por todo esto? Hagamos lo mismo en y. Bueno, hasta ahora, hemos estado usando para cada loops, lo que requería una matriz. Esta vez, vamos a usar un bucle cuatro anidado, como un bucle de cuatro, de nuevo un four each loop for loop con break, y nuevamente, un bucle de cuatro con break, un bucle anidado para dos bucles anidados o uno de cuatro bucles anidados de todos modos Entonces voy a conectar esto con primer índice y este último índice y este primero en último índice. Entonces, a partir de menos uno x, vamos a estar comprobando el menos uno y. Así que cuando estemos comprobando el menos uno x, vamos a estar comprobando el menos uno y hasta el más dos y. Entonces esto va a pasar al siguiente índice. Esto es básicamente anidado cuatro bucles como lo fue del resto de los cuatro bucles con para cada cuatro bucles con la matriz Ahora bien, ¿qué vamos a estar comprobando? Voy a estar comprobando si nuestro arreglo de habitaciones vamos a traerlo. Oh, aquí tengo esta variable. Habitaciones ray. Si tipo habitaciones ray, voy a obtener una referencia a esta variable. Entonces no necesito arrastrar un cable. Hablamos de esto. Se trata de las convenciones de nomenclatura, y de cómo no deben ser las mismas que las variables. Las variables locales, las variables de entrada y salida, todas deben ser únicas. Oh, voy a comprobar si esto contiene estas coordenadas, lo que significa que voy a estar rompiendo esto. Voy a estar sumando los valores x del primero o bucle y los valores y del segundo. Y ahora creé un octavo punto basado en este bucle de dos for, rompemos. Voy a la sucursal. Voy a conectar esto aquí, voy a poner esto aquí. Y si esto es cierto, voy a crear una nueva variable local, Olim va a ser del tipo eh point Y va a ser una matriz. Voy a añadir. Qué referencia, voy a agregar estos dos valores a esa matriz. Compilar y guardar. Entonces básicamente, ahora tenemos nuestro perímetro de habitaciones. F o loop con break no era necesario porque en realidad no necesitamos romper aquí. No hay razón para que rompamos esto. Entonces cambiemos esto a solo bucle. O simplemente puedes dejarlo como facilidad, realmente no importa. Es solo que se rompe. La forma en que estoy moviendo nodos de esta manera es que estoy manteniendo el control, solo arrastrando y seleccionando Y si mantengo el control un arrastre desde un alfiler, simplemente mueve el cable. A lo mejor esto se ve mejor. No hay manera de. Ahí está, si eres artístico y verso con mesas, hay formas de hacer que se vean mucho mejor. Compilar y guardar. Y creo que este es un buen punto de parada. Tenemos nuestro perímetro. Tenemos las coordenadas de nuestro perímetro. El siguiente punto, lo siguiente que debemos hacer son ocho las paredes del perímetro hacia la habitación. Esto es algo que voy a hacer la próxima vez. Adiós por ahora. Te voy a mandar en la siguiente. 30. Listado de habitaciones y depuración: Hola, y bienvenidos de nuevo al taller de diseño de juegos, y motor real cinco procedimientos Dungeon acción RPs curso de creación Anteriormente, hablamos de crear el perímetro de la habitación. Entonces, creamos una función. Obtuvimos nuestra matriz de habitaciones al final de encontrar posibles habitaciones de dos en dos cuando realmente decidimos que esta es una habitación bien para crear, agregamos esta matriz. Y como sabemos que la última opción de esta matriz es nuestro bloque de comprobación, creamos algunas coordenadas para verificar toda la ordenanza a partir de ella. Hacia el final, si pertenece a la habitación, si pertenece a la habitación, Esto es un error. Debería ser en caídas. Si no pertenece a la habitación, entonces estamos agregando al perímetro de la habitación, no si pertenece a la habitación. Si pertenece a la habitación, no la agregues. Si no pertenece a la habitación, entonces agréguela porque como dijimos, estamos revisando todo alrededor de la habitación, todos los pasillos vecinos, y estamos revisando también los internos. Entonces, los internos, no, no es un perímetro, es la habitación. Y ahora vamos a borrar los muros del perímetro hacia la habitación. Porque podrían tener otras bolas, así que no están por encima de la habitación, y no queremos eliminarlas. Lo primero que tenemos que hacer es conseguir el perímetro de nuestra habitación. Ahora, vamos a pegarlo aquí, y a partir de esto, vamos a para cada bucle. De todo esto, vamos a encontrar cruz adyacente. Queremos saber qué está al lado. Por supuesto, vamos a para bucle de cada erección de todos los vecinos adyacentes. Ahora queremos saber cuál de estos vecinos adyacentes es en realidad una habitación uno. Lo que vamos a hacer es que podríamos simplemente salir aquí mucho código y verificar si está contenido en una habitación e ir con más siguientes. Pero no podemos hacer que sea una función pura porque vamos a usar esto un poco más para comprobar si hay una habitación al lado de nosotros. Entonces, una nueva función, y esta vez va a ser pura. Voy a crear una función. Voy a llamar a esto hallazgo Vamos a llamarlo encontrar índice de habitación. Porque más adelante, vamos a necesitar saber, es una habitación, pero también qué habitación es, ya que tenemos una estructura de habitaciones. Una estructura con la información de, matrices, que contienen todas las coordenadas de cada habitación. Entonces podemos decir, esta es la habitación número uno, esta es la número dos, número tres, la número cuatro , esta matriz, estará sosteniendo nuestras habitaciones, cuántas son, y las tiene numeradas. Ahora, L et's continúan con índice de cuarto de pinta. Por supuesto, vamos a necesitar unas coordenadas de entrada, y va a ser punto final, pero una variable de tipo único. Entonces vamos a necesitar la matriz de habitaciones St. Vamos a por loop con break esta vez porque hay muchas coordenadas. Un lugar este de aquí. Y vamos a romper esto porque es información de nuestra estructura. Nos da cada elemento sería una matriz de coordenadas para una habitación. Vamos a comprobar si esto con nuestras ordenadas. Porque si esto contiene nuestras coordenadas, significa que hay una habitación. Para indicarlo, utilizaremos una variable local. Dado que se trata de algunas funciones, nuevamente, un pequeño recordatorio, las variables locales no afectan a las funciones de pipí. Va a ser de tipo pool, y va a ser una sola variable. Vamos a ponerle nombre habitación. No se recomiendan las funciones completas. Bueno, contrarresta el punto de tener sumar variables de configuración que son externas. Pero si es una variable interna, función local, solo existe aquí, realmente no le afecta. Y vamos a promover esto también a una variable local. El índice, que será el número de habitación. Si encontramos una habitación, vamos a romper y ahora necesitamos salida. Entonces nuestro resultado sería nuestro hallazgo. Rom va a ser del tipo, y aquí nos vamos a conectar. Y para el siguiente, sería índice de habitaciones. Ahora ves que nombrar es raro porque yo nombré al otro Va a ser de tipo entero. Nombré al otro número de habitación. No pude nombrar este número de una habitación porque lo estropearía. Entonces voy a conectar esto aquí y compilar y guardar. Ahora, tenemos un índice de habitación fino y nos da si encontramos una habitación y el índice de la misma, y podemos continuar nuestro perímetro de habitación establecido. Entonces, ¿nuestras coordenadas noreste suroeste pertenecen a una habitación? Encuentra índice de habitaciones. No es una función pura. Hagámoslo una función pura, y volvamos a ponerla en la categoría de funciones puras. Vamos a traer una sucursal. Y voy a conectar esto aquí. Ahora, encontramos una habitación. Ahora tenemos que recurrir a nuestro actor que estamos comprobando que el actor responsable de estas coordenadas que teja sobre estas coordenadas. En realidad, el acto. Es un azulejo para nosotros, pero es un actor de planos De todas formas. Entonces, necesitamos encontrar al actor responsable de estas coordenadas. Entonces vamos a obtener nuestro mapa de puntos, y nuestro mapa sería nuestro calabozo Pero ahora tenemos acceso a nuestro azulejo. A partir de eso, vamos a sacar nuestras paredes, creo, muro, cómo lo hemos llamado. Decoraciones BP. Vamos a conseguir decoraciones, el niño actor en realidad, que necesitamos para conseguir actor, que luego vamos a lanzar a P decoraciones. Convertiremos esto en un elenco puro. Así podemos chuparnos todos estos maravillosos nodos uno encima del otro. A partir de esto, vamos a obtener componentes por s. y la clase sería componente pic mesh. Componente de malla Tic. Aquí está. Ahora bien, ¿qué significa esto? Para aquellos que son nuevos cuando estamos obtenemos componentes son todo lo que estamos agregando dentro del plano Entonces estamos obteniendo todos los componentes que son de tipo malla estática, no de la baldosa BP, de las decoraciones BP, que serían todas estas paredes. O ahora. Más adelante, que vamos a tener más cosas. Obtendrá una lista de todos esos componentes. Por ejemplo, si tuviéramos una pared y un barril, digamos aquí, y ellos tienen las mismas reglas que vamos a crear ahora, ambos desaparecerán. Ahora, sólo vamos a hacer desaparecer las paredes. Y lo que usaremos son las etiquetas que tenemos, el sistema de etiquetas de S y W y E. Así que volvamos al laberinto. Obtener componentes por clase, y vamos a o bucle o cada bucle de ellos. Conecta eso con la verdad. Derecha. Ahora, lo que vamos a hacer es que el hash bug tiene componente tirón Como hicimos en la función hide walls, el remolcador estará determinado por el índice de nuestra matriz De hecho, podemos ir a nuestras decoraciones en muros de piel, solo copiar y pegar. Pero ahora no estamos usando las paredes, estamos usando los componentes get all components attic mesh. Voy a volver a nuestro laberinto. Va a ritmo este año. En realidad no necesito de todo. No necesito este. Voy a conectar este año, a conectar este año. Necesitamos crear una selección personalizada. Y tenemos de nuevo el tema. Voy a traer la última salida. Voy a dejar desde el índice. Voy a conectar el último aquí. Voy a conectar esto aquí. En realidad, este es el índice equivocado. Queremos este índice porque este es el índice de no y mojado. Vamos a conectar esto aquí. Voy a sumar dos variables más, 32 más. Elimino esto, y será al norte de Nouth, al este oeste. Y ahora voy a conectar esto aquí. Tey está conectado. Sí, está conectado. Pero ahora está escondiendo las paredes de nuestro perímetro hacia nuestra habitación. Ahora, solo por el bien de la depuración, vamos a demostrar lo que creamos Vamos a obtener nuestra matriz de habitaciones ST, y vamos a o cada bucle, vamos a conectarlo a la completa aquí de la realidad, no aquí. Consiga las cosas de aquí. Volvamos a nuestro hacer dos por dos encontrar posibles dos por dos habitaciones. Y aquí, agreguemos nuestra matriz de habitaciones ST. Conectemos esto aquí. Y vamos a romper. Voy a ho a cada grupo. Y vamos a conseguir el calabozo. Y vamos a encontrar fueron encontrando cada uno de cada tle, y vamos a conseguir piso. A partir de eso, vamos a establecer el material L et's seleccionar un material diferente. Seleccionemos esta base de madera, pared de ladrillo sucia, o lo que quieras. Sólo quieres ver si funciona. Construye, y no hizo ninguna habitación. Hagámoslos un poco más grandes para verificar. Digamos M estilos 50 en cinco talla. Y también comprobar si he conectado las salas de crear. En gráfico par, puerta, no, no lo he hecho. Así que encuentra posibles dos por dos habitaciones después de crear cordones para el pecho. Juega y tenemos algunas habitaciones. Tenemos algunas habitaciones bonitas. Ahora. Lo siguiente que necesitamos es crear algunas paredes en estas habitaciones. Y por ejemplo, cosas como estas que crean un callejón sin salida a esta sala no deberían suceder. Entonces lo arreglaremos en la siguiente lección. Adiós por ahora, señor, el siguiente. 31. Creación de la estructura de la habitación: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Andal motor cinco, ARPs de Acción de Mazmorra Procesal Anteriormente, terminamos con nuestra función de coordinadores de habitación fina, y agregamos un perímetro a ellos también. Um Como podemos ver, hay algunos errores al respecto. Al igual que podemos crear habitaciones junto a otras habitaciones, y si presionamos stop y vamos a nuestro dock de mensajes, estamos viendo un error repetido. Así que vamos a repasarlo un poco de nuevo y corregir los errores esta vez. Ahora, yo nuestro conjunto de sala perimetral, lo primero que debemos cambiar es que creé esta sala perimetral a local integer, local array, local variable, local array de int points. Esto debería promoverse a una variable, y llamémoslo a todos los perímetros de habitación Voy a borrar esto. Voy a traer aquí todos los perímetros de habitación. Voy a añadir a ésta también. Voy a romper esto y agregar y on y y x en x. Realmente no necesito hacer nada más porque esto estropeará el código. Pero calzados tenemos una variable que en tiene todos los perímetros Ahora, lo siguiente que debemos hacer es verificar este error, este error de mensaje. Dice, sucursal no puede acceder no. acceso no suele ser intentar acceder a algo, que no hay ninguna variable. Si haces clic en algo, te llevará a una macro constante. Pero sí nos dice dónde mirar. En esta sucursal en base gen en conjunto perímetro de habitación. Nuevamente, la rama conduce a la función. Pero es en el perímetro de la habitación del set. Así que vamos al perímetro de maze gen y Strom. Lo que realmente hace es que en algún momento, estamos tratando de encontrar desde el mapa de mazmorras Pero cuando estamos saliendo del perímetro de la habitación, existe la posibilidad de que el perímetro no esté dentro de la mazmorra No tiene ninguna teja. Entonces lo que vamos a hacer es que vamos a preguntar si el mapa de mazmorras que estamos solicitando, el actor que solicitamos solicitando a través de las coordenadas es válido Y vamos a usar el segundo nodo, que en realidad nos da una opción de ramificación Voy a conectar el true to es válido para el xy y el válido para el bucle fore. Si no es válido, no nos importa, y esto no va a suceder. El error no va a ocurrir. Entonces presiono play ahora, j. No es así. Si una parada de prensa, entonces nuestro registro de mensajes debe ser claro, tráelo y está claramente diseñado. Ahora, el siguiente problema estamos teniendo es que se están creando habitaciones junto a otras habitaciones, como si el perímetro no hiciera nada. Esto se debe a que aún no he agregado el código. Entonces vamos a ir a buscar posibles de dos en dos habitaciones. Y cuando estemos comprobando azulejos especiales, vamos a comprobar también para todos los perímetros de habitación, vamos a hacer un contiene aquí Vamos a conectar nuestra matriz de habitaciones, y vamos a hacer un final, no un final, o bulion porque o está en las baldosas especiales o está en las habitaciones No queremos que sea una habitación válida. Si presiono compilar. Presionemos play. Las habitaciones no deben crearse una al lado de la otra habitación. Bueno, posiblemente aquí, no pudieron. Vamos a intentarlo de nuevo. Laberinto más sólido. Sí, más sólido. Como podemos ver, las habitaciones no están al lado de otras habitaciones. Crea esta distancia entre ellos. Una distancia de teja, el perímetro. Ahora, Una cosa también, deberíamos cambiar sería no cambiar el material, vamos a eliminar esto. Pero podemos agregar todas las habitaciones, todas las coordenadas a una matriz. Entonces, voy a crear una nueva matriz, nueva variable. Voy a llamarlo todo aposentos. Va a ser del tipo endpoint. Y va a ser una matriz. Y voy a agregar a esta matriz, todos los cordones de habitación que estamos rompiendo desde el final del hallazgo posiblemente de dos en dos habitaciones. Cuando finalmente salimos del bucle de palabras principal, vamos y rompemos todos los array est rooms, y agregamos todas las coordenadas que encontramos dentro de las matrices de estructura. Ahora bien, lo siguiente que debemos hacer es construir las habitaciones. Entonces, adivina qué, vamos a volver a hacer una función para construir las habitaciones. Entonces al final aquí, vamos a crear esta función. Llamémoslo construir habitaciones. Vamos a llamarlo al final. Porque cuando probemos, olvidaré agregarlo aquí, y entremos en esta función. Pero antes de entrar en la programación, expliquemos qué debería estar haciendo esta función. Así que vamos a pintar para unos dibujos increíbles. Ahora bien, lo primero que debería estar haciendo es sanar a las baldosas, como si tuviéramos cuatro fichas. Pero básicamente, necesitan remodelar sus paredes para estar en los bordes Y en base a sus flechas, esto no va a suceder. Entonces, lo que necesitamos en realidad se sujeta a cada baldosa que tenga la habitación, qué paredes deben estar encendidas y cuáles apagadas. No, eso es lo primero lo primero. No va a ser lo primero, pero es una de las cosas que nuestra función necesita hacer. Ahora bien, lo segundo sería decir qué tipo de paredes como lo segundo sería, ¿qué tipo de paredes estamos poniendo en nuestra habitación? Porque tenemos cierta cantidad de muros, diferentes muros. Si vamos a nuestros líos estáticos. En realidad, si vamos al mapa de visión general, hay más cambia el color de los mapas también. Ahora los mapas son rojos, ¿verdad? Entonces si voy a vista general mapa guardar seleccionado, podemos ver que tenemos uno, dos, tres, cuatro, cinco azulejos, diferentes conjuntos de muros. Entonces, en base a estas paredes, deberíamos tener cinco tipos diferentes de habitaciones. Entonces esto también es algo de lo que esta función será responsable. Pero esta es otra parte que tenemos. Función. Ahora, por último, agregaremos un aleatorizador. Entonces si tenemos nuestra habitación, tal vez al azar, podemos crear una pared aquí o aquí. En algún lugar de la habitación, podemos agregar al azar una pared o no. Entonces crear este muro aleatorio sería lo tercero que hace esta función. Ahora, volvamos a intercambiar a nuestro mapa. Pasemos al nivel de juego, y vayamos a nuestro generador de laberinto dentro de la función de dormitorios. Lo que vamos a necesitar es la matriz de habitaciones ray ST, y vamos a hacer un bucle para cada bucle en todas ellas. Y lo primero que vamos a hacer es romper la estructura para obtener las coordenadas de su habitación. También promoveremos el índice a una variable que será controlada localmente. Promueva la variable local, y llamemos a este índice de sala. Y conecta esto aquí. Porque cada vez que ejecutamos esto for loop, estamos ejecutando básicamente una habitación diferente. La primera vez que se ejecutará, el primer índice de esta estructura de arrays será la primera sala. La segunda vez que correrá, será la segunda habitación, y así vamos. Entonces podemos tener una regla, por ejemplo, digamos que como tenemos cinco habitaciones diferentes, que las primeras cinco siempre elegirían una apariencia diferente. O para hacerlo aún más interesante. Digamos que los dos primeros de ellos serán de una apariencia diferente, y luego el resto de ellos serían de los s de alguna aleatoria. Entonces esto creará la ilusión de que algunas habitaciones son realmente especiales, y algunas son más comunes. Así que vamos a crear otra variable local, que llamaremos índice All. Llámalo índice de muro. Eso va a ser un entero otra vez, y no una matriz, va a ser una sola variable. Y ahorra. Vamos a establecer este índice de pared de habitación, este índice de pared. Entonces, vamos a comprobar si esto es mayor a dos. Entonces cero, uno, dos, en realidad, las tres primeras habitaciones serían diferentes. Y luego a partir del cuarto y después, elegiría deshacer. O elegiríamos el número uno, e iría a las dos primeras habitaciones. Pero hagamos tres en realidad. Entonces, voy a seleccionar una sucursal, voy a conectar aquí. Voy a conectar esto también. Entonces, si está por encima de dos, significa que es mayor que nuestra cantidad deseada, y pondré el índice de pared a una tinta aleatoria en rango. Eso sería 0-4. Y la razón por la que son cuatro es porque tenemos cinco juegos diferentes de habitación. Entonces 01234 es cinco opciones diferentes. Contando desde cero como número como entidad, es un poco difícil al principio, pero te acostumbras a ello. Ahora bien, si no es mayor que dos, entonces calzamos ese índice de muro Digamos al índice de habitaciones. Por lo que siempre será el índice de habitación uno, índice de habitación dos, el índice de habitación cero. A, Contando desde cero, algo tenemos que acostumbrarnos. Ahora, vamos a leer aquí para conectar estos dos nodos. Aquí. Creo que este es un buen punto para esta lección. Ya que vamos a tener que hacer cosas un poco más complejas después, y van a necesitar un poco más de explicación. Adiós por ahora, voy a enviarte el siguiente. Adiós. 32. Función de habitación y fijación de paredes: Hola, y bienvenidos de nuevo a Game Design Workshop rail engine five Procesal Dungeon Action Apes creation Anteriormente, arreglamos algunos problemas que teníamos algunos errores en el generador de laberinto. Y también explicamos algunas cosas sobre nuestras habitaciones construidas. Comenzamos la función de habitaciones construidas con pasar por todas las habitaciones con un cuatro e l, y luego creamos una variable para almacenar el índice, una variable local para almacenar el índice de las habitaciones. Creamos una regla para cambiar los tipos de muro, y ahora creo que es el momento de continuar. Ahora, lo primero que tenemos que hacer, lo primero. Una de las cosas que tenemos que hacer, y que vamos a hacer ahora mismo es decidir si nuestra habitación tendrá una pared aleatoria, y ¿dónde estaría esa pared? En realidad, si lo ha sido, decidiremos más adelante, pero por si acaso lo ha hecho, decidamos dónde estaría ese muro aleatorio. No, voy a copiar y pegar este rango entero aleatorio, y voy a cambiar la variable a tres porque nuestra habitación es de dos en dos, así que cero, uno, 23 lleva a cuatro opciones. Ahora, voy a promover esto a una variable local, y voy a llamar a este índice de muro interno. Y también, voy a sacar del break sting de habitaciones como esta es nuestra habitación coords de dos en dos, voy a conseguir P, y también promover esto a una variable local, y llamar a esto Pila No Pasillo de pared interna. Coordenadas. Bueno, esto es una coordenadas, pero podemos decir eso por el tipo de variable. Y voy a conectar esto aquí. Para el getter, voy a usar el seted de lo aleatorio. Nuevamente, si me hubiera conectado aquí desde el azar, este probablemente sería un número diferente a este porque generaría uno nuevo aleatorio. Así que quería conectarlo desde el seted, o en realidad traer la variable real aquí y conectarla así sería lo mismo de cualquier manera Oh, ahora. Lo siguiente que deberíamos estar calculando es ¿dónde están nuestras paredes basadas en nuestro índice de habitaciones? Ya que esta línea de aquí nos trae la habitación break ST, todos nuestros índices de habitación. Voy a calentarlo aquí abajo. Podemos para bucle. Para cada uno de ellos. Y sabemos que el último índice es creo que el Noroeste, tenemos que checar esto en donde creamos las habitaciones. Ahora bien, esta es la creación de coordenadas encontrar posibles dos por dos habitaciones. Estamos haciendo un dos por dos acordes de sala. Entonces la última es la sala de cheques, y luego agregamos uno en x, uno en y, no y Entonces esta sería la habitación norte. Esta sería la habitación norte, la habitación noroeste. Entonces sumamos y. este sería el Nordeste, número dos, y el número uno es, Ya que X se queda igual, podemos llamarlo sureste, y el valor original es el Sudoeste. Por supuesto, cuando estoy hablando de Sureste, Suroeste, estoy hablando de las paredes que estarán activas en la habitación. Al igual que el primero sería oeste y sur. El de arriba sería oeste y norte, y continúa. Si quieres anotarlo, esto sería norte y este, y esto sería sur y este. Básicamente, tenemos que decir dos direcciones. Nuestras direcciones están en el azulejo en el actor de azulejos, el azulejo BP. ¿Cuáles son tus lados cerrados? Direcciones con el W. De todos modos, así que volvamos a nuestras habitaciones construidas. Para hacer esto, ya que conocemos el orden, nos dimos cuenta del orden en el que estos están establecidos, realidad podemos alcanzar en int y tener tres resultados diferentes porque es una matriz de cuatro longitudes, cuatro resultados diferentes. Lo siento. Y vamos a eliminar el valor por defecto. Ahora bien, ¿cuál es el interruptor? Hablamos un poco de enumeraciones. Es lo contrario de un selecto. Puede activar cadenas, puede activar enumeraciones y básicamente le da una salida diferente para ejecutar en función de la selección de entrada Ahora, para estas coordenadas, necesitamos los conjuntos de ti. Para ello, vamos a conseguir nuestro calabozo, y vamos a pelear Ahora, quería decir algo sobre la pinta y todo. No pienses que esa pinta es solo una acción que ocurre instantáneamente Estas son solo funciones listas para nosotros, que están pasando por las variables y comprobando si la variable es igual a la variable que queremos. No es que un nodo como este sea algo que no sea tan pesado como un bucle for, por ejemplo, que pasa por el mismo número de variables. En fin, continuemos. Es un poco mejor. Es un poco mejor. Ahora, como nos encontramos con eso, necesitamos las indicaciones. Y tenemos que añadir es cada vez porque estamos hablando de dos muros. Y en realidad, necesitamos copiar y pegar esto. Habría soluciones más fáciles para hacer esto con una función, pero por ahora, esto sería eficiente. Ahora, también los necesitaremos para apagar todas las demás paredes. Vamos a duplicar. Tengo que volver a conectar las líneas. A lo mejor voy a tratar de hacerlo un poco, leer nota aquí, va así, mamá, va así. Se ve mejor. Mueva esto, más abajo. W haga clic aquí también. W haga clic aquí también. Estamos haciendo un montón de nodos de lectura. Entonces no hay octa. Esto lo hizo. Modos, Tarea espantosa podría decir Digamos que los primeros son los que se encienden a través. Hay una manera de moverse, y los segundos van a ser los que están teniendo muros. Para el primer set siempre es darle la vuelta a esto. El segundo conjunto es encender las paredes. Entonces está apagado. Ahora, vamos a averiguar las direcciones. Como decíamos, el número cero es un gran dolor otra vez al oeste y al norte. Entonces el este y el sur deberían estar apagados. Oeste y Norte? No, sembré lo contrario, no hice este y sur este y sur. Hagamos primero los primeros, y después hacemos los segundos. Ahora, para la segunda baldosa, la primera en orden sería Norte y Oriente. ¿ Esa es la segunda? Se me olvidó otra vez, tengo que comprobarlo. El primero es solo más x, así que ese es el noroeste. El segundo no está en x y más y El segundo es el sur. Bien. El segundo es éste. Esto es dos, este es uno. Esto es tres, y esto es cero. No, lo siento. No voy a dar mis propias reglas. Entonces esto es cero. Este es uno. Esto es tres, y esto es dos. Entonces, siempre tener un out pad haciendo cosas simples como esta es útil. Ahora, El segundo, nosotros que es oriente sur así que Norte y Occidente deberían estar cerrados, Noroeste. El tercero 1 segundo tercero en número de orden, el número dos sería Norte y Oriente. Entonces esto es poniente y sur que están en el primero, el último sería Norte y Oeste. Entonces esto significa norte y este. Aquí tendremos al Sudoeste número tres, número dos, será norte y oriente. Y Oriente. Comprobemos que cada línea tiene todos los. Como este es Norte y Oeste, esto es sur y este y este y este es este y sur, entonces es Norte y Oeste. Duplicados, por lo que sea correcto. Lo resolveremos en las pruebas. Entonces esta es la parte de nuestra función que pone en los mosaicos las nuevas flechas reales basadas en que son una habitación. Me vas a decir, sí, pero ¿dónde ponemos la puerta? Bueno, este es un tema diferente porque cuando cerremos todas nuestras habitaciones, vamos a querer poder navegar por todo el calabozo Entonces vamos a hacer esto después. F ahora, creo que esto es suficiente para esta lección. Y en la siguiente lección, intentemos sumar nuestro muro interno. Adiós. Nos vemos en la siguiente. 33. Finalización de funciones de la habitación: Así que anteriormente, añadimos algunas cosas a nuestra función bdroom, salas construidas bild Así función Bilroom. Agregamos la variable de índice de pared interna y la variable de mosaico de pared interna, que es un punto de tinta. Básicamente, estamos haciendo enteros aleatorios para el índice, y luego estamos almacenando ese índice, las coordenadas de ese índice. Ahora, después, hacemos un bucle a través de cada una de nuestra matriz de habitaciones, que pertenece a la estructura de las matrices de habitaciones, y configuramos manualmente qué paredes deben corresponder a qué lado de la matriz de habitaciones. Ahora, como dijimos, lo siguiente que debemos hacer es agregar realmente esta pared interna o no agregarla. No todas las habitaciones necesitan tener una pared interna. Para ello, vamos a bajar más el interruptor en int. Y T a través de ese interruptor de int. Como pueden ver, lo conecté desde el completado de este bucle fd. La razón es que todavía estamos dentro de este bucle fd. A esto se anida para cada incremento del índice, básicamente para cada matriz, estamos teniendo esto en switch on int, y vamos a agregar tres variables En realidad, vamos a sumar cuatro porque digamos, por ejemplo, cero, uno, dos, tres, vamos a estar sosteniendo variables para realmente colocar un muro, y cuatro no sería colocar un muro. ¿Y cómo vamos a hacer esto? Vamos a elegir int. A, pico A, vamos a un pool aleatorio. Entonces algunas habitaciones tendrán una pared. Por lo que las habitaciones no tendrán. Pero cuando es pico A, vamos a elegir el número cuatro, por ejemplo, que sería no poner una pared. Vamos a eliminar este pin de ejecución, el predeterminado porque no lo queremos. Y en B, en realidad, necesitamos un índice aleatorio. No lo nombraste al azar. ¿Cómo lo nombramos? Índice de pared interna. Entonces, aquí necesitamos el índice de pared interna. Genial. Entonces tenemos B por 0123 Pero qué habitación es la que otra vez, ahora mismo, necesitamos hacer algo como esto para fijar las paredes de las habitaciones porque entonces vamos a pintar para mostrar que ir a borrar necesario. Entonces tenemos nuestros cuatro pasillos que son nuestra habitación. Y sabemos que por ahora, hay un muro por todas partes. A lo mejor esto debería haber sido un poco más grueso. Línea Ticker. Seríamos capaces de elegir una línea más gruesa. Boleto uno. Entonces tenemos nuestras paredes alrededor de nuevo estilo de dibujo, paredes con cajas. Oh. Ahora bien, si estuviéramos en esta cuadra de aquí, podríamos tener una pared por aquí o por aquí, todavía estaría disponible en toda la habitación. Y eso va por cada cuadra. Podríamos tener ambos lados de cada baldosa, uno de ellos, pero podemos seleccionar uno en ambos lados en cada pasillo Oh, como dije, vamos a estar haciendo de nuevo un sistema como este. Vamos a estar agregando manualmente las variables. Pero tenemos que averiguar qué habitación es cuál. Y con base en que esto está en nuestra estructura. En realidad teníamos ese dibujo anterior. Vamos a pintarlo de nuevo. Voy para que pueda mejor. Este es el tercero seguro. Esto es cero. Esto es dos, y este es uno, y este es dos. Creo que así es como lo teníamos. Volvamos a comprobarlo. Voy a tomar un segundo para encontrar la función. Voy a ir a funciones, encontrarla para construir habitaciones, hacer dos por dos s. Esto es lo que queremos porque era la pura. Cero es p uno en x, uno es p uno en y, uno es oriente sur, y el segundo es uno. Éste. Entonces sí, eso es correcto. Genial. Volvamos a nuestras salas de construcción y vengamos aquí para llenar el terreno de juego. Ahora, como queremos que ocurra una de las dos paredes, vamos a poner cuatro ramas porque es o es una u otra pared. Y a estas condiciones, sólo voy a hacer y boll conectado a todas las condiciones En el número cuatro, necesitamos este paso porque no va a estar sumando todo. Pero vamos a conectar esto después a lo que venga después, que en realidad es la colocación de la pared. Oh. Vamos a traer algunos nodos que ya tenemos. Vamos a necesitar dos para lo anterior, dos para el siguiente, otros dos, y otros dos. Esto se puso grande, pero está bien. Solo necesitas espaciarlos, así que es un poco más leído en azul. Cuando tu plano se vuelve un poco complejo hay demasiadas cosas Enfréntalos, realmente no importa. Tenemos un espacio sin fin, un desplazamiento sin fin. Punto. Oh, vamos a conseguir el calabozo que necesitamos, el azulejo no lo siento dangon, del calabozo, el azulejo que Entonces vamos a conseguir mapa de dungon, y vamos a encontrar lo que vamos a Esta baldosa variable de paredes internas que tenemos almacenadas por aquí. Ya que conocemos el azulejo. Sabemos cuál id en los dos por dos es, qué colocación en los dos por dos ochos Solo podemos encontrar y obtener ecciones, Y ahora tenemos que conectar direcciones a todo este anuncio. Uno, dos o se expanden también, se convierten en una molestia aún mayor en el plano Permite conectar a False. No sé si alguno de ustedes ha tocado con editores de música como Reason. Se parece mucho a las conexiones a la razón. De todas formas. Basarlos. Ahora. Vamos a averiguar qué muros necesitamos. F cero, estamos en el sur noroeste. Necesitamos en realidad las paredes internas correspondientes. Básicamente, tenemos esto iluminado un poco por encima de nosotros. Pero como es un poco desordenado, no lo hice y lejos, hagámoslo de nuevo Necesitamos el oriente y necesitamos el norte es este o norte, sur, perdón. Este y sur para el superior. El siguiente. El siguiente es este fondo de aquí, así que necesitamos al norte y al oeste. Norte y poniente. El siguiente es el número dos. Número dos, la pintura aquí está. Número dos, necesitamos al oeste y al sur. 02 es este Oeste Sur. Para el último, necesitamos al norte y al este. Nora, ya está aquí para nosotros. Épico. Ahora bien, ¿cuál sería el siguiente paso? En primer lugar, ya que cambiamos tanto la información sobre las flechas. Creamos nuestro propio sistema de flechas. Vamos a solo flechas totales. Vamos a hacer eso. Lo que necesitamos son cables ST room. Vamos a traerlo de todas partes de la w aquí y escribir cada bucle. Y vamos a conectar todo a e. básicamente, en los bloques que son habitaciones en los azulejos que son habitaciones, o nuestros ajustes de flecha se están reconfigurando a lo que queremos Ahora, también necesitamos conectar este cuatro por aquí, que no es de pared interna aquí a los cuatro cada bucle. Entonces mantiene todo esto. Y ahora que estamos dando vueltas con los cuatro bucles a través de las coordenadas, busquemos al actor apropiado En realidad, podemos simplemente copiar esto porque esto es lo que necesitamos. Obtenemos el estiércol, el hallazgo, y nos conectamos de acuerdo con el hallazgo Y a partir de aquí, vamos a conseguir decoraciones. La variable, siempre está en la parte inferior, y vamos a fundir a decoraciones. PPG primero el médico infantil. Y a partir de esto, vamos a conseguir decoración. Lo siento, vamos a cust decoración. Y vamos a hacer del cust un puro cust. Nuevamente, más rápido, es más eficiente, y ayuda con los asentimientos que vienen no los espaguetis Conviértete en torre. Ahora, alternemos flechas en todas estas decoraciones. Toggle flechas mensaje porque es nuestra interfaz de blueprint Voy a conectar esto aquí. En realidad, si sí, vez he conectado esto a las decoraciones. Creo que le pasó a las lecciones antes. Pero ahora creo que podemos probar y ver lo que creamos con flechas. Vamos a ver algunas flechas creando habitaciones, creo que si todo ha ido bien. Entonces no estoy segura. Posiblemente esta es una habitación. lo mejor tal vez no deberíamos haber eliminado el deshorneado de cambiar rápidamente un generador tom Vayamos a la gráfica par. Vayamos rápidamente al hallazgo posible de dos en dos aquí. Lo tenemos en copia, el mapa Dungin encuentra Va a usar esto para establecer el material del piso. En realidad vamos a elegir el piso para nosotros y también establecer material, traernos un nodo. Vamos a elegir la suciedad esta vez. Compilar guardar. Juguemos, tengamos alguna suciedad, expulsen. Bien. Entonces tenemos algunas habitaciones, pero Teams realmente no funcionaba. ¿Por qué es eso? Averiguemos el material ahora, estuvimos aquí. Estamos alternando flechas en las flechas co no están en decoraciones. Por eso esto es mandar el mensaje, pero las decoraciones no tienen ningún código que ver con las flechas. Deberíamos estar enviando las flechas a la baldosa directamente, no a la decoración. Conecta las decoraciones. La forma en que está conectado fue que lo usé por si te lo estás preguntando. Solía presionar Alt y hacer clic y conectar la línea a la que has apuntado. Entonces como compilar guardar, esta vez debería funcionar porque estás actualizando el plano correcto, no el niño de decoración Y, aquí estamos, y también tenemos algunas puertas que no están por sentadas. Van a ser posteriores ps. Ahora, como pueden ver, las paredes de las habitaciones no se han actualizado porque aquí no hemos actualizado las paredes. Pero las flechas están correctamente. Esto es lo que necesitamos ahora mismo. Necesitamos las flechas. Con base en las flechas de la siguiente lección, vamos a estar cambiando las paredes, y finalmente va a ser una pared con una habitación con paredes y sin techo. Vamos a arreglar todo esto después. Adiós por ahora, al verte el siguiente. 34. Aleatorización de paredes internas: Hola, y bienvenidos de nuevo al taller de diseño de pandillas, y al curso de creación de RPG de acción Dungeon real engine five procedural curso de creación de RPG de acción Dungeon Anteriormente, añadimos algunas cosas más a nuestras habitaciones construidas. Agregamos qué pared debe colocarse al azar a través este interruptor de aquí y las variables que guardamos antes, la baldosa de la pared interna, el índice de pared interna. A través de este switch, decidimos uno aleatorio, que sería colocado, o si elegimos el número cuatro en este int aleatorio, no colocará nada. Y también usamos la función de flechas totales correctamente, después de algunos intentos conseguir que las flechas se comporten como las queremos, las flechas dentro de la habitación Ahora, sigamos fijando qué paredes deberían estar arriba y qué paredes no deberían estar levantadas. Vayamos a las decoraciones PP y creamos una nueva función, que en realidad será algo similar a esta. Podríamos actualizar esto, pero hagamos uno nuevo. Por el bien de la claridad. Vamos a nombrar esta función build. No. Deje que las paredes de la habitación. Paredes de habitación. Y vamos a necesitar una entrada porque vamos a estar llamándolo desde el generador de laberinto directamente aquí. Entonces tenemos acceso directo para obtener indicaciones desde el azulejo. Ya que tenemos acceso directo desde esto, podemos alimentarlo directamente ahí. Aunque, esto podría, ya que tenemos nuestro parentil aquí. No pongamos una información para que pase. Es más eficiente obtenerlo de aquí para obtenerlo de las decoraciones reales de PP, porque tenemos una baldosa PP. Oh, vamos a obtener indicaciones. De las direcciones, vamos a conseguir las llaves. Como lo adivinaste, vamos a mantener bucle a través de estas teclas o cada bucle Entonces vamos a mantener bucle también desde nuestras paredes. Y vamos a estar comprobando si el componente tiene stug, que es el elemento de la matriz de la anterior o direcciones Ahora bien, si tiene tirón, vamos a hacer pero algo depende del valor que tengamos en las direcciones Así que vamos a encontrar el valor correspondiente al elemento array, que es la madre, el host o loop. Esta es la nave nodriza que dirige el resto. Bueno, para ser sinceros, en este caso, esta es la nave nodriza que corre tantas veces todo esto. Pero como puedes ver, solo toma unos segundos. Eso lo veremos en la barra de carga. Ahora, ¿qué vamos a hacer? Vamos a establecer visibilidad En realidad, creo que los estamos ocultando que se esconden en. Hagamos las dos cosas. Yo ellos en ganancia. Realmente no importa. Queremos que sean visibles, y también queremos que no se oculten en la ganancia. En caso de que sean colisión está apagada, también deberíamos establecer colisión. Eso es todo Dante y agradable, pero ¿qué ponemos aquí? Así que para la visibilidad. Si esto es cierto, queremos que la visibilidad esté apagada. Entonces necesitamos una t aquí. No toro. Do O, L. Si esto vuelve a ser cierto, queremos que sea invisible y oculto esto va aquí. Y si esto es cierto, lo que significa que hay un paso, cuando es cierto, significa que puedes pasar a través. Necesitamos una selección aquí. Y necesitamos conectar esto aquí, es más fácil encontrarlo, si es a través de ninguna colisión, si es falsa, colisión habilitada física de quaran Compila y guarda, y eso es prácticamente todo. Vamos a probarlo. Lo hemos conectado a Nope, no lo hemos hecho. Entonces voy a leer esto. No lo necesitamos. Necesitamos de aquí cómo lo llamaron. Las paredes de esa habitación. Entonces paredes, Ahora, deberíamos tener estas medias paredes que tenemos alrededor de las habitaciones. Llévala de nuevo. No, no lo hacemos Hay un problema. Vamos a resolverlo. ¿Qué podría ser? Comprobemos desde el generador de laberinto. Comprobemos desde aquí. Estamos ejecutando esto, ejecutando instancia va aquí, y su instancia está estableciendo sus propias variables. Entonces vamos a agregar una pared falsa de una pared de habitación. Todo esto debería ser falso básicamente. Porque si es verdad, estamos de paso. Pero tienen los medios falsos tenemos el muro. A ver si esto está arreglado. El, las paredes, no el ok, tenemos una pared aquí, tenemos una pared aquí. No esperaba que se arreglaran las paredes reales. ¿Por qué no están ocurriendo las paredes? V pregunta. Vamos a revisar. Detén esto. Volvamos al generador de laberinto, para hacer un bucle, conseguir el toggler de decoración hasta aquí, sabemos que funciona Establecer paredes, decoraciones para cada bucle es operaciones de componentes. Da vuelta al nombre del enumerador. Sí. No queremos esto exactamente. Lo que queremos es la primavera. Queremos este nodo. Este nodo devuelve, vamos a imprimirlo cadena por ti. Aquí, conectemos estos dos, así vamos a tener esto correcto. Y compilando juego Ahora, tendrá algunos números y nombres raros . Dirección E. Bien. E direcciones, numerador un numerador dos, numerador Ahora bien, si conserva un nombre muy genérico, como puedes ver. Yo para ser honesto, pensé que habría estado devolviendo el número de byte. Pero sí. Entonces este era el problema. Cierra esto, así que no necesitas esto. Aquí. Desde el elemento array, necesitamos um para cadena, y luego esa cadena, nos conectamos al remolcador Y lo convierte automáticamente en una variable de texto una variable de nombre. Oh. Juguemos a esto una vez más. Y deberíamos poder ver habitaciones. Habitaciones cerradas. Sí. Están completamente cerrados. Y creo que es hora de poner realmente algunas paredes reales en las habitaciones. Oh, vayamos a una decoración y creemos una nueva función. Y vamos a nombrar esta función. Paredes. Vamos a entrar en él. Ya estamos en. Pero antes de comenzar a programar esto, vamos a necesitar una nueva malla de ático aquí. Esto se debe a que se trata de una habitación. Cuando estamos intercambiando dos paredes, también debemos poner un techo porque si no tiene techo, entonces son solo cuatro paredes No es realmente una habitación, ¿no es ahora? Entonces, vamos a presionar add, vamos a agregar una malla estática. Y vamos a ponerle nombre a este techo. Así es como se deletreó. No estoy segura. Otra palabra difícil de deletrear. Vamos a seleccionar un lío estático para ello. Creo que hay una malla ctic. Para el material, ¿ tiene un muro de piedra? Por defecto, vamos a ir a su visibilidad. Y ponerla en invisible. Y en realidad podemos cerrar su colisión también. Entonces vamos a ir a su configuración de colisión. Por supuesto, más adelante cuando estemos construyendo el juego, estaremos cambiando muchos de los ajustes y tipos de colisión y tipos objetos y todo lo que interactúen con, pero eso es más tarde. Presets de colisión, et know. No queremos los presets de colisión. Queremos el H. Pongamos esto en los ajustes preestablecidos de colisión personalizados y configuremos la colisión habilitada para que no haya colisión Pero cuando lo hagamos visible, también debemos dejar que la colisión esté habilitada para tirar de colisión. Ahora, creo que este es un buen punto de parada para este. Deberíamos estar llenando esta función en la siguiente, así podemos explicar cómo funcionará también nuestro proceso de selección. Adiós por ahora, S eres el siguiente. 35. Agregar paredes de habitaciones: Hola, y bienvenidos de nuevo a Game Design Workshop y al motor cinco Procesal Dungeon Action Simios creación En la última. De hecho nos las arreglamos para completar las habitaciones construidas. Tenemos una cosa más que hacer, y será ahora. Pero veamos qué hicimos. De hecho, creamos la función set room walls, que es una función dentro de la decoración VP, que toma el azulejo padre, toma las direcciones de él, mira a través de ellos y a través de ese bucle, mira a través de la matriz de paredes y verifica cuáles deberían ser visibles y tener la colisión encendida. Ahora, vayamos a intercambiar muros que creamos una función pero no completamos. También agregamos el techo. Y en esta función, vamos a necesitar dos entradas. Vamos a ser del tipo entero. Ya está hecho para mí. Vas a cambiar el tipo aquí, y pongamos el nombre. ¿Cómo lo nombra? Es la variable de aquí no el índice de pared interna. Porque como decíamos, tenemos cinco juegos diferentes de paredes para las habitaciones, así que vamos a mirar a través de ellas. Sin bucle, pero seleccione un tipo de ellos. Además, necesitaremos la segunda variable, que sería índice de habitación, pero que se utilizará más adelante para escondernos y mostrar nuestros techos cuando nuestro jugador se mueva por las habitaciones. Entonces voy a nombrar el primer índice de una habitación, y el segundo índice de pared. Y voy a promover índice de sala para variable. No importa si se ejecuta algunas veces. Siempre va a ser el mismo índice de habitaciones. Y ahora tenemos que hacer un bucle for a todos los muros array. Un bucle porque vamos a manipular el componente de malla estática para establecer un elemento de malla estática para ellos. No. Por supuesto, vamos a pic mesh. Y para la malla estática, tenemos que elegir. Ahora, para que esto sea un poco más fácil, vamos a volver a nuestro mapa general. Tenemos de todo. Y tenemos uno, dos, tres, 45, hagamos cinco opciones. Uno, dos, tres, cuatro, cinco. Y para la c salvaje, solo queremos conectar el índice de muro. Llamamos índice W. Ya que estamos dentro de la función, podemos hacer esto. Ahora vamos a arrastrar selectores aquí. Porque cuando estamos seleccionando un tipo de pared, tiene o tres variaciones básicamente y una variación de puerta para cada una de ellas. Oh, vuelve aquí. Voy a añadir un pin más o pegamos co. Entonces voy a pegar. Uno, dos o cinco. Ahora, para el comodín aquí, lo que podemos hacer es seleccionar al azar en rango, y sería 022 porque tenemos tres opciones Voy a conectar esto en todas partes. Y voy a hacerlo también. Entonces, ¿por qué abrí el resumen? Es sencillo porque voy a seleccionar un muro. Voy a encontrarla en realidad, voy a hacer click derecho. Hay una opción encontrar rosa para actuar. No me ayudó mucho. Aquí está. Voy a ir al activo, arrastrarlo y soltarlo aquí. Voy a ir a la segunda pared, click derecho, cs a asset. Yo ayudaría un poco más. Arrastre y suelte aquí, y voy a repetir este proceso para cada uno de los activos. Observe que no estoy seleccionando las puertas. Esto es a propósito. Las puertas se colocarán posteriormente a través de código en ubicaciones muy específicas. Paredes de madera, Embros a activo, ros activo. Otro. Increíble cómo algunas acciones simples pueden llevar mucho tiempo. No me preguntes por qué siempre estoy cerrando el navegador de contenido antes de ir a los planos Parece un hábito. Debería estar pinchando directamente en los planos. Activo. Ahí está el activo. Aquí está. Este 12, dos conjuntos más. Este 12, cejas dos activos, y arrastrar y soltar. Podríamos haber almacenado en algún lugar toda esta información, de unos arrays de ellos y simplemente sacándolos de ahí o tablas de datos que serían más encantadoras tenerlas en la tabla de datos. Pero ya sabes, no siempre tienes lo que quieres. El trabajo se vuelve un poco más tedioso. Activos, ecuación, contenido, en la captura de pista Visión general, activo. Casi por fin terminamos, pero dos paredes más para asar. Aquí es un asado más. Todo bien. No. Antes de habilitar los techos, veamos si funciona. Pero antes que nada, vayamos al generador Mz. Vayamos al final de las habitaciones construidas. Seleccionemos las decoraciones, y vamos a llamar a las paredes de intercambio. O paredes de intercambio, y vamos a necesitar el índice. Y también vamos a necesitar índice de muro. No en este momento. El mismo nombre y convención realmente no importaban. Índice rom a índice de habitación e índice de pared de pared. La razón es porque todo esto reside en una clase completa diferente en un plano diferente Entonces esto reside en decoraciones BP ya que esta res reside en generador de laberinto BP. Entonces esto no es un problema. Esto en realidad puede ser útil a veces para tener el mismo nombre, para que sepas qué variable corresponde a qué. Donde compilar y guardar. Volvamos a nuestro nivel de juego de mapas. Guarde todo lo que pueda jugar. Ahora, deberíamos tener paredes en nuestras habitaciones. Sí, lo hacemos. Tenemos algunas paredes bonitas en nuestras habitaciones. Tenemos una habitación de madera, tenemos una habitación de piedra, tenemos una habitación de piedra musgosa Hay algunas brechas por aquí y allá, pero eso es solo colocación. Si quieres tomarte un tiempo y arreglarlo, eso sería. Creo que básicamente por lo que veo, hay que bajar un poco las paredes y va a estar bien me siento. En fin, vamos a habilitar los techos. Lo que tenemos que hacer es ir a nuestras decoraciones VP, dentro de las paredes de intercambio, cambiar a paredes. Vamos a conseguir nuestro techo, y vamos a conseguir visibilidad T. Y vamos a ect colisión habilitada. Pero esta vez, vamos a tener un pequeño truco. Mamá, en realidad de aquí. Queremos habilitar la colisión total. Permitiremos la consulta y no la física porque no hay necesidad de que el techo tenga ninguna física o alguna física de colisión, pero queremos consulta de consulta debido a nuestros eventos de clic. Entonces, hablando de los eventos de click, ahora estamos empezando a entrar en con el área de juego. Vamos a necesitar una forma de encender y apagar nuestros techos cuando estemos entrando o saliendo de una habitación. Y en este caso, sólo estoy hablando de cuando estamos caminando dentro de la habitación. Pongo pintura justo a lo que me refiero. No me refiero mientras estoy entrando aquí, estoy hablando de cuando ya estoy dentro y caminando de un lugar a otro lugar, vamos a estar cambiando azulejos. Entonces un comando debería decir que me moví un azulejo, comanul decir algo Y el laberinto, la habitación misma necesita una manera de saber si si me voy a mudar la próxima vez, si no me voy a mover dentro, y va a ser el código va a necesitar una manera de saber que todavía estoy dentro de la habitación y no me mudé afuera. Entonces para eso, vamos a usar una caja de colisiones extra aquí. Pongámoslo caja de colisión. Por qué dije extra. Aún no lo hemos hecho, pero vamos a necesitar una caja para el propio azulejo le diga al jugador en qué ficha están. Para que podamos hacer las cosas cuando sepamos en qué baldosa están. Va a incrementar esto. Quería ajustarse apenas hacia los bordes. Creo que esto está bien. Veremos en jugabilidad. Entonces, para los que son nuevos, formas de colisión forman en todas las formas. Hay cajas de colisión, capturas de colisión, esferas de colisión, incluso son formas de colisión personalizadas que podemos crear. Pero las formas de colisión básicamente se utilizan para determinar qué sucede cuando algo está colisionando con algo, pueden desencadenar la física, pueden desencadenar cualquier cosa que tenga que ver con colisiones Los hemos considerado como disparadores, por ejemplo, y a medida que te acostumbras al motor real, te acostumbras más a las formas en que los estamos usando. No. Por defecto, ya que no todas las decoraciones serán una habitación. Vamos a establecer que estas colisiones generen eventos de solapamiento a caídas Entonces esto no hace nada básicamente. Y vamos a ir a nuestras paredes a. Y cuando estemos habilitando los techos, también vamos a habilitar los eventos de generación de colisiones que generan eventos de superposición hasta ahora estará activo. Ahora, antes de seguir adelante, ya que hemos hecho muchas cosas en el generador de laberinto, vamos a la gráfica par, no necesitamos todas estas funciones abiertas. Voy a mover la gráfica par a la izquierda, y sólo voy a cerrar la pestaña a la derecha. Entonces, ahora está claro aquí otra vez. Veamos qué hemos hecho. Empezamos por desovar el primer estilo, creando la carga y todo Construimos aproximadamente la forma de nuestro laberinto. Entonces arreglamos un poco las flechas. Ahora, copiemos y pegue este porcentaje establecido. Pero necesitamos aumentar un poco la carga, y empezamos a decorar. Empezamos con una disposición básica de los ladrillos y paredes como deberían ser. Y lo que hicimos aquí fue simplemente esconder los muros que no son necesarios. Y ahora creamos algunas coordenadas para el elevador. Creamos algunas coordenadas para el pecho. Encontramos las habitaciones y construimos las paredes de la habitación. Ahora aumentemos nuestra carga. Dos, la última vez fue 0.5, digamos 5%. Un buen valor. Nosotros hicimos las acciones, cuatro de ellas en realidad, dos de ellas iguales. Entonces eso sería 65%. Vamos a cargar la pantalla progresando, seleccione los cavas que Es el laberinto. Y todo lo demás es realmente muy rápido. Pero incluso nuestro generador de laberinto sería rápido. No tuvimos este retraso de 0.1. Entonces, vamos a disminuir. Esto está tardando demasiado. Pero pongamos otro cero frente a uno. Presionemos play. Tiene tazas aquí, lo que queremos. Bien. Vamos a esconder esto otra vez. Ahora, lo que vamos a hacer a continuación no es crear las puertas, lo que vamos a continuación. Por lo general después de crear las habitaciones, decimos vamos a crear las puertas. Pero aún no es el momento adecuado. En realidad, pongamos el retraso antes de aquí. Vemos el acup un poco mejor. No es el momento de crear las puertas, y la razón por la que no es el momento. Cuando estamos creando un laberinto. Ahora mismo, tenemos todas estas áreas. Es material buggy aquí lo que está pasando. Vamos a ver qué pasa en la siguiente. Parece que hay dos materiales. No veo ni dos pisos. Vamos a revisar el piso, qué está pasando aquí. Tenemos extra. ¿Por qué tenemos? Esto no debería estar pasando. ¿Qué está pasando? ¿El techo? Sí, no aumenté la altura del techo. Vamos a poner. Esa es la altura de nuestras paredes, f cien, un poco más baja que la altura máxima. Sí, era el techo. Entro, no veo nada. En realidad, no debería haber reventado volver atrás. Sólo puedo entrar aquí y puedo poner t. y el piso. Ahora, a lo mejor el techo está un poco bajo. Pero está bien. Todo bien. Creo que este es un buen punto de parada para este. Te voy a ver en la siguiente. Adiós. 36. Puertas de habitaciones y segmentación del laberinto: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos y motor real cinco Procesal Dungeon Action ApS creación Curse Anteriormente, finalmente terminamos con nuestra colocación de paredes y colocación de qué tipo de paredes y mostrando el techo en las habitaciones? Cómo se ven más habitaciones adecuadas. Y en realidad creamos una caja para generar eventos de superposición cuando el mosaico es una habitación. Y empecé a hablar de las áreas segmentadas, pero nos interrumpió el techo que no se bajó, se subió, no bajó Se quedó encendido antes de la posición. Ahora, hablemos de las áreas segmentadas de las que estaba hablando Como pueden ver, digamos, por ejemplo, tenemos una habitación aquí, y sólo está conectando con esta zona. Esta área está aislada en comparación con las otras áreas, mientras que esta área está siendo conectada por tres habitaciones. Esta zona ha sido comunicada por dos habitaciones. Esta zona está conectando de nuevo dos habitaciones. Y esta área de aquí es solo una sola área con dos cuadras, y esta es una zona con una cuadra que conecta a una habitación. Entonces, ¿y si tuviéramos una manera de categorizar estas áreas? Básicamente, lo que haremos es que cualquier área que conecte más de una habitación, consideraremos un corredor. Si conecta dos habitaciones o tres habitaciones, es un pasillo. Si un área es individual y se conecta a una habitación, entonces es una habitación especial, habitación oculta, algo así. Y la otra categoría que podemos tener es que si un área tiene dos o tres pasillos y está conectada a una habitación Podemos considerarlo un balcón o un borde o algo así, que también es un área que es más grande que dos o tres cuadras y se conecta a una habitación. Podemos considerarlo un área especial. ¿Cómo vamos a hacer esto? Bueno, creo que todos ustedes saben la respuesta. Vamos a hacer una función. Entonces vamos a dejar de jugar. Voy a cerrar estas funciones. Ya no los necesito. Y vamos a hacer esta nueva función. Llamemos a esta función aumentada Estas son las áreas de ortografía Creo que deletreé las áreas correctamente, aunque y encuentro. No, no lo hice. Agregué un símbolo divisorio. ¿Qué vamos a hacer aquí? Tenemos que explicar. Esta va a ser una gran función otra vez. Vamos a abrir la pintura en realidad. Voy a ser un poco más fácil. Consideremos que tenemos nuestro mas. Esta fijación por aquí marcó toda la diferencia. Ahora, en este laberinto, tenemos algunas habitaciones. Y luego tenemos algunas paredes que están separando las áreas. Hazlos más grandes. A aquí, aquí, et's apagados y tal vez aquí o aquí. Esto es un ect. Ahora, como dijimos, vamos a separar algunas áreas a corredores Representemos ese gris. Entonces, básicamente, esto sería un corredor. Y esto sería un corredor porque conecta dos habitaciones. Ahora, el naranja sería el área secreta, y el azul sería un balcón. Y el morado sería un área especial porque conecta solo a una habitación y es más grande que dos o tres cajas. Digamos tres. Oh. ¿Cómo vamos a hacer esto? Ahora mismo, nuestro laberinto, nuestro calabozo, tendrá algunas paredes levantadas. Oh, lo que vamos a hacer es que vamos a usar estas paredes. Digamos, vamos a tomar, por ejemplo, un área aleatoria. Vamos a tomar esta. Polar no es el mejor. Redonda. Vamos a partir de aquí, por ejemplo, y vamos a trazar líneas, ¿qué es el trazo de línea? Una técnica utilizada para detectar objetos a lo largo de una línea en la palabra del juego básicamente. Implica proyectar una línea invisible o una visible si la depuramos desde un punto de inicio hasta un final y verificar si hay colisiones con objetos en la ruta Esa sería una explicación aproximada. Entonces, lo que vamos a hacer es que vamos a trazar un trazo de línea desde nuestro punto. Sin palabras nuestros vecinos cruzados. Pienso o algo parecido. Entonces, lo que estaremos buscando es cuál de los vecinos está directamente conectado conmigo. No tienen pared entre, no tienen espacio entre en realidad era es lo único que nos importa. Entonces, cuando hagamos eso, los vamos a estar agregando en una lista. Pero este vecino está bien, este vecino está bien, este no lo es, este no es porque aquí chocamos contra una pared, y aquí en realidad también golpeamos una pared, que es el fandangon externo Ahora, con esa lista, vamos a repetir el proceso y jugar un poco con variables y agregarlas y eliminarlas de listas para crear qué áreas están conectadas, y con cuántas habitaciones se conectan. Porque esta podría no ser un área vacía, sino que es una habitación, así que necesitamos diferenciarnos para eso. No. Básicamente, esta es la teoría detrás de sobre lo que vamos a hacer. Posiblemente usaremos dos veces la frase de línea, una vez para un primer cheque, una segunda vez para un segundo cheque, pero estaremos explicando siempre y cuando estemos creando un largo. Entonces, comencemos. Vamos a hacer pop esta jugabilidad. Y volvamos a nuestro generador M en las áreas segmentadas finas Ahora, claro, de nuevo, vamos a usar las coordenadas del calabozo, y vamos a conseguir las llaves Esta vez, vamos a estar promocionándolos en una variable local. Vamos a llamar a esta variable claves de mazmorra. Porque podríamos necesitarlos en el camino y arrastrando cables Va a ser un hussle ya que esta función será enorme e incluirá otras funciones dentro Ahora, a partir de estas claves dngon, vamos a conseguir P. Entonces, vamos a partir de nuestro primer índice, que sería Índice cero y empezar a verificar desde ahí Voy a promover esto una variable llamada Estudio, una variable local. Y conecta esto aquí. Oh, este será el punto de partida para estudiar. Esta es la primera se. Tenemos que empezar por alguna parte. Por qué no empezar por el principio. Vamos a comprobar a cuántos mosaicos está conectado y cómo se conecta? Oh. Lo que vamos a hacer es también crear una variable local de matriz temporal. Vamos a llamarlo. Ray, O. no me gusta que esto me vaya a Cardy Cordones uno Llamemos a este estudio coords uno. Oh, voy a estar trayendo esto debería ser una matriz, y calzo ser un punto en Muy molesto cuando estás promocionando algo a una variable local. No se guarda en la memoria porque crearon otro contador de variables antes del cual queremos que estés usando. Esto pasó un poco de co, creo. Ya que estamos, vamos a utilizar esta matriz de estudio para agregar El punto de estudio. Debido a que esta sería la primera matriz, estaríamos sintiendo, y luego vamos a estar probando contra otra matriz. Básicamente, vamos a estar sintiendo esta matriz ahora mismo, siempre y cuando las trazas de líneas, por ejemplo, no golpeen paredes, realmente volvamos un poco atrás a pintar. La forma en que en realidad va a funcionar será vamos a elegir un nuevo color, vamos a elegir es rojo brillante. Sí, es que estamos empezando por el estudio, y vamos a estar revisando a los vecinos. Entonces esta será una de ellas. Este será el otro de ellos. Este será uno más, y éste será uno más. Estos dos de aquí, éste, y éste, van a ser añadidos a la lista porque son los correctos. Entonces vamos a estar comprobando de esta lista, donde hacen esta y esta se conecta. Entonces básicamente se conectan a esto, esto y esto, y vamos a estar transfiriendo cada lista entre nosotros y probando y probando nuevamente hasta que no pueda agregar más, y estas dos listas son iguales, y cuando son iguales, pasamos a la siguiente parte. Oh, vamos a continuar. Ahora, tenemos que hacer pruebas para los dos primeros vecinos. Vamos a hacer estudio, estudiar cultivable. Vamos a encontrar bs adyacentes, y vamos a pasar por alto a través de eso La razón por la que agregamos estudio antes de hacer esto es porque queremos incluir el estudio a cualquiera que sea nuestro resultado, porque si no lo agregas, entonces ahora solo vamos a empezar a buscar vecinos. No vamos a volver a ir al primero. Entonces lo agregamos antes de iniciar todo este procedimiento. ¿ Pertenecen los vecinos al calabozo? Entonces vamos a hacer un mapa de contener. Y claro, el mapa sería nuestro calabozo. Andon arriba, y vamos a blanquear y conectar esto aquí Ahora vamos a traer nuestro rastro de línea. Trazo de línea O, por canal. ¿Qué significa por canal? Ahora, tenemos la visibilidad del canal y la cámara. Este es un canal de colisión. Lo que eso significa es que cuando fuimos a decoraciones, por ejemplo, y seleccionamos la caja, cuando vamos a colisiones y abrimos los presets, podemos ver el tipo de objeto word dynamic Y luego podemos ver las respuestas a este tipo de objeto. Esto pero este tipo de objeto, pero ¿cómo responde esta colisión al resto de los tipos de objetos? Tipos de objetos como visibilidad, objetos como cámara, tipos de objetos como palabra estática. Todo depende de la configuración de aquí? Voy a ir sobre ello un poco más en detalle más adelante cuando estemos haciendo el juego, qué colisiones serán muy importantes sobre las huellas y todo Ahora mismo, solo vamos a usar el canal de la cámara porque visibilidad se utilizará desde nuestro juego. Y como vamos a tener algunas cosas apagadas en la colisión de visibilidad, entonces vamos a usar cámara que siempre va a estar encendida, como si estuviera interactuando con cualquier línea de traza que le esté golpeando mientras que la visibilidad, cerraremos algunas de ellas. Ahora, continuemos. Vamos a ir a nuestro generador de laberinto. Vamos a elegir la cámara de línea base, y necesitamos un inicio y fin en este nodo. Entonces, para el inicio, lo que vamos a hacer es que necesitamos que tengamos las coordenadas. Tenemos que encontrar al actor en la mazmorra. Vamos a enrollar, y vamos a conectar esto aquí y conseguir atent actor A esta ubicación de actor, vamos a agregar eje A Z, así que está un poco más lejos del piso Pongamos este 25. Está un poco más alto que el piso, y ahora necesitamos un final. En este caso, porque el próximo arqueado será diferente. En este caso, nuestro fin será nuestro estudio. Porque estamos dibujando de los vecinos de los vecinos encontramos así es las coordenadas de un vecino. Este no es nuestro estudio. Entonces estamos comenzando en el vecino y terminando en nuestro bloque de estudio. Entonces voy a encontrar de nuevo, voy a copiar esto. Conecta esto, conecta esto, y voy a catión, voy a copiar y pegar la altura, para conectar esta esfera, y luego conectar esta esfera hasta el final, y sí tenemos un trazo de línea. Ahora bien, si escribí el tipo de error, esta opción por aquí, que nos muestra una línea, y la hago persistente y en realidad llamo a esta función por aquí. Áreas segmentadas después de la carga. Tenemos a la carga entonces sí, jugar, deberíamos ver esta línea apareciendo aquí. Ahora bien, este solo tiene un vecino válido, por lo que lanza una línea. Intenta tirarlo desde el principio desde el vecino hasta el principio. Y como podemos ver por aquí, aquí es donde encontró un golpe. Nos dice que este bloque tiene una pared. Entonces en este caso, no lo estaríamos agregando a la lista. Ahora, creo que este es un buen punto de parada para esta lección. Vamos a continuar más tarde con la lógica y un poco nuestros resultados de calor fuera, que es la forma en que estamos obteniendo los datos que acabamos, y también el valor de retorno, que es si realmente se calentó o no. Esto es más de lo que calentaba. Más explicaciones sobre la siguiente. Adiós por ahora. 37. Segmentación de las áreas de mazmorra: O Hola, y bienvenidos de nuevo al taller de diseño de juegos y al curso de creación de RPG de acción Dungeon real Engine five procedural Anteriormente. Comenzamos con nuestra función áreas de segmento fino, que dividirán nuestro laberinto en base a algunas reglas, los corredores de conexión, básicamente, a diferentes tipos de áreas Tendremos, como dijimos corredores, tendremos balcones Fuera, tendremos algunos tipos diferentes de áreas. Entonces, comenzamos a hacer esto agregando nuestro mapa de mazmorras, obteniendo nuestras claves de mapa de mazmorras y promocionándolas a una variable A partir de eso, obtuvimos el primer índice porque decidimos, ese es un buen lugar para comenzar, y lo agregamos a la matriz de coordenadas Estudio. También promovimos eso a una variable, que va a ser el primer bucle for del que vamos a obtener los vecinos. Acerca de los vecinos, y cuando los vamos a agregar, va a ser el de los cordones de Estudio. Y como decíamos, vamos a por loop y hacemos algunos trucos para comprobar por toda la zona. Ahora bien, la forma en que estamos buscando sobre estos azulejos que están en esta zona están divididos por habitaciones por paredes es creando una línea tras que proyectamos desde el vecino hacia nuestro azulejo de estudio. Y esto nos dirá si le pegó a algo o no. Como describimos, cuando usamos el persistente dibujar la bolsa tipo persistente. Podemos ver en nuestro primer estilo, pero sí necesito ubicar el estilo cero. O. Creo que al mismo tiempo que ero se convirtió en una habitación. Posible. Antes No. Hurdas. Estoy un poco ciego. Este un mosaico cero se conecta a este y este con un trazo de línea. Esta vez no tuve muro. Voy a crearlo muy rápido. Yo quería tener una pared, y tiene dos paredes. Entonces estamos partiendo del vecino y esta es nuestra línea de deba, que se vuelve verde cuando ha golpeado algo. Cuando obtenemos esta cajita y se pone verde, significa que calienta algo y la caja es el indicador. Ahora, hablamos de eso cuando usamos algunas reglas basadas en nuestro resultado de sombrero y nuestro valor de retorno. Básicamente, sólo vamos a usar el valor de retorno, que es, ¿golpeó algo o no? Voy a presionar B, conectar esto aquí y aquí, si calentaba algo, no hacemos nada. No lo queremos a nuestras coordenadas, la de coords. Vamos a traer esto aquí. Pulsa y voy a conectarlo a false porque si no teníamos algo, significa que está en la misma zona, y voy a conectar esto al elemento array. Ahora bien, de lo que quiero decir algunas cosas es del resultado de calor. Si rompemos esto porque es una estructura, si pasamos el cursor sobre ella, podemos ver la estructura del resultado de calor Podemos ver que tiene algunos datos. En realidad tiene mucha información, no poca información. Como actor de calor, tiene la ubicación del calor, el punto de impacto exacto del impacto. Tiene la distancia desde nuestro inicio hasta el calor, el tiempo que tardó desde el inicio de la línea t carrera, calentó algo. Y empezar a terminar, claro, tiene mucha información. Esta es una estructura muy agradable para usar incluso para depurar cosas, como si tienes un sistema de depuración, que lanzas un trazo de línea y quieres probar las cosas por Este es muy buen punto de partida para crear un sistema de depuración por diversas razones. En fin, solo quería mostrar esto básicamente que hay esto, esto es una estructura. Tiene tantas variables que nos puede dar. Ahora, continuemos con nuestro Algoritmo. Como dije, vamos a necesitar una nueva matriz de cordones de estudio para poder comparar entre cada uno de ellos. Si hemos archivado todas las posibles coordenadas de la zona determinada que estamos comprobando. Voy a crear una nueva variable. Voy a ser del tipo punto. B aquí. Voy a nombrar a los ds Esta convención de nomenclatura no es la mejor, pero lo hacemos por ahora Oh, nuestro siguiente paso es promover nuestros Cuerdas de Estudio uno, dos cordones dos. Voy a conectar esto aquí. Lo que tenemos que hacer es similar a esto. Voy a copiar y pegar esto. Nosotros aquí. Y lo que necesitamos primero, otro for loop. Esa apuesta porque queremos pasar por cada uno que encontramos, como vimos aquí, hubo casos en los que estábamos agregando uno, estábamos agregando dos, o podría haber casos en los que incluso estamos agregando cuatro ubicaciones. Queremos pasar por todas estas ubicaciones, y luego para cada una de ellas, verificar por los vecinos. Necesitamos este bucle extra de cuatro, y esto se convierte en un lío cuatro. Esto se convierte. De todas formas. Ahora, tenemos que cambiar un poco las reglas. Por supuesto, necesitamos un inicio y final igual como del vecino al de estudio actual. Y el estudio actual es el que estamos obteniendo el resultado de este cuatro bucle de aquí. Voy a conectar un poco este punto. No. Como dije, necesitamos algunas reglas extra, y la regla extra sería ¿Estudio uno contiene alguno de los vecinos que estamos revisando? Porque si está conteniendo, no deberíamos agregarlo de nuevo. Entonces, voy a pedir estudio uno contiene m Esto fuera esto por aquí. A traerlo aquí. A lo mejor aquí vamos a hablar. Que sea un poco claro las líneas están conectadas. Uno. Sí, son espaguetis. Siempre es un poco de espagueti. Puedes pasar más tiempo y hacerlo más visible, más claro a la vista. Pero creo que si entendemos la lógica de lo que estamos haciendo, entonces va a ser más fácil. Ahora, voy a necesitar otra condición aquí, no condición, un nodo, que va a ser el m. Lo usamos antes, lo que significa que si cualquiera es dos. En realidad, no queremos el aquí. Queremos ser si está en el calabozo, continúe. Necesitamos una segunda sucursal en realidad aquí, vamos a hacer algo de espacio. Entonces la segunda rama sería si ya pertenece a las coordenadas, no hagas nada. Queremos el pulso de éste. Voy al pulso aquí. Voy a desconectar este pulso, y conectar esto porque a partir de esto, queremos hacer esta pregunta por aquí. Está bien. Estas cosas paginaron. En fin, vamos a estar manteniendo las coordenadas de estudio una ya que califican que estamos agregando algo Y cuando todo este orop haya terminado, vamos a estar comprobando Si la longitud de nuestras cuerdas dy uno es igual a las cuerdas de estudio dos. Ahora bien, ¿por qué hacemos esto? Porque si aquí, agregamos algo a esta lista, y Ady Cords dos no estaba completa. Agregamos algunas piezas nuevas. No, hagámoslo. Rancho y pregunta, ¿ nuestro Ady coords dos de longitud es igual al Study Cords uno? Oh, si no es igual, vamos a este uno o dos. Como nada en ella. Y lo que en realidad vamos a hacer es el mismo bucle. Vamos a estar agregando el Cordones uno, dejándolo en los Cordones dos. Entonces vamos a comprobar si podemos agregar algo al de coords uno Y si añadimos algo, entonces irá una y otra y otra vez hasta que termine. Creo que este es un buen punto para este. Te voy a ver en la siguiente. Adiós. 38. Finalización de la mecánica de segmentación: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos, Real Engine five Procesal Danson Action ARPC Creation En la última lección, continuamos con nuestra función de áreas bien segmentadas Creamos los Cordones de Estudio dos Variables, los cuales promovemos nuestros Cuerdas de Estudio. Y luego nosotros para todos nuestros Cuerdas de Estudio uno. Se revisan todas las áreas que hemos agregado. Ahora, revisamos estas zonas por el noreste oeste sur, todos los vecinos, y preguntamos si pertenece a la mazmorra o si ya está contenida en el Estudio uno Después, hicimos nuestro sistema de líneas de rastreo que estamos comprobando si chocamos contra una pared o no. Y si no lo hacemos, agregamos estos cordones al Estudio uno. Cuando termina el bucle cuatro, el primer bucle cuatro, lo que significa que ha completado todas las coordenadas del estudio uno, estamos comprobando si nuestras dos coordenadas de Estudio son iguales a Estudio uno, porque antes de hacer esta acción para agregar cosas nuevas, promovimos las de estudio a las dos coordenadas de Estudio Ahora bien, si esto era Cuando esto era falso, no es cierto. Mi mal. Despejamos Estudio dos, y lo restablecemos para que sea igual a Estudio uno. Entonces intentamos nuevamente agregar para estudiar una nueva coordenadas, y si no hay nuevas que agregar, continuaremos ahora con la parte verdadera, que es cuando Estudio dos es igual a Estudio uno, y significa que no tiene más coordenadas. Lo primero que necesitamos es crear otra estructura como el array de habitaciones ST que contendrá las coordenadas para nuestras áreas segmentadas Pero como va a ser del mismo tipo de estructura, va a ser solo una estructura que tenga una matriz de coordenadas, una matriz de puntos finales. Podemos usar la misma estructura. Así que puedo pasar la matriz de habitaciones ST y llamarlo ST todas las áreas. Y va a ser del tipo variable habitaciones ST, que podemos renombrar, pero dejémosle habitaciones ST, que es como dijimos, una matriz de coordenadas. Voy a traer esto aquí, y voy a presionar add. Ahora, voy a conectarlo a. Hablemos de este nodo de aquí. Esto necesita una estructura. Antes hicimos una estructura, y dijimos que en realidad podemos dividirla y agregar las coordenadas aquí. Ahora mismo, vamos a hacer esto. Solo vamos a dividirlo y agregarlo así porque sí funciona, pero es mejor a toda la ruta de hacer una estructura y agregarle miembros si eres muy nuevo en las estructuras. Si tienes experiencia con ello y sabes cuándo funcionan las estructuras, podrías hacerlo cuando sea necesario disponible. La razón que estoy diciendo es porque las estructuras pueden crear problemas. Por ejemplo, si voy y cambio algunas cosas en la estructura, entonces muchos nodos como este necesitamos reconectarnos Porque cuando lo he dividido aquí, no siempre actualizará las variables. Yo recombino, tenemos la estructura, y si agrego algo a la estructura, voy a la variable de la estructura y le agrego algunas variables más, y esto podría tener un problema Voy a dividirlo, y voy a traer uno a nuestros coords de estudio Y lo voy a conectar aquí porque los cordones de estudio uno y los cors de estudio dos son ahora iguales Pero esto va a estar creando una lista básicamente de nuestras áreas segmentadas como lo hizo para las habitaciones Ahora bien, lo siguiente que voy a hacer es que voy a despejar una de las coordenadas de estudio Y ahora tenemos que continuar con la comprobación del resto de las áreas. Porque como lo hicimos ahora, partimos del bloque de estudio cero, y comprobamos, cuántos de los mosaicos están conectados al bloque de estudio cero. Primero, comprobamos si están conectados, verificamos para más. Vamos a jugar si conseguimos un ejemplo. En S, mapeó todo el estudio, uno, todas las coordenadas desde puntos cero que no están conectados que no están bloqueados por habitaciones, por muros o habitaciones. No, tenemos que hacer esto por el resto del laberinto. Para hacer esto, en realidad vamos a volver a ejecutar todo esto aquí Pero primero, necesitamos crear un verificador. ¿Me quedan más lugares para estudiar? Porque si todos los lugares están mapeados, entonces esta cosa debería dejar correr. Bien, vamos a crear eso. Lo primero que necesitamos son nuestras llaves de mazmorra, y vamos a tirar de bucle a través de cada una de ellas. En realidad, porque esto es algo que va a ser una regla que queremos comprobar si vamos a ejecutar esto de nuevo o no. Esto sería y debería ser o con descanso. Porque aquí vamos a seguir la misma lógica. Vamos a usar una variable. Voy a crearlo en local, va a ser tipo b, no va a ser una R va a ser soltero. Llamemos a esto pertenece. Si pertenece, ¿entonces a dónde pertenece? Si pertenece a las reglas que vamos a crear. Y cada chequeo que estamos haciendo es pertenecer a las llaves del calabozo, entonces significa que ya terminamos Significa que hemos revisado todas las áreas. Si no pertenece si algún cheque de aquí no pertenece a ninguna de nuestras reglas, entonces significa que tenemos que ejecutarlo de nuevo, o el elemento c A, la ordenanza determinada. No, voy a conectar eso pertenece aquí, y voy a dejarlo para que se ponga a caídas porque cuando comencemos a verificar todas las variables, aquí es donde queremos que esté apagada o cada variable. Vamos a necesitar otro o cada bucle con break, vamos a conectarlo aquí. Y ahora necesitamos la variable que ha creado el ST todas las áreas. Porque vamos a comparar ¿esta llave de mazmorra pertenece a alguna de las áreas Si no pertenece a ninguna de las áreas, como decíamos, vamos a reiniciar esto. Vamos a rastrillar la estructura, que son las salas ST, y vamos a preguntar si alguna de estas matrices contiene directamente, no necesitamos para bucle para cada una de estas y omitir que contiene Podemos preguntar directamente esta matriz contiene el valor original. El valor del estudio actual. A lo mejor. Oh, voy a poner una sucursal aquí. Voy a poner aquí, y poner aquí, y luego, vamos a establecer pertenece a la verdad. Entonces esto significa este valor que estamos comprobando, ya pertenece a un área. ¿Vamos a romper? Y continuar con una pregunta que ¿le pertenece? Porque tal vez en este cheque, terminamos con todo lo falso. Lo que estamos comprobando no pertenece a ninguna zona. Existe la posibilidad no sólo de pertenecer a no pertenecer a una zona. Esto podría ser una habitación. Ya que estamos revisando todas las llaves del calabozo Y si se trata de una habitación, siempre activará caídas a todas las áreas. Entonces tenemos que pedir que pertenezca a una habitación. Y aquí vienen las coordenadas de todas las habitaciones que almacenamos en una matriz. Entonces no tenemos que ir no tenemos que hacer esto en realidad. Si tuviéramos todas las áreas también en una matriz, podríamos preguntar si está conteniendo Pero me parece más adecuado en este momento, más tutorial, como, si se quiere, tenerlo como hornear ST y familiarizarse con el uso de estructuras en una matriz Vamos a preguntar si se está quejando. Y vamos a poner una rama, y si esto es falso, no es cierto. Por supuesto, necesitamos obtener las coordenadas actuales. Nosotros lo hemos hecho. Y ahora, lo único que nos importa es que si esto no es cierto, si no es cierto, vamos a agregarlo para que sea el estudio actual. Y cuando encontremos bloque para estudiar, deberíamos estar rompiendo nuestras llaves de mazmorra para encontrar el estudio Bajar en realidad un poco. Un error, sí necesitamos algo a la verdad. Sí necesitamos que eso pertenezca a ser verdad. Entonces nosotros tampoco necesitamos conectarlo. Solo tenemos que darle la vuelta porque cuando salimos del bucle principal, cuando salimos de nuestro bucle de llaves de mazmorra, necesitamos preguntar si pertenece Vamos a usar una sucursal, y vamos a ir a pertenecer. Si pertenece, B si ya no pertenece, como dije, tenemos que volver a ejecutar todo el asunto. ¿Y cómo lo vamos a hacer? Vamos a arrastrar un sable enorme desde s hasta el inicio de nuestro add Agrega las dos las llamadas, que en realidad, voy a desconectarme de aquí, solo conéctalo así. Compilar y guardar. Ahora bien, este bucle todo se ejecutará hasta que termine todas las áreas. Probemos si funciona, comencemos. Y todas las áreas están segmentadas ahora mismo. Tienen sus propias flechas. Y tenemos categorías. Casi tenemos categorías. Los tenemos en una lista. Pero lo siguiente que debemos hacer es crear algunas reglas a partir de esa lista para definir nuestras áreas. Pero eso es algo. Vamos a partir para la siguiente. Adiós por ahora. 39. Categorización de áreas por tamaño: Hola, y bienvenidos a Game Design Workshop y real Engine five procesal Dungeon action RPG curso de creación Anteriormente, creamos terminamos con el bucle de áreas de segmento de pino. Creamos la parte que estamos almacenando todas las áreas en una variedad de habitaciones ST fcture Y creamos un mecanismo para verificar si alguna de nuestras llaves de mazmorra pertenece a alguna de las áreas que acabamos de crear, o pertenece a una habitación Si no lo hace, significa que todavía tenemos cosas que verificar, y vuelve a ejecutar todo el algoritmo. Ahora, lo nuevo que necesitamos es categorizar estas áreas. Y Sorpresa sorpresa, vamos a necesitar una nueva función para esto. Vamos a crear una función. Llamémoslo carros áreas. De hecho, llamémoslo encontrar áreas de segmento. Vamos a entrar en él. Ahora, lo primero que vamos a necesitar es pasar por todas nuestras áreas. Entonces voy a conseguir el ST o áreas, y voy a bucle. Digamos que es una estructura, tenemos que romper. Ahora, hazlo fácil para nosotros. Tenemos una regla simple de cuántos bloques, cuántos azulejos es cada área. No, podemos obtener la longitud de esta matriz, las coordenadas de habitación del área, y podemos promover la habitación en realidad a una variable local que vamos a llamar. Y aquí lo vamos a conectar. Y de nuestra longitud, nuestra longitud entera. Vamos a que int porque nos da ¿cuántos azulejos tiene esta zona? Oh, vamos a tener una regla para no cero fichas. No necesitamos el azulejo cero en realidad. Vamos a tener para uno, dos o tres. Y vamos a eliminar el cero. En realidad, para eliminar el cero, que puede iniciar el índice de uno. Y vamos a quitar el o cuando esté por encima de tres, ¿cómo va a encender esto en reaccionar? Se ejecutará el cable por defecto. Aquí dentro, vamos a dejar el valor por defecto. Si quisiéramos reglas más especiales, podríamos haber hecho un interruptor en int y especificar los AC que queremos por aquí. Por ejemplo, no querríamos cuatro, necesitaríamos ocho, querríamos otros números específicos. Ahora, comencemos con nuestras reglas para áreas de una baldosa. Entonces, lo que necesitamos es primero verificar si nuestro ese caso, que es una matriz, que no importa. Aunque sea uno, vamos a obtener la primera copia, que es cero, que es la única copia cuando tenemos una longitud de uno, y vamos a romper esto. Ya que es un punto, es una estructura de dos enteros, y vamos a comprobar si son iguales a cero Aquí vamos a usar la bola final, lo que significa que ambos tienen que ser ciertos para que esto se desprenda a través. Vamos a poner una sucursal, vamos a conectar esto, y vamos a conectar la sucursal al número uno. Es esto, tomamos espacio de libido, podemos aumentar la altura libit pero podemos trabajar aquí Ahora bien, ¿cuáles son las posibilidades de tener una cuadra? ¿Qué podría ser esto? Entonces, esto podría estar dolorido. No necesitamos este. Tú. Corteza. Y o. ahora, digamos que tenemos un bloque aquí, un azulejo aquí, un azulejo aquí , un azulejo aquí, un azulejo aquí, en realidad, haz eso. Voy a hacer la grilla maravilla. No. Digamos que tenemos una habitación por aquí. Entonces tenemos algunos muros aquí, y tenemos otra habitación por aquí Este estilo de aquí podría estar conectando esta habitación con esta habitación. Se trata de un corredor. El otro caso que podríamos tener es que, digamos, por ejemplo, no conecta con esta sala. S. Entonces este es le aquí. Entonces podemos llamar a esto una habitación oculta. Tengámoslo en una opción especial por sí solo, como un azulejo que está conectado a una habitación, y no conecta con nada más. Y la tercera opción sería el azulejo de inicio, no conectando nada y siendo como una habitación oculta, que no queremos que sea una habitación oculta. Es una ficha inicial. Entonces es por eso que estamos comprobando el primer mosaico aquí. Entonces, si es el primer mosaico, deberíamos agregarlo a una nueva categoría, una nueva matriz de estructura de sala ST. Va a duplicar todas las áreas. Y voy a todos estos corredores S. Se trata de corredores ST. Voy a borrar uno de ellos. Pasillos SD, y voy a traerlo aquí. Si esto es cierto, voy a agregar nuestro estudio. Voy a dividir, y voy a traer estudio aquí, y seleccionar conectado a true. Ahora bien, si vamos y pres jugamos, podemos ver que hay bloques que tienen flechas hacia las habitaciones Pero el primero, no en este caso, porque continuó a partir de aquí, así que 012 en realidad esto es seis, adivinando, quién está Sí. Continúa en línea recta. Entonces pero hay veces que tenemos las flechas están apuntando hacia habitación, aquí, tenemos un ejemplo perfecto. Esta loseta conecta ambos lados. Entonces tiene ambas flechas. Si se tratara de una habitación oculta, solo tendría una baldosa. Sería más como éste. Tienes el único punto de flecha hacia la habitación, y sería un diáfano Entonces tenemos estas flechas, podemos decidir si nuestros casos de estudio de un azulejo son conectores o una habitación oculta No. No te detengas. Hay un mensaje de error. ¿Cuál fue el mensaje de error? Añadir entrada de movimiento. Controlador de arriba hacia abajo. Bien, esto es porque no hemos arreglado el mando para el juego y todo. Arreglaremos esto más adelante. Ahora bien, lo que necesitamos es este valor de aquí, nuestro estudio de caso, y necesitamos las direcciones de la baldosa. Oh, lo vamos a encontrar en nuestro calabozo. Mapa de estiércol. Y ahora tenemos al actor. Y del actor, podemos obtener nuestras indicaciones. Yo me salen los valores. Vamos desde el lado de los valores esta vez. Podríamos hacerlo desde ambas direcciones. Lo que realmente necesitamos son los valores porque no nos importa si es nororiente sur u oeste. Nos importa cuántas de las flechas son visibles. No nos importa si por la dirección de ellos. Ah, para contar cuántas flechas, voy a usar un contador. Voy a crear una variable local, voy a llamarla contador contador local. Y va a ser del tipo entero. Y cuando voy a ejecutar mi bucle de cuatro en los valores, quiero que empiece desde cero. Voy a ponerla a cero antes del bucle de cuatro. Voy a por cada bucle. Y conecta esto aquí. Y la pregunta sencilla es, ¿cuántos de estos y cuántos no? Voy a poner una sucursal para conectar, y voy a poner mi contador local dos más uno. No cuando esto termine, voy a preguntar con una sucursal. Es mi encuentro uno. Porque si no es uno, es un corredor. Voy a conectarlo para agregar un corredor. Si es uno, entonces es una habitación oculta. Voy a duplicar los pasillos, la variable y nombrarla en habitaciones Voy a traer esto aquí. S agregar. Y voy a agregar a esta estructura matriz de arrays. O variable de estudio. Y ahora hemos categorizado todas nuestras habitaciones de una sola baldosa para que sean pasillos o habitaciones ocultas Creo que este es un buen punto de quiebre por ahora. Bueno como tú en la siguiente. Adiós. 40. Reemplazo de piso por categoría: Hola, y bienvenidos al taller de Diseño de Juegos, y Real Engine cinco procedimientos Dungeon action BZ llamadas de creación Anteriormente, terminamos con nuestra categoría de habitaciones de azulejos uno. Se utilizó el estudio que creamos al principio, que es la matriz D de coordenadas dentro de nuestras áreas STO. En este caso, este estudio solo tiene una baldosa ya que estamos comprobando la longitud y cambiando entre ellas. Y como tenemos este azulejo, estamos comprobando si es el primer azulejo. Si es el primer mosaico, lo estamos agregando a nuestra coordenada a nuestra matriz de corredores, array tract Y si no lo es, estamos comprobando si es un bloque que tiene una o más salidas. Si tiene más de una salida, es un corredor. Si solo tiene una salida, es una habitación oculta. Ahora, continuemos con las estructuras de dos y tres longitudes, lo que significa que estas áreas tienen sólo dos o tres tejas. Dijimos, vamos a hacer una categoría especial para estos azulejos, que se va a llamar balcones. Y no es sólo que hay dos o tres largos porque, por ejemplo, jugar, podríamos tener suerte y obtener este ejemplo. Ch. Bien. Ya ve éste. Este conecta En realidad, no lo hace. Simplemente conecta una habitación. No, conecta dos habitaciones. Conecta una puerta aquí y una puerta aquí, y esto está al final. Ya que está conectando dos habitaciones, y es un azulejo de tres tamaños. No debería ser un corredor. No debería ser un balcón. Debería ser un corredor. Aquí, tenemos una habitación secreta, y su balcón sería éste, como una habitación que se conecta a dos azulejos y por una puerta, y están conectando a nada más. En nuestra regla fijada para los dos, tenemos que hacer también la pregunta. ¿Conecta más de una habitación? En este caso, este mostrador local no sería suficiente. Y si estamos comprobando si es justo lo siguiente, en realidad, vamos a mostrarlo en acción. Entonces lo que vamos a necesitar es un nuevo contador, llámalo local ahora. A. Y vamos a empezar limpiando esta matriz. Aún no es una matriz. Tenemos que seleccionarlo aquí dos conjuntos a una matriz. S cambiar el tipo de variable. Vamos a conectarnos con n tres. Por qué estamos limpiando Porque cada vez que corremos por una nueva área SD, queremos que esto se reinicie. Oh, vamos a conseguir nuestro estudio, y vamos a flop para cada Ahora, vamos a encontrar cruz adyacente. Lo que quería decir antes es que cuando estamos buscando css adyacente, podríamos estar revisando la misma habitación más de una vez como dos cordones. Dos azulejos podrían estar yendo en la misma habitación. Oh, para comprobar esto. Lo que vamos a hacer es que vamos a para cada bucle de los adyacentes. Entonces vamos a revisar a los vecinos. Si pertenecen a una habitación. No, en realidad vamos a hacerlo, si contiene ahora mismo porque no podemos hacerlo con nuestros puertos de todas las habitaciones. Porque si hago un contenedor aquí, Ray. Qué contengo aquí. Quiero saber qué habitación está siendo contenida. Oh, necesito la habitación uno, habitación dos, la habitación tres variables. Y esta es nuestra ST, todas las habitaciones. Habitaciones ST ray. Necesitamos nuestra estructura porque nuestra estructura tiene que esta es la habitación uno. Esta es la habitación dos, esta es la habitación tres. Así que vamos a hacer un bucle. A partir de esta de aquí. También. No estamos en bucle desde las habitaciones. Se revisan los adyacentes porque esto solo nos da cada cuatro bucle aquí serán cuatro veces. Como corriendo para cada estudio, éste dará como resultado dos cálculos más. Creo que vamos a romper esto. Y ahora podemos comprobar si estas coordenadas están siendo contenidas en alguna matriz de las habitaciones ST. O iban a b contener. A ellos les gusta esto aquí, pueden usar una sucursal para comprobar si esto es cierto o no. Ahora, la nueva parte viene justo aquí. No solo agregaremos a esta matriz, el índice, que hace referencia a qué número de habitación es porque el índice 12345 corresponde a nuestras habitaciones 12345 Lo que queremos hacer es único. Esto significa que si la habitación ya existe en esta matriz, no la volverá a agregar. Voy a corregir esto aquí. S por alguna información extra, si esto fuera un conjunto, que es esto otra vez, podría haber dicho esto antes. Si esto fuera un conjunto, solo agregaría único. Esa es la regla de los conjuntos. Pero las matrices son más manipulables. No necesitamos nada más. Pero cuando todo esto esté terminado, vamos a pedir una sucursal. Si nuestra matriz de contadores locales es la longitud es mayor en realidad es igual a uno. Porque si preguntamos si es uno, entonces cubrimos cualquier otro. Posibilidades. Si es uno, es un balcón. Sólo se conecta a una habitación. Si se conecta a más de uno, es corredor. En el cuarto ramal, vamos a traer corredores ST. Vamos a añadir. Vamos a dividir esto y traer nuestro estudio. Si no necesita una nueva variable, dupliquemos la de habitación oculta. Está bien. La misma estructura. Es una variedad de estructuras, habitaciones ST. Vamos a nombrar a estos balcones ST. Entonces vamos a agregar A siguiente estudio. Y esto definirá nuestras áreas a las que llamamos balcones basados en nuestros gobernantes. Ahora, para el resto de las áreas, vamos a hacer exactamente lo mismo. Pero con una diferencia, si están conectados a uno, ya no son balcones. Son grandes áreas que están conectadas a una habitación. Pero les vamos a llamar zonas aisladas. Yo solo voy a copiar y pegar esto a continuación, voy a conectar el pin predeterminado, que corre con cualquier cosa por debajo de uno o por encima de tres. Y vamos a eliminar estos balcones ST. Vamos a duplicar un balcón variable, llamarlo ST o áreas relacionadas. Y vamos a traer esto aquí. Entonces, las áreas que están conectadas a una sola habitación, son áreas aisladas cuando son lo suficientemente grandes. Y los que no son nuestro coordinador. Pero todo lo que hemos hecho ahora mismo son datos. No hemos cambiado nada visualmente. Si vamos y todos y jugamos. No vamos a ver ninguna diferencia, nada cambia. Pero hemos almacenado los datos que necesitamos para que las cosas sucedan. Entonces la siguiente función que vamos a necesitar en el generador de laberinto sería después de categorizar las áreas, insinuarlas, hacer algo con ellas. Y eso sería para nosotros sumar nuestros pisos. Vamos a crear una nueva función. Vamos a llamarlo agregar pisos. Al agregar pisos, quiero decir, vamos a cambiar el material que tienen porque el mese estático seguirá siendo el mismo. Por ejemplo, comencemos con las habitaciones ocultas. Vamos a conseguir nuestras habitaciones esten. Vamos a cada bucle. Por cada habitación oculta que tengamos, vamos a encontrar al actor Mac Dungeon Y. Necesitábamos romper esto primero. Porque esta es la estructura. Esta es una matriz de fracturas, aunque tenga una habitación, es una matriz de un índice. Vamos a para bucle a través de este índice, o en realidad podemos ya que sabemos que es un índice, en realidad podemos obtener el índice cero, entonces podemos encontrar nuestro calabozo Dungeon, obtendremos piso estatal. Nosotros lo nombramos. Y material de fraguado. Para bucle. Intentemos en esto un poco, que sea compacto. Elemento cero porque nuestro piso tiene un solo elemento, y este es el que queremos cambiar. Que sería para los cuartos de calefacción. Que se podría seleccionar. Vamos a nuestras mallas de ático. Busquemos uno que se vea bien para a. este. Con la lava. Hagamos habitaciones iden que cubran lava. De hecho necesito establecer la malla estática. Lo siento, no el material. No, voy a establecer malla de ático porque tenemos diferentes mese estáticos. No sólo un material. Y voy a mover esto aquí. Ahora, vamos a jugar. Tener una sala de sanación que no mintiera. El motivo posiblemente como siempre, tengo un anuncio el add floor aquí. El compilar y guardar de nuevo, y tenemos un iden que es el elevador Ahora bien, ¿por qué sucedió esto? Ser Las áreas categorizadas. Nosotros no aquí sí pedí la primera habitación, pero la identificación pregunta si contenía las áreas especiales. En nuestro elevador, nuestros perímetros de habitación, nuestros perímetros de habitación no son áreas especiales Pero lo que tenemos que hacer es agregar aquí o Si es la primera habitación o Estudio uno está contenido R A áreas de ternera, azulejos de ternera. Debería ser un corredor. Así que vamos a compilar y guardar de nuevo. No hay habitaciones ocultas. Una vez más. Bien, aquí tenemos dos de ellos, tenemos uno aquí que conecta con esta habitación, y tenemos uno aquí también que conecta con esta sala. Oh, creo que este es un buen punto de sopping para este. En la siguiente, vamos a seguir basando los pisos en cada estilo, y algunas cosas que tienen algunos problemas como este y arreglarlos. Porque necesitaremos arreglar algunas cosas. Por ejemplo, tendremos que agregar algo a nuestro laberinto sobre esta parte aquí. Pero yo estoy haciendo una digreción. Adiós, verte en la siguiente. 41. Categorías de habitaciones ocultas: Hola, y bienvenidos al Taller de Diseño de Juegos, curso real de Engine five Procesal Dungeon creación de RPG de acción Anteriormente, terminamos con nuestro generador, no nuestro generador, sino nuestras áreas categorizadas funcionan. Pero agregamos las reglas del balcón al verificar cuántas habitaciones cada estilo es centavo dos, y creamos una matriz con matriz de contador local, lo que agregamos un valor único, lo que significaba que si ya se agregó el índice, si, por ejemplo, ya se agregó el número uno, no se volvería a agregar cuando estemos revisando otras fichas. Si no se conectaba a más de una habitación, sería un pasillo, y si estuviera conectando solo a una habitación, sería un balcón. E hicimos lo mismo para categorizar para áreas aisladas y pasillos para habitaciones que son más grandes que tres También iniciamos la función para agregar los pisos, y agregamos la malla oculta del ático del piso, y ahora vamos a continuar con los siguientes. Oh, comencemos con balcones. Vamos a necesitar para cada baja otra vez. Vamos a necesitar nuestros balcones et. Y tendremos que romper el resultado. A partir de este resultado, sí necesitamos foop porque ésta era sólo una variable, una coordenada, así que obtenemos cero, pero para aquí, tenemos que pasar por todo eso Así que para cada bucle, así aquí, y luego vamos a encontrar en nuestro t realmente podemos copiar exactamente esto. Ahora, conectemos. Para el piso, vamos elegir si no teníamos balcones. Teníamos uno de tierra. Piensa que es bueno para balcones. Aquí está, este combinó A B tres A, da6b. Increíble. Vamos a hacer exactamente lo mismo para el siguiente, que sería vamos a conseguir zonas aisladas. Bueno, ahora para las zonas aisladas, no seríamos exactamente lo mismo porque no queremos que tengan mantequilla. Queremos hacerlos un poco más especiales. A lo mejor al final de ellos en un autobús o algo así. Lo que vamos a hacer es hacer una selección aquí. Para el índice, vamos a hacer un rango aleatorio. Yo 23 pisos de ellos? A. Piensa seguro que deberíamos usar algunos aquí más f aquí. L et's acaba de poner piso. Tenemos algunos normales. Normales y llamas, como los pasillos normales, pero es Hablando de corredores. Hagamos los pisos del pasillo. Voy a traerlos. Aquí. Aquí están los pasillos. Bien. Nosotros comenzamos con el material del piso. Entonces nos saltaremos este paso. No necesitamos hacer corredores. No hay razón para agregarlo de nuevo. Pero sí necesitamos hacer las habitaciones. Puertos perimetrales. Podríamos ir todas las coordenadas en realidad, y podríamos por Esto es coordenadas. No tenemos descanso. Podemos copiar y pegar esto directamente aquí. En directamente. Para las habitaciones, sí tenemos piso de madera. Este Y. Así combinó BC D siete o tres. Códigos nucleares. Y creo que terminamos con los pisos. Compilamos Ave. En realidad podemos vamos a crear, eso es demasiado lava. Mucha lava. Tanto. No tenemos balcón aquí ni aquí. Tenemos un balcón por aquí. Bien. También necesitamos cerrar la base. Entonces vamos a ir a un generador. Vamos a ir a categorías, áreas de segmento fino. Vamos a ir a nuestras huellas de línea y eso n. volvamos a nuestros pisos. Haz los de lava. Oh, bien. Por eso porque me refiero a cero, M cero, pero hago menos posibles las de lava. Agrega un extra, para seleccionar piso nuevamente. Aquí se pone 0-3. Los de nivel son un poco más raros. Sí, eso se ve bien. ¿Qué pasó aquí? Oh, esta es una habitación especial. Por eso Y creo que nuestros pisos son. Ahora que esta parte está terminada con la categorización de áreas, et áreas categorizando y agregando los pisos para ellas, debemos avanzar en nuestro Digamos que este es otro que no sé. Pongamos 7.72. Sólo por el bien de ello. Y nosotros sí retrasamos Nuestra barra de progreso en esta parte, 0.1 en esta parte, va en ank por pedazo Se mueve porcentaje de la misma. Si quisiéramos ser un poco más agradables visualmente, podríamos haber hecho una línea de tiempo para aumentar de la corriente al porcentaje que queríamos. Pero eso son visuales por el bien de los visuales. Entonces sigamos con la creación de algunas puertas. Porque ahora mismo, realmente no podemos movernos de una habitación a una. Ni siquiera podemos empezar desde el principio. Es solo puertas. En ninguna parte. Como dijimos, necesitamos algún código para hacer eso. Tenemos que definir donde nuestra puerta debe todo nuestro laberinto ¿Primera habitación? Pensé que era un escondite que no consiguió el piso, pero es el baño. Oh, lo que vamos a usar es la dirección de la flecha para crear una puerta a cada habitación desde su segmento. Y el Por ejemplo, este segmento conecta a esta habitación muchas veces, pero sólo una vez debería tener una puerta. Este segmento se conecta a dos habitaciones, se debe crear a ambas habitaciones. Una puerta. Esto debería ser crear. Se conecta a esta habitación también. Es por ello que no es un área especial donde esta es una zona especial. Demasiado fuego. Pero sí tener algunas áreas sería solo fuego también estaría bien. Oh. Vamos a crear nuestra función para crear las puertas ocultas. Las puertas ocultas del área de la habitación. Vas a necesitar función. Vamos a llamarlo. Ella luego se va Lo primero que necesitamos para este son los cuartos ocultos. Vamos a conseguir esto. Voy a pasar por todas las cuatro pulgadas. Bucle. Vamos a romper la estructura. Tenemos que encontrar en nuestro calabozo, coordenadas. Voy a conseguir una copia de cero porque es un le tile. Para encontrar mazmorra. Y a partir de aquí, vamos a obtener indicaciones. Y desde las direcciones, vamos a conseguir las llaves. Esto al cuerpo de flujo, hazlo un poco más compacto. Quiero saber en qué dirección tengo una flecha que apunta a la pared. Este caso sería fácil de hacerlo porque solo tenemos una dirección que tiene pared, una pared de habitación, y todas las demás direcciones son escombros bloqueados, otras cosas que no están conectando a ella. Entonces hacemos un bucle esto para cada bucle. Vamos a enrollar el valor con el índice cuando sea cierto. Significa que es el único que tiene una flecha, lo que significa que tenemos pasaje. Oh, es una puerta. Vamos a promover esto a un variabl local llamemos a esta dirección variable local Y ahora tenemos una dirección en la que nuestra habitación centavo teja como puerta de. Oh, en esta baldosa, vamos a conseguir Queremos que los cinco vecinos lleguen a encontrar el adyacente y de este adyacente, queremos la dirección actual desde nuestra dirección. Vamos a traer esta variable por aquí. Vas a obtener de la RA, seleccionar cual me equivoco seleccionar el comodín. Éste, no éste. Este siempre es un matón. Lo dice también en la descripción sobre herramientas. Seleccione. Va a conectar esto el índice, y tenemos norte cero, es 213. No, podemos seleccionar directamente al vecino de nuestra cuadra que es la habitación que necesita la puerta. Entonces vamos a encontrar nuestra habitación. Usa de nuevo este mapa de mazmorras con nuestras coordenadas. A partir de aquí, vamos a obtener acciones opuestas. Vamos a encontrar la corriente opuesta que queremos. Vamos a conseguir conseguir habitación de opuestos Desde nuestra habitación, O sala de azulejos en este momento, hemos encontrado con nuestra cruz adyacente. Desde nuestra habitación en la dirección que te muestra a ella todo lo contrario y haz que la flecha esté encendida. Entonces eso significa que nuestro calabozo tiene nuestro jugador puede atravesar eso Va a conectar esto al final de este cuatro lob, que son las claves del mosaico actual, porque no queremos conectarlo al final después de que se hayan comprobado todos los mosaicos Queremos conectarlo al mosaico actual que estamos comprobando. Juega raíces no yo. Habitación oculta otra vez. Tenemos una habitación escondida aquí. Yo voy adentro aquí, eso se supone que es una flecha por aquí. Creo que todos tenemos una idea de por qué sucedió. Tenemos que ir con ven graph y después de nuestra carga, debemos agregar la función de áreas ocultas de la puerta. Vamos a compilar y jugar. Arte, ojalá una habitación escondida. Empecemos de nuevo. No hay habitación oculta otra vez. Aquí tenemos uno. Ahora, de nuevo, no funcionó. Y la razón simplemente. Agregamos a las direcciones en las que está esto no hemos alternado flechas. Entonces vamos a alternar. Dave, de una sala de calefacción para realmente. Ahora, en realidad nos muestra que aquí, se supone que deben ser adorados Y también funciona, el resto de ellos son correctos. Cualquier otro cuarto de calefacción. Mucho. Sí, tenemos una tercera. Yo aquí también. Significa que está funcionando. Creo que esto es suficiente para éste. Te voy a ver en la próxima. Adiós. 42. Función de intercambio de pared a puerta: Hola, y bienvenidos de nuevo a Game Design Workshop, y Real engine five procedural Dungeon action Un curso de creación de Psy Entonces, en la anterior, terminamos con nuestra función add floors. Agregamos los pisos de los balcones, con cuatro bucles en los balcones ST y rompiendo a los elementos RA, y luego foo a través de los elementos LA y agregamos y fijamos la malla estática Ahora, después, lo hicimos para las áreas aisladas, también, el mismo código exacto con el cambio de que seleccionamos a través de entero aleatorio para ser de los pisos de lava o un piso normal, y agregamos dos veces el piso normal, por lo que tiene más posibilidades de pspone De hecho podemos agregarlo una vez más. Aquí. Entonces tenemos tres de ellos y dos de ellos. Lo siguiente que hicimos fue iniciar nuestra función de código de áreas de puertas ocultas para colocar puertas en las áreas ocultas. Revisamos nuestra lista de habitaciones ocultas. Rompimos la estructura para obtener la matriz. Obtuvimos el primer índice porque es una sola habitación de baldosas, y encontramos esa baldosa en nuestra mazmorra Obtuvimos las direcciones, y de las direcciones, averiguamos cuál está encendida, lo que significa que tiene acceso. No, esto significa que tenemos una puerta. Y luego cuando terminamos, arreglamos las flechas del bloque opuesto, el bloque de habitación, para estar habilitando la flecha hacia la habitación oculta. Ahora, lo que tenemos que hacer es crear una función dentro de la decoración DP, que se encarga de que nuestras paredes agreguen para reemplazar la puerta la pared a la pared de la puerta. Y vamos a hacer esto aquí porque en la decoración BP, porque tenemos el índice de habitaciones, que estamos usando para elegir qué tipo de pared? En realidad, en realidad necesitamos el índice de pared, el índice de habitaciones. Entonces, en la función de muros de intercambio, solo promovamos el índice de muro a una variable también. Nuevamente, para quienes están buscando donde estamos, estamos en las decoraciones VP. Vamos a crear una función aquí, y antes de hacer eso, queremos de la función que ya tenemos paredes intercambiadas para promover la variable de índice de muro Porque vamos a usar esto para decidir qué tipo de puerta de pared queremos agregar. Ahora, vamos a crear esta función. Vamos a llamarlo Agregar puerta. Ahora bien, en esta función, también vamos a necesitar comprobar que es nuestra habitación individual la que estamos creando conectada a nuestra habitación porque existe la posibilidad de que nuestra habitación individual esté por aquí, girada, claro, pero podría ser así, base en nuestras reglas, esta también se considera una habitación oculta. Pero esta habitación no requeriría una puerta. Detente aquí, vuelve a la decoración, y agrega una salida de pared. Cuando corremos la puerta, volvamos a nuestro generador de M, vamos a agregar desde el mapa find dunge, nuestro azulejo básicamente referencia Vamos a Necesitamos un niño. Decoraciones. Sí, ese es el nombre. Y de las decoraciones infantiles, vamos a actor. Y desde el niño actor, vamos a lanzar dos decoraciones y hacer de esto un puro cust Y ahora que tenemos la referencia, vamos a alargar. Puerta. Vamos a conectarlo aquí. Tráelo así. Ahora que tenemos una salida, sabemos que tenemos esta salida de un muro. Sabemos que cuando esto corre, a continuación, podemos hacer la pregunta, ¿encontramos un muro o no? Y si no encontramos un muro, agregaremos nuestras coordenadas a todas las puertas. Pero no hagamos eso ahora. Vamos a hacer esto después. Terminemos con nuestra función en. No. En primer lugar, vamos a necesitar la matriz de muros. Porque queremos pasar por todas ellas. Entonces vamos a para cada uno. Pero como saben, cuando atravesamos todas las paredes, sí necesitamos una dirección porque tenemos el sistema de tirones de un elemento como componente remolcador tiene remolcador Y porque necesitamos tirar, necesitamos una dirección. Entonces agreguemos a nuestra puerta una entrada de erecciones E. Nombrarlo erección. Ahora, recuerden, esto necesita traer con cuerda, no para morder, y vamos a agregar esto aquí. Entonces necesitamos una sucursal. Volvamos a nuestro generador PP. Y de nuestro resultado opuesto, vamos a conectar esto aquí porque estamos probando a través la dirección de nuestra pila que tiene la habitación oculta. Estamos haciendo lo contrario para el vecino. Entonces ingresos, y esto nos da el resultado de la I es la habitación. Volver a las decoraciones. Entonces esta es la parte que tenemos que preguntar si hay una guerra. Pero lo que podemos hacer es que vamos a arrastrar esto aquí y el set es visible. O en realidad no se oculta de nuevo, hola en el juego todavía oculto en el juego. Vamos a poner una rama cuando esto sea cierto. Y vamos a seleccionar un aquí o b I no es visible o si está oculto en ganancia. Necesitamos visible aquí. No b porque si fuera visible, se volvería verdad, y entonces correría verdad. Pero si estaba oculto en la ganancia, y corre verdad, significa que no podemos verlo. Entonces necesitamos lo contrario. Pero tenemos esto. Necesitamos crear una variable local. Llamemos a esto realmente muro. Porque aquí tenemos el no muro, y conectémoslo realmente aquí también y pongámoslo cierto cuando nuestra pregunta sea cierta. Ahora bien, lo bueno de saber es que podemos agregar etiquetas en tiempo de ejecución. Veamos, por ejemplo, si estaba atravesando todas las paredes de una habitación. ¿Cómo sé cuál es la pared de la puerta? Podríamos ir al generador de laberinto. Vamos a mostrar ambas formas, en realidad. Podríamos ir aquí, y eso lo haremos. Vamos a agregar a estas coordenadas una nueva matriz que se llamó vamos a duplicar s vacío. Es una matriz de punto final. Esto es lo que queremos. Llamemos a esto todos ors. Tráelo aquí y agreguemos las coordenadas. Del operador, lo siento Agregar a matriz. Si esto es falso, si no tenemos muro, agregamos las coordenadas de nuestra puerta, lo cual es resultado de nuestro hallazgo cruz adyacente. Al mismo tiempo, podríamos tener otra matriz. Llamémoslo a todo erecciones de puertas. Cambiemos el punto a direcciones. Pero por ejemplo, si traigo esto aquí también y agrego la dirección opuesta que queremos aquí. No, yo los estaba agregando así, podría tener dos matrices correspondientes de tener todas las puertas y su dirección. O podría tener también otra variable de mapa con t puntos, y el segundo valor sería de ocho direcciones. Pero como dije, podemos hacerlo en remolcadores enanos. Podemos agregarnos al ejecutarnos a los componentes, a los actores, a lo que queramos. Entonces lo que también puedo hacer es arrastrar desde el bucle for desde el elemento array, la pared que estamos manipulando aquí, y agregar g remolcadores lo que tenemos que hacer es un poco raro Tenemos que obtener etiquetas, obtener remolcadores de componentes, y viene como una variable de matriz Y porque viene como una variable, en realidad podemos, que es nuestra referencia directa a esta variable, en realidad podemos manipularla y expresarla y podemos poner la puerta ug. Ahora bien, si por bucle a través de cada uno de ellos, cada una de las paredes, y al final, vamos a hacer otro bucle de proa. Y solicita la lista de etiquetas. Ahora, el muro que tenemos esto, en realidad lo imprimiremos. Pero no lo probemos. Es una pérdida de tiempo. Esta es la forma en que está programado para funcionar. Lo siguiente que necesitamos es establecer la malla estática. Malla de tic. Esto podría haber sido diferente. Es más visible, lo que conectamos. Sí. Veo que esto es claro ahora. ¿Qué malla estática agregamos? Vamos a elegir. Para nuestro índice, vamos a elegir nuestro índice de muro. Vamos a sumar un total de cinco variables. Vamos a nuestras mallas estáticas y seleccionemos nuestras puertas correspondientemente Ahora, sí necesito revisar qué era lo que correspondía a dos. Vamos a ir a Evan graph. Vamos a ir a construir habitaciones. Y a partir de ahí, vamos a ir a intercambiar a paredes, que en realidad está dentro de decoraciones. Podría haberme quedado ahí. Y vamos a comprobarlo. Entonces el número cero es este tipo. Entonces si vamos a a, número cero, debemos agregar este tipo de muro a la selección. Creo que esto es todo. Todo bien. Combinado 85a1 9f8d. Increíble. Ahora, el siguiente. Vamos a. No. Vayamos a parar muros. El siguiente es el de madera fácil de encontrar. El de madera es Mi boca grande, fácil de encontrar. Bien. Sí, es aquí está. Yo esto combiné b91xb. No estoy segura. En este año. Vayamos por el siguiente. La piedra si paredes. Esto, esto fue más fácil de encontrar. Combinado cero E CC 57. Creo que ya basta con nombrar. Los últimos serían los muros de ladrillo. Las paredes de ladrillo. No estoy muy seguro de cuál es cuál, pero no creo que importe. Yo elegiré esto para el primero. Combinado 025159 bla, bla. Y el otro sería éste. Bien. Ahora, basado en nuestro sistema posterior sobre cómo vamos a estar entrando en las salas de estar. Vamos a necesitar algunas colisiones adicionales aquí que vamos a estar habilitando a través de esta función Vamos a ir a ellos. Vamos a necesitar ir a la ventana gráfica y agregar en realidad, podemos duplicar la caja de colisión Muy rápido tráelo por aquí y hazlo más pequeño. Piensa que está bien, de tamaño fino. A lo mejor un poquito. Sí, está bien. Yo creo. Voy a duplicar esto otra vez. Ir a rotarlo. Va a traerlo a todas partes donde se supone que debe estar una puerta. Realmente no importa si es preciso o no. Voy a duplicar otra vez, cruzarlo. Y luego duplicaré esto también y lo traeré por aquí. Todos ellos porque son una copia de la caja, obtuvieron los mismos ajustes que agregamos aquí. Entonces no están generando eventos de solapamiento. A lo mejor esto un poco más. Pero está bien. Oh, esto quiere decir que en nuestra puerta aquí, debemos habilitar su lesión. Y en realidad podemos dar un paso sencillo. Vamos a seleccionar este muro. Vamos a apaciguar esta caja a esta pared. Pero también seguimos nombrando esto. Entonces vamos a apaciguar esta caja a esta pared. Aquí, esta caja a esta pared, y luego esta caja a esta pared. Voy a volver a la función, y desde nuestra malla estática, voy a conseguir que los niños obtengan los componentes infantiles, no de la caja dos, como pueden ver, Mostró muchas opciones. Uno de ellos era traer cierta caja. A veces cosas reales, puede predecir lo que quieres hacer. Pero de todos modos, en el conseguir niños vamos a, vamos a p cada bucle. Entonces vamos a erupción componente. Y generar eventos de solapamiento, cierto. Ahora por qué necesitaba lanzar. La razón por la que necesitaba lanzar aquí es porque estoy pasando por todos los componentes que este en mesh tiene. Y quiero para las operaciones. No es un componente de malla estática, es un componente de caja. Perdón por la caja. Componente de caja. Esto no hubiera funcionado si fuera una ma estática. Entonces no lo sé. Esta es la razón porque no sé qué tipo de char. Puede tener como 520 niños. Bien, no es bueno tener tantos hijos, pero no puedes hacerlo. Y va a ser un poco más pesado. No sé qué tipo de componentes son. Entonces estoy echando a decir, eres tú el componente box, si eres el generar eventos de superposición. No necesito etiquetar estos componentes. No necesito nombrar estos componentes. Sé que pertenecen a las paredes. Creo que este es un buen tema de conversación por ahora. Te voy a ver en la siguiente. Adiós. 43. Colocación de puertas y sellos: Hola, y bienvenidos al taller de diseño de juegos bajo Lensing five procedural Dungeon action RPG curso de creación En la lección anterior, terminamos con la función d y las áreas de puerta agregando la función de puertas que llamamos desde decoraciones BP. Y también mostramos una manera de agregar información sobre las puertas de una manera que conocíamos, creando una matriz y agregando las variables y creando una matriz correspondiente, también que se están llenando al mismo tiempo. Entonces sus índices se corresponden entre sí. También agregamos esta función, la puerta que empezamos a llenar con conseguir la dirección desde donde queremos que se agregue la puerta. Pasamos por nuestras paredes. Encontramos el componente que tiene la etiqueta, la pared que tiene la etiqueta de nuestra dirección, y nos hicimos una pregunta que es nuestra pared visible o no solo en caso nuestra habitación oculta sea señalada en alguna parte Y continuamos eligiendo En realidad, esto está mal. Algunos errores otra vez. Cuando era cierto, queríamos establecerlos no era a true y cuando era falso, queríamos agregar la etiqueta al componente, que este componente es una puerta. Entonces, cuando queremos atravesar la matriz de paredes, podemos averiguar fácilmente cuál es la puerta. Entonces, desconectamos ahora esto y lo conectamos a las cataratas y está bien. Esta es la correcta. Y luego agregamos la malla estática, elegimos la malla apropiada, y también agregamos algunos componentes de caja o nuestra mecánica de juego. Pero cuando el Cuando se activa la puerta, también estamos activando los eventos de superposición a nuestros nuevos componentes de caja. Ahora, hay una cosa más que debemos agregar, y voy a explicar por qué necesitamos agregar una malla estática. Mostrar ¿dónde está la puerta? Porque nuestra cámara va a ser desde un ángulo de 45 grados. Si la puerta está en esta pared, no podemos decirlo. No podemos decir, Oh, aquí, hay una puerta. Entonces tiene que haber algo para el jugador cuando estamos mirando desde arriba, que aquí hay una puerta. Para hacer eso, vamos a usar algunas chicas. Oh, solo voy a agregar una nueva búsqueda estática. Añadió el muro porque he seleccionado el muro aquí, pero queremos el CGL Encontremos el C l. Aquí está, ¿ verdad? Esto es grande. Hagámoslo un poco más pequeño. Creo que 0.3. A lo mejor eso es un poco pequeño o un 0.4 se ve bien. Acuérdate de bloquear todo el eje, para que se escala uniformemente, y vamos a llevarlo a donde estaría el. Base La altura de nuestra palabra es 400. 93 80, a lo mejor ahí está bien. En realidad, para los Cgels, también voy a usar remolcadores Podríamos simplemente ser padres de niño, continuar con la otra ola que mostramos, pero vamos a acostumbrarnos a los remolcadores Entonces esto es S. Esto es dos pegamos, rotarlo. Voy a negar el valor negado. Esto es un Norte. Voy a verificar con la pared. Y. voy a rotar copiar y pegar esto otra vez. Voy a rotarlo 90 grados. B Posición Oeste B. Sólo voy a copiar esto. Pégalo aquí. I. A mitad de camino así dos Sí. Lo siento. Porque esto es medio. 380 Wu otra vez. Dirección. El 400 negado, es 400, y está en el lugar correcto Lo que tenemos que hacer para todos es o es también convertir el juego oculto en realidad. Porque queremos habilitarlos cuando queremos. Yo también voy a ir, y realmente, vayamos a la construcción c. Tráigalos aquí, haz una matriz. Y promover esta variable, todas estas chicas C. Bien. Ahora puedo ir a la puerta y coger a los Cgals y pasar por alto a cada uno de ellos De nuevo, voy a usar esta cadena este nombre de texto por aquí como el componente tiene tirón Si lo hace, nosotros en su visibilidad. Visibilidad que el juego oculto acto falso. La visibilidad y lo oculto en el juego son dos cosas diferentes. Y son opuestos. Escondido en el juego, sí, significa que no se puede ver. Visibilidad, sí, significa que no se puede ver. De todas formas, Ahora, nosotros antes de hacer esto en realidad, tenemos que hacer una pregunta. ¿Es posible que estemos en una pared? Porque si estamos en una pared, y no debemos encender el C D porque va a haber un CD snding en medio del aire Si no es pared, simplemente salga sin pared a través. Si se trata de una pared, pasa por los geles de mar y habilita el correcto. Ahora, compilemos y guardemos. Y choque. Teníamos que tener un choque. A medida que volvamos, continuemos. Vamos a probar. El mapa. El nivel. ¿Hay alguna habitación secreta? Sí, hay una habitación secreta, tenemos residual, y tenemos nuestra puerta. Oh, lo único que queda por hacer es hacerlo por todo lo demás. Oh, lo siguiente que debemos agregar serían las puertas de área única. lo que me refiero con áreas individuales como los balcones y las áreas aisladas de una regla común. Solo se conectan a una habitación. O balcón aquí, área individual aquí, aislada, tenemos otra habitación. Siendo este un bonito mapa. De todas formas. Agreguemos las puertas de un solo área. Cuando tengo dos diferentes. Vamos a crear una función primero. Vayamos a pen graph, iden áreas de puertas y agreguemos una nueva función No, áreas de una sola puerta. Como dijimos, tenemos dos matrices de estas áreas. Tenemos los balcones y las áreas aisladas. Bueno, podría hacer una cantidad diferente de loops para cada uno de ellos y superarlo así con ello. Pero también hay otra opción. W dos matrices tienen el mismo tipo de variable, en realidad puedes agregarlas. Esto significa que los estás fusionando a uno, porque no quiero estropearlos a estos dos arreglos Voy a crear una nueva variable local. Voy a hacer que sea un punto int. Va a ser una matriz, y voy a llamarlo tal array. Voy a traerlo aquí. Voy a un bolígrafo. Y voy a co-repastarlo, hazlo de nuevo. Entonces lo que voy a hacer es, esto no debería ser un punto final. Estas deberían ser habitaciones SD. Ningún punto final cambia el tipo de variable porque estas matrices son de espacio No. L et me desconecte, Déjame compilar y reconectar pila, y ahora se pueden agregar Ahora bien, el primer no, el primer pin es la matriz que vamos a agregar cosas, y el segundo pin es la matriz que estamos agregando. Entonces esta matriz se convierte en un total de estos dos. Si hubiera conectado los balcones aquí y conectado las áreas aisladas aquí, habría estropeado nuestra variable Ahora, ya que tengo este total de arrays, puedo caer. Para cada bucle para cada habitación, porque lo que vamos a hacer va a ser lo mismo. También vamos a necesitar otra variable. Va a ser de entero, y va a ser de tipo array. Eso es porque necesitaba ser una matriz. Pero quiero mostrar sobre código clave como programar algo sobre la necesidad de ello. Te voy a mostrar en un momento. Vamos a nombrar a este ex. Mm. Oh, lo hice. Pero tienes índice de habitación en otro lugar. No me gustó. Voy a llamarlo Index. Va a estar bien. Compilar y guardar. Y en realidad, creo que este es un buen punto de parada para este. Te voy a mostrar la exageración de este código después en la siguiente lección Adiós por ahora. 44. Funciones de área de una sola puerta: Hola, y bienvenidos de nuevo al taller de diseño de juegos, y motor real cinco procesales Don acción ps curso de creación. Anteriormente, creamos, terminamos en realidad con nuestra función add door. Agregamos la parte que estamos comprobando cuando el para el bucle de cada pared haya terminado, y hemos habilitado nuestra caja. Nuestra caja de puerta. Estamos comprobando cuál de las branquias C tiene la etiqueta de componente que queremos la dirección, y las estamos configurando demasiado visibles A medida que establecemos las nuevas dos caídas ocultas. Ahora, y salimos sin muro o no. También creamos el inicio de nuestro generador maj de nuestras áreas de una sola puerta, y explicamos un poco sobre el append en una matriz Y ahora vamos a continuar con esto. Y como prometí, voy a explicarte un poco de exageración con esta matriz de enteros Estoy usando una matriz de enteros para hacer esto porque el impacto será mínimo Es una buena oportunidad para explicar algunas cosas. Oh, comencemos por romper nuestra actura. Entonces obtenemos la matriz de nuestras coordenadas, y luego for loop a cada una de ellas. Para cada bucle. Ahora, tenemos una función llamada in room index, que si abrimos, lo que estamos haciendo es pasar por todas las salas de matriz St, o las coordenadas de las habitaciones, y preguntar si las coordenadas que estamos ingresando pertenecen a alguna de ellas Esto nos devuelve si se encuentra una habitación y qué índice de habitación es. Vamos a cerrar esta función. Ahora factive áreas de una sola puerta. Ahora con esto, vamos a poner un brunch y conectarlo aquí. Y digamos, si encontramos una habitación, ¿qué haremos? Si no lo hemos hecho, no hacemos nada. Pero si esto es cierto, hagamos el overkey en index room Entonces, voy a preguntar si esto está contenido. Contiene un artículo. Y el ítem sería el índice de habitación. Porque si estamos agregando una habitación, si uno de los coords encuentra una habitación, no queremos agregar el siguiente bloque que encuentre una habitación también, encontramos en algún lugar donde podemos crear una puerta Oh, cuando hago esto, y sé que quiero que mi habitación sea única en estos contiene. Si agrego a esta matriz, ¿ puedes oír hablar de único Esto sería exagerado porque la razón es cuando intenta agregar único, primero pasará por todos los índices, y luego decidirá si lo agrega o no Ahora, como mencioné, los conjuntos también tienen esta funcionalidad, pero no son tan pesados como los arrays en la adición de únicos. De hecho, pueden aumentar rendimiento en la parte única de adición. Disminuirían el rendimiento en la memoria porque tienen un sistema subyacente. El mecánico llamó mesas sh. Es algo más profundo en la programación sobre administración de memoria, obteniendo referencia rápidamente. De todos modos, los sets son mejores para agregar cosas únicas. Las matrices de índices son mejores simplemente agregando normalmente. Entonces aquí, solo seleccionaría agregar, y sería más rápido. No es que tenga que ver con nuestro laberinto ahora, pero creo que esta es una buena información. Voy a agregar el índice de habitación a la matriz. Y tenemos las puertas y todas las direcciones. Ya que dijimos que estos dos necesitan ser llenados al mismo tiempo. Vamos a sumar a esto voy a agregar las coordenadas de. Voy a añadir a esto también. Ahora, para obtener la dirección, sólo vamos a seleccionar. Y sí conocemos nuestra matriz de índices desde la sala de frenos. Tenemos que volver a hacer el tramposo aquí. Entonces voy a encontrar esta selección de alguna otra función que la hayamos usado, y simplemente copiarla de ahí. Creo que lo usamos en salas de campo. Pienso en mi celo para mostrar esto, olvidé un Vamos a nosotros estamos comprobando el punto. Estamos consiguiendo todos sus puntos. Sí, aquí está. Para cada uno de sus puntos, debemos t vecinos. Así que consigue cruzar cruz adyacente. Por qué y cruzar adyacente, y luego necesitamos para bucle estos puntos. Va a conectar esto. Y esta es la habitación, como la cruz contigua, estamos comprobando, es una habitación, no la baldosa. No las coordenadas de mosaico de las que venimos, sino la cruz adyacente. Porque sabemos que la baldosa de la que venimos, es un pasillo o un balcón, no un pasillo, una zona aislada o un balcón. Entonces es por esto que necesitamos la cruz adyacente y de la cruz adyacente ahora. Esta, todas las puertas deben ser también una cruz adyacente, no la coordenada de la habitación. Oh, estamos mirando a través todos los balcones y áreas aisladas. Estamos obteniendo las coordenadas de cada área segmentada. Lo estamos comprobando vecinos y cuando el vecino es una habitación, entonces agregamos a la sala índice. Aquí explicamos las cosas. Ahora, ahora en realidad podemos obtener la dirección porque desde el noreste suroeste, conocemos la dirección de la muralla. Entonces voy a hacer el truco con un selecto. Como pueden ver, esto no funciona. Yo otra vez para tener opciones para tener todas las direcciones Lejos. Voy a traer la última salida. Voy a elegir de aquí. Voy a conectar la última salida y última salida e ir al norte sureste oeste, norte sureste oeste. Se honesto, no creo que vayamos a usar esta variable para nada, pero ¿por qué no tenerla? Quién sabe cómo vas a pensar para actualizar este programa. Ahora, todo lo que queda por hacer es en realidad crear las puertas. Y para ello, vamos a necesitar dos variables locales. Van a estar otra vez del punto final y dirección. Pero los aquí tienen toda la información sobre todas las puertas. La razón por la que vamos a crear los locales es porque vamos a filtrar solo a esta categoría, lo que sea lo que creamos aquí. Para que podamos usarlas. Para encontrar el estilo apropiado y obtener la dirección adecuada de la puerta y las flechas. Pero vamos a desplazarnos hacia abajo, a ir a variables locales, y vamos a añadir dos nuevas. Llamemos al primero puertas. Deben ser coordenadas de tipo punto y la otra debe ser ctions debe ser de dirección Y vamos a traerlos al final aquí. Y agrega exactamente las mismas cosas que agregamos aquí. Esto se ve un poco bonito, este paquete define puntos, pero bien. Ahora, continuemos. ¿Dónde vamos a llamar a la creación de nuevas puertas? Tenemos tres opciones. Tenemos la opción de crear justo después de este bucle f, tenemos la opción de crear aquí o aquí. Este es el bucle fd que tiene cada tesela, es una coordenadas, tiene, pero digamos cada tesela que está en estas dos matrices, que son matrices de muchas coordenadas. Tienen listas de coordenadas. Entonces, si lo agregamos en cualquier otro lugar, entonces al final, significa que va a correr intentará agregar los tos tantas veces como todos estos sean. Lo agregamos a las coordenadas aquí, incluso sería peor porque está multiplicando esto por cuántas fichas hay en su acto en su deuda Ray, en realidad, usamos una matriz. Entonces el menor daño que podemos hacer es agregarlo aquí porque todos estos para cada loops que hemos creado son muchos cálculos. Así que llevemos nuestras puertas. Aquí, Vamos a por bucle. Para cada bucle. Ahora podemos fac Lo siento. No necesitamos cerrar adyacentes. Tenemos que encontrarla en la mazmorra. Encontrar. Y vamos a obtener indicaciones y vamos a sumar como cierto, así. Lo que vamos a agregar como verdadero va a ser la dirección con el get del índice. Entonces vamos a agregar la dirección con el get del índice porque estas dos matrices se corresponden entre sí. Lo siguiente que tenemos que hacer son flechas para perros. Bien. Bien. Baja y también en la puerta. Cómo necesitamos un niño, así que consigue decoraciones obtener decoraciones en comparación con plaga y a. y para esa dirección, vamos a conectar esto o getter Y eso debería ser. Vamos a jugar. La puerta aquí. O puerta aquí. Estoy adivinando. Ellos conectan esto. Siempre es lo mismo, ¿no? En puertas. ¿Lo es? En zonas de puertas. Aquí está. Empezar de nuevo. No. Puerta. ¿Verdad? Vamos a averiguarlo. Por favor. Oh, vamos a revisar nuestro código. Entonces empezamos, estamos agregando el halcón está aislado, estamos retrocediendo a las fracturas, encontrando cruz adyacente, estamos sumando a la sala índice Seguir agregando a esto es un problema porque si agregamos la misma habitación, Sí, yo somos la misma habitación, la misma habitación tiene dos áreas aisladas. Digamos una zona aislada y un balcón, y luego sale tiene tres puertas. Entonces no agregará, pero sí necesitamos restablecer esta sala de índice. Entonces vamos a escucharlo antes de seleccionar una nueva área. Ahora, agregamos al exo esto no causaría un problema el problema que teníamos aunque. Estás creando erecciones. Adición de puertas. Aquí estamos recibiendo las puertas, estamos tomando la dirección de la puerta. Entonces vamos a cambiar las flechas al trabajo de flechas. Éste debería tener una flecha aquí. No lo hace. Tampoco lo son las flechas. Bien. Ya ves lo que pasó aquí, así que esto es al norte. Esto no es hacer al norte. Bien. Entonces básicamente, está aquí. No hicimos lo contrario porque cuando estamos consiguiendo al vecino, sobrepasa una dirección, necesitamos la dirección opuesta Sí, de co, eso tiene sentido. Ilan guardar. Y esta vez, tenemos perros. Un área aislada. Sí. No es un área aislada. Es porque tenemos esto por aquí, que es una caja especial. Entonces entre esto y esto, considera que tiene un bloqueo. Entonces esta es una zona aislada, y esta es una zona aislada. Pero, también usamos los bloques especiales. Entonces, trabajando de cerca a lo que dije. Así que tenemos puertas por todas partes. Tenemos una puerta aquí. Deberíamos tener uno aquí. Tenemos las ventas que son un poco altas, un poco dentro de la pared. Podemos arreglarlo rápidamente a nuestras decoraciones, bajarlas. 340. 30. Eso son los 30. Ese 30 ed. H. Si. Vamos a estar mirando desde arriba, entonces este tema. Eso es demasiado. Voy a adivinar por 20. H. Cp y guardar. Para que no vuelva a hacerlo. Se ve bien. Bien así. Pero sí tenemos puertas, y sí teníamos una en medio de nuestra. Creo que deberíamos en la siguiente. Te veo entonces. Adiós por ahora. 45. Conexión de paredes de mazmorras: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, y motor real cinco Curso de creación de ARPs de Acción de Mazmorra Procesal creación de ARPs Anteriormente, terminamos con nuestra función de puerta única. También arreglamos algunos errores que ocurrieron durante el mismo. Y lo que realmente hicimos fue agregar un claro de nuestro índice de habitaciones en el primer cuarto bucle antes de comenzar las coordenadas de cada área segmentada Entonces invertimos las direcciones porque estamos consiguiendo a los vecinos. Y luego usamos la matriz de puertas que creamos dentro aquí para obtener la dirección y agregarla a la baldosa específica. Alteramos flechas y agregamos nuestra puerta. Ahora, vamos a hacer esto de nuevo, pero para nuestros corredores esta vez, que en realidad serán casi exactamente los mismos Vamos a ir a nuestra función, áreas de puerta única, y vamos a duplicar esto y llamarlo áreas. Lo que vamos a cambiar es que vamos a eliminar estos dos. Vamos a eliminar el templo A, y sólo vamos a agregar nuestros pasillos a A. El compilar y guardar De hecho agreguemos a la van gra también. Áreas de pasillo, puertas. Compile y guarde, y juguemos. Ahora dos puertas aquí, momento de acamiento, pero funciona. Ahora bien, ¿por qué agregó dos puertas aquí y no habilitó la C aquí? Porque la diferencia con los colisionadores es que en realidad sí queremos solo uno en cada corredor En cada segmento de pasillo, con cada habitación que conecta, queremos solo una puerta, mientras que ahora agrega tantas como pueda como señala porque así es como hemos codificado esta parte. Como pueden ver aquí, se pincharon con la branquial C, pero vamos a arreglar Detengamos nuestra jugabilidad, vayamos al generador de mayo, vayamos al interior de las puertas del área del pasillo y veamos las reglas. Fuera. Cada vez que corremos por una sala de descanso diferente, pasillo. Estamos agregando una puerta y una dirección. Entonces lo primero que puede pasar es que esa misma coordenada tendría dos direcciones. Lo que vamos a hacer para arreglar esto es que vamos a conectar y de correr las puertas al final cuando terminemos de sumarlo todo. Vamos a agregarlo por aquí, que será para cada adyacente. Jugar. Se ha arreglado un poco nuestras cosas. Tenemos una puerta aquí, aquí tenemos una puerta, pero sí tenemos una CDL aquí, que es el problema que detectamos antes Adivinando que hay una cierta dirección en esto. Puede que no hayamos puesto el tirón correcto. ¿O fue? Poniente poniente oriente poniente. Entonces este sed que se suponía que iba a ser este no tiene la etiqueta correcta y choca. Una vuelta otra vez, y ahora está arreglada. Y si presionamos play, y puertas puertas. Pensar porque aplastó, no salvó algo. Generador H, las puertas no guardaron la adición aquí. Lo agregué de nuevo. Es por ello que siempre debemos ahorrar constantemente. Ahora tenemos dos, solo uno por corredor. Sh estar bien. Parece correcto. C aquí. Este es un corredor de este aquí. Tenemos puertas por todas partes. Ahora todo nuestro laberinto y habitaciones están conectados entre sí y ellos un jugador puede navegar por todo el laberinto y todas las habitaciones. Ahora, ya que terminamos con las puertas, aumentemos nuestra carga. Arriba, y voy a copiar esta cosa aquí por aquí, base. Digamos 85 mucho. Esto también cuatro bucles. Se trata de muchas acciones otra vez. Ahora bien, ¿cuál sería nuestro siguiente paso en nuestro edificio de mazmorras? Bueno, nuestro siguiente paso sería averiguar las paredes externas, qué paredes son externas y qué paredes son internas. Entonces, con eso, quiero decir que estos muros de aquí es cuando nos estamos olvidando. Y éste y éste son muros internos, mientras que éste o éste es un muro externo. Queremos que los internos los cambien por algunos apoyos, algunas cruces, algunas mesas, algunas sillas, algunas dagas, una cantidad masiva de apoyos que van estar bloqueando básicamente Pero todos ellos, algunos de ellos, podemos vivir como son. Va a ser un al azar. G para hacer eso. Vayamos a nuestro generador de laberinto. Detengamos la jugabilidad y creemos una nueva función que llamaremos paredes externas de viento, que en realidad encontraremos que el interno también era, pero sí, es un buen nombre. No. Nuevamente, lo primero que necesitaremos son todas nuestras coordenadas de mazmorras Y vamos a conseguir las llaves. Por supuesto, vamos a partir de ellos. Para cada bucle. Y vamos a encontrar la cruz colindante de cada uno. Y vamos a permitirnos bucle para cada bucle de la cruz adyacente. Ahora, lo que queremos es preguntar si la cruz adyacente es parte de la mazmorra Entonces vamos a contener, pedir que contenga el mapa. El mapa será nuestro calabozo. Y vamos a poner una sucursal. Entonces comencemos la lógica de cuando nuestros vecinos, nuestro vecino no está dentro de la mazmorra, es un muro externo hacia esa dirección del vecino, es un muro externo Para hacer eso. Vamos a necesitar las paredes, básicamente. No get. Lo sentimos, encuentra la pila correcta, que es la baldosa que estamos examinando. No es el vecino. Es el azulejo que estamos examinando. Ese es el importante porque el vecino es el no válido. Vamos a conseguir las paredes. A una matriz para eso. Paredes. No hay arreglo para eso. Lo siento. Quise decir que necesitamos al niño. La decoración tiene las paredes, no el azulejo. Entonces sí necesitamos un niño. Vamos a conseguir decoraciones. Vamos a tener hijo. Y vamos a las decoraciones convertidas a puro elenco. Y vamos a conseguir muros, y ahora tenemos los muros. Pero además de muros, necesitamos la dirección también. Entonces tenemos este S EW, y tenemos que encender eso, que vamos a encontrar el interruptor Este es el interruptor opuesto. Podemos hacerlo enfrente aquí. Aquí. Yo conecto esto. Esto debe ser norte, debe ser sur, debe ser este y el sh oeste. Aus ahora mismo no queremos lo contrario. Y vamos a reventar a través de cada pared. Vamos a elegir la rama falsa porque aquí es cuando no pertenece al calabozo Y vamos a hacer una matriz. No. Para promoverlo a variable. Haga clic en promover variable, ejecutando este muros externos. Desconecta, esto y trae las paredes externas. Voy a añadir este muro. Voy a crear otra matriz de las direcciones de tipo. Así que copat todas las direcciones. Voy a la erección interna de la pared. Y también, voy a añadir esta información. Por si acaso lo necesitamos. Tal vez queramos manipular. Es posible que queramos cambiar la malla estática a todas las paredes. Quizá queramos cambiar algunos de ellos. A lo mejor hacer una aleatoria, eso cambia algunas de ellas para que estén en una forma que produzca va, y luego comprobaremos si esa pared está en una baldosa que está en una zona especial o en una zona aislada, que tenemos los bloques de lava. En fin, creo que este es un buen punto de parada. Así es como obtenemos las paredes externas, y vamos a continuar en la siguiente con un poco más de código aquí y agregando algunas imágenes más. Adiós por ahora. Nos vemos el siguiente. 46. Decoraciones de pared: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, Rail Engine five, Acción de Mazmorra Procesal en el curso de creación de Ps Anteriormente, en la última lección, terminamos con nuestras puertas de área de pasillo. De hecho copiamos pegamos las puertas individuales, y acabamos de cambiar algunas cosas. En realidad una cosa. Ejecutamos la matriz de puertas para agregar puertas o cada uno descubre adyacentes en lugar de correr cuando terminamos por todos los pasillos También iniciamos la función de muros externos definidos. En realidad fundamos todos los muros externos y las direcciones de los mismos y los agregamos a una lista. Y como decíamos, vamos a seguir añadiendo algunas imágenes más a nuestro laberinto Oh, vamos a ir a nuestro montón. Vamos a ir a nuestra ventana gráfica, e intentemos ocultar esta horrible brecha por aquí. Haz esto. Sólo vamos a hacer clic en una pared. Sólo vamos a agregar arroz astático. Malla. En realidad, no necesitábamos hacer clic en una pared. Necesitábamos hacer clic en la raíz. Entonces no lo hacemos ninguna raíz, solo tocarlo. Estos muros deben ser irrelevantes para los otros muros. No deberían ser niños. Deberían ser hijos de la raíz. Ahora, para esta malla estática, vamos a la vegetación como vegetación. Es, es vegetación demoníaca. Está un poco compensado. Vamos a reescalarlo. En realidad hacer la rotación también. Pongámoslo por aquí, tal vez un poco de frente. Lo que queremos es sólo esconder estas líneas por aquí. Oh, lo hacemos un poquito, tal vez la cerradura es 1.1. Esto un poco, más abajo. Este hecho esa parte que es más latigazo, más grueso. Voy a estar más cerca de la línea, así que tal vez incluso en la parte superior de la línea. Sí. Él. Vamos a copiarlo y pegarlo. ¿Voy a cambiar la rotación? Uno. Otra vez. Cuán preciso depende de ti cuando se ve bien, es el mínimo visual, así que no vamos a mucho tiempo. Visuales. ¿Correcto? Creo que me parece bastante bueno. Ahora, vamos a darles algunas etiquetas. Entonces este lado es Oriente. Entonces esta E, este lado, Norte Sur. Por lo que tiene una S. Este lado oeste. W, y este lado lo es. Todo bien. Ahora, vayamos a nuestro generador Ms y paredes externas finas. Ya que tenemos los externos, podemos solo de nuestro azulejo aquí No necesitamos hacer las decoraciones porque ahora estamos en azulejo. Podemos necesitamos hacerlo para conseguirlo y siendo ty otra vez. Seleccione, esto. Como, no Fue para. No estoy seguro de cómo es esta edad. No es Oeste. O. Bien. Ahora, escoge a todos ellos. Vayamos al guión. Vamos a traerlos, y hagamos algunos valores esto y promovamos una variable. Llamémoslos a D también para basura de galga. Y así mantenemos el mismo error. Entonces esto de aquí, volvamos a mi generación y sacemos esto. O el fin. Es y vamos a y vamos a para al final. Los muros, voy a poner juego a falso. Voy a volver a un azulejo, a todos de nuevo y a establecer juego oculto. Cierto. Ahora bien, si jugamos, no deberíamos ver nada porque esta función no se está ejecutando. Entonces ya sabes, el simulacro. Ahora tenemos nuestro follaje, pero lo tenemos en todas partes. Entonces la razón es que acabo de poner todo en oculto no lo hice yo. Si. Lo que queremos hacer es obtener la dirección hacia y desde esta cadena. Vamos. Consigue este año, como hicimos anteriormente en muchas cosas. Voy a poner aquí la sucursal. Y si es cierto, entonces sólo mostrar el follaje. Ahora es correcto. Nuestra maza tiene follaje. Es mucho más. Es como es que voy a relacionar esto. Va a estar bien. Terminamos con este detalle. El siguiente detalle que debemos hacer es cambiar los muros internos por muros que sean de otro tipo. Oh, para hacer esto, volvamos a nuestro generador maj. Vayamos a nuestra sucursal era. En nuestro hallazgo muros de salida. Los muros, en realidad nuestra verdadera rama. No nuestras caídas. Esto quiere decir que esto pertenece al calabozo, y vamos a hacer otra pregunta Si pertenece a la mazmorra, ¿también es una habitación tal vez? Porque si es una habitación, no queremos cambiar la pared. Queremos tener las paredes de la habitación. No, vamos a traer el Vamos a traer el todas las habitaciones, todas las llamadas de sala, que es un punto final, y solo vamos a ver si no contiene esto, no los vecinos, sino este elemento, que es la clave que estamos probando. Entonces, esta es la llave de una habitación. Si es una habitación, no hacemos nada. Si no es una habitación, vamos a conseguir nuestras paredes otra vez que tenemos aquí mismo. Vamos a f. O paredes, que es una habitación. Vamos a conseguir el muro correcto hacia la dirección, así que debemos copiar esto. Electo nodo. O aquí. Eso es conectarlo al índice de bucle de forraje que se conecta a la cruz fina adyacente Y vamos a un Cs u y estos dos y conectamos esto aquí y seleccionamos una sucursal. Ahora, por supuesto, lo que vamos a hacer es establecer malla estática. Para la malla estática, vamos a ser ect de entero aleatorio en rango. Lo cual sería de cero a tres porque tenemos algunas cosas extra. Una sería esta tabla combinada, creo. Esto es demasiado pequeño. Este 1938 A, tres, cuatro, usa este. A continuación, combinado 9d57 47a7. Estoy bastante seguro de que teníamos algo más. Bien. Aquí estamos combinados 0d44 Recordar a c17. Y sólo vamos a usar el muro combinado real que tenemos. Entonces de ellos será sólo una pared. Ahora, una cosa extra que hacemos aquí, pero vamos a explicar más adelante cuando llegue el momento es que cuando estamos en el juego, y ahí está nuestro personaje está detrás de algo, deberíamos poder ver una figura de nuestro personaje. Y para ello, vamos a jugar un poco con atom depth stan sll value, se llama renderizar profundidad personalizada básicamente Entonces no vamos a hablar mucho de ello en estos momentos. Hablaremos de ello cuando llegue el momento, pero deberíamos habilitar las opciones ahora para que no tengamos que volver. Cuando estamos en paredes internas, queremos ver básicamente el fondo de nuestro personaje, y algunos de los activos son un poco más altos, así que a través de ellos, nuestro personaje silete Nosotros hacemos eso, vamos a conseguir el yo estático. Vamos a establecer la profundidad personalizada de renderizado. Cierto. Vamos a conectar esto aquí. Y también, queremos establecer el valor sencil. Creo que cero. Si no lo es, vamos a comprobarlo después, cuando llegue el momento, volveremos y cambiaremos este valor. Ahora si pre compila y juego, tenemos nuestras cajas. Tenemos nuestras otras cajas aquí las paredes internas se volvieron un poco más interesantes. Y nuestro calabozo consiguió algunos apoyos. Algunos de ellos están un poco superpuestos, y me di cuenta de que esto sucede también con las esquinas de algunas paredes. Mi tal vez necesitamos empujar las paredes ale un poco más lejos. Pero creo que también está bien. Lo que podríamos hacer para solucionar este problema es simplemente ir a nuestras decoraciones y la ubicación, por ejemplo, esto en x, esto sería un cuatro oh cinco, tal vez. Si este, cuatro oh cinco. Éste. ¿Por qué? Yo hice esta. Para. A lo mejor esto lo arregla un poco. Diablos. Sí, la esquina ya no es visible. Aquí es un igual con el de madera. Bien, está bien. Hetils, creo que si jugamos con los valores, podemos calcular algún valor que sea mejor para todo podemos calcular algún valor que sea mejor para Pero por ahora, seguiremos construyendo nuestro generador M. Hay mucho por hacer. Seguiremos en la siguiente. W para verte entonces. Adiós. 47. Ajustes de flecha direccionales: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos motor cinco creación de simios de acción Procesal Dungeon Anteriormente, agregamos nuestras maravillosas imágenes de estas plantas por aquí alrededor de nuestros bloques Y terminamos el código para agregar, haciéndolos visibles cuando están en los bordes, cuando están en el perímetro de las paredes externas, y en realidad cambiamos los apoyos en los muros internos, también para ser abdom variación de apoyos que Ahora bien, en esta, lo que vamos a hacer es, y voy a presionar play para mostrar esto. Tenemos que arreglar las flechas perimetrales. Esto quiere decir que algunas flechas por aquí son correctas, algunas flechas no son correctas. En este caso, todo estuvo casi correcto. Entonces aquí, por ejemplo, tenemos una flecha que apunta hacia aquí, pero en realidad podemos acceder por aquí. Y el Esto no ha pasado mucho en este, pero es un tema. No deberíamos tener flechas que apunten hacia lugares a los que no podemos ir. lo arreglamos. Vamos a crear una nueva función que recorra todo el laberinto y probará alguna colisión con trazo de línea. Entonces sabemos si es o no puede ir. Dado que esta es la forma final de nuestro dg, cómo el layout ya no cambiará. Entonces, vamos a crear una nueva función. Llamemos a esto cosas. Aros. Y en realidad, en esta función, vamos a hacer algo diferente. Bueno, casi diferente. La forma en que vamos a manipular nuestras variables, para cambiar nuestras flechas de dirección. Vamos a crear un ary de lingotes y ary de dirección, y debido a que esto va a ser correspondiente entre ellos, en realidad una matriz de puntos también Podremos establecer las direcciones irrelativa a cuántos o están equivocados en un empate Básicamente un poco lo mismo que estamos haciendo siempre de una manera diferente. Entonces no se trata de optimización o no en estos momentos. Se trata de mostrar diferentes técnicas. Oh, vamos a conseguir nuestra variable de mazmorra. Vamos a conseguir nuestras llaves. Sólo llaves. ¿Y vamos a fluir a través de cada uno de ellos? Porque vamos a pasar por todo el calabozo, y vamos a encontrar vecinos cruzados adyacentes Y vamos a seguir a través de cada uno de ellos también. Así de aquí. Aquí viene la primera pregunta. ¿Este vecino pertenece al calabozo? A te vamos a preguntar si contenía? El calabozo Y si no lo es, entonces vamos a crear una variable local, una variable buling, que va a ser una matriz Voy a llamar, digamos a estos toros. Y cuando no lo es, vamos a estar agregando caídas, claro, falso porque no está conteniendo el calabozo, así que no hay acceso a él De lo falso. Si es cierto, vamos a base por canal. Vamos a configurar para cámara, no visibilidad. Para la ubicación de inicio, vamos a necesitar al vecino. Entonces lo vamos a encontrar desde el calabozo. Una ubicación. En realidad vamos a agregar algo de altura Z, S 25. Este es nuestro inicio y nuestro final es el bloque actual que estamos comprobando. Voy a conectar esto aquí. Esto lo hicimos antes, una vez más. Sólo voy a pegar. Conéctate aquí, y ese es el final de nuestra línea tat. Vamos a la sucursal. Quiero traer esto aquí. Léelo. Aquí afuera. Esto va a ser de la rama dos. Si le pegó a algo, entonces otra vez, no tenemos acceso, así que este b será de si no pegamos no lo hice, vaya a estar encendido. Esa es la principal diferencia, ¿no? No. Lo siguiente que necesitamos son las coordenadas. Pero vamos a crear otra matriz. Todos estos puntos o puertos o lo que sea. Va a ser del tipo en puntos. Bien. Y luego le vamos a sumar de ambas ramas a o paredes. Realmente no importa porque todos necesitan aunque sea falso, sí necesitamos las coordenadas para apagarlo. Y las coordenadas serían el bloque que estamos, el azulejo que estamos comprobando. Ahora, por último, necesitamos la dirección. Vamos a agregar otra matriz. Yo lo llamo. Erección. Vamos a simplemente poner un tipo de erecciones e, y vamos a agregar necesidad de seleccionar Vamos a copiar el selecto de otro lugar. Lo tenemos aquí. Encuentra externo. Y vamos a conectar el índice de esto para cada bucle para los vecinos? Porque basado en los vecinos, tenemos nuestro noreste suroeste. Ahora bien, estas son las tres variables. Esta es una forma diferente de hacerlo esta vez, pero tenemos una lista de biones, una lista de puntos, y una lista de direcciones No. ¿Cómo le vamos a decir a cada bloque que establezca sus direcciones apropiadas? La forma en que lo hemos configurado este momento que no teníamos únicas, sino muchas direcciones en una matriz. Esto quiere decir que en cada cuadra, estoy corriendo cuatro veces la línea como. Esto significa que cada bloque producirá cuatro veces el mismo punto final, pero corresponde a cuatro direcciones diferentes y cuatro booleanos diferentes Entonces, hagamos esto. Vamos a cuando terminemos todo esto, así que vamos a llamarlo desde el primer bucle de cuatro. Vamos a llamar a otros cuatro. Oop. Aquí vamos a conectar nuestros puntos finales. De esta manera, es un poco más sencillo. Es yo creo que es más acciones que otras formas. De todas formas, um voy a conseguir nuestro calabozo para conseguir nuestro azulejo Bueno, encuentra al actor seleccionado, al actor almacenado, que es azulejo, y vamos a obtener indicaciones. Y vamos a agregar Por cierto lo vamos a agregar, es muy, muy, muy simple. Vamos a obtener nuestra variable de biones, y vamos a obtener nuestra variable nuestras variables array bulions y direcciones, y vamos a obtener una copia de ellas Y porque corresponden a nuestro índice de arrays, desconectando índices aquí Un poco de cruz de acantilado. Está bien. Y entonces vamos a totalizar RO. Esta sería la función para arreglar todas nuestras indicaciones. Lo hemos conectado. Ahora, no lo he hecho, claro, no lo he hecho. Fijar flechas. Compilar y guardar. Juguemos y ahora las flechas arregladas. Cada dirección que se supone que debemos ir, tiene una flecha, cada dirección no podemos ir. No tiene una flecha. Genial. Creo que esto es para éste. Te voy a ver en la próxima. Adiós. 48. Ocultar flechas de depuración y crear antorchas: Hola, y bienvenidos de nuevo al taller de diseño de juegos y cinco procedimientos de Real Engine curso de creación de RPG de acción Dungeon Anteriormente, terminamos con nuestra función de flechas fijas. De hecho, esta vez usamos una forma diferente. Almacenamos un montón de puliones, y un montón de puntos y direcciones, matrices correspondientes, y a nuestro sistema de trazado de líneas, si hay un bloque o no Y cuando terminamos esto, corrimos nuestros puntos y conseguimos todos nuestros actores hicieran los cambios correspondientes. Ahora, como que hemos terminado con la parte de información de la inducción con la gestión de datos y todo. Una última cosa podría ser ocultar todas las flechas. Entonces vayamos a nuestro azulejo BP. Vayamos a nuestro gráfico de eventos y hagamos clic derecho y creemos un evento de tormenta. Vamos a nombrar este evento. Ocultar todas las flechas. De aquí, vamos a conseguir nuestra flecha norte, vamos a conseguir nuestra flecha este. Vamos a conseguir nuestra flecha y flecha oeste. En realidad, deberíamos estar obteniendo el número de mosaico también porque queremos ocultar esto. No, vamos a establecer, y vamos a conectarlo todo. Y lo nuevo oculto será cierto. Ahora, vamos a comprobar si tenemos en decoración, algún texto. No lo pienses así. Aquí no necesitamos esconder nada. Vamos a compilar. Guardar y compilar. Guardar y compilar siempre. Esta es la tercera vez que esto sucede. Y estamos de vuelta, y vamos a compilar y guardar y compilar, siempre guardar y compilar porque por si acaso se bloquea, deberíamos haber guardado. Ahora, lo que vamos a hacer es volver a nuestro generador de laberinto, crear una nueva función, esto. Busquemos nuestro laberinto. Esta vez, vamos a obtener los valores porque los valores son los mosaicos, y vamos a bucle for. Para cada bucle, y vamos a llamar flechas. Entonces ahora, llamémoslo en la gráfica in. Flechas. Sin compilación de respaldo y comp. Juguemos. Y necesita esconder a los niños. También, así propaga a los niños, esto ocultará los renders de texto que están dentro de las flechas, vimos WS y todo quedó, y ahora tenemos más de una vista de juego Vamos a presionar encendido. Por fin es el momento de ver iluminado. Ahora, no vamos a empezar con el sol porque primero debemos iluminar el laberinto, porque si empiezo a jugar con la visibilidad del sol ahora mismo y ponerla para, como y una. Entonces cuando estemos mirando el laberinto, no vamos a estar viendo mucho. Está bien, pero dejémoslo en uno por ahora, es más oscuro como debería ser Derecha. Lo que vamos a hacer ahora en esta lección es comenzar a iluminar nuestro laberinto con algunas luces personalizadas que respondamos. Iremos a los planos de la carpeta. Vamos a hacer clic, crear una nueva carpeta. Llamemos a esta carpeta apoyos. Vamos a entrar en esta carpeta. En realidad, podemos mover el elevador también aquí, y podemos mover el cofre grande también aquí. Y podemos mover BP intro también aquí. Entonces para la generación del laberinto, en realidad, estos son los tres mosaicos que se necesitan, y el resto son apoyos que están haciendo cosas por nosotros. Entonces, volveremos a hacer clic derecho, y vamos a seleccionar la clase de impresión. Voy a seleccionar Actor. Va a ser BP Porche. Esto va a ser antorcha Ábrelo, va a anclarlo aquí arriba. Vamos a necesitar una strat ques. Vamos a necesitar una luz puntual. Y claro, vamos a necesitar un sistema de partículas. Para el sistema de partículas, vamos a usar cascada porque nuestras partículas son cascada para el fuego. Y esto es a partir de los componentes que necesitamos. Voy a ir a las preguntas estáticas. Voy a seleccionar un porche. Voy a seleccionar la puedo ver porque es Esta es una antorcha grande, es una antorcha pequeña. Voy a seleccionar este tubo de cama de fila. Fila sea tubo. ¿Todo bien? Ahora, ¿dónde está aquí? Lo que necesitamos es padre de la partícula a la malla estática, así que por si acaso esto se mueve juntos. No voy a hacer lo mismo con la luz puntual, sho voy a hacer lo mismo para la luz puntual también Y seleccionemos primero el sistema de partículas. Vamos a usar la plantilla. Queremos el fuego P. Es un poco grande. Eso son cuatro. ¿Correcto? Cambiar la dirección de la pluma. Sí. I pie 92 eje. Que creo que el terreno de juego. Y luego voy a ir a señalar la luz. En realidad, lo voy a dejar así porque después vamos a crear algún código para que parezca que está parpadeando, et c. por ahora, et c. por ahora, solo queremos agregarlo en nuestro estiércol, en él en nuestro dungon Volvamos al generador de Mz y vamos a crear una función Vamos a llamarlo luces P. Y ahora viene la pregunta, ¿ dónde sacamos estas luces el lugar donde los vamos a estar desove está al lado de las puertas, como izquierda y derecha o una de ellas, o ninguna de ellas. Algunas puertas podrían no tener luz. Entonces vamos a necesitar la fractura de la habitación. Entonces voy a conseguir la habitación S. Voy a conseguir espacio. Y a partir de ahí, voy a parar e. Y a partir de esto, me voy a romper. A partir de eso, voy a por bucle. Por lo que hacemos esto para cada coordenada de habitación. Ahora, lo que necesitamos es encontrar al actor antes que nada. Para ello, necesitamos nuestro calabozo. Y de este actor, realmente necesitamos nuestras decoraciones. Actor en realidad consigue decoraciones. Y de esto, vamos a conseguir y de esto, vamos a las decoraciones Cust. Voy a convertirlo en un cust puro. Esto. Ahora, decoraciones F, realmente necesitamos crear T, algunos puntos de escena. Vayamos a nuestro plano de decoraciones. Vamos a nuestra viewport. Voy a cerrar las flechas aquí, y voy a agregar una escena, que como puedes leer, es solo un componente que tiene una transformada que se puede unir o adjuntar otros componentes también. Es sólo un punto, básicamente, un punto que podemos definir. Voy a elegir la escena, y voy a moverla por aquí. A lo mejor a la izquierda a la derecha. Sólo por esta, voy a cambiar esto a una puerta, para encontrarla, voy a seleccionar nuevo la escena, o casi correcta. Voy a colocarlo aquí, tal vez aquí. Bien. Voy a copiar la escena, duplicarla. Necesitamos una cruz, y esto va a etiquetar muro este. Esto sería muro este A. Izquierda. Entonces EW L, y esto sería es pared derecha. Ahora, cambiemos esto a lo que era. Voy a seleccionarlo aquí, encontrarlo en el navegador, a la izquierda atrás en la pared, y arrastrarlo y soltarlo aquí. Todo bien. Voy a conseguir las escenas. Voy a duplicarlos, y voy a moverlos a través. Están en la posición correcta. Ellos r. cuando engendremos, vamos a e mejor. Voy a ponerle nombre a esto. R uno. Este será W W L uno. Yo voy a hacer lo mismo por el norte y el este. Voy a añadir. Para moverlo hacia aquí. Y voy a comprobar el offset en el otro, que era 140 para el siguiente fue 145. Está bien si no son simétricos porque algunos de ellos serán engendrados, algunos de ellos no serán engendrados Voy a seleccionar de nuevo el original es él. Aquí está. Voy a poner 140 aquí. Voy a duplicarlo pone 45. Y voy a ponerle nombre al norte. El remolcador. Esto es sur. Entonces esta es la pared Sur esta pared dejó. Voy a duplicarlos. Y voy a ir y este será muro uno a la izquierda, que en realidad son opuestos. Esta es la correcta. Este es el de la izquierda. También esto también sucedió W. El otro W L. No es que importe, pero ¿por qué no? Oh, voy a compilar y guardar, y vamos a dejarla aquí para ésta. Vamos a tener un descanso y continuar en la siguiente. Adiós. 49. Luces de antorcha de desove: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos, y al curso real de creación de ARPs de Acción de Mazmorra Procesal Engine five creación de ARPs de Acción de Mazmorra Procesal Anteriormente, comenzamos con nuestra función Laberinto de luces. Creamos el inicio del algoritmo, qué salas buscamos y cómo obtenemos la información de ellas. Y también agregamos algunos puntos de un montón en realidad a nuestro plano de decoraciones para unir las luces Al mismo tiempo, también escondimos nuestras flechas y creamos el plano de la antorcha Ahora, continuemos. Vayamos a nuestro generador de laberinto, y vayamos a nuestras luces de laberinto de funciones. Quizá antes de eso volvamos a hacer otra tarea tediosa. Agreguemos algo más aquí porque sé que no es el mejor, pero no es el mejor momento, pero tenemos que hacerlo. Y esa tarea tediosa es sumar los remolcadores en las escenas. No. Estas son las escenas del norte. Entonces vamos a ir tirones tach tag. Vamos a añadir. Como pueden ver, puedo seleccionar ambos, y va a agregarlo a ambos. Voy a seleccionar los del Sur, voy a agregar un remolcador, seleccionar S. Voy a seleccionar los del este, agregar el remolcador E, y los del oeste en el remolcador electo W. Bien, la tarea estudiosa se acabó volviendo a las Ahora bien, ¿cómo podemos saber dónde está la puerta? Si recuerdas, si conseguimos nuestras paredes una A, y vamos de cada una de ellas por bucle. Podemos conseguir los remolcadores. Y podemos verificar si contiene el ítem, que en realidad distingue entre mayúsculas y minúsculas. Entonces, cuando agregamos este remolcador a las puertas, ¿cómo lo agregamos? Vamos a buscar esta función, que estaría dentro de decoraciones y era mayúscula D O R. Así que vamos a ir aquí, mayúscula D 00 R. Ahora bien, no necesitamos saber dónde está exactamente la puerta, dónde dirección o lo que sea. Solo podemos verificar qué puerta tiene una puerta de etiqueta. Y a partir de eso, porque sabemos que el primer remolcador es nuestro noreste suroeste Podemos obtener P de cero, que es el primer remolcador. Y entonces sí necesitamos una matriz de las luces. Así que volvamos a las decoraciones. Algunas tareas más tediosas. Seleccionemos todos ellos. El orden no importa, ya que vamos con remolcadores, creo que son todos ellos. Hagamos una matriz. Copia. Él es éste. Ops. Y son ocho, entonces es correcto porque cuatro lados, dos en cada uno, ocho, van a promover esta dos lib. Ts, o tal vez ranuras de luz de puerta, porque podríamos agregar más, ¿quién sabe? Vamos a compilar y ahorrar. Volvamos a nuestro generador de laberinto, y de nuestra decoración, vamos a conseguir ranuras de luz de puerta. Voy a cada uno. Si es t, si contiene la puerta, vamos a componente ug. H tug realmente componente tiene remolcador, que será el tirón cero de Voy a la rama, al bucle de barrio. Y ahora porque vamos a necesitar rotar la luz porque la luz tiene cierta rotación por sí sola. Podríamos ir en elaborado sistema con trazas de líneas y/o coordenadas en negrita. Pero no, lo que vamos a hacer es yo tipo de los valores por mi cuenta, y cuál corresponde a qué rotación corresponde. Porque sólo tenemos cuatro rotaciones, básicamente. Cada uno. Entonces lo que vamos a hacer es que vamos a cambiar basándonos en la etiqueta con el nombre. Y esto es sólo cuando esto es cierto. Vamos a tener cuatro casos. Voy a quitar el pin de ejecución, y los casos serían nuestras indicaciones. Todo esto sería norte, sur, este y poniente. Guardar, guardar y compilar. Ahora, voy a hacer una costumbre, una variable local, es decir, light, y va a ser del tipo rotador Entonces voy a fijarlo a cada uno de ellos es Southwest. Y los valores son -90 para Norte, 0490 para Sur, cero para Oriente y 180 para Occidente Entonces voy a poner una sucursal porque como dije, algunos de ellos van a tener una luz, algunos de ellos no van a tener una luz, y yo voy a hacer, y voy a sacar clase de actor. Voy a dividir la cuchara voy a conectar la podredumbre ligera A la rotación. Y para la ubicación, solo necesitamos la ubicación, la palabra ubicación de nuestra escena. Así que vamos a obtener la ubicación y conectarla aquí. Y debemos seleccionar la clase, la clase sería antorcha Una cosa más que necesitamos es algo que no hemos usado desde hace mucho tiempo. Necesitamos que los actores destruyan. Vamos a agregar a esta lista, las luces, porque cuando creamos un nuevo laberinto, las luces en realidad son caras en rendimiento. Entonces los vamos a eliminar. Vamos a jugar. Veamos qué es lo que en realidad. Vamos a agregar esta función al final de esta línea. Laberinto luces, y ahora podemos ir a jugar. E inyecte, y tenemos luces. Están demasiado lejos. Algunos de ellos están demasiado lejos, algunos de ellos no. Esto debería ir. 70, también son grandes. Volvamos a las decoraciones. Digamos cuáles son los puntos que son. Esto debería ser 370 estuvo bien, creo, 370 esto ¿Por qué? -70. Esto parece interno. Lejos, vamos a hacerlos un poco más pequeños primero. Entonces vayamos al desove de ellos en realidad. No necesitamos hacerlos más pequeños aquí. Simplemente podemos hacerlos más pequeños en general. Cuando las mae se encienden, cuando las engendramos, reducimos la escala 2.5 55. Comprobemos de nuevo cómo se ven. Están un poco bajos y están un poco lejos. No podemos ver al pariente aquí. No podemos ver al pariente de aquí. Por supuesto, no podemos vamos a necesitar ir a decoraciones y de hecho con los valores aquí. Voy a poner 20, el otro mojado. Poner todo en t Este está en para 20. Cual era el sur sur, creo que estaba demasiado lejos. Sí, para 20. Y este también 20.Es unos, no hemos tocado falso ¿Hay demasiado en A lo mejor deberíamos cambiar todo aquí a 30. 160 fácilmente con bajo, así es 81 25 o 30 o 25280, está bien W el otro? Son cinco. Esta es la peor tarea tediosa. Hay mejores formas de hacerlo. Pero esto es lo que elegimos ahora mismo. ¿Arreglamos todo, todo está arreglado, y el agua del sur. Bien. Compile y guarde, y volvamos a probar. Creo que esto es un buen lote. Aunque sean un poco tal vez 425. Si quieres puedes cambiarlo a 425, podría quedarte un poco mejor, pero no creo que vaya a ser visible. Entonces, creo que esto es para éste. Te voy a ver a continuación. Adiós. 50. Efecto de parpadeo de antorcha: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos, y al motor de cinco Acción Procesal Dungeon ApS creación Cs Anteriormente, añadimos nuestras antorchas a nuestro laberinto. Creamos el código en luces de laberinto para generar nuestras luces. Usamos la matriz de muros para obtener la etiqueta de componente, si es de norte a sur u oeste. También comprobamos si la pared es una puerta porque si no es una puerta, entonces mostramos otra luz. Y usamos algunas rotaciones de luz preestablecidas y basándonos en una prohibición de un sangrado, en un bleion, generamos nuestra Y luego agregamos a los actores para destruir. Lo trabajamos un poco con dónde está y cómo es Lo siento, plano equivocado, las decoraciones, a través de nuestro plano de decoraciones, a través de nuestro plano de decoraciones, y usamos los puntos de escena para establecer Ahora, vamos a jugar un poco con la luz. Oh. Vamos a ir a nuestra antorcha BP. Dave, porque no se guarda. En realidad guardar todo. Y vayamos a nuestro punto de luz. Ahora, tengo en mente algunos valores que hemos probado y cómo se ven en el laberinto. Voy a usarlas. La intensidad sería de 258o4. Entonces 25,804. Y el radio de atenuación sería dos o 37437. Ahora, nuestro color claro sería de x lineal F F 58 47 FF. Ahora puedes elegir la luz que quieras, pero para nosotros eso funcionó Y L et's hacen que el paseo de origen use 30. Y vamos a anular la selección de sombras proyectadas. Entonces es un poco más óptimo. Si quieres, si tu computadora puede manejarlo, puedes dejar esto encendido. No vamos a optimizar las luces para que sean invisibles cuando estemos demasiado lejos. Simplemente dejamos eso al motor a lo que sea que necesite. Pero lo que vamos a hacer es jugar al creador tembloroso. Vamos a ir a comenzar a jugar, y vamos a agregar una línea de tiempo. A quien c con las luces. ¿Quién es la Reina con las luces? Fue Barbadi ¿Fue imbo? De todas formas, solo una referencia de South Park, no importa. Oh, ¿qué es una línea de tiempo? En definitiva, sería una herramienta que podamos manipular variables a lo largo de un cierto periodo de tiempo. ¿Cómo hacemos esto? Bueno, hacemos doble clic en la línea de tiempo, y podemos ver que tiene algunas opciones. Lo que vamos a utilizar es una pista de un flotador. Los camiones de vectores y pistas de eventos y pistas de color. Pero lo que necesitamos es un flotador. Ahora, en esta camioneta, vamos a cambiar y hacer clic y crear algunos puntos. Débito. Creo que ya son suficientes puntos. Entonces nuestro primer y último punto así que el tiempo cero debería ser el valor cero. Y usaremos la longitud de tiempo actual, que es cinco y la mantendremos ahí, así que el tiempo cinco, el valor volverá a ser cero. Hay otras opciones por aquí, pero la opción que sí necesitamos es la opción de looping Lo que significa que cuando se reproduce nuestra línea de tiempo, se reproducirá una y otra y otra vez, lo que sea. No. ¿Cuál es esta pista de flujo que creamos en estos puntos Entonces estos puntos son básicamente nuestro impulso Alfa, lo que significa que nos darán un valor 0-1 No debemos ir por encima de uno y dos menos uno. Pero no debería ser este punto. Cambiemos este punto. Vamos a tener dos mínimos. Y entonces vamos a dar la vuelta y poner las luces, otros puntos, hacerlo como dem, como si estuviera divagando, aunque no lo sea, no sé si esto queda bien No necesitamos realmente tener uno y menos uno, y podemos tener donde queramos, pero si ponemos grandes valores duros, aumentará exponencialmente la luz demasiado, et No, a lo mejor esto está bien. A lo mejor no lo es. Lo que vamos a hacer es seleccionarlos todos y hacer clic derecho y usar la función auto, que los curvará un poco. Entonces no va a ser instantáneo. Lo vamos a dejar como está, y vamos a comprobarlo cuando completemos nuestra codificación aquí. Entonces vamos a conseguir la luz puntual, y vamos a poner la luz. También vamos a establecer intensidad. Y vamos a establecer también atenuación de atenuación de conjunto Estas son las variables que vamos a cambiar en la línea de tiempo, que es una especie de manera pesada de hacer esto. Pero para nosotros, va a estar bien. No tenemos tantas cosas en nuestro calabozo. Oh, este es el regreso de nuestro nuevo track. No lo hicimos, e n eso. El nombre y el nombre Alfa. Esta es nuestra luz Alfa. Vamos a dejar que el color lineal, vamos a dejar y en realidad otro flote. ¿Qué es a b? A er pisa del valor A ir a B basado en un Alfa. Impulsión alfa que creamos. Conectado. Aquí aquí. Y ahora vamos a hacer clic en un color, que en realidad podemos copiar en el punto de luz. Yo sólo cerca del punto de luz, y copiarlo aquí y pegar. Ahora, para el segundo, hagamos clic en él y tecleemos el F F O. Con más naranja. Podríamos estar cambiándolos más tarde si no se ven bien. Ya veremos. Y por la intensidad, en realidad estamos sobrepasando estos 25 mil Parecía mucho para ser honesto. Entonces va a pasar de 5 mil. También le puse la luz 5000-6 mil. Y desde el conjunto en el radio de nación 600-800. Estos en realidad están anulando nuestra configuración aquí. Entonces estos deben ser los valores correctos. Voy a poner 600 aquí. Vamos a compilar y guardar. Vamos a jugar, cómo se ven. Demasiado cambio. A mucho cambio. Así que volvamos a nuestras luces. Este color está demasiado lejos. Escojamos uno cerca de esto. A lo mejor el cancela naranja basado aquí. A ver, no. un poco demasiado amarillo demasiado. También es un poco demasiado rápido. Pero está bien. Creo que está bien. Si quieres, puedes empatar con los valores y hacer que se vea mejor. Ahora más cosas que podemos hacer en este estilo en este blueprint serían ir a la malla estática y apagar la generación de eventos de superposición porque no lo necesitaremos Apagarlo colisión por completo. No lo queremos. Y de las luces, creo que eso es todo de este tipo de luz porque ahora vamos a agregar algunas otras luces. Déjame mostrarte. Aquí tenemos estas maravillosas luces, pero necesitamos estar desovando en el laberinto de los pasillos Entonces, antes que nada, vamos a crear un plano para agregar este mese estático. Vamos a ir al contenido. Vamos a ir a planos, vamos a ir a utilería, y vamos a hacer clic derecho y crear un nuevo actor tipo clase blueprint y llamarlo BP, Voy a abrir esto, y voy a añadir una malla estática, que va a ser la luz del pasillo. Busquemos malla. Sólo estuvimos ahí. Voy a usar Esto, y tenemos nuestra luz. Ahora, para que sea más bonita, agreguemos algunas cosas Agreguemos algunas cenizas más estáticas, que no va a ser una linterna. Llamemos a esto. Escudo. Y agreguemos a más. Sh. Llamemos a este tipo otra malla estática. Llamemos a esto o a unparent esto porque está parentado Llamemos a este post terrestre. Para el escudo, creo que lo llamamos escudo. Voy a traerlo aquí. Voy a elegirlo, y luego lo voy a traer aquí y voy a cambiarlo. 2.5 porque es demasiado grande, tal vez un poco más grande. 7.7 es cinco. Bien. Lo voy a poner un poco arriba. Ahora vamos a traer las espadas. Vamos a elegir el método estático. Espada Ford, sácalo. Debe estar aquí. Aquí está el arma. Voy a agregarlo aquí. También lo vamos a poner 2.7. Gale rotarlo un poco. Lo traeré aquí. Ríndele. Yo f. aquí, voy a conseguir la segunda espada. Un sd. No he puesto el arma de malla. Nuevamente, 0.7. Voy a rotarlo un poco. No lo quiero en el suelo. Digámoslo de esta manera. Para agregarlo aquí. Y en la gráfica vm en comenzar a jugar, voy a traer una referencia a cada una de ellas. Y yo voy a ver. Juego o cada uno de ellos por separado. Voy a conectarlos. Cada uno de ellos a un juego oculto, y voy a hacer una. Ahora bien, ¿qué es una secuencia? Una secuencia, es una forma de organizar un poco nuestras acciones. Pero hay que tener en cuenta que aunque diga cero, entonces uno, luego dos, no significa que los ejecutará. Los ejecutará en orden, pero no esperará a que termine una ejecución. En el momento en que corra el primero, correrá el segundo, y luego correremos el tercero. No va a esperar a que termine la ejecución. Repito, porque si aquí tengo algunas matemáticas, por ejemplo, eso digamos que la línea tres las está necesitando, entonces las matemáticas probablemente no se completarán cuando se ejecute la línea tres. En el nuevo oculto, voy a seleccionar aleatorio b. Así que cada luz tendrá una combinación aleatoria de estos apoyos visibles Creo que esto es para éste. En la siguiente, los vamos a agregar en el mapa. Boo adiós por ahora, les importa. 51. Sistema de iluminación de corredor: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos y real Engine five procedural curso de creación de RPG de acción Dungeon En la lección anterior, agregamos nuestro plano ridor light. Nosotros lo creamos. Agregamos la malla estática de la luz, el escudo, la espada, el tipo dos. Y en la jugada de inicio. También creamos algún código para hacer visibles algunos de los apoyos, algunos de ellos invisibles. Va a ser aleatorio. También agregamos con una función con una línea de tiempo, lo siento, en la antorcha BP, en la jugada de inicio, un pequeño código para jugar con la luz de nuestras antorchas Entonces se ve como la pandeada o algo así. Ahora, continuemos con la adición nuestras luces de pasillo al laberinto. Oh. Lo que vamos a hacer es sacar primero las reglas simples del camino, y luego vamos a hacer algo más complejo. Oh, vamos a necesitar los pasillos, una serie de estructuras Entonces son los corredores ST. Bien, vamos a por cada bucle a partir de ahí. Y lo primero que necesitamos es romper la estructura. Entonces tenemos nuestras coordenadas. A partir de nuestras coordenadas, necesitamos saber si esta longitud es mayor que uno. Porque si se trata de un solo azulejo, no deberíamos agregar una luz. No va a quedar bien. Ahora bien, como no sabemos cuántos mosaicos hay, lo que podemos hacer es que podemos hacer un bucle de cuatro, no un para cada bucle, sino un bucle de cuatro con el último índice, como el último índice de los cuatro bucles. Así que tantos como los tienen, esta es tu última vez que ejecutarás este bucle de cuatro. Pero esa sería nuestra primera parte. Estamos consiguiendo las habitaciones del pasillo, las coordenadas de cualquier corredor, cuántas son, y estamos comprobando si son más de uno, y si son más de uno, estamos para hacer un bucle de cero a la última Lo siguiente que deberíamos estar revisando es la actual una habitación especial. Entonces, vamos a preguntar si um si nuestras coordenadas actuales de posición dentro de nuestras habitaciones especiales. Ahora, para hacer esto, vamos a conseguir que se copien las coordenadas que queramos. Y la forma en que lo vamos a hacer es que vamos a usar este índice, que es de cero a último índice de esta matriz. Pero esto corresponde correctamente. No va a si está contenido un elemento de matriz, que es la habitación especial. Azulejos especiales. Esa sería la loseta del elevador, esa sería la loseta de caja, la loseta del cofre, y eso sería. Estas son las ranuras. Básicamente, no queremos engendrar una luz No. Ahora es el momento de una regla un poco más complicada. Déjame abrir la pintura. Lo que vamos a tener es, digamos en nuestra grilla, laberinto. Veamos que engendramos una luz por aquí. Lo que hacemos es crear una caja a su alrededor. Pregunta, ¿hay alguna luz en esta caja? En realidad, antes de que lo engendremos, preguntaremos, ¿hay alguna luz en esta caja? Porque si hay una luz en esta caja y estamos aquí, no deberíamos estar desove bien. Entonces esto nos ayudará a espaciar un poco mejor cómo van a desovar nuestras luces en nuestro laberinto Entonces, hagámoslo. Veamos cómo lo vamos a hacer. Vamos a usar algo que se llama multi baseline, multi box para nuestro ejemplo. La llamada de L et sobre la primera diferencia. No el multi uno, sino el cuadro uno entre el rastro y la caja. La caja es como la caja de colisión. Las huellas se pueden hacer en esferas, cajas, forradas. E incluso podemos crear algunas formas personalizadas con un poco de esfuerzo. Pero por ahora, vamos a usar una caja. ¿Y qué es la multiparte? Significa que puede en muchas cosas y mantenerlas en una lista. Esta es la razón por la que nuestra salida se calienta es de un tipo array. Es un contenedor array. No, ¿por dónde empezamos? Básicamente, sólo vamos a sacar al actor de aquí, así que vamos a encontrar en el calabozo Gin map, así obtenemos el mosaico actual que estamos probando. Voy a conseguir la ubicación del actor. Este tipo de ubicación de guerra tipo Dan. El motivo es cuando estamos consiguiendo la ubicación del actor, siempre está en el mundo, porque el actor es una parte del mundo, donde cuando estamos obteniendo de un componente, queremos ubicación de guerra o relativa a la ubicación del actor, porque un componente pertenece al actor que el actor pertenece al mundo. Una forma Vamos a establecer el inicio aquí, y esto también va a ser el final porque no vamos a moverlo. Sólo va a por una garrapata, comprueba lo que hay a su alrededor. 00 la media talla, vamos a usar los valores 800, 801. Tu orientación está bien. Visibilidad, vamos a verificar la cámara, y eso es prácticamente todo para nuestro rastreo de caja múltiple. Ahora, de nuestros resultados de calor, vamos a cada uno. Pero antes de continuar, necesitamos crear una variedad local, que va a ser de tipo ban. Vamos a llamarlo. Voy a ser tipo b. Vamos a traerlo aquí y darle la vuelta antes de que empecemos por loop. Ahora, lo que vamos a hacer es romper nuestro resultado de calor, cada uno de nuestros resultados de calor porque esta matriz de sal, estamos rompiendo cada una de ellas. Lo que vamos a hacer es ir al actor de calor y solicitar la clase. Vamos a conseguir clase. Y vamos a comprobar si su clase es igual a las luces de nuestro pasillo. Sucursal, Corrija esto. Voy a poner esto aquí. Trae a este pequeño. cerrar esto para que se vea un poco mejor. Y ahora, si es corredor, entonces vamos a girar la nota ligera encontrada de Esto en realidad podría ir con break, cada uno con break porque es una acción que cuando encontramos lo que buscamos, debería estar rompiendo. No, voy a conectar esto al descanso. De la falsa, no necesitamos hacer nada. Y cuando esté terminado, vamos al autobús. En realidad, necesitamos una sucursal aquí. De lo contrario esto no hace nada si no usamos una sucursal. Vamos a traer la luz pero encontramos. Si esto es cierto, en realidad vamos primero, vamos a comprobar, vamos a elegir la luz. Luz M, luz pd. Y luego vamos a sumar a las luces no funciona así, pero tenemos que conseguir que los actores destruyan y lo agreguen. Nada de lo que engendremos debería quedarse en el mapa. Ahora, para transformar, vamos a dividir esto y conectar la ubicación de nuestro actor. Ahora, agregamos las luces. Vamos a verlas en nuestro juego. No existen o algo no salió bien. Vamos a comprobarlo. Vayamos a nuestra función. Los pasillos. Son más grandes que uno, sí, o bucle más índice de eso, y si pertenece a especial, si no pertenece a azulejos especiales, siempre las pequeñas cosas. Ahora, he visto luces que son diminutas. E vamos a arreglar eso. Vamos a presionar para. Vamos a nuestras luces de pasillo, y aumentemos esta altura a dos. Voy a volver a mover el escudo. Mi tal vez uno era el correcto o el tipo también. Voy a poner esto aquí. El otro tipo. Pon esto aquí, guárdalo uno. Vamos a compilar y ahorrar. Voy a jugar. Este aspecto de luces. Luce bien. Tenemos que mover un poquito de espadas, pero eso está bien Esta tiene dos espadas. Éste tiene un escudo, por cierto. Agujeros. Por qué cada hay dos agujeros. Sostén el sod dos. B es aleatorio y puede suceder. A lo mejor podamos poner alguna rama en el segundo tipo. Conecta esta bola aleatoria aquí, así hacemos que el segundo tipo sea un poco más raro. Compilar y guardar, Lwer las suelas un poco también. Es demasiado alto. Bien. Mi creo que esto está bien porque esto lo vi un poco redondo. Voy a levantarlo un poco. Inclínelo un poco más. Queremos más bajo. Creo que suelo, más bajo puede estar bien, puede que no lo esté. No veo, no sabemos. Las luces. Entonces se ve bien. O sea, vamos a ser pi con vista, así que casi bien. Sí, creo que están bien. Pero lo único que falta es la luz. Entonces agreguemos la luz. Vayamos al plano. Vayamos al poste de la lámpara porque van a ser hijos de la farola, y voy a presionar add Vamos a seleccionar luz puntual. Esta es una luz puntual enorme, vamos a traerla aquí en la lámpara, y cambiemos los ajustes a lúmenes y volvamos a usar gs 500. Y el color debería para el 97 A uno. Se ve bien. Ahora la radio de atenuación debería ser. 800 y el radio de origen 50 y el radio blando a 50. Y vamos a dejar que se enciendan las sombras porque creo que está bien. Ahora, voy a duplicar esta luz y moverla por aquí de ambas luces encendidas. Voy a compilar y guardar y vamos a verlo. Yo. Tenemos algo de iluminación en nuestro laberinto, empezando a conseguir un nivel más vivo, se parece más a un nivel de juego. Derecha. Creo que esto es para éste. Te voy a ver en la siguiente. Adiós. 52. Mecánica de trampas y sistema de daños: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Motor real cinco Creación de RBC de Acción Procesal Tangente Anteriormente, agregamos algunas luces en Armas. En realidad, agregamos todas las luces Mae. Um Son un poco cuadrados porque están proyectando sombras. Pero prefiero dejarlo así en vez de no proyectar sombras o colocarles un montón de vuelos. Podríamos contrarrestar esto colocando una luz puntual en cada lado, u otras formas. Pero por ahora, lo vamos a dejar así porque vamos a añadir algunas cosas más. Vamos a agregar algo de niebla. Vamos a agregar efectos de post procesamiento. Entonces después de todo esto, podemos comprobar cómo arreglar las luces. Ahora, lo que vamos a hacer es ir a nuestro generador de laberinto y es hora de empezar a traer algo de piel de utilería. Entonces, vamos a crear una función. Llamemos a este dueño de utilería. Vamos a la gráfica principal y llamémosla. I. Ahora, recuerda cuando dije cuando estamos construyendo el elevador, no lo vamos a posponing ahí. Vamos a nuestro elevador, para estar aquí. Cortemos esto de aquí. Vamos a nuestro posponer y pegarlo. También necesitamos hacer lo mismo o nuestro pecho. Ven aquí. Voy a conseguir estos nodos, los vamos a cortar , controlar C, y pegarlos con control V. Ahora. Vamos a crear un utilete que estaremos desove a la mayoría de las fichas de la mazmorra Vamos a estar desove en pasillos, y va a ser una trampa Entonces, cuando el jugador lo pise, nos estaremos dañando. Vamos a ir a nuestro contenido. Vamos a ir a nuestra carpeta de planos y nuestra carpeta prop y hacer clic derecho y crear una nueva que se va a llamar BP p. ahora vamos a abrirla. Cor por aquí. Y antes de continuar con nuestra trampa. Esta es la primera vez que necesitamos tocar un poco a nuestro personaje. Entonces vamos a ir al contenido. Vamos a ir de arriba hacia abajo, vamos a ir a planos y abrir nuestro carácter PP de arriba hacia abajo Y sólo tenemos que hacer algo muy sencillo. Lo mismo que hicimos con los remolcadores en las paredes, tenemos que hacer por el componente cápsula del jugador Entonces seleccionaremos el componente cápsula, iremos a sus detalles e iremos a remolcadores Y agrega la etiqueta o jugador. ¿Y por qué hacemos esto? El motivo es porque, por ejemplo, digamos, para nuestro jugador, vamos a tener un me me ataque, yo, yo. Creo que es una pronunciación correcta. Entonces vamos a tener un ataque conmigo. Y que mi ataque estaría generando una colisión. Sea queremos comprobar lo que sea que esté dentro de nuestro ataque me. No vamos a estar haciendo va a ser un ataque mágico a mí. No va a ser una espada que pudiéramos conseguir el swing de la misma. Pero aunque fuera una espada y podíamos conseguir el swing de la misma. ¿Y si la espada tocara el suelo? ¿Desencadenaría una trampa? No, no queremos que esto suceda. Entonces queremos poder preguntar, ¿la cápsula real del jugador tocó esta colisión? ¿Entonces lo hacemos a través del remolcador? Podríamos ir con checar casting al jugador y obtener la cápsula, y luego comparar el otro componente con la cápsula? Demostremos esto. Vayamos a nuestra trampa. ¿Cuál es el plano? Aquí está. Debería estar justo aquí al final. No. Para toda trampa, vamos a necesitar una colisión. Y voy a usar una colisión de caja. Pues, dejémoslo así. El visual cambiará en función de nuestras medidas, y vamos a ir a la colisión de la caja y elegir la superposición de inicio. No. No vamos a pasar por todo, pero vamos a pasar por los dos pines que usaremos, el otro actor y el otro componente. El otro actor se refiere al actor que comenzó a superponerse con la caja. Y eso significa, como expliqué, eso incluiría el ataque de may si estuviera incluido en nuestro jugador. Si engendré, pongámoslo aquí, se colisión. Digamos que lo tengo por aquí para verificar muchos ataques. Ahora bien, si esto por alguna razón, por ejemplo, por aquí, y era disparador dispararía la trampa si le preguntara si el otro actor si el otro actor es el personaje de arriba hacia abajo con un elenco, por ejemplo. Pero lo que hicimos al agregar esto Esta etiqueta de aquí, la P es que de este nodo, otro componente, lo que significa qué componente del actor que se solapa conmigo se superpuso Si es la esfera, tendría esta etiqueta P. Si fuera la cápsula de colisión, perdón, no la esfera, sería la etiqueta P. Tendría la etiqueta P. Podemos preguntar como ug. Si tiene la etiqueta P, podemos hacer lo que queramos. Ahora, lo que queremos al personaje, conseguir el otro nodo actor. Pero en nuestro caso, vamos a explicar cómo va a funcionar un poco nuestra trampa . Déjenme traer dolor. Es hora de los impresionantes dibujos. Deberíamos poner temas musicales aquí o algo así. De todas formas, tenemos nuestros destinos de trampa de caja en algún lugar de aquí en el pasillo, y tenemos a nuestro jugador que se mueve por ahí Cuando pisa la trampa, queremos activarla. Entonces los escalones en la trampa. Llamemos a este duplicado a esto primero. Odio. ¿Correcto? Oh, cuando el jugador lo pisa, llamemos a esto Fase uno. Entonces esto se activa. Ahora, en la fase dos, que vamos a que vamos a estar aplicando el daño, que va a estar activando, pero atacando o tal vez esto debería ser más grande y luego activado. No importa. Esto dice ataque, por cierto. No estoy reconociendo la palabra mirándola, pero dice ataque. Entonces, deberíamos preguntar si el jugador sigue en la trampa o si no está en la trampa. Si sigue colisionando. Entonces, si está colisionando, vamos a estar dañando al jugador Si no está colisionando, entonces no vamos a estar dañando al jugador Entonces, si iba a hacerlo, volvamos a nuestro evento a nuestro evento superposición de colisiones. Si tuviera que bajar cuando estaba atacando, entonces si conectaba al otro actor, tengo una referencia directa al otro actor. Entonces eso significaría lo que sea que el otro actor sea ataque. Entonces necesito un cheque. ¿El actor está realmente en mí o no? Hay muchas maneras en las que podríamos hacer eso. De hecho podríamos decir sobre la superposición final, y mantener una referencia a esto y cuando terminemos de superponerse, despejando esa referencia y continuando. Pero me gustaría demostrar otro nodo. Si consigo la caja, pregúntele actor superpuesto. Podría filtrar la clase para que fuera mi de arriba hacia abajo. Actor, podría obtener una referencia directa, como si pudiera obtener el primer ejemplar y preguntar, digamos, por ejemplo, aplicar daños. Yo aplicaría daño a este actor. Pero vamos a estar usando carácter de arriba hacia abajo también para la IA. Nosotros en realidad, en este caso, vamos a estar usando una copia pegando. No vamos a estar usando a un niño, pero si fuera un niño, había una posibilidad de que esto le disparara de nuevo a ese actor. Así que en realidad tendríamos que o bucle. Si, por ejemplo, se trataba de un juego multijugador, y queríamos que la camioneta solo dañara al jugador original. Tendríamos que adelantar bucle y comprobar si este es nuestro actor jugador. Oh, vamos a obtener un signo igual. Tenemos que emitir primero porque esto devuelve una referencia de objeto actor. Incluso si estamos filtrando clase a través de nuestro personaje de arriba hacia abajo, esto todavía devuelve un a, un actor general. Oh, tendríamos que lanzar a de jugador abajo de personaje abajo. Y entonces podemos si esto es igual a nuestro jugador en, por ejemplo. Y entonces tenemos que echar a partir de aquí también. Esto podría ser un elenco puro. Ambos en realidad pueden ser un elenco puro. No hay razón para que no estén en la sucursal. También podríamos tener un tirón o algo más, como si pudiéramos tener una variable aquí, un bullying que podríamos conseguir y comprobar si el buling es cierto Podríamos tener un remolcador hacia el propio estanque. Hay muchas maneras de hacer esto. Este es uno de ellos también mucho porque tiene dos casos, pero se puede hacer y realmente no afectará a nuestra jugabilidad porque no es tan complicado. Ahora bien, lo que tenemos que hacer o para completar esto es conectar realmente este elemento array o obtenerlo del elenco. Realmente no importa aplicar daños. Y lo que se aplica daño es sólo un mensaje que real envía a cualquier objeto básicamente. Es un sistema que Epics nos proporcionó. Ahora el daño base debería ser uno. Y creo que explicamos mucho en esta lección, y deberíamos conectar todo esto y cayó todo en la siguiente. Adiós por ahora. Nos vemos el siguiente. 53. Animación de trampas y SFX: Hola, y bienvenidos a Game Design Workshop y Real Engine cinco procedimientos Dungeon action RPG curso de creación Anteriormente, comenzamos a crear nuestra trampa. Vayamos a una trampa. Y agregamos una colisión de caja, y también agregamos que llamamos desde la colisión de caja que comienzan evento de superposición. Donamos el solapamiento. Y nos preguntamos si el componente que está tocando la trampa como la etiqueta P. Ahora, dijimos algunas cosas sobre la superposición y cómo podemos obtener una referencia al personaje, obtener los actores superpuestos. Este fue el nodo importante que podemos obtener en cualquier momento los actores superpuestos. Y luego hicimos una prueba pesada para comprobar si es nuestro personaje. Y si es nuestro personaje, aplicamos algún daño con un nodo predeterminado que Anil tiene que aplicar mecánico que puede aplicar daño. Por supuesto, podemos crear nuestra propia mecánica, pero ¿por qué no encargarnos de esto Aprovecha esto. Puede que no me ocupe de esto. Aprovecha. Oh, Ahora bien, si nuestra trampa se ha activado, veamos disparador esta vez. No quisiéramos volver a activar para dañar instantáneamente al jugador una y otra vez. Así que vamos a crear una variable bul. Llamemos a esto disparado. Vamos a traerlo aquí. Podría usar una rama bk después de esto si se activa p, pero vamos a hacerlo un poco más fácil y pongamos fin bion aquí. Si se activa, si tiene el componente P ahí. Si el componente que nos toca tiene el remolcador P, y no se activa, entonces necesitamos un aquí No, haz otra cosa, no hagas nada. No. Lo primero que debemos hacer es decir que se ha disparado la trampa. Pero ahora podemos iniciar una cuenta regresiva con cuándo atacará cuando la trampa soltará el gatillo y atacará, básicamente. Va a ser una trampa de picos, así que va a estar empujando algún pico hacia arriba. Pongamos un sonido de advertencia. Vamos a hacer un sonido para que el jugador sepa que la trampa ha sido disparada. Ahora bien, el sonido sería, vamos libras. Aquí está. No he comprobado esto. Qué fuerte es, así que los usuarios de auriculares avisan. Esto suena como la parte más grande, en una p aquí. Este es un sonido no es exactamente un sonido, que es básicamente una clase que permite hacer algunas manipulaciones sobre el sonido Ahora, después de que se reproduzca el sonido, inmediatamente después del momento en que el sonido comience a sonar, no esperará a que termine el sonido. Vamos a hacer un retraso. Hasta que activemos nuestro t rap. Pongamos cero punto y Seamos generosos con nuestro jugador. Y después, vamos a necesitar crear un evento personalizado. L et's llaman a este disparado disparado tomado del bleion, o ataque A está bien. Después de eso, atacaremos. B si esto no fuera una trampa pon y estaban saliendo, podría ser una trampa de flecha, por ejemplo, Ataque está bien. Ambos están atacando. No vamos a sentir ataque ahora mismo. Seguiremos con esta lógica para terminarla. Pongámoslo más allá. Y después del ataque, vamos a tocar el sonido del ataque o antes del ataque, será más lógico, o al mismo tiempo. Entonces podríamos poner una secuencia y decir, primero tocar el sonido y luego atacar. Y después del ataque, vamos a conectar nuestro plop aquí para conseguir al actor superpuesto y aplicar el daño. Y sabes qué, restablecemos también nuestra trampa y creemos un evento personalizado de antera Llamemos a esto revertir. Entonces después de que dañemos al jugador, o si no hay jugador, no daña a nadie, vamos a demorar. Digamos 5 segundos. Y después de 5 segundos, vamos a volver a armar la trampa. Entonces voy a llamar al revés. Por qué llamo a la reversión. Porque para el ataque, vamos a estar usando una línea de tiempo para reproducir una animación. Y con base en esa línea de tiempo, estaremos revertiendo y reiniciando la trampa Pero antes de comenzar con nuestro código de línea de tiempo, necesitamos algo que animar porque la línea de tiempo se utilizará para animar la trampa, y nuestro daño se está haciendo aquí La animación sería algo aparte. Entonces, vamos a ir a nuestra ventana gráfica, y vamos a medidas estáticas Duplicar esto. Todo este cuerpo. Llamemos a esto. Picos. Encontremos nuestras mallas s, que deberían ser las mallas de carpeta De veras me pregunto cuál sería ese nombre. El find spike think tube. Cuerpo de la trampa, ve a buscar el tubo de trampa. Y para espigas, yendo al tubo trampa siete. ¿Correcto? Como puedes ver, su punto de pivote es correcto desde el principio, como nuestra ubicación predeterminada del actor está en medio de los picos exactamente aquí hacia la cima. Entonces van a ser pro cruding un poco del suelo porque vamos a estar desovándolos en el Esto quiere decir que el suelo estará en este lugar de aquí. Y los picos están mostrando un poco, lo cual es increíble. Ahora, lo que vamos a hacer, vamos a conseguir nuestros picos en el evento start play. Vamos a conseguir la relativeación, lo que significa obtener la ubicación con el sistema de coordenadas de No comparado con el mundo, comparado con este plano Pero cuando los movemos relativamente o obteniendo una ubicación en relativo, estamos hablando de esta entidad de aquí, este plano, todos x Y y Z de este plano, y distancias basadas en este centro de este plano, este Ahora, volvamos. Promovemos esta variable. Lo nombró perfectamente para nosotros. Podríamos haberle especificado picos, pero está bien. Ahora, agreguemos una línea de tiempo. Tendrás que nombrarlo, y vamos a conectarnos de nuevo para jugar desde el principio y volver a vers ferment En el acabado , vamos a cambiar en función de la dirección en la que va la línea de tiempo. A medida que encendemos, medida que cambiamos del suroeste, este es nuevamente un switch basado en la enumeración Esta es una enumeración de dos valores hacia adelante hacia atrás, y vamos a conectar no la fecha, sino el final aquí. Y cuando esté al revés y esté terminado, vamos a dispararnos Vamos a apagar el disparado. Entonces esto significa que nuestro camión puede ser reactivado. Recuerda, la reversión corre 5 segundos después de que haya intentado dañar lo que sea que estuviera en ella. Ahora, jugamos la línea de tiempo, vamos a entrar en la línea de tiempo, vamos a agregar un camión, vamos a agregar un camión de flujo. Y pongamos dos puntos. El primero estaría en cero valor cero, y el segundo estaría en 0.2 y de valor uno. Va a hacer clic en estos dos Zoom para sentirse horizontal y vertical para hacer visible nuestra línea. Y esta vez, como pueden ver, he elegido una manera de valor inferior a nuestra longitud de cinco segundos. Ahora, podría cambiar este 2.2, pero puedo usar solo usar el último fotograma clave, lo que significa que usará el último punto con el que he fechado Si tuviera más camiones, tomaría el último punto del tiempo más largo. Ahora, volvamos a la nra. Y aquí vamos a necesitar agregar un código muy sencillo de conseguir nuestros picos y esa relativa aación Simplemente vamos a aprender del valor A a B en nueva ubicación. Vectores, y la A sería nuestra ubicación relativa, la original. El B sería que en realidad podemos codificarlo duro. Seleccionemos los picos, y del relativo que es cero, cero, cero, básicamente. Queremos ir 20 30, 30 serían ocho. 30 aquí. Vamos a conectar Alpha a nuestra nueva camioneta. Ahora bien, lo siguiente que debemos hacer es en realidad poseer las trampas. Están bien, están trabajando. no tenemos un personaje, pero nuestras trampas podrían dañarnos. Pero creo que esto es algo que vamos a vivir para la próxima vez. Tú el adiós. 54. Función de generación de utilería: Hola, y bienvenidos a Taller de Diseño de Juegos motor real cinco Convocatorias de Creación de PZ de Acción de Mazmorra Procesal Creación de PZ de Acción de Mazmorra Anteriormente, terminamos con nuestro componente begin over lap event. Comprobamos si la trampa está activada, y si es nuestro personaje, dijimos que la trampa se activaría si no se activa, tocamos un sonido, esperamos, tocamos otro sonido y jugamos la animación de ataque. Y pasamos por alto para comprobar si el jugador sigue en la trampa Usamos una línea de tiempo para animar los picos de componentes, que es una matemática estática que agregamos y la matemática estática de la base de la trampa Y usamos la ubicación relativa establecida para mover los picos a través de la alerta y nuestra línea de tiempo. También usamos un interruptor que cuando la línea de tiempo es hacia atrás corre hacia atrás en el evento revert, debería establecer la trampa que no se activa Ahora, volvamos a nuestro laberinto y espetemos nuestra trampa. Lo primero es lo primero. Vamos a necesitar nuestras coordenadas de mazmorra. Y en realidad vamos a necesitar las llaves también. Voy a conseguir en realidad los valores. Yo también. Voy a claves y a los valores, y voy a promover esto a dos variables, variables locales. Voy a llamar a esta mazmorra. Éste, promoverlo también al valor de Dungeon. Antes de continuar, hablemos un poco sobre cómo va a funcionar nuestro grifo. Nuestra trampa spon trap, solo necesitamos la trampa sponer El primer paso sería pasar por nuestras coordenadas de mazmorras Entonces vamos a pasar por nuestro calabozo. Azul esta vez. No sé por qué. Entonces vamos a pasar por las coordenadas de nuestras mazmorras. Y vamos a crear algunas reglas para comprobar si pertenece a los mosaicos que queremos. Básicamente, lo que queremos estar revisando es si es una habitación, o si es una habitación especial. Entonces no progreses. No engendrar la trampa. Aquí. No engendrar la trampa. Entonces, ¿qué vamos a hacer? Esto llamemos de nuevo a esto fase uno. Cosa impresionante dibujo. En fin, entonces, lo que vamos a hacer es crear una función que va a estar llevando uno de nuestros mosaicos a las coordenadas, tenemos las coordenadas, y sabemos si tenemos las coordenadas, podemos conseguir nuestro azulejo. Pero vamos a conseguir nuestro azulejo. Y para ese azulejo, vamos a obtener la ubicación del piso. Desde esa ubicación, vamos a, vamos a crear una caja. Porque si nuestro azulejo es esto, entonces hay una distancia que no queremos que en realidad se genere una pista porque digamos que si se genera aquí, entonces el camión podría ser así Y no queremos que eso suceda. Por lo que en esta medida se debe tomar eso en cuenta. Esta caja que vamos a estar creando usando veremos cuando la creamos. Entonces esta es una de las razones. Hay muchas razones, pero el único problema con este sistema en este momento es que si engendramos una trampa y está colisionando con otra trampa, consideraremos que esto Digamos que es una trampa más grande. Esto es lo que podemos Es una característica. Es una característica. Crea trampas más grandes. Entonces, sí, el único problema con esto es que esto se puede crear. Hay formas de contrarrestarlo, como podemos comprobar que si cuando aparece la trampa, ¿ colisiono con otra Si choco con otra trampa, entonces destrúyelo a mí mismo. Y entonces podemos ir a este engendrador de trampas y decir menos uno a las trampas que has Por supuesto, esto requiere también algo que no expliqué. Tendremos un sistema que va de cero a los ttraps MC engendrados Y esta parte, las trampas MC que vamos a estar desove, vamos a usar una nueva variable Vamos a usar una variable llamada nivel generador, que será la cantidad de mazmorras que hemos generado en una fila Entonces, si ésta es, por ejemplo, una, podríamos engendrar máximo de dos trampas Si esto es dos, podríamos engendrar dos más uno, así como máximo de tres trampas o ahora mismo más tres, por lo que equivale a cinco Sí. En fin, eso es básicamente lo que vamos a hacer. Nosotros a eso. Crearemos este sistema para poder utilizarlo con diversos elementos, no solo con las trampas. A lo mejor queremos crear el total, pero a lo mejor queremos expandir esto agregando algunas monedas de perno, por ejemplo, o una bolsa o algo para estar desove al azar, y podría desovar en una trampa Entonces usaremos este sistema usaremos esta función para hacer un sistema para poder generar cualquier cosa que queramos basándonos en nuestro nivel generador de generación, y algunas reglas las vamos a crear Ahora, vamos a hacerlo. Baje esto. Y el paso de prensa, como dijimos, es que vamos a crear algunas reglas para nuestros raps específicamente cuando queremos que los genere, porque las reglas de cuando estamos desove el ítem es una parte diferente a la función, pero solo explica la función que estaremos desove Porque si engendramos, por ejemplo, monedas, podríamos querer reglas diferentes los lugares en los que estamos desovar las Entonces la primera parte es para el nosotros, cuando tenemos el nosotros, la segunda parte es, cuántos y localmente donde los vamos a desovar Así que de nuevo, vamos a necesitar un bucle de cuatro para cada bucle. Vamos a conseguir nuestras llaves de mazmorra, y vamos a preguntar si estas llaves contenían Con una matriz, vaya a duplicar esto aquí. El primero serían las coordenadas de la habitación. Una habitación coordina. No queremos que llegue a ninguna habitación. Solo lo queremos afuera en pasillos, balcones, áreas especiales y no áreas especiales Lo siento. El segundo serían áreas especiales. Entonces no lo queremos ni tampoco de los si no los queremos en cada uno o en ellos, necesitamos un. Vamos a presionar una sucursal, conectar este año, conectar este año, hacer esto aquí, y es descuidado pero listo Tenemos nuestra regla que no engendran en azulejos especiales o coordenadas de habitación Ahora, vamos a necesitar nuestro mosaico como dijimos, y para obtener nuestro mosaico, estas dos matrices se corresponden entre sí. Si solo obtengo nuestros valores y obtengo p y uso el índice de este bucle de cuatro. Voy a obtener un índice válido, el índice correspondiente desde el punto final hasta el actor. Ahora, vamos a crear nuestra función, y llamémosla teléfono. A los apoyos. Ya sabes, interactiva, utilería personalizada, algo Lo que vamos a necesitar para la entrada es una variable llamada Max Max props Va a ser del tipo integer, y vamos a necesitar una variable de target, que sería el tile, va a ser tile PPP. Este es el actor que vamos a estar usando consigue todo este actor de la t Porque estamos consiguiendo esto desde afuera. Yo uso la flecha. Se puede ver, esta es una característica tan agradable. Si paso de una función a una función a otra función, y solo quiero regresar y no recordar dónde estoy. Puedo usar esta flecha aquí, y me lleva a la selección anterior, el punto anterior que yo s. oh, lo que quería decir es que vamos a conseguir este objetivo, este valor de aquí. Y conéctalo aquí. Ahora, por último, para poder generar cualquier cosa, vamos a necesitar una nueva entrada Y esta vez, va a ser del tipo actor. Pero no va a ser una referencia, va a ser del tipo de referencia de clase, lo que significa que puedo decir qué tipo de actor de clase quiero. Esto lo voy a demostrar. Vamos a usar esto para generar algo. Así que cuando estamos engendrando, desde la clase, realmente puedo ingresar una clase aquí, pero vamos a estar configurando esto exactamente de qué tipo de clase quiero Ahora, antes de responder el actor, claro, necesitamos algunas cosas extra. Lo que vamos a hacer es crear una variable local aquí. Voy a llamar a este contador y entero. La razón es porque con este Mx props, podemos usar el contador y Max props, crear un loop personalizado Entonces, si el contador es igual a nuestros x props, entonces nos detendremos Si no es igual, entonces vamos a abarcarnos. Ahora bien, lo siguiente que necesitamos es ¿dónde somos pequeños? Necesitamos una ubicación. Aquí, obtendremos nuestra ubicación de actor, que es nuestra ubicación de marea. Y ahora tenemos que crear nuestra caja. Lo que vamos a utilizar es una función pura llamada punto d en cuadro delimitador Esto significa que en un punto esta caja se coordina con medio tamaño siendo el medio tamaño de la caja. Aquí, vamos a usar 300300, O Z, vamos a dejarlo como está Voy a conectar esto Para ser honesto, voy a añadir un poco de altura. T para estar en el lado seguro de que nuestras trampas de caja sean un poco más visibles. Voy a agregar un vector, voy a agregar un cinco aquí. Esto crea una caja de tamaño 600 básicamente porque nuestra media talla es 300, pero no toma en cuenta de lo que hablamos. A lo mejor hagámoslo un poco más pequeño. Hagámoslo a encajar. Creo que nuestra trampa es de 100 de longitud. No estoy seguro de cómo comprobamos por estas cosas m3d. No puedo traerlo al mundo y contando cajas aquí porque box, creo que está bien ahora mismo está fijado a cinco, así que lo dije a diez, uno, dos, tres, cuatro, cinco, seis, siete, ocho, son ocho. Está bien, está bien. 250 está bien. Y ahora nuestras trampas no van a desovar en los bordes Hay una opción automática para la anulación de manejo colegial. Por ejemplo, siempre desove, ni cosanos, tratan de simplemente la colocación, pero No podemos usar para evitarlo. Intentamos ajustar la ubicación, pero siempre engendramos. Y eso creará un poco mejor espaciado. Ahora, por último, tenemos que continuar con esta función, pero creo que esto es algo que vamos a dejar para la próxima vez. Lo único que necesitamos cambiar en este momento es solo una ventaja de optimización. Vamos a ir a trampa BP. Vamos a ir a nuestra caja, y vamos a ir a colisiones sobre detalles Vamos a seleccionar una colisión personalizada. Vamos a seleccionar ignorar todo excepto el pom. Esta colisión sólo se desencadena cuando un poema se superpone, choca con él, y todo lo demás es ignorado Creo que esto es para éste. Te voy a ver en la siguiente. Adiós. 55. Plano de decoración de habitaciones: Hola, y bienvenidos a Game Design Workshop, n real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, comenzamos con nuestra propia función de utilería, y continuamos almacenando el mapa de Dungeon como clave y valor En variables locales. Y luego continuamos con las reglas de dónde desovar nuestras trampas Y comenzamos a crear la función que generará apoyos personalizados Utilizamos para las entradas, los apoyos Max, el mosaico VP objetivo y la clase que queremos generar Creamos un contador en nuestra función, que en realidad desconectaré esto y solo max props porque simplemente no me gusta ver la línea, y de aquí, vamos a desconectar este tipo más el fondo, y aquí, solo voy a apuntar Y la razón por la que puedo volver a hacer esto es porque esta es una función y los valores de entrada, podemos simplemente llamarlos como variables. Ahora, después del contador, cuando sea cierto, simplemente nos detendremos, no hagamos nada, así la función está completa. Antes de eso, en lo falso, estaremos engendrando a nuestros actores Ahora, comprobaremos si el actor es válido. Por si, por alguna razón, no lo es. No genera, a pesar de que creamos intentamos ajustarnos y aún colisionando Si lo tuviéramos para tratar de ajustar la ubicación, no ppone si sigue colisionando, entonces necesitaríamos Pero si lo tenemos en tratar de ajustar la ubicación, pero siempre engendrar, en realidad no necesitamos esto Pero en caso de que quieras experimentar, vamos a dejar esto es válido aquí porque la forma en que se manejan las colisiones aquí, necesitan un poco de eso arriba en los planos y con lo que están colisionando y cómo Oh, queremos hacer esto Lo que vamos a hacer es sumar a nuestro actor que responda, nuestra trampa que engendramos a los actores para destruir lista Entonces, vamos a necesitar encontrar la lista. Aquí está, y vamos a agregar el actor cuchara. Si es válido. Si no es válido, entonces ya terminamos con ello. Lo que hacemos a continuación es promover agregar a nuestro mostrador más uno. Y tenemos que poner también el contador. Recuerde, el control es para es para el ajuste. acaso queremos hacer la cuchara en pons pone si está colisionando, queremos experimentar con esto Simplemente agregaremos una nueva variable, y la vamos a llamar y y trice Y vamos a aumentar esto también más uno. Consígalo también. Desde cada adición, el pedido realmente no importa. Ahora, nos vamos a conectar desde el no es válido aquí. Vamos a agregar a las reglas originales o o b. Y vamos a conseguir trie plus Ahí está el máximo aquí, aquí. En realidad no más, mi error es mayor que los apoyos Mx multiplicado por dos Barre dos veces, básicamente. Intenta sumar el doble de los apoyos Mx en caso de que los apoyos no estén desove Porque nuestro primer contador cuenta cuántos son engendrados Nuestro segundo contador X sobre cómo ha habido que engendrar algo Porque después de un punto, como, digamos, por ejemplo, en el laberinto generar o nivel 25, este número podría ser con un sistema que no está desove cuando está colisionando Sería desovar cinco trampas en un punto, por ejemplo, o no podría spa en realidad, cuando no está colisionando, no podría desovar después Podría haber tantas trampas que no sería posible engendrar más Entonces esto se volvería infinito, y entonces bloquearía nuestra carga. Se detendrá ahí y nunca continuará. Básicamente aplastar nuestro juego. Entonces después de esto, vamos a ir a conectar esto por aquí, el inicio de la sucursal, y completará nuestro bucle con una seguridad contra fallas del doble del número de nuestros apoyos Mx Ahora, vamos a llamarlo en nuestros accesorios Spooner. Vamos a traer los apoyos constantes de spon. Vamos a conectar esto a postes. Piensa que sí, porque si es nuestro descordinate, o si es un azulejo especial, no queremos que algo suceda. Queremos cuando no lo es. Ahora, voy a conectar los valores de mazmorra con el objetivo, que son nuestras pilas, las matrices correspondientes Para clase, voy a seleccionar la trampa. P trop Hagamos los apoyos Max. Ahora, vamos a crear una nueva variable. Vamos a llamarlo nivel anator. ¿Tenemos un nivel de generador? Azulejos, Tamaño Max laberinto, Mx azulejos. No, nosotros no. Entonces, deberíamos tener un nivel generador, y vamos a traerlo aquí. Ahora qué, hagamos también instancia y expongamos en spawn, para que podamos progresarlo cuando engendremos el laberinto Entonces déjame recordarte de nuevo, tenemos que volver al menú principal, ir a nuestra gráfica. Compilar y guardar el ma guardar y compilar el laberinto primero, e ir al menú principal, y sólo esto. Laberinto. Ahora tenemos el nivel generador. Empecemos desde el nivel uno. Volvamos a nuestro laberinto. Con este nivel generador, lo vamos a sumar, digamos más uno. Hazlo simple el primer nivel tiene dos trampas, el segundo nivel tiene tres, y continúa y continúa. Demostremos lo que creamos. Vamos a empezar. Y vamos a subir. Aquí estamos. En trampa aquí, una trampa aquí, la mezcla muy bien. Desde arriba, no estaríamos para contar mucho bien que lo haríamos, pero los vamos a esconder con alguna niebla y, algo de iluminación extra. A distancia, sigamos haciendo algunos apoyos para nuestras habitaciones porque ahora mismo, iluminadas, están un poco vacías De hecho, vamos a mostrar esto. Vamos a nuestras decoraciones, seleccionemos nuestro techo y fijemos visibilidad. Para ser un juego de visibilidad, perdón, oculto. Eso, creo que no lo va a ocultar. Dijimos un juego oculto de visibilidad, para que ahora podamos ver lo que sucede dentro de nuestras habitaciones. Ahora bien, si no tuviéramos esta luz de barrio, las habitaciones estarían muy oscuras. Además de utilería, sí necesitamos tocar algunos relámpagos también en las habitaciones Y esta vez, vamos a crear otra manera. No lo agreguemos como lo hicimos con este utilería, con las trampas Vamos a crear otra forma de hacerlo. Así que tenemos bastantes ejemplos de cómo rellenar bloques básicamente en nuestro laberinto. Para eso, vamos a necesitar un nuevo plano. Ir a utilería. Vamos a hacer clic, crear una nueva clase de blueprint, escriba actor, va a ser BP, room, props Ahora, vamos a engendrar los accesorios de esta habitación. Vamos a ir a nuestro generador de laberinto. En realidad vamos a detener la jugabilidad. Y de lo completo de nuestro bucle fuerte. Sólo vamos a copiar ta este bucle for para cada bucle. Y para la matriz, vamos a elegir todas las ordenadas de habitación Para todas nuestras coordenadas de habitación, vamos a obtener nuestros valores. En realidad, vamos a conseguir nuestro calabozo. Esto es, voy a encontrar al actor apropiado. Entonces esto nos dará todo el actor, todo el actor de habitación. Básicamente, todos los azulejos que pertenecen a las habitaciones. A partir de ahí, voy a ser dueño del actor plus. Voy a dividir la transformación. Voy a conseguir y voy a conectarlo a la ubicación. Para la clase, vamos a seleccionar los accesorios de la habitación. Para ser honestos, necesitamos una variable más. Vamos a nuestros accesorios de habitación. Voy a abrirlo, abrirlo, ir a variables y crear direcciones. Sería un mapa de erección. Y el segundo sería el pulion como tenemos en nuestras baldosas, y vamos a hacerlo incienso comestible, exponer sobre desove Volvamos al generador de laberinto. Vamos a refrescar esto en realidad cae. Y vamos a obtener la dirección de nuestro mosaico, el array de direcciones y conectarlo aquí. Ahora, estamos desove habitación apoyos actor a cada azulejo que es una habitación, y sabemos sus direcciones Entonces sabemos donde tenemos una pared y donde no tenemos una pared. Creo que esto es para éste. Entonces en la siguiente, podemos explicar cómo va a funcionar este plano Adiós por ahora, S eres el siguiente. 56. Conceptos básicos del creador de utilería de habitaciones: Hola, y bienvenidos de nuevo al taller de diseño de juegos y R sine five procedural Dungeon action ps curso de creación Anteriormente, terminamos con nuestros accesorios en accesorios personalizados. Terminamos nuestro ciclo agregando nuestro actor a los actores para destruir. Comprobamos si el actor que engendramos es válido, si es válido, estamos aumentando el contador Si no es válido, estamos aumentando los intentos, lo que hacemos también cuando aumentamos el contador. Que intenta dijimos, va a ser una variable. Por si acaso queremos cambiar esto para ajustar la ubicación, pero no engendrar si está colisionando Continuamos con la creación de nuestra gama de habitaciones A. Continuamos haciendo para cada bucle en todas las coordenadas de nuestra habitación, y generamos el plano que creamos los apoyos de sala BP, que es un plano que creamos una variable, llamada direcciones, y transferimos nuestras coordenadas de mosaico de nuestra habitación al actor generado creamos los apoyos de sala BP, que es un plano que creamos una variable, llamada direcciones, y transferimos nuestras coordenadas de mosaico de nuestra habitación al Ahora bien, ¿cómo usamos a este actor y cómo usaremos estas indicaciones? L et va a este actor. Lo primero que vamos a hacer es que cuando el actor esté arado, vamos a conseguir nuestra dirección, y vamos a pasar por nuestros valores Valores, y vamos a para cada bucle a partir de valores. Lo siguiente que vamos a preguntar si el valor es verdadero o no, cuando es cierto. Significa que podemos pasar cuando no es cierto, que hay un muro. Oh, vamos a almacenar cuántos tenemos cuando no tenemos una pared, o cuántos vacíos tenemos. Llamemos vacío a este bar. Vamos a hacer que sea una variable de tipo único del tipo integer. Y cuando podamos caminar, aumentaremos cuando podamos caminar, aumentaremos esto en uno. Ahora, lo segundo que hacemos es que vamos a crear otra variable esta vez de NRA, va a ser NRA entera Entonces vamos a llamar a esto no lo sé, vals. Y vamos a aquí, y le vamos a sumar índices que tenemos muros. Entonces ahora tenemos dos variables que tenemos cuántos lugares vacíos. Hay cuántas entradas, salidas, pasos, lo que sea que podamos caminar, y también tenemos una variable que tiene cuántos muros existen en nuestra baldosa actual Recuerda, cuando engendramos esto, engendramos uno de ellos en cada ficha Entonces nuestra habitación cuenta con cuatro azulejos. Significa que tenemos de P room apoyos en cada habitación. Entonces cada habitación tiene cuatro accesorios de sala P, uno en cada pasillo En el tiempo anterior que engendramos en antorchas, porque lo primero que vamos a estar desove es En realidad, vamos a hacer dos cosas al mismo tiempo, pero lo vamos a hacer con una secuencia básicamente, van a suceder simultáneamente. Oh, cuando engendramos los porches, usamos en nuestra ventana gráfica en nuestra decoración en un plano declarativo, usamos Esa es una forma de hacer las cosas. Otra forma de obtener una ubicación específica es conocer la ubicación. Si sabemos que el centro de nuestro plano cero, relativamente Conocemos algunos lugares, ya que sabemos que nuestro azulejo es de 600 por 600 Sabemos que a mitad de camino del centro se encuentran 300. Bueno, vamos a crear nuestro nuevo plano para antorcha. Llamemos a esta habitación antorcha. Al instante, puedo ver la vieja antorcha que usé una en malla. Porque esta debería haber sido la habitación me antorcha. Voy a abrir la antorcha BB y voy a cambiar la malla por la antorcha grande. Esta es la antorcha correcta. Sí necesito que el muelle esté bien, compilar y guardar, y vayamos al porche de nuestra habitación. Creado aquí. Ábrela. Voy a guardar todo en mucho tiempo desde que salvé. Voy a añadir. En realidad, ¿sabes qué? Puedo ir a la antorcha grande. La antorcha BP, sólo copia. Estas cosas. Pégalos. Voy a cambiar la estática a la antorcha pequeña y poner la partícula en menor. Bien. Y ahora también puedo copiar y pegar el comportamiento del gráfico de eventos. El mismo efecto. Jugar play desde el principio aquí, realmente no importa ya que esta es una línea de tiempo en bucle Lo haría si nosotros en algunos otros escenarios. De todas formas. Cambiemos el regazo de la luz 4-5 k Cambiemos el radio de 400 para compilar y guardar. Y ahora tenemos nuestra propia antorcha de habitación. Volvamos a nuestro cuarto de utilería. Y antes de que propongamos a cualquier actor, en realidad podemos hacer algo diferente. Podemos agregarlo de niño. Voy a agregar un actor infantil. Voy a ponerle nombre antorcha de habitación. Y voy a poner su clase a antorcha de habitación. Yo compa seguro, ahora puedo ver dentro del plano. No. Pregunta o primera regla. Eso sería si tenemos alguna pared. Voy a conseguir mis muros variables. Voy a preguntar es la longitud mayor a cero. Si no es mayor que cero, entonces voy a destruir este componente. Ya no necesitamos esto. Esta habitación no tiene paredes. ¿Qué sería una habitación sin paredes? Sería una habitación que tiene una puerta básicamente porque una puerta y ninguna otra dos puertas, una, dos puertas. Entonces, si vas a pintar, esa sería una habitación que tiene una puerta por aquí, y una puerta. Por aquí. Así que el resto de la habitación no tendría paredes para ello. Esto estará abierto y el lado estará abierto. Tiene básicamente cero paredes para agregar una antorcha. Ya que nuestras reglas se basan en si el jugador puede moverse a cada lado. Volver a la programación. Ahora lo siguiente que necesitamos son las direcciones. A partir de eso, vamos a conseguir las llaves. En realidad, aquí, vamos a obtener una dirección aleatoria de las paredes. Aleatorio. Esto, si recordamos correctamente, hemos almacenado el índice del que no teníamos muro. Así que incluso teniendo dos o tres paredes, obtenemos una pared aleatoria reemplazamos nuestra antorcha. Como dije, necesitamos establecer la ubicación relativa de este Nuestro B, estamos fijando la ubicación en base a las coordenadas del plano Porque sabemos que el tamaño de la habitación va a ser inhibidora. Ahora, he calculado previamente algunas ubicaciones que creo que fueron correctamente. Puedes crear el tuyo propio. Lo que vamos a usar es un se Para el índice, vamos a obtener las indicaciones. Tenemos una pared norte, una pared este, una pared sur y una pared oeste. Para el muro norte, voy a poner 40, 150, y para el Este, voy a poner -340, 50, 250 es la altura, y x e y son los ejes x e y -40 para el sur y 300 para x, y, y 250 para z y 300 menos cien 42 50. Deja que me quede aquí. Cien 40 50. Ahora, colocándolo en un lugar aunque como mover esto ahí y allá y allá. Pues no siempre tienen la rotación correcta. Nuevamente, tenemos que verificar cuál debería ser la rotación correcta si estaba aquí, cuál debería ser la rotación correcta si estaba aquí, y así sucesivamente. Ya lo he hecho, así que tenemos los valores, y también vamos a conseguir la antorcha de habitación y establecer relativo. Esa ubicación relativa. Oh, Dios mío. Quieren escribir y desobedecer. No hay ubicación, lo siento, establecer rotación relativa. Como pueden ver, lo obtuve de la línea de ejecución. Así que ahora puedo elegir el porche de la habitación porque tiene un sistema que me da algunas opciones de reinicio que me podría encajar. Y si, esto me queda extra. Y otra vez, voy a seleccionar voy a esto. Ahora, ya que estamos usando dos veces esta variable. Porque tengo un azar aquí, obtendrá un valor diferente aquí y aquí. Entonces tengo que promover esta una variable. Aquí. Voy a esta variable a dirección aleatoria. Y voy a traer dirección aleatoria aquí. Aquí, aquí. Bien. Ahora, sobre las rotaciones, necesitamos 90 al norte Necesitamos 180 oriente, necesitamos menos nueve. Sur y cero en poniente. Y eso sería todo. Ahora tendríamos algunas luces en nuestras habitaciones. Vamos a ver esto. Y sí tenemos algunas luces en nuestras habitaciones. Si quieres diferentes localizaciones, claro, puedes experimentar con los números, los encuentro o no. Creo que esto va a ser por éste. Vamos a continuar en la siguiente con el resto del propósito de las habitaciones. Boe adiós. 57. Finalización de la decoración de utilería: Hola, y bienvenidos a Game Design Workshop Under Engine five, Procesal Dungeon action RPG, curso de creación Anteriormente, creamos nuestra sala de accesorios para comenzar el evento de juego. Empezamos a llenarlo. Pero sacamos nuestros valores de nuestras direcciones. Pasamos por alto, y categorizamos cuántos muros están vacíos y cuántos agregamos no cuántos, sino los índices de los muros existentes en una matriz Entonces creamos nuestro plano para nuestra antorcha de habitación, que está aquí mismo Copiamos pegados el comportamiento, cambiamos un poco con los valores, y copiamos pegados también las mallas estáticas, las luces No. Después, creamos una pequeña función por aquí, pero función, una cadena de eventos, si se quiere. Pero comprobamos cuántos muros tenemos. Si no tenemos paredes, entonces destruimos la antorcha de habitación de componentes hijo que hemos agregado a nuestro plano Entonces si es cierto y sí tenemos algunas paredes, entonces obtuvimos las direcciones, obtuvimos la dirección aleatoria. Estancamos una dirección aleatoria, y dijimos que la ubicación relativa y rotación de la antorcha de la habitación por algunos valores que fueron precalculados Ahora, hagamos lo mismo para el resto de los artículos de la habitación. Para eso, vamos a hacer un switch. En int. El índice int partiría de uno. Ahora pin predeterminado, y agregaremos índices hasta cuatro. Eso es porque vamos a estar cambiando en base al vacío, y no podemos tener nada vacío. Podemos tener una vacía, que es una habitación, eso es así, y tenemos la otra habitación aquí y la otra aquí. A lo mejor deberíamos haber borrado el anterior, el espacio. Entonces la habitación contigua estaría aquí, y la habitación contigua estaría aquí, la brecha aquí. Entonces esto tendría uno vacío, y comencemos con ese. Lo que vamos a necesitar sumar a las medidas estáticas. Llamémoslos thatqu A y thatqu B o A uno, pero llamémoslo B. Si tenemos un Mt, entonces mi regla que agregué es que no vamos a tener dos medidas estáticas Tendremos uno, vamos a estar usando dos en el resto de las opciones. Oh, voy a esto de fin de cuentas. Entonces vamos a conseguir nuestros mes estáticos. A M. Y a partir de esto, vamos a seleccionar de una lista, vamos a elegir. Y para el índice, vamos a tener un rango aleatorio. El rango sería de cero a cinco. Y agreguemos cinco opciones. Oh, por las opciones. En realidad tenemos tres, pero vamos a jugar un poco con sus posibilidades de desovar Entonces, voy a ir al contenido. Voy a ir a nuestros meses estáticos. Voy a seleccionar esta tabla. Y hay una mesa más. Y ahí está esta ficha también. No creo que haya otra. Creo que estas son las tres variaciones. Y juguemos con las chances. Digamos que uno de ellos tiene más posibilidades que los otros. Uno más tiene uno extra. Eso sería por éste. Y entonces tenemos que fijarlo rotación relativa. Vamos a hacer eso. Ación. Lo que queremos hacer aquí es con una masa, iterador, solo queremos cambiar el ya Un ángulo de giro de mesa cada vez. Vamos a usar a distancia. Va a usar 600 a 360. Ahora bien, ¿por qué no cambiamos de ubicación? Porque cuando abarcamos este ítem, va a estar exactamente centrado, va a estar aquí. Pero lo que estamos haciendo es cambiar la rotación solo para tener una aleatoria cada vez. Ahora bien, ¿qué hacemos cuando tenemos dos o las paredes MT? Vamos a obtener nuestras indicaciones. Vamos a conseguir nuestras llaves. Y luego vamos a hacer un bucle áspero nuestras paredes. Por supuesto, con base en nuestro elemento A, vamos a obtener la dirección adecuada. De nuestras paredes, necesitamos seleccionar una de estas dos medidas estáticas. Para ello, vamos al índice sería nuestro índice RA, porque vamos desde dos o una pared. Entonces esto tendrá uno o dos. No he conectado esto cuando ejecutamos el tercero, realidad vamos a lete la mesa estática, la segunda mesgan estática Ba como en un MT, solo necesitamos una malla estática. Entonces lo hacemos cuando sólo hay una pared básicamente porque la otra habría sido una salida. Voy a conectar esto aquí. Sigamos. Necesitamos estas dos medidas estáticas. En caso de que solo haya una pared para colocar. Esto no va a ejecutar el segundo índice, pero no necesitamos un es válido aquí porque no habrá error, probablemente. Lo siguiente que debemos hacer es que vamos a aceptarme ático aunque sea A o B va a ser elegido tres a través de este índice. Lo siguiente que debemos agregar es el nodo select ahora que en realidad tenemos muchas opciones. Bueno, de nuevo, son cinco, pero esta vez en realidad son cinco. Voy a borrar esto. Voy a traer este selecto, que ya tiene cinco. Voy a conectar esto aquí. Voy a hacerlo. Aquí necesitamos un azar. Andom aquí, cero a cinco. Un índice aleatorio, y los tres primeros van a ser los que hemos agregado. Los tres primeros son únicos. Único. Para el resto de los tres, necesitamos este partido combinado con las casillas. Entonces este con el casco. Puedo ver ese rojo encima. Por eso sé que es uno con el casco. Hay una más de esto, esta con las cajas más grandes. Este tiene dos pequeños. Este tiene uno más grande. No estoy muy segura. Ábrela. Ahora tiene tres cajas. Bien. Y ahora conseguimos uno de ellos. Lo siguiente que debemos hacer es en la ubicación relativa. Nuevamente, vamos a necesitar un selecto. Selección múltiple. Para el índice, esta vez, sí necesitamos la dirección. Con base en la dirección, vamos a cambiar estos valores a 54 norte. A 54 este, pero en y enésimo, y menos en los valores x e y correspondientes T sería la rotación relativa. R aquí. Esa pudrición aquí. Nuevamente, un selector, gírelo a, nos limitamos a direcciones. Vamos con -90 090180. Si compilamos, vamos a verificar el nivel. Y comprueba si nuestros accesorios han generado. Sí, han engendrado. Sus esquinas, bordes. Ahora tenemos algunos accesorios puestos en las habitaciones. Creo que se ve bien. Me parece un poco compensado en cada lado. Entonces, intentemos arreglar esto por un segundo. ¿Y si los ponemos a un poco más grandes? 1.2? Además, en estos momentos parecen mucho mejores. Sienten el lugar un poco mejor. Ellos sí tienen una pequeña brecha. Las mesas no funcionan, pero me parece que no vamos a ser capaces de realmente el infierno que estamos jugando. Ya veremos si lo es, vamos a arreglarlo. No, ¿qué hacemos con la cuarta opción? La cuarta opción sería la opción de tener puertas. Ya no tenemos uno de ellos. Afortunadamente, pero digamos que cuando teníamos dos puertas, no podríamos poner aquí un mach estático Lo que vamos a hacer es crearemos algunas cajas, haremos cajas, y les habilitaremos la física, para que el jugador pueda empujar pero esto es para la próxima vez, te voy a ver luego pasar 58. Agregar elementos de física a habitaciones: Hola, y bienvenidos de nuevo al taller de diseño de juegos, y motor real cinco procesales Dungeon action rbs curso de creación Anteriormente, creamos algún código para nuestros apoyos de habitación. Agregamos el código al cual basado en It basado en el número de paredes vacías, cuando tenemos una pared vacía, dos paredes vacías, o tres paredes vacías, ajustamos nuestras mallas estáticas, malla S a otra cosa Y si no fuera necesario, al segundo nosotros, lo conseguimos destruyó dos casos. Ahora, elegimos de la mesión aleatoria seleccionada, tanto de la función, la entrada de eventos Y en la primera, solo establecemos una rotación porque es un ítem. Y en la segunda, establecemos una ubicación relativa y rotación porque la queremos en los bordes de la habitación. Ahora bien, lo siguiente que debemos agregar, como dije, serán los objetos de física. Para ello, aquí vamos a obtener nuestra medida estática. Vamos a hacer una ra añadir una gota, y luego vamos a para cada bucle. Vamos a conectarnos. Aquí. Aquí. Y nosotros para bucle a través de nuestras mallas estáticas No sea que lo que hagamos es que sea y la estática sea una de las cajas Ten algo aquí esto. Tenemos una caja. Iga, déjalo caer aquí. Y lo siguiente que debemos hacer es leer aquí esta lectura aquí, luego esa ubicación. Ahora, para la palabra ubicación, voy a la ubicación del actor ya que nuestro actor está encima de nuestro azulejo, y solo voy a agregar un poco en los ejes del set. Como 20. Incluso es un poco más alto que antes porque ya hemos agregado altura de desplazamiento a este actor, y luego voy a hacer un punto aleatorio en cuadro delimitador Como hicimos antes, y con tener talla 40, 40, y una. Voy a establecer esto como una ubicación. Ahora bien, la razón por la que estoy dando un poco más de altura es que queremos pero vamos a habilitar la física y ellos sí tienen gravedad. Caerán y caerán en un lugar aleatorio cada vez, por lo que no parecerán que se han colocado en el mismo lugar cada vez. Ahora, lo siguiente que debemos hacer es un personaje arriba. No queremos que nuestro personaje esté escalando estas cajas. Solo queremos que los empujen por ahí. Y entonces vamos a estar agregando un tirón. Vamos a hacerlo. No. Ese tirón componente, lo siento, y vamos a hacer una matriz a partir de aquí y poner tirón de H como elemento de física porque vamos a necesitar este tirón para empujarlos con Ahora bien, lo siguiente que deberíamos hacer ly, sería quizá Física. Oh, ésta no. Emula a mí. No habilitar la física, emular a mí. Yo quiero que esto. Ahora, hagamos un poco de espacio. Ya que tenemos este mecánico cuando no tenemos muros. Cuando este plano sea dueño, cuando no tenga muros, ejecutará esta mecánica, creará básicamente dos cajas Lo que podemos hacer toma un poco y ya hemos creado otro actor encima de nuestro actor. Por eso, podemos poner un cuarto extra de cajas. Para ello, vamos a ir a las habitaciones que tengan dos o tres espacios vacíos. Porque no queremos hacer eso la habitación que tiene un solo espacio vacío, va a ser dos chateada Pero cuando tenemos dos formas de salir de nuestra baldosa o tres formas de salir de una baldosa, entonces tener cajas adicionales sería más aceptable Entonces para hacer eso, vamos a ir al completado de este bucle de cuatro. Vamos a crear un casi 30% podría no ser 30%, pero lo intentaremos. Entonces vamos a hacer un switch, va a ser 30%. Encender int. Y vamos a sumar y nueve en realidad hasta el número nueve porque cero va a quitar el viejo. En realidad no necesitamos tantos. ¿Eso? Porque es más rápido que eliminar esto. Yendo a sólo tres de ellos. Necesitas o nueve. Pero nosotros solo vamos don int. Rango. De hecho vamos a dejar el default para todo esto. Fallos de encendido. Tenemos de cero a nueve, y tenemos cero, uno, dos. Todo lo que esté por encima de dos activará default. ¿Qué significa uno, dos y tres P? ¿Qué hacen? Ellos en realidad spa actor de clase. El actor sería PP room plops. La transformación sería la ubicación de nuestro actor. Dos, uno. F aquí desde nuestra dirección, vamos a maquillarnos Vamos a sumar o valores, Norte estaría cerrado, Oriente estaría cerrado, Sur estaría cerrado, abierto, perdón no cerrado, abierto, así que todo básicamente estaría abierto. Usamos el sistema que hemos creado cuando todo está abierto, y entonces esto abarcaría una física extra, extra, cuadrados, ts, crea. Ahora bien, el único problema con esto es que cuando estamos desove esta habitación, Maze De hecho vamos a agregarlo nuestros actores de destrucción y el matroide Tenemos la referencia aquí, y vamos a agregarla subasta. En cuanto a destruir, tráelo aquí. Vamos a enumerar. Ahora, podemos destruir esta habitación, pero no tenemos una referencia sobre esta habitación extra que engendramos Pero no se preocupe. una referencia en esta sala que está consiguiendo esto y hay un lazo muy bonito, como los llamamos. Hay eventos que puedes atar siguen escuchando hasta que estas gallinas cuando esto sucede, siguen escuchando Ellos reciben un mensaje cuando esto sucede. Oh, vamos a arrastrar de aquí y decir: No, no de aquí, perdón de aquí, de la línea de ejecución. Voy a decir, encontrar en destruir. Porque cuando este actor está siendo destruido, no este actor. Cuando nuestro actor que está desove este actor queda destruido Es por ello que un drat de aquí y no del valor de retorno Necesitamos evento. Digamos sobre destruido. Cuando nuestro actor está siendo destruido, vamos a este y actor. Pero de esta manera, nos aseguramos que cuando nuestro actor sea destruido, este plano también será destruido Vamos a jugar. A ver si nuestras cajas engendraron. Responde, pudimos ver un poco de movimiento, así que la física está funcionando. Ahora bien, no son la física perfecta. No hemos jugado con valores. Este es un lindo como vamos a intentar entrar a la habitación, y va a ser y lo bloqueó. Vamos a ser lentos caminando por aquí. Si somos machos, los vamos a empujar alrededor. Sí. Hablando de física perfecta. No podemos ver cajas volando por todas partes fuera de nuestro laberinto, ni siquiera escupiéndolas. Esto podría suceder porque la amortiguación angular y la masa y no es realmente eso pero creo que están bien No sucede a menudo. Y cuando sucede, es gracioso. Viste que éste se fue realmente casi salió de la habitación. Ahora, cuando empecemos a jugar, el techo, vamos a estar en. Entonces al menos ellos se quedarán ahí. Pero con los ataques de may y todo, podrían salirse del mapa. Seguirán siendo destruidos cuando cambiemos de nivel. Oh, creo que esto es para éste. Te voy a ver el siguiente. Adiós. 59. Importación de Revenant y el plano de la torre Hellgate: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos yRel gen five Procesal Dungeon Action ARPs En la última, creamos nuestras cajas de habitación, las de física, y las generamos a través de nuestro código Creamos una matriz que buscamos bucles con nuestras mallas estáticas Ponemos la malla estática en una caja. Establecemos la palabra ubicación para que sea un poco más alta que el actor, así que caen. Establecimos que el personaje no puede pisar, y les agregamos una tacha, que es pH para que podamos ponerlos con nuestros ataques ma También establecemos simular la física en true, por lo que ejecutan la física. Después, agregamos un pequeño mecanismo de trampa, como si aprovecháramos nuestro código para agregar un poco de cajas adicionales a nuestra habitación sea más difícil para nuestro jugador moverse, que en realidad usamos el bucle de proa que en realidad usamos el bucle de proa de las dos paredes vacías y tres vacías en nuestras fichas, que al final de la misma, generaría una probabilidad de aproximadamente 30% Empeñar al mismo actor con indicaciones específicas. Siempre corre las cuatro paredes vacías, y volverá a generar nuestras cajas. Por lo que cada habitación tiene la oportunidad de tener cajas adicionales, excepto la habitación que solo tiene una pared vacía. Ahora, destruye a estos actores, ya que no tenemos una referencia a ellos desde nuestro laberinto, usamos el evento bind on destroyed, que hace referencia a nuestro propio actor que el laberinto destruirá. Entonces, cuando este actor esté siendo destruido, destruirá al actor que ha engendrado Ahora, sigamos construyendo apoyos adicionales en nuestro calabozo. Y el nuevo utilete que construiremos será la puerta del infierno, la torre, un plano que atacará al jugador cuando esté cerca con un ataque automático, y será resguardado con IA Ahora, para completar el código de esta torre, necesitaríamos tener la IA y pocas cosas más. Entonces, por ahora, solo vamos a construir las imágenes para ello. Vamos a ir a nuestro contenido. Vamos a ir a planos. Vamos a ir vamos a crear otro los todos estos enemigos. A lo mejor las trampas deberían estar en los enemigos. Pero puedes hacerlo fácilmente. Podemos ir a utilería, conseguir nuestras trampas y moverlas a los enemigos Ahora, cuando estamos moviendo algo en el motor, siempre es bueno ir al contenido, hacer clic derecho y arreglar redirectores Ahí también es cuando estamos renombrando cosas. Ayuda al motor con los redirectores. Ahora bien, ¿qué son los redirectores? Básicamente, enlaces y caminos para objetos en nuestro contenido. Una explicación aproximada de nuevo. Ahora, vayamos a nuestra carpeta Enemigos, haga clic derecho y seleccionemos planos, tipo actor, y vamos a llamar a esta puerta BP Ahora. Agreguemos una malla estática. Para la malla, vamos a seleccionar el techo. Esto es grande. No queremos que sea tan grande. Vamos a darle la vuelta a la escala de tamaño 0.5, y vamos a girarla 90 grados. Entonces vamos a copiarlo y pegarlo. Tócalo a sí mismo y para rotar el segundo uno al otro 90 grados esta vez sobre el eje y. Ahora vamos a seleccionarlos a ambos. Y para el elemento, vamos a usar el Mm. Pero la instancia una, la original. Ahora, vamos a usar una partícula. Vamos a ir a raíz y una partícula, que va a ser de nuevo, cascada, no na gara. Para la partícula, necesitaremos descargar nuestro personaje renacido Vamos a ir a depilncer. Vamos a ir a la tina de nuestra biblioteca, y vamos a ir a nuestra bóveda. En bóveda, vamos a teclear renant. En caso de que no tengas el activo. Vamos a ir al mercado y buscar renacido Aragón Revenant aquí está, y lo vamos a agregar al proyecto, o en realidad para ti, podría ser agregar a la tarjeta porque primero, necesitamos agregarlo a la tarjeta y luego aparecerá en nuestra biblioteca Ahora, cuando lo tengamos en nuestra biblioteca, presionamos agregar al proyecto, vamos a regañar a nuestro proyecto gen cose el nombre, y vamos a agregar al proyecto Esto podría tomar un tiempo, así que voy a hacer una pausa aquí y continuar después. Cuando hayamos agregado el personaje renacido, aparecerá una nueva carpeta a nuestro contenido, que sería nuestro renacido paragon A partir de este paquete, necesitamos establecer el sistema de partículas, que será el asado. No es suficiente. Cabeza asada roja. Rast rojo. Rojo. No hay rojo y tenemos que crearlo. No hay problema. Comprobaremos el que queremos. Creo que es ésta. Y es un poco pequeño. Tenemos que escalarlo y así fue. Lo hemos matado en todas partes. Es por eso que uno en x, 30 en y, 20 en eso, y para la ubicación menos y.Necesitamos hacer algunos cambios a. Voy a ser una, pero tiene que haber algunos cambios. Vamos a abrir la partícula. Y vamos a eliminar el de spawn, que es el responsable de este resplandor No queremos este resplandor. No borres esto. No necesitamos el emisor. Sólo necesitan estas llamas. Yo y guardar. I. ¿Verdad? Algo así como de un lado, en todas partes. Y bien. Además del color, creo que necesitamos cambiar la velocidad inicial también. Entonces lo hacemos más uniforme. Antes que nada, cambiemos el color. Vamos a la tina de color inicial, seleccionamos no verde, no azul, sino rojo, pongamos. Misiva, vamos a hacer lo mismo aquí, hazlo. Es más rojizo. Ahora ves lo diferente, esto es así , cuanto más flameado. Pero en nuestro plano, es más fibroso. El motivo es porque cambié la escala en 30 20. Por eso hice la báscula, así se ve más así. Puedo escalarlo de nuevo, pero me gusta el fibroso en. En fin, vayamos hasta aquí y cambiemos la velocidad inicial. Entonces se extiende un poco más. O distribución. No necesitamos un uniforme de flujo. Necesitamos un vector. El uniforme es de a máx. Esta es una dirección. De esta manera, esa es una línea. Pero lo que usamos es un vector. Lo pude ver. Vector. Estoy en radio de velocidad de arranque. Lo siento, quiero que esté en velocidad de arranque. Sí, aquí tenemos un vector. Bien, este es un vector, pero tiene sólo en un eje sobre el eje. Tenemos que aumentar la bility put y aquí y aquí menos diez menos diez. Entonces tenemos ida y vuelta desde nuestro punto de partida, lo hacemos tres básicamente todos los lados. Entonces si volvemos a nuestro pozo, no haciendo nada, H me salvó esto. Sí, ¿funciona? Solo agreguemos una velocidad con. Para ello, vamos a hacer clic derecho e ir a velocidad en velocidad, vamos a seleccionar velocity con. Esto lo logrará. Si volvemos, me salvé. Ni siquiera lo hizo como él. Creo que sé lo que está pasando porque pongo x en uno, ponemos esto el 30, 2015, 15 miradas A. Voy a bajar esto también. 15 20 15 15 Sí. Es un poquito demasiado, creo, ve a etiquetarlo un poco más bajo. 15 fue demasiado. Y cinco. En cuanto a baja ocho. No. Diez, estuvo bien con diez. Diez estuvo bien. Dejémoslo así. Pongo también. ¿Correcto? En realidad no lo sabe quién no sabe. Redujamos su vida útil, vaya a la vida útil y vayamos a un máximo de 1-2 0.8. No. Mi 0.5, vamos a tenerlo 22.5. Oh, es aún peor. Voy a encontrar algunos ajustes nuevos, y los vamos a hacer en la siguiente. Adiós por ahora. 60. Lección 3D 59 Integración de imágenes y laberintos de la torre Hellgate: Él Hola, y bienvenidos de nuevo a Game Design Workshop rail Engine five Procesal Dungeon Action Apres curso de creación Anteriormente, comenzamos a crear nuestro plano de la Puerta del Infierno. Y nos pegamos con la partícula de nuestro carácter renacido. Entonces jugué con los valores, y me pareció aceptable esto. Lo que hice fue el sistema de partículas, selecciono una escala diez a todo, uniforme. Y en la propia partícula, cambié la velocidad inicial a máximo cinco mínimo a menos cinco de valor x. El valor Y sería cinco a menos cinco nuevamente, y el valor z sería cinco constantes. Ahora, para toda la vida, agregué el 0.4 en la distribución mínima y el 0.5 en máximo porque queremos un poco de desequilibrado hacia arriba pero no tanto como antes Y para spe, cambié de diez era a 20 en el ajuste de cuchara en tarifa, por lo que abarca en tasa Y creo que también cambié la esfera. No. Lo dejé un ocho. Entonces, ¿cuáles son los cambios ? Creo que ya deberías tener esto. Y realmente rápido, escala de diez sobre tasa de 20, vida útil de 0.4 y 0.5. Tamaño inicial dejamos tal cual. Velocidad inicial, cambiamos 00-55 de mínimo 00 a menos cinco y menos cinco, y en el eje z cinco Ahora lo siguiente fue que cambiamos el color, de co, a rojo. Y agregamos el código de velocidad. Ahora que tenemos nuestra partícula, vayamos a nuestra puerta, y necesitamos agregar algunas variables y componentes de variables más . Vamos a añadir un, un punto de luz. Lo dejaremos como por ahora porque vamos a manipularlo código, probablemente tome el código de porche. Vamos a agregar una cápsula, Y la cápsula es solo para colisión así que en realidad podemos comerla. Entonces vamos a escalarlo un poco. Vaya, yo lo seleccioné. Y si no necesitamos asustar, solo podemos ajustar los valores, ser digamos 100 y digamos que las radios cápsula serían. Sí. Aquí será donde golpeemos a nuestro actor. Ahora, vamos a estar usando esto para golpear a nuestro actor. Iremos a nuestras medidas estáticas, las seleccionaremos tanto con control como haciendo clic en ellas, e iremos a no colisionar y no generaremos eventos de superposición ya que esto aumentaría nuestro rendimiento. Ahora, lo siguiente que agregaremos es un componente aquí, aquí colisión, lo dejamos como está por ahora, porque vamos a usar esto para programar ataques y cosas así. Pero lo siguiente que agregaremos es un componente giratorio. Movimiento giratorio. ¿Qué es el movimiento giratorio? Es un componente que crea rotación. Tiene algunos ajustes preestablecidos, pero vamos a cambiar como en vez de otros que 80, si presiono simula, van a ver que va a estar rotando así Y la razón es porque está rotando a todo el actor. Ahora, lo que queremos hacer es simplemente rotar esta malla del ático. No queremos estar rotando a todo el actor. Es mucha información extra que no necesita ser rotada. Por ejemplo, la cápsula, la luz, y qué e incluso la colisión de esfera de la que seremos los decisores si estamos enganchando al jugador o no Entonces, lo que haremos es seleccionar el componente giratorio, ir a Ben graph, traerlo aquí, al comenzar a jugar, y seleccionar el componente de actualización. Ese componente actualizado. Y lo vamos a conectar aquí, y para el componente actualizado, vamos a usar la raíz de las dos mallas estáticas, que para nosotros en este momento es una malla estática Voy a conectarlo aquí. Si voy a viewports y la estimulación, también gira correctamente Entonces parece que giré la malla estática de manera diferente que en mis nodos. Porque si lo tuviera girado de otra manera, era así. Hacer. Sí, de alguna manera, lo estropeé. Se está actualizando, está en la misma rotación, está rotando de manera diferente. Estos son momentos reales increíbles. Todo esto ha pasado porque aquí cambié las rotaciones Voy a reiniciarlo todo. Un real tiene un problema cuando estamos criando algo. Voy a rotarlo desde aquí. Voy a ser padre en esto, y voy a rotar esto. Si simulo. Yo sólo voy a cambiar 180 aquí. Creo que se arreglará. Sí, está arreglado. Verifique ambos valores. Depende de cómo nos conectamos y con qué rotación el niño a la malla. Nosotros sistema para auto cambiar rotaciones en coordenadas locales basado en child De todas formas, ahora tenemos algunas imágenes que van, L et's go lo engendran en nuestro laberinto Oh. Dejamos a este desove profesional con desove nuestras Y después de esto, vamos a por cada uno. Ahora bien, ¿dónde engendramos este heliado? Vamos a crear una nueva variable, variable temporal, una local. Vamos a llamarlo agujeros DM. Va a estar en el punto. Y va a ser de matriz de contenedores. Voy a traer aquí, para conectar esto aquí. Ahora bien, ¿cuáles serán nuestros cables de temperatura? Van a ser las zonas aisladas y los balcones. En estos lugares, deberíamos tener enemigos. Voy a traer los cables temp y voy a anexar y luego volver a anexar Conecta los aros de los balcones. No debería ser un punto de entrada, debería ser de la estructura, habitación S habitaciones ST, un cambio de tipo variable, ¿verdad? Porque nuestros balcones conectan esto, reconectados. Porque nuestros balcones y áreas aisladas son listas de coordenadas básicamente. Entonces Conecta esto aquí, conecta esto aquí, desconecta esto y vuelve a conectarlo por si acaso Y ahora vamos a romper la estructura y para cada uno para cada una de las coordenadas. Y necesitamos algunas reglas sobre cómo vamos a engendrar estas puertas ele ¿Cuáles son las reglas de ellos para desovar? La regla será simple. Cuando construimos nuestro laberinto, Bueno, no sucedió. Tenemos uno aquí. algunas cajas que llevan puesto este símbolo. Entonces vamos a preguntar. ¿La caja tiene algún tipo de símbolos porque tenemos uno que brilla demasiado, uno que brilla demasiado bajo, este que brilla encendido Entonces elegiremos estos puntos para generar nuestras puertas infernales. Y usaremos la misma técnica que usamos para las luces. Así que no engendran muy cerca el uno del otro. Ahora, volvamos a nuestra función. Dejemos de jugar, y tomemos nuestro calabozo y enrollemos nuestro mosaico actual Nuestra baldosa actual, vamos a conseguir el piso. Abajo, antes que nada, vamos a conseguir materiales. Vamos a sacar muchas cosas de estos pisos, así que voy a leer al principio. Ahora, si vamos a nuestros pisos, por el contenido, vayamos a nuestros pisos. Podemos ver que el elemento del CG es el elemento cero, y lo mismo se aplica a todos los materiales que puedan tener este CG como este suelo de tierra, elemento cero. Ya que lo hemos diseñado así, donde está el laberinto aquí, y siempre consideramos el elemento cero, ese material. Oh. Vamos a preguntar si este material es igual a nuestras instancias materiales y materiales, ese sería GL que es el CGL CGL en uno y el g en dos de un tercero Pero como me informan, no se usa en ninguna situación por defecto. Vas a poner una sucursal. Vas a usar un nodo, y vamos a agregar un pin extra a esto y conectar estos tres. Aunque sea alguno de ellos, lo sabremos y seguiremos con nuestra cadena de eventos. Pero creo que este es un buen punto de parada para este. Te voy a ver en la próxima. Adiós. 61. Fundamentos de elementos y tablas de datos: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos y motor real cinco Curso de creación de simios de Acción de Mazmorra Procesal creación de simios de Acción de Mazmorra Anteriormente, terminamos con nuestra colocación de nuestras puertas infernales. Y cuando empezamos, también arreglamos. Con un punto de quiebre. En realidad, no usamos un punto de quiebre para arreglarlo, pero demostramos el punto de quiebre. Va a quitarlo. Reanudar la estimulación, y solucionamos el problema con el material vacío y nulo. Ahora, tenemos algunas puertas infernales, tenemos más o menos s. Aquí hay un error. Vamos a averiguar por qué sucede esto. Volvamos a nuestro laberinto. Y no estamos preguntando a ninguna parte Sí, no preguntamos en ninguna parte si las coordenadas son una habitación especial. Entonces vamos a poner un o aquí o toro adentro y también anunciar la regla que son nuestras coordenadas contenidas en las habitaciones especiales. Azulejos especiales. Entonces ahora, esto ya no debería pasar, porque si es un azulejo especial o está al lado de una puerta, vamos a poner el material a nada, vacío, y entonces no va a engendrar Vamos a comprobarlo de nuevo. Esta es una habitación oculta. Es por ello que como nadie, ni puerta. Entonces todo parece correcto. Y lo siguiente que debemos hacer es empezar a pelar el resto de las cosas como el elevador, la caja, M un poco de nuestra funcionalidad. Pero para hacer eso. Necesitas una cosa más para prepararte. Necesitamos crear los artículos y los artículos que se pueden soltar, ya que el elevador requerirá un artículo, la caja requerirá dejar los artículos, y así sucesivamente y así sucesivamente Entonces comencemos por ir a nuestra carpeta de planos y hacer clic derecho y crear una nueva carpeta Llamemos a estos ítems. Vamos a entrar en esta carpeta, hacer clic derecho y crear un blueprint plus of plus actor Y llamemos a este ítem BP. Ahora bien, este artículo del plano BP, vamos a abrirlo. Este plano se convertirán en todos los artículos. Y para ello, vamos a estar usando algo llamado tabla de datos que es para los que son nuevos una tabla de datos es como una colección de datos en filas y columnas. Es similar a una hoja de cálculo, básicamente. Y por eso necesita un formato en las columnas. Y para usar un formato en las columnas, usamos una estructura. Vamos a crear esto muy rápido. Lo que primero necesitamos crear es una estructura, que podamos definir nuestras lúmas en nuestra tabla de datos Entonces vamos a usar una estructura, vamos a ponerle el nombre ST items. Vamos a entrar en él. Ahora, esta estructura estará conteniendo la información de nuestros artículos. Por ejemplo, lo primero que necesitamos es un nombre de elemento es playnam El nombre del artículo está bien. Lo segundo que vamos a necesitar, este es un artículo, qué artículo es una manzana. Bien. Y este ítem, ¿qué tiene para una representación visual? Tendrá una malla estática, por lo que necesitamos una malla estática. El nombre del elemento debe ser del tipo string o name, pero string es mejor si tenemos elementos con guiones y cualquier otra cosa Entonces necesitamos la malla. Vamos a llamarlo mesh, y va a ser del tipo. Malla estática. Malla estática simple, no componente de malla estática, y va a ser referencia de objeto. Lo siguiente que vamos a necesitar es un sonido de elemento. Como qué sonido hace este artículo cuando lo recojo o lo dejo caer o lo uso. Podríamos tener dos sonidos para eso, pero vamos a usar un solo sonido. Entonces vamos a tener sonido de ítem. Y lo siguiente que necesitamos sería una imagen de inventario. Entonces tendríamos a I Mach Primero voy a crear los nombres y luego establecer las variables. No van a ser mensajes estáticos, claro. Artículos sonido inventor imagen. Ahora, después, vamos a tener en una variable para explicar si podemos recoger esto en el inventario o no. Llamémoslo al inventario. Entonces el último realmente segundo al último sería si el ítem es. Entonces vamos a llamarlo taxi. No creas que esa es la ortografía. Podría necesitar una K. No estoy seguro. Está bien. Está bien. Y si es escabullirse, entonces sí necesitamos una cantidad también Oh. Llamemos a esta cantidad. Ahora, el caso de que se agregue al inventario. Vamos a tener pastillas de oro. El oro no va a ir a un inventario, pero va a ir en un mostrador de nuestra pantalla. Oh, vamos a seleccionar este aban Vamos a sonar. Tiene que ser de und Bound cube porque estamos usando cubos de sonido. Y la imagen inventada debe ser del tipo textura. En realidad textura a D. La diferencia de textura y textura dos D es que la textura es una categoría general, que incluye como mapas de tubos, dos detecciones, objetivos de render, texturas de volumen, muchas cosas Donde textura a d se especifica a una imagen de dos de textura que estamos usando. Oh, voy a salvar esto. Voy a cerrar el stru en realidad. Necesitamos establecer Staab en lingotes, y necesitamos establecer la cantidad también en entero Entonces esto es contar uno, dos, 34, y Staab es sí o no Voy a guardar esto y cerrar esto, y volvamos a nuestros artículos. Oh, para nuestro plano de artículo. No, no, no, no volvamos a nuestro plano de artículo. Tú vas a traerlo por aquí. Vamos a pre parada a la carrera porque no hay necesidad de que el juego esté corriendo. Ahora, lo siguiente que necesitamos crear es una tabla de datos, como dijimos, esta recopilación de información sobre filas y columnas. Oh, vamos a ir a donde es micelneo. Aquí está, millneous, y vamos a elegir la tabla de datos Cuando estamos eligiendo una tabla de datos, se requiere elegir una estructura de filas. Entonces tenemos que definir nuestras filas. Es por ello que creamos primero esta estructura. Entonces vamos a seleccionar nuestros artículos ST. A, voy a nombrar los ítems DT. Ahora, abramos esto. Como puedes ver, está prácticamente vacío en este momento, pero podríamos importar de fuente externa si tuviéramos un documento CSV o algo así. Creo que Json también aplica. Pero para nosotros, solo crearemos algunos artículos. Vamos a colocar manualmente sus valores y sus mensajes. ¿Y a qué me refiero? Vamos a presionar esto Aquí. Vamos a presionarlo como seis veces, vamos a tener seis ítems. Y el primer ítem sería, digamos, uno, y vamos a llamarlo oro. Ahora bien, ¿cuál es el nombre de la fila? El nombre de fila se utiliza para recuperar la información de cada fila en sus columnas. Vamos a mostrar en la práctica cómo se va a usar, pero cuando llenemos esta tabla de datos. Oh, o una malla, tenemos una bolsa, creo. P, tenemos una bolsa. Y para el sonido del artículo, tenemos una moneda. Aquí, tenemos una moneda. Imagen de inventario, tenemos nuestra bolsa. No va a ser un inventario de dos. Se va a agregar en A UI en nuestro puerto de vista, así que no voy a presionar los dos inventarios. Y azul Saka, no es necesario ya que no es un artículo de inventario Y por la cantidad, seleccionemos uno hacia abajo. Vamos a crear código para cambiar esta cantidad, pero eso dependería del enemigo, del cofre, de quién lo está dejando caer. Ahora, vamos a crear el segundo ítem. Bueno esto va a ser yo dos. Esta sería nuestra poción de olla HP. En realidad sin s. para la metanfetamina estática, creo que sí tenemos una porción. Tienes mucha poción. Todo es una poción básicamente. No, vamos a poner la poción roja. Para el sonido del artículo, tenemos un sonido de botella. Sí. Para nuestra imagen de inventario, tenemos una poción roja Ahora, esto se agregará al inventario, y lo es, y es de una am de uno. Ahora, nuestro código estará creando una cantidad infinita de pilas. Pero si quisiéramos un impuesto MC, deberíamos tenerlo como variable en nuestro array de estructura. Entonces, sería una opción en nuestras columnas aquí. Ahora, para el tercer ítem, vamos a nombrarlo. Tres. Va a tener el nombre de velocidad. Poción. Y para el partido, tenemos una poción azul Y para nuestros artículos vamos a volver a usar las botellas. Y para la imagen de inventario, tenemos la poción azul Va a ser inventario. Pero digamos que la poción de velocidad va a ser apilable Va a estar en un inventario. Un uso único. Digamos que de nuestra poción azul, queremos tomar dos sorbos para terminarla Entonces puedo poner una cantidad de dos. Ese sería su valor por defecto. Cuando lo meto en el inventario, puedo usarlo dos veces. Nuestro cuarto punto sería yo cuatro. Y esta sería una poción que cuando la bebemos, explota, crea una rabia explo Digamos a nuestro alrededor, y mata a todo el objetivo que nos rodea. Vamos a llamarlo poción de rabia. Vamos a establecer su malla estática a esta poción pardusca pardusca. Volvamos a usar las botellas. Y para inventario en marzo, tenemos Océano rojo oscuro. Bien, marrón rojo oscuro, podría verse diferente en el mundo. Ya veremos. Entonces, vamos a agregarlo al inventario, y va a ser de un solo uso. Ahora, para nuestro quinto ítem, va a ser yo cinco. Y llamemos a esta poción. Porque aumentará nuestro tiempo disponible para seguir jugando. Si se acaba el tiempo, vamos a estar muriendo. Vamos a usar la poción amarilla. Vamos a usar la botella. Y para la imagen de inventario, vamos a usar el amarillo océano. Va a estar en nuestro inventario. Va a estar en cantidad de uno, y no va a ser apilable Oh, para un último ítem, pongamos a esto I seis. Y va a ser del nombre E. Va a tener la malla clave, y el sonido del ítem Sí, key drop aquí frente a nosotros. Inventario ma debe ser clave también. Se agrega a cantidad de uno, y no es apilable Vamos a ahorrar. Cerremos nuestra tabla de datos. Y creo que esto es para éste. Vamos a continuar en el siguiente haciendo que este plano de ítem pueda convertirse en cualquier cosa Adiós por ahora. 62. Comportamiento del elemento y widget del cursor: Hola, y bienvenidos de nuevo al taller de diseño de juegos, motor real cinco procesales Dungeon action RPG curso de creación Por último, nos fuimos con la creación de la tabla de datos y la estructura para la tabla de datos. Dijimos que la información de nuestro artículo sería el nombre del artículo, la malla, el sonido del artículo, la imagen del inventario, la pregunta de inventario T que tenemos, la pregunta apilable que tenemos y una cantidad Y luego agregamos que usamos esta estructura para crear nuestra tabla de datos para los olumes Y luego llenamos la tabla de datos manualmente con los valores que queremos para los ítems. Y creamos el ítem del plano. Ahora, continuemos con el ítem del plano. Para esta parte del tutorial, llenaremos los componentes y el arrastramiento de construcción Entonces, cuando propongamos nuestro artículo , tendrá las propiedades que queramos. Oh, vamos a explicar un poco cómo funcionarán nuestros artículos. Voy a abrir pintura. Digamos que este de aquí es nuestro actor. Este es nuestro plano de artículo. En primer lugar, tendrá la malla que la estaremos representando. Entonces, si esto fuera una manzana, una manzana verde, usaría la malla de la manzana. Ahora, como queremos que nuestros artículos sean un poco más visibles, también agregaremos una fuente de luz puntual, vamos a esto con azul. Esta es una fuente de luz. Bueno, vamos a corregir. Yo lo corrigí. Sin comentarios. Esta es la lámpara, esta es la fuente de luz. Pero lo específico que va a tener esta fuente de luz es que solo encienden esta malla y no afecta al resto del mundo. Lo tercero que vamos a necesitar es algo para mostrar el nombre del ítem al jugador. Entonces crearemos un widget que agregaremos dos elementos que obtenemos el nombre. Y por último, tendremos una colisión alrededor del objeto para poder saber cuándo nuestro jugador está fuera de la colisión o está dentro de la colisión, para poder elegir el objeto para que esté en rango entre el jugador y el objeto. Entonces, si el jugador está dentro de esta colisión, podrá elegirlo. Si no lo está, no podrá elegirlo. No, vamos a esto. Vamos a necesitar en malla. Llamemos a este artículo malla. Vas a necesitar una colisión de cerveza. Alrededor de nuestro artículo. Vamos a nuestro mirador, para que podamos ver un poco mejor Vas a necesitar una luz puntual. Y vamos a necesitar un widget. Un widget, vamos a hacer un poco más tarde. Vamos a visitar ocultar la deuda. Y para la malla del ático, necesitamos seleccionarla. Vamos a ir a los detalles e ir a la colisión, y vamos a seleccionar expiación Vamos a ignorar todo excepto la visibilidad Ama. En realidad, no nos superponemos, vamos a estar bloqueando. Lo siguiente que debemos hacer es no dejar que arroje sombras porque va a ser muy caro. Vamos a ir a proyectar sombras. Vamos a apagarlo. Ahora es el momento de hacer lo del canal relámpago. Vamos a seleccionar canales, cuales son los canales de iluminación, cuales de estos canales están iluminando este ítem, y vamos a seleccionar el canal para estar activo. ¿Vamos a ir a nuestro punto de luz? Entonces tenemos canales aquí arriba. Seleccionemos los dos canales dos, y seleccionemos el canal cero. Entonces todo en el mundo se ve afectado por el canal cero. Pero esta luz no emitirá en ese canal. Estará emitiendo al canal dos, cual nuestra malla está diseñada para obtener luz. Cerrar esto, cerrar, cambiar el mundo básicamente y volver a nuestro punto de luz. Voy a seleccionar algunos ajustes que tenemos predeterminados 1280, knes, Radio de Atenuación siete, y el resto se van a dejar así Por último, seleccionemos la esfera y fijemos su radio de lanza en 300 Pero este será el radio donde podamos recoger el artículo. Y este es un código bastante simple. Entonces, lo que vamos a hacer es simplemente llenar rápidamente este código. Iniciar evento de superposición, vamos a crear una variable, una variable Boulan, llamadas capaces de recoger o recoger rango o lo que sea, capaz de recoger Voy a configurarlo a elegí solapamiento final. Yo quería elegir comenzar solapamiento. Pero necesito el solapamiento final también, así que voy a traer ambos. Va a ser cierto al comenzar la superposición. Si nuestro otro componente, tiene el remolcador, E, que es nuestra cápsula jugador, y si tiene la etiqueta P, entonces el artículo a recoger Y lo mismo que vamos a hacer en la superposición final. En una prisa COVID y establecer el capaz de despegar. Y como queremos que esta esfera esté haciendo nada más con otra cosa, podemos cambiar su configuración de colisión, también, volver a la costumbre de ignorar todo excepto la p, que va a estar superponiendo. Porque cuando dejamos todo en la computadora, calcula constantemente si una visibilidad se calienta, si una línea de rastreo de cámara se calienta, si los enemigos auxiliares van a ser juegos de palabras, así que vamos a estar revisando a los enemigos Pero nuestra física bo nuestras cajas. Si tuviéramos vehículos descritos, estaría calculando todas estas cosas constantemente, aunque la respuesta sea no. Como esto no tiene ninguna colisión física ni nada, solo tenemos en lugar de física queriana Pero eso es por defecto. No. Lo siguiente que necesitamos es el widget. Así que vamos a crear rápidamente ese widget. Vamos a nuestra carpeta y y seleccionemos clic derecho en la interfaz de usuario, plano del widget Llamemos a este ítem W G. A. En realidad, widget de elemento. Esta palabra. Palabra del ítem. Este widget no va a ser necesario muchas cosas. Así que vamos a llenarlo muy rápido. Vamos a abrirlo. Es solo Esto es del widget que no necesita convas Es porque somos alguien en el mundo, y podemos dejar que se muera por nuestro plano, por otros lugares, luego por las convas Pero lo que vamos a necesitar es un botón. Y para el botón, necesitamos un xt. Y lo que vamos a hacer es que vamos a hacer un poco de trampa. Vamos a seleccionar el botón va estilo, uno su matiz, y seleccionar el cero Alfa en normal, para que podamos ver solo el nombre del elemento. Y cuando estemos flotando, solo vamos a dejar que el tinte esté en 0.1 Es un poco visiblemente. Vemos algo detrás del nombre. Digamos que cuando lo estamos presionando, vuelve al cero. Alfa. Entonces, tenemos un bucle a través de estos tres como yo lo flotaba. Fue lo puedo ver. Lo flotaba, y luego cuando lo hice clic, volví a como era cuando flotaba Entonces se siente bien. Ahora bien, por cómo parece que el mundo realmente quiere porque queremos que este widget se muestre por encima del mensaje estático, por encima de cualquier otra cosa, básicamente, eso mismo. En realidad vamos a estar mostrándolo en la pantalla. No vamos a tenerlo realmente engendrado en el mundo. Y para ello, vamos a ir a nuestro widget sobre nuestro artículo. Y donde dice Top, ¿dónde debería estar en qué espacio debería colocarse en el mundo o en la pantalla? No, vamos a elegir pantalla. Y tengo algunos tamaños de fila predeterminados, que serían 240. Para la báscula, sólo voy a elegir dos en todo. Tiene que ser sentarse un poco más alto también. Pongámoslo 112, está bien. Pero aún no podemos ver los resultados. Podremos verlas cuando dejemos caer los artículos. Oh. Continuemos con la información de llenado automático de la pantalla de construcción. Esta es la primera vez que vamos a utilizar nuestra tabla de datos. Vamos a conseguir datos. Y desde la fila de la tabla de datos, vamos a seleccionar para Tabla de datos nuestros ítems DT de tabla de datos, y esto nos da una lista aquí, que en realidad no vamos a usar, y vamos a estar promocionando el nombre sin procesar a una variable. Todo el nombre en bruto, nombre crudo es un nombre fino. Ahora bien, si compilo puedes ver que mantuvo su valor original de I uno. Pero vamos a querer cambiar esto externamente, así que lo haremos instancia editable y expondremos en spawn Pero cuando respondemos al artículo, podemos cambiar de nuevo el nombre de este elemento desde allí cuando lo estamos generando Entonces cada uno de los actores que están generando el ítem puede tener una costumbre de sobre lo que van a engendrar Ahora voy a promover el afloramiento de ítem ible iluminado. Datos. Este ítem conoce sus propios datos. Y vamos a conseguir los items y la malla estática, que es una información que necesitamos de nuestros datos. Entonces, voy a romper la estructura. Y conéctate aquí la información de la malla. Voy a conectar esto aquí. Ahora como se puede ver si voy a viewport y compila. La pequeña bolsa apareció por aquí. Porque nuestro nombre de fila predeterminado es I one. Si selecciono I dos, aparece la poción roja Si selecciono I tres, aparece uno azul. Vamos a revisarlos todos 56. Oye, mira, bien. Creo que este es un buen punto de ruptura por ahora. Vamos a continuar en la siguiente. Adiós. 63. Animación de planos de pecho: Él Hola, y bienvenido de nuevo al Taller de Diseño de Juegos, Motor Real cinco Procesal Dungeon Action ARB Z Creation Course Anteriormente, terminamos con nuestro artículo. Terminamos el código para clasificación de los datos del artículo a través de nuestra tabla de datos. Utilizamos una variable a para obtener su propio nombre, y que también se expone en spawn, para que podamos establecerla cuando estemos desove el ítem Y a partir de estos datos, usamos los datos de la malla para establecer el componente de malla estática de nuestro blueprint También agregamos el widget, y creamos el widget, que son elementos que usaremos para mostrar en el mundo, que dijimos que básicamente estará en la pantalla, así que no tenemos que hacer algunas partes adicionales. Muestra por encima de cualquier malla estática. Hay otras formas de hacerlo, pero requeriría pasar por materiales un poco de cosas más complicadas. Vamos a entrar en ese dominio para que nuestro jugador pueda ser visible a través de muros, pero queremos hacerlo en los widgets ahora mismo. Oh, ya que estamos en los artículos, creo que es un buen momento para mostrar cómo los vamos a estar desove. Y creo que es momento de completar el cofre, el plano del pecho para demostrarlo Vamos a ir a nuestros apoyos, carpeta dentro de los planos de carpetas, y vamos a abrir nuestro Ahora, si recuerdas, si vamos a nuestra ventana gráfica, agregamos nuestra malla estática para el cuerpo del pecho Pero también necesitamos una portada, creo que se llama, la parte superior en todo caso que vamos a estar animando cuando estemos abriendo el cofre Voy a agregar otra malla estática. Y por su propiedad de malla estática, voy a seleccionar la parte superior del pecho. Y lo voy a colocar justo encima del pecho. Como puedes ver, la olla de guisantes ya está en el borde de la parte posterior. Pero esto nos ayuda cuando queremos rotarlo salta. Estoy volteando. Esto nos ayuda cuando queremos rotarlo. Y sí necesito cambiar esto a siestas de cinco puntos mejor Sí, creo que está bien. Allá. Voy a compilar y guardar. Ahora, como lo necesitamos para el artículo, una colisión al objeto es el plaar en rango de furia, lo mismo que necesitamos para el cofre Entonces, voy a copiar esta esfera del ítem del plano, y la voy a pegar en el cofre grande Voy a dejarlo tan fácil porque esta es la misma distancia que queremos usarla. Y la siguiente parte que voy a copiar desde aquí es en realidad el widget porque va a ser el mismo widget, voy a pegarlo aquí. Y también, voy a necesitar el código de las colisiones de la esfera Voy a copiar esto, y voy a traerlo aquí. Ahora bien, estas dos variables esta variable en realidad no existe en nuestro plano Entonces lo que voy a hacer es que voy a hacer clic derecho sobre él y decir, crear variable, capaz escoger cómo esto sería capaz de abrir. Entonces, para cambiar esto. Y esta parte es p y cuando podemos interactuar con ella. Y ahora al decir interactuar, abrimos un nuevo capítulo. Que es como vamos a interactuar con nuestros artículos. Nuestro juego es un juego de clic del ratón, o es como un Daloclon Entonces esto significa que cuando estamos haciendo clic, queremos estar interactuando con lo que está bajo nuestro mouse. Ya que estamos en vista isommétrica y angulada, no va a ser muy sencillo hacer eso Vamos a tener que hacer algunas matemáticas, algunas matemáticas para conseguir el punto que queremos Pero después de todo este cálculo, cálculos, lo que importa es que mandemos un evento interactuar a este prop, la caja o al ítem. Y la forma en que vamos a hacer esto es usando la interfaz de blueprint, una interfaz de blueprint que vamos a diseñar para los ítems Sea ya que nuestros artículos van a ser diferentes tipos de actores, esta es una manera agradable, una forma óptima de hacerlo. Hay otras formas de hacerlo, pero en este tipo de escenarios, las interfaces de blueprint se usan comúnmente y son una técnica mejor Vamos a nuestro navegador de contenido. Vayamos a nuestros planos. Vamos a nuestra carpeta BI. Hagamos clic derecho y creemos una interfaz de blueprint op. Aquí estamos. Vamos a llamarlo Bi ítem Cs. Vamos a abrirlo. Vamos a crear un evento llamado Inter. Ahora, tenemos esta interfaz, agreguémosla tanto a nuestros planos, al cofre grande como al ítem BP Para ello, comencemos desde el ítem BP. Vamos a la configuración de clus. Vamos a nuestras interfaces implementadas y presionemos Agregar, y vamos a seleccionar Interactúo. Lo siento, me viene el artículo. Ahora, voy a compilar y guardar, y voy a hacer el mismo cofre grande. Yo hice exactamente el mismo tipo vía interactuar en el artículo viene. Vamos a compilar y guardar. Ahora bajo nuestras funciones, tenemos nuestras interfaces. Voy a abrir y hacer doble clic en la interacción para crear un evento. Entonces, cuando enviamos el mensaje para interactuar, la primera pregunta es, ¿ está el jugador en el rango? Voy a poner una sucursal, y voy a seleccionar A para abrir conectada a la sucursal. Ahora bien, si estamos en rango, necesitamos saber si ya hemos interactuado porque desde la animación estaremos jugando para abrir el cofre, no queremos reiniciar esta animación Creamos otro toro, un copy paste para abrir y nombrarlo interactuando. Voy a traer esto aquí. Voy a seleccionar una t. Y voy a seleccionar aquí a y nota. Esto significa que tenemos que ser capaces de abrir, y tenemos que estar no interactuando. Entonces, si esto es cierto, esto volverá falso y volverá falso. Esto es falso, entonces volverá a pasar a falso. Ambos necesitan ser ciertos. Lo siguiente que voy a hacer es establecer la interacción. Ahora, cuando nuestro pecho se abra, deberíamos tocar un sonido. Voy a tocar sonido. Y tenemos un sonido en el pecho. Y lo siguiente que tenemos que hacer es por el widget. Entonces voy a que luego juego al widget para hacer. En realidad, también podemos destruir este componente porque ya no es necesario. Después nos sentamos invisiblemente. Y ahora necesitamos animar nuestro pecho. Entonces voy a traer una línea de tiempo. Voy a conectarlo para jugar desde el principio e ingresar a esta línea de tiempo. Voy a crear un camión de flujo. Voy a sumar a la variable dos puntos. El primero será cero y cero. El segundo sería, digamos, lleva 1 segundo. Mucho, digamos punto p 7 segundos, y el valor sería a uno. Haz que se acerque. Usemos la última lluvia o no alrededor de los 5 segundos enteros. Vamos a actualizar. Oh. Vamos a traer nuestra malla, que es la parte superior de la caja. Y vamos a establecer la rotación relativa. Ahora, no necesitamos almacenar variables ni nada. Esto lo codificamos duro. ir a alertar al avión o al Alfa, vamos a usar la camioneta Vamos a usar el camino más corto. Vamos a revisar nuestro pecho. Ahora mismo digamos 91 x. Queremos ir -20. Menos t. Quiero pasar de 90. A 20. Ahora, algunas cosas que tenemos que hacer también es ir a nuestra malla aática del cuerpo de raíces, y vamos a ir a su colisión y cambiarla Vamos a seleccionar el reset personalizado. Voy a poner todo en ignorar, excepto la visibilidad, la cámara y el estanque, porque queremos que el cofre esté bloqueando nuestro camino. No deberíamos poder atravesarlo. Oh, voy a dejar la parte superior, la cubierta en ninguna colisión. En realidad, si lo dejamos a ninguna colisión, podría haber una posibilidad que no podamos hacer clic en él. Pero ya vemos. No me gustaría que el jugador fuera bloqueado por el pecho abierto. Pero ya veremos cómo va a funcionar. Ahora, viene la pregunta, ¿qué pasa cuando abro el pecho? Lo que nos pasa es que vamos a generar los artículos. Siempre podemos establecer una cantidad prefijada de artículos para que siempre sean telefónicos así Pero si tenemos la información de nuestro laberinto, podemos obtener el nivel de nuestro laberinto y ajustarlo en consecuencia. Entonces, voy a crear una nueva variable. Voy a llamarlo laberinto. Voy a hacerlo del tipo generador laberinto. Su Generador. Oh. Bien. Aquí estaba, referencia de objeto, generador de base, y voy a exponerlo en Sone y edición de instancias En realidad edición de primera instancia porque si no es instancia editable, entonces esto creará un error, como si deshago clic en esto para compilar, dirá exponer en hijo pero no instancia Tiene que ser editable por instancias. Nuevamente, cuando estamos trayendo un plano al mapa, es una instancia del plano Entonces, si queremos que el valor tenga números diferentes en cada instancia, tiene que ser editable por instancia Ahora, volvamos a nuestro generador de laberinto. Encontremos dónde estamos desove el cofre, que creo que funciona en los apoyos El comienzo en pecho grande. Voy a refrescar esto. No compilar. Dave. Voy a refrescarme de nuevo. Y aquí lo tenemos. Entonces para el generador Mz, vamos a usar la salud Ahora tenemos una referencia a nuestro generador Me en nuestro pecho. Creo que este es un buen punto de parada para este. Te voy a ver en la próxima. Adiós. Oh. 64. Mecánica del pecho y sistema de caída de objetos: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG Creation Course Anteriormente, iniciamos nuestra cadena de eventos para nuestras interacciones. Creamos una interfaz de blueprint que llamamos item coms Y dentro de esta interfaz, creamos una función llamada interact. Implementamos esta interfaz a nuestro cofre grande y nuestros planos de artículos, e iniciamos la cadena de eventos, el cofre grande Entonces después del evento interactuamos, preguntamos si estamos en el rango y no estamos interactuando en el momento actual. Y si la condición se aplicaba, continuamos con la configuración de interactuar a true, reproduciendo un sonido, y ocultando el widget y también destruyéndolo. Luego fuimos y creamos una línea de tiempo para animar nuestro top est También creamos una variable llamada Maze generator, que está almacenando la referencia a nuestro generador, el que sembró el cofre Ahora, vamos a comenzar a jugar evento y crear una variable que será vamos a llamar a este número máximo de ítems Vamos a ponerlo en comenzar a jugar para que sea de un rango aleatorio. Aleatorio en rango. Empecemos con que es un gran gesto. Debería caer por lo menos digamos tres artículos. Cuando alguna habitación, y el máximo debe ser un nivel de generador de laberinto. Nivel generador de nuestro generador laberinto, debe ser el nivel de nuestro generador más tres. Por lo que la primera vez caería 3-4 artículos. Debido a que nuestro generador principal no desde cero, inicia desde uno, que si vamos al menú principal, podemos ver que al hacer clic en el botón Inicio, generamos el primer generador, tenemos el nivel generador en uno Por fin es tiempo. Vaya a nuestra línea de tiempo, el evento terminado y en nuestro primer artículo. Vamos a usar el actor spawn de clase. Vamos a dividir la transformación, y vamos a obtener una ubicación de llamada. Para usar como punto de desove para la ubicación. Esto significa que nuestro objeto realmente va a aparecer dentro de nuestro pecho, como en el cero, cero, las coordenadas locales de este plano, que sería que estamos aquí Pero eso no es problema porque vamos a crear un mecánico en nuestros artículos para encontrar un lugar al lado de nuestro pecho. Pero este código estará en nuestros artículos. No. Estamos respondiendo al primer ítem. Se va a ver del ítem clase P. Y tenemos nuestro nombre de fila, que es yo seis, que en realidad es nuestra clave, ¿no? Porque yo seis es el valor por defecto y es la clave. Y este es el único lugar donde vamos a estar generando la llave, vamos a quedar yo seis, y vamos a agregarla nuestra lista para destruir Para ello, vamos a conseguir nuestra referencia de generador ma. Vamos a conseguir que los actores destruyan de ella, y vamos a agregar a esta matriz el valor de retorno del actor engendrado Para el resto de los artículos, sólo voy a copiar el artículo BP del actor telefónico. Voy a conectar la ubicación del actor, y vamos a crear un loop personalizado. O incluso podemos ponerlo en un for loop act to tom o loop. ¿Y ves lo que pasó? Cuando tengo estos dos conectados así, pero quería un nodo detrás de estos dos. Así que solo arrastre de aquí, hago o bucle nodo, y auto conectó lo que quería hacer. Pero siempre es bueno verificar que funcione si las conexiones son correctas. Ahora, para el último índice, vamos a usar el número máximo de ítems. Para el primer índice, vamos a usar el número uno porque ya generamos un ítem Entonces, si queremos generar tres artículos, debería comenzar en uno Porque si comenzara en cero, entonces engendraríamos un artículo extra Ahora por cada elemento generado, necesitamos de nuevo agregar actores para destruir una base de copia esto agregar asentimiento aquí Vamos a agregar este valor aquí y llevar esto a los actores para que lo destruyan. Frente a esta manera. Y la razón por la que necesito hacerlo opuesto es cuando me conecto, este es un nodo comodín. Entonces sea lo que sea a lo que me conecte, lo primero que voy a conectar, obtendrá el tipo de datos de esa cosa. Aquí, estamos devolviendo un tipo de objeto de ítem VP, mientras que nuestros actores para destruir la lista son actores. Un actor está arriba en jerarquía del ítem VP. Entonces no puedo agregar una jerarquía anterior a algo en las partes inferiores. Cuando conecté esto, esto se convirtió en objeto VP items donde el objeto item no puede ser un actor, pero el actor puede ser un objeto item. Entonces voy a desconectar esto, voy a conectarlo aquí, y luego conectar esto. Todos nuestros actores que estamos engendrando se están sumando a los actores para destruir Ahora, qué artículos hago spon de raw ID, nombre, voy a seleccionar y para el comodín, para artículos, comodín aleatorio en rango Va a ser 0-4, tres a cuatro cos 01234. Y comencemos con el oro I uno. ¿Sabes qué? Ya que sabemos que nuestra mesa empieza con I, lo que puedo hacer es usar un Si la escribo correctamente, sonar. ¿Qué significa una cadena de pluma? Significa que somos una cadena pendiente A a cadena B. Si pongo yo aquí, y conecto el entero anum aquí, y obtuve I y algún número, y puedo conectar directamente esto aquí en lugar de sentir todos estos hacen la lista electa Y esos serían nuestros artículos stpone cuando hacemos clic en nuestro pecho. Vamos a comprobarlo todo más tarde, y vamos a depurar todo lo que se necesite. Pero por ahora, vamos a dejarlo como está. La única parte que falta en este momento es el nombre del cofre en el widget. Porque tenemos un widget aquí. Cuando aparece, tenemos que ser un nombre, y la clase widget no es. Estoy en el ítem. Sí, es lo mismo. No seleccioné la clase de widget en estos dos widgets. Ahora lo vas a hacer. Vamos a llamarlo W G. Item world. Este es un widget. Pi Ahorra en pila, y aquí haz lo mismo Mundo. Dave y compilar. Oh, Dios mío. Es un movimiento por defecto porque está aquí y aquí. Y va automáticamente. De todos modos, vamos al widget, y vamos a crear una función. En el evento gráfico, por supuesto, el gráfico de eventos del diseñador. Llamemos a esta función. Eso es Ahora, esto vuelve a ser un poco redundante. Voy a ir a diseñador en realidad primero. Voy a seleccionar el texto porque no es una variable. Debería ser una variable, así que soy capaz de motor. Vamos a nombrarlo también al texto en realidad elemento. Y podría estar en nuestro plano y simplemente obtenerlo del widget, esta parte y simplemente arrastrando ese texto También aquí listo. Bueno, como puedes ver, está re hecho, es la misma función, básicamente. Pero no necesito arrastrar el elemento t del widget de esta manera. No, va a hacer las cosas un poco. Ahora, para poner el texto en nuestro pecho. Tenemos que traer nuestro widget. Y como hicimos con el componente infantil que necesitamos para obtener lo que hay dentro del componente hijo, ¿qué es el actor? ¿Cuál es el actor infantil del componente infantil? Lo mismo tenemos que hacer para el widget. Estos son componentes, componente widget, componente actor hijo, componente de malla estática, incluso aquí lo mismo, necesitábamos agregar qué tipo de malla estática. Son celdas que contienen la información, pero no saben lo que tienen. Tenemos que preguntarles. Para pedirlo, vamos a conseguir widget. Y entonces necesitamos ver si el widget que obtuvimos es nuestro WG it item world, algo así Entonces voy a emitir a WG item world. Sabemos que esto es todo lo que vamos a tener éxito. Voy a convertirlo en puro reparto. Aunque no, sí tenemos éxito, pero necesitaríamos implementar algún código. Pero a partir de aquí, sólo voy a un mensaje de texto. Ahora está aquí así, más fácil. Menos nodos. Cuantas más notas tengas, más puede llegar a ser la torre realmente convirtiéndose en una torre de defensa después de un punto. Entonces para el texto, vamos a conseguir pecho pecho, y eso es todo. Compilar y guardar. Y desde el lado de la programación, nuestro cofre está listo. No vamos a poder jugar con él ahora mismo. No vamos a poder verlo. Eso es un fastidio, pero lo haremos cuando nuestro personaje esté habilitado, y podremos etag todo esto por si acaso no funciona Adiós por ahora, canta el siguiente. 65. Cofres de habitación ocultos: Hola, y bienvenidos al Taller de Diseño de Juegos y Real Engine cinco llamadas de creación de PZ de acción de Dungeon procesales creación de PZ de acción de Dungeon En la lección anterior, terminamos de crear nuestro cofre VP Big. Comenzamos por almacenar una variable del número de ítems que posponemos, y encontramos un valor aleatorio entre tres y Mx, que es el nivel generador más tres Luego establecemos texto a nuestro widget. Y finalmente, agregamos la funcionalidad del actor spawn al final de nuestra línea de tiempo Agregamos el primer ítem para ser la clave que siempre queremos dejar caer, y luego agregamos ese actor a la matriz para ser destruida. Después creamos un bucle de cuatro con el número máximo de ítems como último índice, y primero Índice uno, ya que son como hemos generado la primera clave, el primer ítem, y luego continuamos generando el resto de los ítems y agregándolos a los actores para destruir la lista Creamos un pend de I más entero aleatorio 0-4 para obtener un elemento aleatorio a través de nombre sin procesar, porque nuestra tabla de datos se llama I y un número, y esta parte tiene un pequeño error Empezamos desde cero cuando queremos comenzar desde uno y terminar en el ítem cinco. Nuevamente, tenemos un rango de cuatro porque nuestra tabla de datos va a nuestros elementos de tabla de datos. Empezamos desde I uno, dos, yo seis, pero queremos generar ítems aleatorios 1-5 Ahora, ya que tenemos la caja grande. De hecho podemos duplicarlo y hacer la pequeña caja fuera de ella. Voy a ir a utilería. Voy a ir a nuestro pecho grande, y voy a duplicarlo, y llamarlo cofre PP. Nos ponemos lo grande. Ahora, abramos esto. Cambiemos algunos ajustes. Vamos a establecer los elementos mínimos uno y el generador uno más uno. Por lo que va a ppone de uno a dos ítems y cada nivel más. Y como vamos a estar engendrándolo En las salas ocultas, hagamos una regla de que ésta siempre genere una poción de tiempo, que en nuestra tabla de datos es la Vuelve al pecho y pon estos dos I cinco en lugar de una llave. Ahora, vamos a dejar el resto igual para que tal vez puedas tspone dos porciones de tiempo, realmente no importa Y vamos a ir a nuestro generador de laberinto. Vamos a ir a proponer. Vamos a copiar Esta parte, que tiene las habitaciones, pero no necesitamos las habitaciones. Sólo necesitamos todos estos. No necesitamos direcciones, pero la vamos a cambiar. Vamos a pegarlo aquí. Para la matriz, necesitamos las habitaciones, creo, las nombramos. Tome nuestras matrices. Habitaciones Biden. Pero es un ST, así que voy a desconectar esto. Voy a conectar esto aquí. Yo aquí, me voy a romper, y voy a copiar el ritmo el bucle for , conectarlo así. O configuración clásica, y aquí en adelante, necesitamos spone la prueba BP No necesitamos las indicaciones. Tenemos que conectar estos dos pines por aquí. Y vamos a poner también otra regla aquí, vamos a poner una rama que nuestras coordenadas actuales no están contenidas en la matriz de pasillos especiales Entonces por si acaso uno de nuestros pasillos especiales se considera un oculto. Vamos a decir que no. No lo vamos a engendrar. Voy a conectar esto aquí en el completo este. Esto también se podría hacer en una secuencia. Cada secuencia debe ejecutar uno de estos segmentos. Pero vamos a dejarlo así por ahora. Si vamos a jugar a compilar, veamos si engendramos el pequeño cofre en las habitaciones ocultas Mientras que en la habitación oculta, aquí tenemos. No hay cofre. Pero sí vemos el widget, pero hay un cofre. Que cofre es que supongo que es ese es el pecho final. Vamos a encontrarla. Fin en el pecho. Ahí está el cofre. Aquí está. Se ve un poco pequeño. Es un cofre grande, pero sí se ve un poco pequeño. En fin, descubramos por qué no engendró el pequeño cofre en las habitaciones ocultas De la jugabilidad. Va a ser algo sencillo otra vez, probablemente una rama falsa. Sí, pregunté si contiene y tiene que estar conteniendo, no. Esto debería ser en falso. Juguemos. Aquí veo una habitación escondida, y sí tiene un cofre, que se ve igual. Ahora, arreglemos esto. Vamos a nuestro nuevo cofre. Creo que sí tenemos un cofre diferente. No voy a buscar así, voy a ir a la carpeta de mallas, él mallas estáticas aquí, estamos y hay otro cofre No. Ahora vamos a revisar de nuevo, y ya está aquí. No es que agregáramos de cámara. Oramos demasiado para gap y se agrega. Voy a usar esto el fondo y esto para el top. Voy a acercarlos un poco más, adelante. Y se ve bien. Ahora, sí se veían un poco pequeños. Lo que podemos hacer es ir al pecho grande y poner su e en 1.5. Si eso es demasiado, 1.25. De lo poco. Bien. No, no está nada bien. Ahora, está más bien. Hagamos esto para este cofre también 1.25. Todo bien. Mientras. Presionemos play. Reviso y no veo habitación oculta. Esto es un oculto. nuestro pecho pequeño y en algún lugar está el grande. Encuéntralo también Aquí está. Como podemos ver, se genera junto a una puerta. Tenemos que agregar la regla para las puertas para este cofre también. Y es un poco pequeño todavía. No es tan impresionante. La llave del pecho debería ser más grande, así que voy a hacerla 1.5 por debajo de 1.5. Pero sí se veía mucho en la escala del cofre pequeño. Eso es, vamos a nuestro laberinto. Vayamos al lugar en el que estamos usando las indicaciones para el cofre, que está justo al principio en el crear núcleos para pecho. Aquí tenemos las reglas. Estamos comprobando si está contenido en los mosaicos especiales. Tenemos que traer este funcional que hicimos es adyacente para hacer. Aquí vamos a conectar las coordenadas. Poner o entrar porque si es un azulejo especial, o si está adyacente a la puerta, no lo genere No agregue el índice del tesoro. Compilación guardar. Vamos a jugar solo para comprobar el tamaño. Sabemos que la regla está funcionando. Aquí está, y es un poco pequeño. Es demasiado pequeña. Entonces vamos a ir al extremo y poner la báscula en dos, y eso será dos, sea lo que sea dos, lo es a menos que nuestro jugador no pueda pasar pero vamos a cambiarlo de nuevo. Ahora está bien. Sólo para mirarlo. Nuestro pecho. Aquí está, bien. Este es un cofre grande ahora. Esto lo podemos encontrar fácilmente en los pasillos y localizarlo. Éste es cuchareado junto a una torre, también puerta del Infierno. De todas formas, así que en la siguiente lección, deberíamos comenzar a crear el mecanismo para que los ítems caigan. Pero antes de eso, déjame hacer una explicación realmente rápida. Entonces sabemos lo que estamos haciendo a continuación. Sabemos lo que vamos a estar programando. Voy a traer pintura. Y consideremos que Este es nuestro bloque otra vez. Esta es nuestra pila, y nuestro pecho aparece en algún lugar de aquí. Ahora, cuando engendramos nuestro artículo, se corta aquí mismo en el medio Si vemos un tres D V, digamos ese archivo esto, baja así, y tenemos nuestro pecho aquí, eso está abierto. No cubriría esto nunca, pero de todos modos, y nuestro artículo aparece aquí Lo que vamos a crear es un sistema que desde el lugar en el que se genere el ítem, conseguiremos que un punto aleatorio en el aire se vuelva polar Y a partir de ese punto, vamos a iniciar la línea trazando hacia el suelo. Pero vamos a trazar líneas en un radio alrededor de la caja. Vamos a conseguir líneas continuas, pero muchos puntos, muchos puntos alrededor de la caja, que vamos a definir el radio. Y cuando encontremos el lugar en el que podamos aterrizar el artículo, y estará en el piso, vamos a decir que ese es el lugar al que hay que ir. Y para ello, vamos a hacer animación ese ítem va de aquí a ese punto. Pero eso es algo que voy a hacer en la siguiente? Esto es suficiente por ahora. Adiós. Nos vemos entonces. 66. Animación de objetos cerca del pecho: Hola, y bienvenidos al taller de Diseño de Juegos, y al curso de creación de RPG de acción real de Engine five Procesal Dungeon curso de creación de RPG de acción Anteriormente, añadimos el cofre pequeño y arreglamos algunos errores que ocurrieron durante el juego. De hecho aumentamos los tamaños de ellos también. Y una cosa que no abordamos fue que cuando jugamos, en realidad vimos el widget de la caja grande y la caja grande. Caja grande. Aquí está. Lo que pasó es que la caja grande estaba en realidad en nuestra opinión original. Se puede ver que apareció en estos momentos. Si me expulso poseer de nuevo la jugada el juego. Se puede ver que esto en realidad está en el lugar en el que debería estar. Pero si muevo esto, vuelvo a mover la caja, se puede ver que el tooltip del cofre está por encima de él Y ahora en realidad podemos ver cómo se vería. Es un poco grande, pero bien. Lo que vamos a hacer es simplemente configurarlo entonces, así no podemos verlo por defecto. Entonces vamos a ir a nuestros widgets, el elemento de impresión azul, esa visibilidad, invisible. Y vamos a hacer esto para la caja, el cofre grande, widget, visibilidad. Visible y para el pecho pequeño también. Obtenemos visibilidad invisible. Ahora, volvamos a nuestro artículo, y vamos a crear la mecánica que explicamos. Mecánico donde vamos a seleccionar un punto por encima del artículo, lanzar algunas líneas de rastreo, encontrar un lugar vacío y generar el artículo La forma en que lo vamos a hacer es que solo vamos a usar un cuadro delimitador Y encuentra el punto dentro de esta caja delimitadora. El inconveniente de esta técnica es que a lo mejor la línea se perforará mostrará que va ahí, pero el artículo se detendrá por colisión o algo en la caja, o incluso podría encontrar una línea que está golpeando la caja, y diría que eso es aceptable y la deja ahí. Um, podría haber formas de que pudiéramos crear alguna función que creamos como un círculo y luego a ese círculo, vamos como le damos un porcentaje de más o menos hacia ahí. O lo que podríamos hacer es que podríamos crear algún código para comprobar si nuestra caja de vinculación, punto que encontramos como cuando tiro una línea desde aquí y cae aquí. ¿Pertenece a coordenadas desde el centro hasta aquí, por ejemplo, creamos una zona muerta que no dejan caer artículos aquí Pero no vamos a estar haciendo estas cosas. Sólo vamos a poner una caja y conseguir un punto en la caja. Eso sería suficiente ahora mismo. No, vayamos a nuestro artículo en nuestra jugada de inicio. Entonces, hace un tiempo, hablé sobre por qué loops y por qué no deberíamos usarlos en la jugabilidad. Bueno, por cada regla, hay una excepción. Hay algunas razones por las que necesitamos usar los bucles il en el juego, que en realidad romperán el juego si no lo hacen. Por ejemplo, tenemos alguna mecánica de rompejuegos, como, por ejemplo, nuestra llave ahora mismo, queremos estar 100% seguros de que está cayendo. No caerá fuera del mapa, no caerá en ningún otro lado , caerá, y podremos recogerlo. Nuestro sistema realmente no cubre esto, pero es una excepción que podríamos usar un bucle wile para estos cálculos Encuentro el lugar correcto. Tenemos que redefinir nuestras reglas, si esto está tardando mucho, si esto es pzing nuestro juego, si esto está haciendo algunas otras cosas porque si no lo hiciéramos, rompería el Ahora, por supuesto, hay otras razones para usar bucles dentro de la jugabilidad. Algunos más avanzados serían asignar recursos, memoria, y pero en términos generales, los mecanismos de ruptura de juegos podrían usar bucles para asegurarse del resultado. Oh, lo que vamos a hacer ahora mismo es crear una variable de tipo vector, que creo que no hemos creado una antes. Este es un vector de tres puntos, tres enteros, y vamos a nombrar esta ubicación get Recuerda, esto se ejecuta en cada artículo. Cuando se genera un elemento, este código se ejecutará Vamos a buscarlo por cada ubicación objetivo. Es igual a cero, que es nuestra variable predeterminada original. Esta será nuestra condición para un bucle salvaje. Voy a conectar esto aquí. Ahora, la segunda variable que vamos a crear es nuestra variable is, que va a ser del tipo integer. No necesitamos pedirlo como condición porque internamente en el bucle corporal, cambiaremos en función de la ubicación objetivo, por lo que romperá nuestro bucle. No. Lo primero que hace el cuerpo es sumar 12 ts. Y ahora empezarán a comenzar las cosas complejas, un poco complejas. No es tan complejo. Vamos a lanzar un ritmo. Helling es importante. Sí. Pase y el. No es una carrera multiesfera, solo un rastro de esfera porque el primer calor queremos solo un resultado de calor. No queremos obtener una lista de ellos. No. El punto de partida. Vamos a conseguir la ubicación de nuestro actor. Y vamos a sumar a Z. digamos 200. Un poco alto, pero está bien. Pero ahora creamos este punto por aquí. Ahora, para nuestro objetivo, vamos a obtener un punto aleatorio en el cuadro delimitador. No. Porque como puedes ver, esta es una completamente diferente. Esto requiere navegación. Es como pudimos ver, estaba está en la navegación de pestañas, que está en la pestaña AI. No queremos esto en punto aleatorio en caja fundadora. Ahora, para su media talla, vamos a usar el doble de la talla 600. Es más grande. Pero esto podría tirarlo internamente a otras baldosas. Entonces usemos la mitad del tamaño de esos 300, cien un z. Y conseguimos un punto. Básicamente, obtenemos un punto en el suelo en este nivel. Ahora bien, si estamos aquí arriba, ¿cómo apuntamos ese punto? No, vamos a conseguir o o, que es una dirección hacia y vamos a multiplicar esto por nuestro rango. ¿Cuánto arriba, si somos x estamos empezando de aquí, cuanto arriba vamos? Porque si es una dirección desde un 0.1, entonces digamos que todo lo demás es cero, entonces esto significa en eje x, ir 0.1, multiplicado por número sería esa dirección. Eso muy lejos. Para ello, vamos a cambiar esto a un entero, y voy a multiplicar por un número positivo. Vamos a multiplicar por menos, digamos 500. Entonces, en vez de subir, vamos a bajar. Y si sumamos esto a este punto, conseguimos nuestro destino final hacia ese punto. Voy a conectar esto a n. Voy a establecer radio para digamos n. Así que es una bola un poco grande, no sólo una línea porque si vamos a golpear la caja, debemos conocerla un poco. Lo siguiente que necesitamos es en realidad, ¿qué vamos a golpear? No es eso si pegamos. Entonces no podemos poner una rama aquí, digamos, odiamos algo engendrarlo ahí Necesitamos saber si lo que calentamos es lo que queremos, que es el piso. Y haz esto, solo vamos a usar un remolcador en nuestro piso. Vamos a ir a nuestro piso, que es el azulejo BP, ir a la ventana gráfica, a seleccionar nuestro piso, ir a remolcadores, al remolcador, y vamos Ahora h. de vuelta otra vez. Ahora que agregamos el remolcador F. Volvamos a nuestro artículo. Comprobemos nuestro resultado de calor. Voy a romper esta estructura. Voy a ir al componente de calor y preguntar si tiene remolcador. Voy a poner una sucursal aquí. Y ahora, no es la única pregunta que queremos hacernos si es F, sino que queremos preguntar si nuestros intentos también son digamos, iguales a. Intentemos 30 veces. No conectar aquí. Ahora, va a ser si tiene F o las etiquetas están por encima de 30 o iguales a 30. Entonces vamos a establecer la ubicación objetivo a nuestro punto de impacto, que es el punto, el punto real de impacto. Y podríamos establecer la ubicación también realmente no importaría. Pero, ¿por qué no usar el punto de impacto? Ahora, sólo para una demostración, conecta esta condición. Simplemente conecta los 30 iguales a 30. Pase lo que pase, lo intenta 30 veces, y vamos a subir a nuestro juego y vamos a jugar. Vamos a expulsar el navegador de contenido. Vas a traer un artículo al mundo. Hazlo. Nuevamente, yendo artículo al mundo. Oh, por si acaso no estás viendo los spots fuera de cámara. Podría haber habilitado el sorteo el tipo de error. Entonces, necesitamos que esto sea persistente para ver las líneas. Ahora, podemos ver que esta en intentó 30 veces encontrar el piso a su alrededor. Pero esto es un poco demasiado cercano al artículo. Entonces vamos a aumentar el tamaño del buey, vamos a tirar cien, 600. Él otra vez. Vamos a traer otro artículo. Bien, ahora están un poco más esparcidos. Oye, duplica esto. Duplicando aquí y se mudó aquí. Al comenzar la jugada, se pueden ver los dos puntos pin diferentes. Creo que esto está bien. Tal vez podamos hacerlo un poco más grande porque el cofre está mojado la ubicación aquí. Cientos cientos. Oh, es demasiado grande. Yo traje esto muy lejos. Además, ves que van real por debajo del ítem. Esto en realidad se debe a que aumento el rango. Se honesto, solo quería mostrar un aumento de rango. Esto en realidad podría funcionar así. Sea estamos consiguiendo un punto para el artículo, y luego sólo vamos de aquí para allá. Entonces volvamos a jugar. Esto va demasiado lejos. Ese valor está muy lejos. Vamos a usar los 300. Creo que 300 estuvo bien o el 600 fue el 600 ¿ no? Trae esto aquí. Ahora fluye, el juego fluye. Bien, entonces sí necesitamos esto, en realidad, no tanto, lo necesito puesto, digamos 50 o sí, vamos a mantenerlo en 500. Y la razón es que la razón por la que el mío se apresuró es que esto no estaba funcionando. En realidad lo fue. Pero cuando llegó a los 30 tri, esto no era válido, eso no calentó nada porque vamos al dolor. Si partimos desde arriba, y vamos exactamente ahí. No quiere decir que estamos tocando ahí. Significa que llegamos ahí. Añadiendo a eso, esta es esta distancia B es mayor que esta, perdón. Esta distancia, 300. De aquí para llegar al piso. Necesitamos ese rango extra. Podría haber usado un poco la explicación, pero necesitamos el rango extra para llegar al piso porque estamos en una pendiente y porque necesita pasar por el piso para tocar el piso, no ir dat en el vamos a conectar esta bien y usemos el rango 600 en realidad. Creo que se veía mejor. Apenas una prueba más si aplasta, y la dejaré aquí. No creo que nunca digas nunca. Traigo esto aquí. No veo nada. Esto sigue moviéndose y yo me muevo, así que no se estrelló. Podría haber desactivado el artículo aquí está. Sí, apagué la línea de depuración. Oh. Vamos a intentarlo de nuevo. El ítem. Choque porque lo coloqué en medio del aire, para que no vuelva a llegar al piso. Si pudiera expulsar ahora mismo, verías que la clave está muy, muy lejos de la mazmorra Bien, vamos a parar aquí. Vamos a probarlo de nuevo en la siguiente. Adiós. Nos vemos entonces. 67. Animación de elementos de acabado con líneas de tiempo: Hola, y bienvenidos de nuevo al taller de diseño de juegos y motor R cinco procesales Dungeon action psy curso de creación En la lección anterior, demostramos la importancia de ir a bucles wile interminables e ilimitados y por qué deberíamos usarlos solo en la mecánica central Ahora, estoy tratando de depurar algo. Estoy tratando de mostrar algunas cosas de una manera muy larga, como agregar elementos como este en tiempo de ejecución, y sobre todo cuando empiezan con un wi loop es una muy mala idea. Um, exceso de confianza, tal vez. Pero sí, pueden pasar muchas cosas. Entonces si voy a jugar otra vez, hagámoslo más profesión, y voy a ir al lado del piso. Voy a traer el artículo aquí. Las líneas realmente tocarán el piso. Encontremos nuestra gota. Sin artículos. Tráelo aquí, y no encendí las líneas de las bolsas. Dave, porque cuando te estás estrellando, estás perdiendo tu trabajo Además, cuando estás chocando, necesitas controlar eliminar y encabezar el proyecto todos modos cerca de esto él hizo una línea, pero realmente no podemos decir, así que te esperaba mucho. Sí. Creo que está bien. Vamos a parar. Volvamos a nuestro artículo. Este es el widget. Artículo. Encontramos un punto para dejar caer nuestra clave para dejar caer nuestro artículo, cualquier artículo. ¿Cuál es el siguiente? Lo siguiente debería ser hacer visible nuestro artículo porque seamos honestos, un artículo sentado ahí hasta que encuentre a donde va, luego solo hace una animación y va a un lugar no es realmente guapo porque digamos que los 30 ts podrían tardar no medio segundo, sino 0.1 de segundo. Oh ojo va a atrapar eso, veremos el artículo que están sentados y luego de repente moviéndose. Así que vamos a hacer que nuestro elemento sea visible y vaya oculto en el juego, entonces es verdad. Esto está en la malla del artículo. Y después de nuestro bucle i, vamos a crear un evento personalizado. Hagámoslo donde más. Animar artículo. Así llamaremos a este evento. Porque ahora vamos a tocar la animación. Incompleto. Para animar el artículo. Y lo primero que vamos a hacer es hacer visible nuestro desorden. Visible. Dejemos entonces falso. Lo siguiente que necesitamos es almacenar nuestra ubicación original de actor, así que vamos a conseguir actor. Vamos a promocionarlo a una variedad. Yo lo llamo original porque tenemos que ir a animar de aquí para allá Esto es de aquí. Ahora, todo lo que tenemos que hacer es agregar la línea de tiempo. Ahora, vamos a conectarlo para pagar desde el principio. Vamos a ir en nuestra línea de tiempo, crear un camión de flujo. Vamos a necesitar puntos. Si el ick. El primer punto sería cero valor cero. El segundo punto sería 0.25 y uno. Uno. El tercer punto sería 0.5 a ayunar. Creo que está bien. El valor sería en realidad cero, así que volvemos a la base del suelo. Y este sería nuestro movimiento. Seamos un poco mejor. Ahora, debido a que había seleccionado este, estaba tratando de encajar solo esto con el pre del anterior porque presioné el Zoom vertical también. Cuando hayamos seleccionado algunos puntos y presionemos este Zoom pzonal a vertical, intentará hacer los puntos que tenemos más el anterior Ahora, vamos a seleccionarlos a todos en realidad. Haga clic derecho. Eso es a auto. W para dar click en la parte superior. A lo mejor hacer la c un poco más así. El primero también. Eso está bien. Si va un poco más alto de lo que vamos a calcular. Ahora bien, lo que queremos es hasta este punto que el ítem esté subiendo recto hacia arriba, y luego yendo hacia la dirección en la que queremos hacer esto. Necesitamos eso de vuelta para catión. Para mover al actor, no sólo la malla de artículo, y esto va a estar a la fecha. Entonces queremos dejar que Vector cree este movimiento. Entonces este es nuestro Alfa. Nombremos esto golpeado al movimiento este es nuestro movimiento Alfa. Dijimos, hasta el 50%, básicamente, porque es el 025, y esto lo sabemos Hasta el 50%, queremos subir así que si esto es menor a 0.5. Queremos ir en cierta dirección. O B, nuestro objetivo, tendría que cambiar. Entonces podemos poner un selecto aquí. La condición es que este ion es nuestro Alfa menos de la mitad. Si queremos subir, debería ser nuestra ubicación original. L. Digamos 200 de altura. Y si no lo es, entonces deberíamos ir al blanco. También vamos a conectar la ubicación objetivo. Ahora, pensemos esto por un momento. ¿Qué hace nuestro Alfa? Porque desde ahora, hemos usado 0-1 Pero ahora estamos usando 0-1 y nuevamente a cero. Esto quiere decir que cuando termine esta línea de tiempo, Alpha sería No Alpha s A. A sería el último punto sería el final de este leerp, porque este Alfa volverá a cero Entonces no queremos esto en B. En realidad lo queremos en A porque nuestro objetivo es en realidad A. Así que este tiene que cambiar también. Esta sería nuestra B real desde abajo del 50%. Vamos 0-1 0-1 sería el más 200. ¿Cuál sería el Alfa, el verdadero de menor que esto? Bueno, esa sería la ubicación original. Vamos a repasarlo una vez más. A Si estamos por debajo del 50% de Alfa, tenemos 0-1 pasar de A a B. Si está por debajo del 50%, pasamos del original a nuestra altura Si es después del 0.5%, vamos de B a A, esa sería nuestra altura, y yendo A, que sería nuestra ubicación objetivo. Ahora, espero que esto no haya sido demasiado confuso, pero así es como lo hice funcionar. Pero basta de eso, hagamos una cosa más aquí. Agreguemos otra pista de flujo. Esta vez, va a ser una pista de flujo muy simple. Además, la rueda del ratón no funciona realmente aquí porque se acerca y se acerca. Tienes que tener tu rueda del ratón aquí para que funcione, donde si ya la tienes aquí, simplemente puedes hacer clic y defraudarla. No. Esta va a ser una simple vía de flujo. Vamos a tener dos puntos a partir de cero valor cero. Vamos a ir a 0.5 valor uno, y no olvidemos usar nuestro último fotograma k porque ambos están en 0.5 0.51 Y lo que vamos a hacer es que vamos a seleccionar nuestros artículos. Vamos a poner su k a cero. Vamos a traerlo por aquí y poner tres D. Escala Mundial tres D. Recemos estas cosas. En realidad es un poco más allá. Estas dos líneas no son necesarias. Podemos leer aquí. Me sale una línea. Ahora en la nueva escala, vamos a dejar Vector. Creo que todos podemos ver a dónde va esto. Vamos a usar el camión nuevo para Alpha o B, vamos a poner 111. Oh, el artículo se hará más grande a medida que esté alcanzando su objetivo, y alcanzará su tamaño original. Entonces creo que esto sería para éste. Te voy a ver en la próxima. Adiós. 68. Mostrar widgets de artículos e inventario: Hola, y bienvenidos al Taller de Diseño de Juegos bajo motor cinco Curso de creación de RPG de acción Procesal Dungeon Curso de creación de RPG de acción Anteriormente, animamos nuestro elemento de caída básicamente. Entonces porque como se ejecuta en la jugada de inicio, correrá sobre gotas de mafia en gotas de pecho. O si las torres del Infierno también dejan caer algo, esta es la forma en que se van a dejar caer los artículos. Así que creamos un evento personalizado llamado elemento animado. Usamos la malla del artículo para establecerla no oculta porque comienza oculta. Almacenamos nuestra ubicación original. Hicimos algunos métodos raros que explicamos para establecer la ubicación. Y también escalamos la malla 0-1, así que se ve más grande a medida que sale del pecho Ahora, lo siguiente que debemos hacer es obtener nuestro widget. En realidad, esto podría suceder en dos tiempos diferentes. Podría suceder. Podría suceder después de que el artículo haya caído, por lo que podríamos usar terminado desde la línea de tiempo o antes. No, lo voy a hacer antes de que el artículo realmente haya caído porque así es como suele suceder especialmente en todos los juegos de Ablo. Básicamente, multijugador, no podías ver caer los artículos. Todos los estaban recogiendo en el aire. Entonces vamos a mantener esto de esa manera. Vamos a mostrar el widget en el momento en que inicia la animación, básicamente. Y de esa manera, iba a ser seleccionable desde el momento en que podamos hacer clic en el widget Creo que en Diablo, hasta los widgets están animados, pero no vamos a hacer eso. Vamos a llamar a este evento personalizado. Widget. Pero sí necesitamos llenar alguna información aquí. Pero antes que nada, llamemos a este show widget event. Vamos a ir aquí que estamos llamando elemento animado cuando esté terminado. Vamos a hacer una secuencia. Y el primero sería artículo animado. El segundo sería Mostrar widget. Oh. En primer lugar, vamos a conseguir nuestro widget. Así que consigue widget. Como decíamos, este es un contenedor y el contenedor, necesitamos obtener el widget, y luego tenemos que preguntar ¿ qué widget eres? Así que lanzan al mundo de los artículos. W mundo de dos elementos y ese texto. Para nuestro en texto, necesitamos nuestros datos de artículo. Necesitamos romper la estructura y conectar el nombre del elemento. Oh. Lo siguiente que necesitamos es algo para activar y desactivar nuestra visibilidad widgid Entonces voy a crear una función. Y llamémoslo rígido. Va a necesitar una entrada de y. Llamemos a esto. Y aquí dentro, voy a obtener la referencia del widget. Voy a visibilizar lo que sea que sea este pin. Excepto que necesito generar eventos de superposición. A lo que sea la visibilidad es otra vez, y en realidad llamar visibilidad así, pero recuerda. Además, necesitamos un final de colisión a un selecto aquí, y el selector será esto básicamente. Entonces es verdad. Solo necesitamos consulta. Si es falso, no necesitamos colisión. Por qué necesitamos hacer estos dos pasos porque incluso si un widget es invisible, porque existe la posibilidad de que sus ajustes de interacción sigan permitiendo eventos de entrada. Al decir esto, quiero decir, estoy apagando la visibilidad del componente del widget, pero los widgets en realidad tienen algunas otras configuraciones en visibilidad. Por ejemplo, si vamos aquí y establecemos visibilidad, se puede ver que tiene visible, colapsado, oculto y no comprobable por calor Esto significa que es visible y se puede comprobar por calor donde podría ser capaz de hacer clic en él. Entonces, ¿por qué no solo dejar que sea colisión, también para estar más seguro Podría ser un poco exagerado, donde seguro es una exageración, por mejor a salvo que No le agrega mucho en realidad hace que incluso haga menos cálculos. Y básicamente, incluso este actor podría, incluso invisible, en realidad podría recibir la entrada y enviarla al widget, por lo que el widget podría no ser ni siquiera responsable. De todas formas, hay muchas razones por las que a veces pones algún código extra solo para cubrir algunas bases adicionales. En lugar de buscar, qué ajuste habría estado apagado. A veces es mejor cerrar algunas configuraciones de raíz que buscar subconfiguraciones. Entonces me digrego. Volvamos a lo que estamos haciendo. Entonces estamos mostrando widgets, y ahora tenemos una manera de activar y desactivar nuestra visibilidad. Pero cuando queremos nuestra visibilidad dentro y fuera nuestros artículos en nuestro widget de artículos, o nosotros para nuestro proyecto. Lo que vamos a usar es nuestro mouse sobre eventos. Pero cuando estemos por encima de algo, le vamos a mandar un mensaje con el mouse sobre usted. Y cuando estamos enviando cuando estamos fuera de ese objeto, vamos a estar mandando un mensaje, A, solo nos dejó el ratón sobre ti. Y esta será una de nuestras formas hacer la visibilidad del widget. Así que el ratón se ciernen. Otra forma lo vamos a usar es que vamos a tener un botón. Vamos a tener la izquierda en. Pero cuando lo presionamos, mostramos todos los elementos que hay alrededor dentro de nuestra viewport Y la forma en que vamos a hacer esto es usando algo llamado despachador de eventos Ahora bien, cómo funcionan los despachos de eventos en un entorno rudo sería que enviaran un mensaje a todo, y si eso todo lo está escuchando, hará algo U Tal vez una de las cosas, es una de las formas más pesadas de comunicación de planos No se debe usar en cosas constantes. No se puede usar, pero sí, es lo más pesado de las comunicaciones de planos Dejémoslo ahí. No, ¿cómo hacemos esto? Vayamos a nuestro controlador porque ahora necesitamos ingresar al territorio de nuestro controlador. Así que carácter de arriba hacia abajo, carpeta de arriba hacia abajo, planos, y PP, controlador de arriba hacia abajo No. No vamos a estropearlo todavía. Lo que vamos a hacer es crear una entrada, que queda fuera. Y esto va a ser un insumo constante. No vamos a poner insumos mejorados en este proyecto. Y aquí abajo las funciones, macros y variables, tenemos los despachadores de eventos Vamos a hacer clic en despachador de eventos y quedarnos en artículos Tal vez. No, voy a compilar. Y necesito agregar a la entrada. Llamemos a esto uno elementos visibilidad. Y llamemos a otro Alt press. Esto va a ser un poco redundantemente presionado Alt. Nos vendría bien uno, pero hagámoslo con dos para que quede un poco más claro. Entonces, cuando estoy presionando Alt, quiero que todos los artículos se coman con los ojos. Así es como despachamos un evento. Creamos, hacemos nuestras entradas, y hacemos una llamada para ello cuando queremos en la línea de ejecución. Pero cuando se presiona, quiero elementos visibles y alt presionados, un copy paste es para liberar, y Descartar estos dos, que el a false Vamos a compilar y ahorrar. Vamos a cerrar el mando del juego. No lo vamos a necesitar para un futuro cercano. Lo podemos cerrar mucho. Podemos cerrar el menú principal. Y comencemos a cerrar esto. Ahora, lo que tenemos que hacer es obtener una referencia a nuestro despachador de eventos, para que podamos encontrarle algo Para obtener una referencia al mismo, necesitamos al actor, el objeto que lo contiene. Entonces voy a conseguir su controlador. Y voy a pedir al mando de arriba hacia abajo porque como nuestro modo de juego, nuestro controlador get pair es general, y queremos especificar a nuestra parte superior hacia abajo para obtener el despachador Bind event to go do we call it Hogle items. Evento a artículos togal, esto vinculará un evento a nuestro despacho Vamos a conectar esto aquí. Vamos a traerlo aquí, y vamos a crear un evento personalizado desde el nodo de evento del enlace. Llamemos a esto ítems. O artículos togal mente. No importa. Conectemos esto aquí. Conectemos la visibilidad aquí, y vamos a promoverla a una variable. Donnie que en algunas cosas ya lleva el nombre de nosotros. Bueno, hagamos espacio porque estamos muy cerca el uno del otro. Cuando comenzamos a jugar, estamos ejecutando el elemento animado, y estamos mostrando el widget configurando su texto y vinculando el show u hide en Alt Lo siguiente que tenemos que hacer es el ho y hover se une. Bueno, no se une. Lo que realmente usamos son algunas funciones adicionales en nuestras comunicaciones de artículos P I. Oh, voy a añadir una función extra. Voy a llamar a esto inicio. Terminado. Voy a dar una llamada más y otra vez. Volvamos a nuestro artículo. L et's vaya a nuestra interfaz, haga clic en end hover, haga doble clic en start hover Tenemos estos dos. Esto sería fácil. Vamos a conseguir visibilidad con la visibilidad a true, conseguir visibilidad a false. Ahora bien, ¿por qué la prensa alternativa era redundante? El motivo es que realmente no lo necesitamos para cambiar el final hover para preguntar si Alt está abajo, y si no está abajo, y apagar la visibilidad. Porque no queremos en Ed hover cuando tenemos presionado Alt para detener la visibilidad. Y la otra forma de hacerlo, que en realidad es mejor sería conseguir controlador del jugador y preguntar es entrada abajo. Y aquí podemos seleccionar alt o tener nuestra información clave personalizada, lo que vencería el propósito de tener esta pulsación alt. En fin, eso sería para éste. Te voy a ver en la siguiente. Adiós. 69. Recoge artículos y agrégalos al inventario: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Motor real cinco Curso de creación de Arbis de Acción de Mazmorra Procesal Anteriormente, terminamos con la creación de nuestros eventos show widget. Agregamos el texto a nuestro widget, que es el nombre de nuestro artículo. También vinculamos un evento de nuestro controlador de juego, un despachador de eventos, que explicamos cómo funciona Y creamos la función de visibilidad del widget que también totaliza la colisión del componente widget de y luego creamos el evento hover start y hover end y los codificamos con la Y al final del evento, usamos la tecla de entrada este hacia abajo para verificar si nuestro alt está abajo, así que cuando estamos flotando un elemento y terminando el hover, no desaparece Ahora continuemos con nuestro otro evento de interfaz, que es el de interactuar. Oh, voy a acercarlo al principio. Habitación. No necesitas estos dos. Todo bien. Entonces, lo primero que haré ahora mismo antes de comenzar a crear toda la cadena de eventos, lo que tenemos que hacer y comenzar a jugar, obtener nuestros widgets, obtener widgets de nuestro componente widget. Y echemos a item wt a pure cast. Y vamos a conseguir botón. No lo tenemos porque aún no lo he convertido en una variable. Entonces vamos a ir a nuestro widget. Vamos a seleccionar nuestro botón, y el botón 31 se va a llamar botón item, y vamos a convertirlo en una variable. Ahora, puedo llamarlo dentro del ítem. Botón Obtener artículo. Y nos vamos a unir. Entonces, si estamos haciendo clic en nuestro widget, estamos haciendo en realidad el acto de intell del evento Incluso si se trata de una interfaz de blueprint, todavía tiene este delegado de salida que podemos conectar a nuestro enlace Ahora bien, la primera pregunta debería ser, ¿estamos en rango capaces de escoger? Y esto estaría interactuando. Vamos a promoverlo a variable. Y cuando sea cierto, vamos a establecer la interacción en true. A lo mejor hacer un poco más de espacio. Tal vez tomando esto más arriba, puedes quedarte sin espacio en un espacio sin fin. Siempre increíble. Ahora, vamos a necesitar ejecutar una función sobre nuestro estado de ánimo de juego. Pero ahora no vamos a llenar completamente esta función. Así que vayamos a nuestro Holder de arriba hacia abajo. Vayamos a nuestros planos de carpetas y lleguemos a nuestros estados de ánimo de juego Vamos a crear una función, todo el inventario, y va a tener una entrada de un nombre. Reclamar, y la salida sería un Ben, que sería escogido. Por ejemplo, si lo escogimos o no. Vamos a dejarlo como está cuando estemos haciendo el inventario, vamos a empezar a llenar esto. Bueno, volvamos a nuestro artículo y desde nuestro set interactuando, vamos al anuncio necesitamos el gad en cuanto a GM Al GM del modo de juego abajo. Vamos a convertirnos a puro reparto. Y vamos a sumar al inventario. Ahora, para el nombre sin procesar, vamos a usar nuestro nombre en bruto. Y después, vamos a sucursal en base a si elegimos el artículo o no. Empecemos con el. Oh, ¿qué va a pasar cuando no vamos a recoger un artículo? Vamos a volver a reproducir una animación, vamos a sumar on line. Vamos a entrar en esta línea de tiempo, y vamos a crear una pista de flujo. Las variables. El primero sería 00. El segundo sería 0.27, digamos esta vez, y esta sería uno, y el tercero sería 0.6, eso sería cero otra vez Ahora, ¿por qué más tiempo que la línea de tiempo anterior? Porque Ya que no hemos podido recoger el artículo. Deberíamos indicarle al jugador que no es un objeto nuevo, si acaso matamos algo. No lo sé. Elección de diseño, considere la elección de diseño. Considero que debería tener una animación más larga porque no se recoge, es algo para indicarle al jugador, esto no es habitual. Cuando estás dejando caer artículos constantemente y de repente no puedes recoger algo no debería ser la animación habitual que ves, incluso un poco de tiempo de más tiempo creo que crearía un impacto. Ahora bien, el movimiento sería muy fácil de hacer. Vamos a esa ubicación. Vamos a alertar vector. Yo uso esta nueva pista para Alpha y nuestra Esta ubicación final no debería estar ahí. Nuestra ubicación objetivo sería el Alfa, la A y la ubicación objetivo más. Como, digamos 150, sería RB. Desde donde estamos, vamos subiendo y luego bajamos. Y cuando esto termine, vamos a girar interactuando. Ahora bien, si es cierto, si recogimos el artículo, sólo vamos a actor bajo. Y eso sería. Y con esto concluye nuestro código para nuestros artículos. Este es todo el código para los artículos. Ahora, podríamos comenzar con el inventario, pero sí necesitamos hacer un poco de pre-trabajo iniciar el inventario en nuestro modo de juego. Entonces, cuando estamos ejecutando el inventario de R dos, que ahora hago clic para meterme en el modo de juego, necesitamos tener algunas variables listas. Una de estas variables sería nuestro nivel gon. Nivel generador nivel mazmorra. Sí. Va a ser de tipo entero. Para llenar este nivel tangente, vamos a ir a nuestro generador y vamos a ir en nuestro inicio de juego y donde establecemos el modo de juego Mueve este pedacito aquí. Y vamos a establecer el nivel de dangon a nuestro nivel generador Tráelo por aquí, conectando. Ahora. Lo siguiente que necesitamos. Es errante porque no compiló. Ya terminamos con los ítems, compilar la tabla. Voy a cerrar algunas tinas. Hay muchos apoyos. Ya no necesitamos esto. En fin, ahora puedo ver. Entonces estamos buscando el juego viejo. Aquí estamos. Ahora, la siguiente variable que necesitamos, va a ser de un mapa, básicamente. Con el primero hagámoslo un mapa. La primera clave sería el nombre, lo que significa nuestro ítem. Y el segundo sería entero, que va a ser la cantidad. Voy a nombrar esta variable. Capas. B no necesitamos guardar nada más para nuestros artículos. Solo necesitamos saber qué artículo es y ¿cuántos de ese artículo tengo? Ahora, estamos listos para llenar esta función que vamos a hacer en la siguiente lección. Adiós por ahora. Te canta en la siguiente. 70. Contador de monedas y widget de recogida: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, y al curso de creación de ARPs de acción de 95 Procesal Dungeon Anteriormente, terminamos con nuestro artículo BP. Terminamos nuestro evento de interacción que lo vinculamos también en nuestro click de nuestro Widget Wood Item World. Ahora, cuando estamos interactuando, estamos preguntando si somos capaces de escoger si estamos en el rango y si ya estamos interactuando. Si no estamos interactuando, estamos configurando la interacción verdadera. Estamos agregando nuestro artículo al inventor. Estamos tratando de agregar el artículo al inventario porque tenemos nuestro valor de devolución de elegido. Entonces, en base a eso, si no podíamos elegir el artículo, jugamos una animación, y si lo hacemos, destruimos a nuestro actor. Ahora, después, pasamos a nuestro modo de juego y almacenamos el nivel de la mazmorra a través de nuestro generador Maze Vamos a compilar esto en realidad. Y almacenamos el nivel de mazmorra en la jugada de inicio, y creamos un inventario de variables, que es un mapa de nombres y enteros, nombres para la fila de la tabla de datos y enteros para ¿ cuántos Sigamos llenando nuestro anuncio al inventario. Lo que necesitamos primero es nuestra tabla de datos. Entonces vamos a obtener datos. Y para su propio nombre, vamos a conectarlo a w name. Para la tabla de datos, vamos a usar nuestros ítems DT, y para nuestra fila de salida, vamos a promover esto para la variable local. Vamos a llamarlo Data. Ahora, vamos a romper esta theta. Y vamos a hacer una pregunta sencilla. Es aplicable este artículo, ¿puedo agregarlo al inventario? Si no puedo agregarlo al inventario, significa que es oro porque es nuestro único artículo que no se agrega al inventario. Esto significa que necesitamos calcular cuántas monedas vamos a estar agregando. No. Lo primero que tenemos que decidir es cuántas monedas vamos a agregar. Oh, vamos a conseguir nuestro nivel de mazmorra. Vamos a conseguir un rango aleatorio. Voy a empezar con uno y nivel de mazmorra más uno. No vamos a usar las monedas en realidad en este juego. Lo que podríamos hacer es que podrías hacer si quieres, es crear tal vez una actualización de una tienda y engendrarla en algún lugar o hacer estallar una interfaz de usuario entre niveles y elegir algunas mejoras y gastando estas monedas Ahora, vamos a promover esta variable. Vamos a nombrar monedas, y vamos a conectarlo a caídas. Lo siguiente que tenemos que hacer es cuando tenemos nuestro widget para actualizarlo. No, comencemos a crear nuestro widget de juego. Vamos a ir a I. Vamos a hacer clic y seleccionar la interfaz de usuario, blueprint widget, er widget, y vamos a llamarlo W G, jugabilidad Voy a abrirla. Voy a atraparlo por aquí. Lo primero que voy a añadir es un Canvas. L et me acercan un segundo. Ahora, para nuestra interfaz de usuario de monedas, lo que representará nuestras monedas será una caja horizontal. Y dentro de esta caja horizontal, vamos a agregar un Y el texto. La imagen sería para nuestra imagen de bolsa, y nuestro texto estaría sobre cuántas monedas tenemos. Vamos a seleccionarlos ambos y establecer ambos para rellenar con la diferencia de que el texto debe estar alineado en alineación central horizontalmente y alineación de centavo verticalmente. Para nuestra imagen, seleccionemos la bolsa. Déjalo un poco más. ¿Correcto? Ahora, hagamos esto un poco más grande. Donde esa se ve nuestra imagen y no sale mucho. Creo que este alfiler. Seleccionemos nuestro bloque de texto, ponle 30. A fo, ¿puede caber cuatro? Sí, cuatro dígitos está bien. Incluso cinco dígitos está bien. Vamos a sólo tres dígitos. Ahora usemos los anclajes para anclarlo por aquí. Podríamos cambiarlo después en comparación con el resto de la interfaz de usuario, pero ahora mismo, la tenemos aquí. Y hagamos del bloque de texto una variable. Vamos a llamarlo puntos. Ahora, volvamos al juego. Y en realidad necesitamos generar este widget. Entonces iremos a Even graph como hicimos en los widgets anteriores. Vamos a crear un evento para clientes. Vamos a llamarlo show game play. Vamos a crear widget. Vamos a elegir el Gameplay. Poseer jugador es un controlador de jugador. Vamos a promoverlo como una variable. Vamos a llamarlo jugabilidad W. Y vamos a agregarlo a viewport. Ahora, volvamos para agregar al inventario y obtener nuestra referencia de juego de WG y obtener nuestro texto de puntos Vamos a establecer el texto. Para el texto, vamos a usar las monedas. Nuestro siguiente paso ahora mismo es nuevamente indicar que nuestro jugador recogió algo. Nuevamente, vamos a necesitar un widget. Vamos a utilizar de nuevo el widget de jugabilidad para esto. Lo que vamos a hacer es duplicar esta bola horizontal, pero no dentro de ella, para enraizarla en el Lienzo. Y voy a hacerlo alrededor de la talla. Son aproximadamente del mismo tamaño. Y voy a colocarlo por aquí. Voy a ponerle unas anclas alrededor. Se pueden poner las anclas afuera, así que aquí. Lo que voy a hacer es que voy a revertir esto. Cambia esto de 000 a escogido a puntos. Esto es un poco grande. A lo mejor necesitamos un formato o tamaño más bajo. Ocho. 28 encaja muy bien, y vamos a animar esto Ahora, para animar, vamos a ir a animaciones. Como pueden ver, la tengo seleccionada, la caja vertical, no algo dentro de ella. Voy a presionar más dos animaciones. Voy a llamar a este ítem, y voy a seleccionarlo, ir a rastrear. Debido a que he seleccionado esto, en realidad puedo seleccionarlo como un elemento. Oh, voy a seleccionar el cuadro horizontal. Y voy a presionar plus y se transforma de nuevo, y ahora puedo manipular su transformación con el tiempo. Entonces en cero, cero, vamos a empezar aquí. Digamos que en medio segundo, voy a mover mi barra a medio segundo. Quiero haber movido la traducción x aquí arriba al 61, Vamos a rodearlo hasta. Voy a mantener esta ubicación hasta digamos 0.8. Voy a colocar este vaso por aquí, y esto agregará otra marca. A lo mejor 0.8 también lo es. Pongámoslo en uno. Cambia esto. Yo solo voy a arrastrar esto, y voy a arrastrar también esto necesitas arrastrar esta primera acción. Nosotros sólo hemos arrastrado el punto y lo lograría. Yo los dejaría caer a los dos. Ahora, después, necesito agregar otro valor realmente aquí en uno, que sería nuestro eje y. Hasta 1.5, quiero que esto se baje. Cuánto Mucho más. Digamos aquí, realmente no importa porque también lo vamos a desvanecer. Pero dejémoslo aquí, digamos 60. Ahora quiero agregar una pista pa. Cuando esto va a bajar, esta parte de tal vez mole point bien. 0.9. F 0.9, quiero agregar una nueva pista, que sería renderizar opacidad Pasaremos de 120. Así es como animamos nuestro widget. Pero queremos que esto esté jugando siempre que estemos recogiendo algo. Para eso, vamos a necesitar una función. Pero vamos a continuar con esto en la siguiente lección. Adiós por ahora. Nos vemos entonces. 71. Fijación de la funcionalidad del contador de monedas: Y bienvenidos al taller de diseño de juegos y motor real cinco llamadas de creación de acciones de mazmorra procesales BZ Anteriormente, comenzamos a crear nuestro anuncio para inventariar en nuestra función de modo juego. Entonces, usamos la tabla de datos para obtener nuestro temporal del nombre de la fila que es entrante, que proviene de nuestro elemento BP. Ahora, empezamos con una sucursal cuestionando si se trata un artículo que se está agregando al inventario, ¿ o simplemente es aplicable en nuestro caso oro? Ya que es el único pable que tenemos, y creamos algún código para aleatizar cuántas monedas obtenemos Y establecemos ese valor en nuestro widget, lo que en realidad es incorrecto porque necesitamos una variable de monedas totales para agregar a nuestro widget de juego, no la temporal la que estamos obteniendo. Entonces, vamos a promover esta variable. Conviértalo en monedas totales. Y nosotros conectamos esto. Voy a desconectar esto, y voy a conseguir las monedas temporales, y añadirlas al total de monedas. Voy a establecer este valor en monedas totales. Y luego voy a usar monedas totales para agregar al widget. Podríamos haber usado esta parte para la siguiente parte que diseñamos. También creamos el widget de jugabilidad. Y en el widget de jugabilidad, donde establecemos el total de monedas, está este valor por aquí, este texto por aquí, que dice nuestras monedas totales. Ahora, y tiene este icono de bolsa. Entonces seguimos adelante y copiamos pegamos este widget por aquí, invertimos el orden de estos dos, y pusimos nombre a las monedas, dejamos que digan escogido Añadimos un icono. Ahora bien, si agregamos un número aquí, escogimos y un número, y luego el icono, podríamos haber usado nuestra variable de monedas por aquí para decir cuántas monedas recogimos. Pero como estamos usando solo una imagen, está bien. No vamos a usar esa variable para eso. Sólo lo vamos a estar usando para agregarlo al total de monedas. Ahora, para continuar con esta función. Lo siguiente que vamos a necesitar, que va a ser común en la rama verdadera y la rama falsa es actualizar para mostrarle al jugador que recogimos algo. Y creamos la animación en la pestaña de animación. Nosotros como que trabajamos un poco rápido aquí. Entonces esta es la parte que sostiene las animaciones para los que son nuevos. Y cuando hacemos clic en una animación, obtenemos sus camiones, que los elementos vamos a estar animando Y esto de aquí es el paso del tiempo, y fijamos lo que queremos que esté sucediendo en cada camión en cada elemento que queramos, en la categoría específica que queremos. Aquí hay un montón de categorías. Lejos. Entonces, animamos esto, pero para jugarlo, necesitábamos la función. No necesitamos una función. Crearíamos un evento personalizado o lo ejecutaríamos incluso desde otro lugar. Pero, ¿por qué no hacer nuestra vida un poco más fácil y tenerla en una función a la que podamos llamar con algunas entradas Luego programando una y otra vez cuando sea necesario. Oh, vamos a crear una nueva función. Llamemos a este ítem de función. Pickup. Y dibujemos desde la línea de ejecución, y ellos tocan animación. Necesitamos especificar una animación. Si hago clic aquí, no veremos ninguno porque están en esta pestaña por aquí, pick and pick. Ve a conseguir esta animación, C conectado aquí. Y una cosa más tenemos que hacer antes de tocar la animación, porque ésta es prácticamente. Así es como jugamos una animación. Vaya a la tina de diseño, seleccione la imagen, nuestra imagen del artículo aquí y el conjunto es variable. Llamemos a esta imagen del ítem, y volvamos a graficar nuestra función, obtener esta imagen del ítem, y apresurarnos de la textura. No necesitamos hacer clic mucho en el tamaño porque queríamos mantenernos en el tamaño que queremos. Y esto, nuestra textura que necesitamos es ser pero va a ser la variable de entrada. Voy a conectarlo aquí. Voy a crear la variable de textura aquí para nosotros. Voy a compilar y guardar, y volvamos a nuestro juego de top town. Vamos a conseguir nuestra referencia de Wood you game play. Voy a decir recogida de artículos. Vamos a conectarlo aquí. Y para la textura, necesitamos un poco más de espacio. Vamos a obtener nuestros datos t term, que son los datos del ítem que almacenamos al principio. Voy a dividir esto y obtener nuestra imagen de inventario y agregarla para recoger artículo. Ahora, cuando se reproduzca la animación, va a tener la imagen apropiada de cada elemento. Ahora continuemos con nuestra siguiente parte, la verdadera rama si el artículo es seleccionable, entonces es seleccionable. Podemos ponerlo en el inventario. La primera pregunta debería ser, vamos a obtener nuestro inventario aquí. ¿Existe en nuestro inventario? Entonces voy a preguntar si pinta como lo hicimos tantas veces con la Mazmorra Y lo que va a estar conteniendo es el nombre crudo que estamos ingresando Así que el nombre de la fila aquí. Sí. Pero yo uso un montón. Que aquí se vean un poco mejor. Ahora, comencemos con una sucursal que no contenga en el inventario. Y la siguiente pregunta que debemos hacer es que nuestro artículo ¿está lleno nuestro inventario? Para nuestro inventario, contaremos con cuatro ranuras. Entonces voy a copiar esta sucursal, y voy a preguntar si la longitud del inventario es igual o menor o menor o igual a tres. Si son tres, todavía podemos agregar uno más. Si son cuatro, entonces va a ir en falso. Aquí en falso, va a ser muy fácil de completar. Solo vamos a obtener nuestro nodo de retorno, y decir que el artículo no es elegido, reproducirá nuestra animación. El artículo no ha sido recogido. Ahora, si es cierto, sólo vamos a conseguir nuestro inventario. Vamos a agregar nuestro artículo, que sería el nombre de la fila. Y sí tenemos de lo temporal saquemos esto. Nuestros datos temporales. Tenemos la cantidad. El siguiente paso otra vez, debería ser la recogida del artículo. Voy a conectar esto. Aquí, voy a traer esto aquí. Creo que está bien. Sigamos con la verdadera rama si ya está contenida. No, vamos a preguntar si el artículo es estable. Voy a traer esto que por aquí. Porque si no es estable, entonces no tiene sentido recogerlo. Entonces vamos a traer esto por aquí. Y nuevamente, el nodo de retorno dirá no recogido, por lo que el artículo rebotará. Estamos llenos de este ítem. Ya no lo queremos. Podríamos quererlo, pero podría ser un solo artículo en stock. ¿Qué podemos hacer? Oh, qué pasa si lo es, y sí tenemos algunos de ellos en el inventario. Vamos a conseguir el inventario porque eso es a lo que nos enfrentamos. Vamos a encontrar el nombre de nuestra fila. Cual es nuestro artículo. A partir de eso, vamos a promover nuestra variable local, llamar a esta viable, costilla, nombres terribles. Parece ser un tema en este caballo. Cuando trabajas con más gente que loo, cada nombre debería describir para qué sirve básicamente. Siempre debe haber actualizaciones sobre las variables sobre lo que se creó y todo. Es un buen equilibrio, no exagerar. De todas formas, así que ahora vamos a obtener los datos de nuestra tienda, cantidad. Bueno, en realidad, el monto del artículo, ves datos de Tem, confundirme. El monto del artículo de nuestros datos Tem, así que vamos a aceptar más. Vamos a agregar esta variable tem a estos datos temporales, y vamos a agregar nuestro mapa de nuestro inventario. Su propio nombre. No lo volveré a agregar. Sólo voy a actualizarlo, y la suma de esta adición. Lo siguiente que debemos hacer es recoger artículos. Pero debería haber un paso entre esto y la recolección de artículos que ninguna de estas acciones necesita. En realidad, esta acción también necesita porque estamos agregando al inventario algo nuevo, que es actualizar la parte visual del inventario. Oh, vamos a crear nuestro inventario en la siguiente lección, y esto sería para esta. Te voy a ver entonces. Adiós. 72. Inventario de visuales en el juego: O Hola, y bienvenidos a ganar taller de diseño, y real Engine five, Dungeon procedimental, RPG de acción, curso de creación Anteriormente, continuamos nuestra función de agregar al inventario. Arreglamos nuestras monedas y variable de puntos totales que se necesitaban, y continuamos creando una función para la recolección del artículo. Creamos una entrada de textura. Establecimos el pincel en la imagen de nuestro artículo a partir del pincel que ingresa de nuestro artículo desde la textura de nuestro artículo, y jugamos la animación. Ahora, seguimos verificando la verdadera sucursal, algunas reglas y condiciones aquí, si ya está contenida, si nuestro inventario está lleno o no. Cuando las condiciones no aplican, volvemos con false, cuando las condiciones aplican, agregamos a nuestro array o cambiando nuestro monto. Nuevamente, con solo agregar porque se actualiza, ya que es un mapa, y luego seguimos jugando la recolección del artículo. Ahora, una mejor versión de recolección de artículos sería tenerlo en un widget separado y mientras se reproduce, repente desaparece y genera uno nuevo cuando estás recogiendo con demasiada frecuencia O otra actualización. Ese podría ser un código mucho más detallado con reglas y todo y creando cosas, creando entidades básicamente. Pero ahora es nuestro momento de crear un pequeño inventario. Entonces, voy a usar otra vez una caja horizontal. Voy a colocarlo justo por aquí. En realidad. Vamos a traerlo aquí. Entonces voy a traer podemos usar los presets, siempre más fáciles Y esta vez vamos a dimensionar esto correctamente. Va a ser inventario. Va a ser más detallado. Oh, para la talla X vamos a elegir cien, o la talla ingenio elige 150. Y para colocación, elijamos O. 50 e Y O -100 Porque creo que este es un buen lugar para optar por el inventario en nuestra pantalla. Por supuesto, vamos a animarlo también. Ir a ser una animación muy sencilla. Vamos a las animaciones. Agreguemos un camión. Llamemos a este inventor. Yo de palabra, y entrar. Vamos a crear una pista a esta caja horizontal. Puedo seleccionarlo así porque lo tengo seleccionado. Si te estás confundiendo, cuál es cuál, siempre podemos cambiarles el nombre. Ya sabes cuando va a ser el. Caja horizontal, y esta sería la caja horizontal de monedas. Esta sería la caja horizontal de inventario. Volvamos a nuestras animaciones. Podemos ver que tenemos la correcta, y vamos a agregar una camioneta, que va a ser transformada. Lo que vamos a hacer es el primero el primero el primer segundo, va a estar en la acción de cero segundos. Va a estar en X cero. Digamos un tiempo de la p. cinco. P 0.5 estaría genial. Esto sería 900, creo, -900. Y lo trae por aquí. Creo que esto ya está bastante bien. Yo está muy lejos. No estoy segura. Creo que es un buen lugar. Puedes colocarlo donde quieras, pero para nosotros, ahora esto servirá. Ahora, para la parte interna, restablecemos la animación, seleccione nuestro cuadro horizontal de inventario. Agreguemos cuatro botones. Uno, dos, tres, cuatro. Vamos a nombrarlos también. ¿Por qué no? El B n uno. Y vamos uno con n dos. Tres, y cuatro. Ahora, vamos a seleccionarlos a todos, y vamos a ponerlos a fiel. Vamos a seleccionar el primero para configurarlo estilo, y luego vamos a copiar esta base a los otros botones. O nuestra imagen. Vayamos a nuestras texturas. Y tenemos sí este artículo marco uno. Dejemos el tinte S el cuadrado está fino. Tinte para el normal , dejémoslo como. F el hover uno, también copiemos probar la imagen. Entonces, para el encubierto , vamos a seleccionar un tinte amarillento, y luego vamos a pegar de nuevo la imagen Para el prensado, seleccionemos un tinte verdoso. Todo bien. Y ahora vamos a copiar pegar esta pila, copiar, seleccionar el botón, pegar y pegar. Último botón, pegar. Ahora tenemos algunas imágenes. Ahora, por dentro de los botones, usemos una caja de báscula ops y pongamos dentro del botón ide, es un hijo del botón. En el cuadro de escala, voy a usar una superposición En esta superposición, vamos a tener una imagen y un texto. Ahora, muy rápido por qué estamos usando cada parte. Imagen, necesitamos para la imagen del artículo. Texto, necesitamos para la cantidad, y superposición, necesitábamos que la ma estuviera detrás y el texto al frente. No, que en realidad está hecho. Yo solo estoy es lo contrario. Necesito tener el texto anterior, creo. Debería tener el texto. Esta imagen en déjame cambiarla por un segundo. Eligió el texto. Sí, es por cobrar. Entonces el texto debería ser el segundo objeto dentro de la superposición. La caja de báscula, estamos usando la caja de báscula por casualidad, nuestras imágenes son grandes en la caja o para hacer lo que hace una caja de báscula, se ajusta al interior del contenedor que se está alimentando. Lo escala para que se ajuste al contenedor. Así que vamos a copiar y pegar la caja de escala con sus hijos a todos los botones. En realidad, arreglemos el primero, voy a borrar el pegado Arreglar primero visualmente porque si arreglamos los visuales, luego copiamos pegando, también tendrá los mismos Así que vamos a establecer superposición para llenar todo, y vamos a establecer el cuadro de escala. También ya está lleno. Entonces vamos a configurar la imagen para que llene todo, y el texto va a estar abajo a la derecha. Entonces vamos a seleccionar una opción más aquí abajo, que es la justificación donde el texto comienza y termina para estar en medio. Y queremos, por supuesto, que el texto sea cero por ahora. Y claro, deberíamos cambiar el teléfono a algo realmente más pequeño. El ocho no tan grande, no llega hasta la cima. Creo que esa es una buena proporción para el número. Para la imagen, vayamos a nuestras texturas. Y creo que es gracioso creo que es gracioso, se ve amable bien. Si selecciono el CGL o incluso la textura HP, la primera textura, parece que está bloqueada o algo así De todas formas, puedes elegir algo que se sienta. Pero hay algunas reglas especiales. Verás, tenemos un espaciado alrededor de nuestras texturas. Por lo que se llena muy bien con el fondo. Por ejemplo, si traigo la poción roja, se puede ver que se llena correctamente, mientras que si traigo digamos esto aquí o aquí, esconde el fondo Entonces voy a tal vez la porción de salud está bien. Esto también es genial, pero los jugadores pensarán que aquí hay algo para hacer clic, e intentarán hacer click. Bueno, esto parece más como que está cerrado. En fin, voy a seleccionar esto. Te voy a copiar ahora nuestro cuadro de báscula porque hemos establecido los atributos, voy a pegarlo. Voy a pegarlo también en tres, número cuatro. Ahora, seleccionemos en todas estas imágenes y hagamos de ellas una variable. En realidad, sí necesitamos nombrarlos. N uno, dos, tres, la capital desde que empecé con mayúsculas. Cuatro. Ahora, lo siguiente que vamos a necesitar es ir a nuestra gráfica y crear una nueva función a la que vamos a llamar update. Y claro, va a necesitar una entrada, y va a ser nombre, y va a ser un mapa. La segunda variable va a ser un entero porque ese es nuestro inventario. Inventario. Creo que este es el cierre, solo necesitamos lo siguiente que tenemos que hacer es ir a nuestro modo de juego de arriba hacia abajo, y desde nuestro juego WT, llamar a nuestro inventario. Ahora, podemos llamarlo aquí mismo o podemos llamarlo al final. Realmente no importa porque como nuestros Puntos no actualizan nada en el inventario, simplemente hará una actualización sin cambiar nada. Pero podríamos tenerlo aquí, pero esto es digamos más óptimo. No lo es. Realmente no importa. Pero hace menos operaciones. Si tuviéramos un inventario muy enorme, empezaría a importar. Vamos a traer inventario aquí, vamos a conectarlo aquí, y lo tenemos listo para funcionar. Y esto será para éste. En la siguiente lección, vamos a completar esta función. Adiós, C. entonces. 73. Actualización de los visuales de inventario: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG Creation Course En el último, dejamos con diseño de nuestro widget para nuestro inventario, que está en nuestro juego de widgets, jugabilidad aG. Entonces agregamos algunas imágenes. Agregamos un texto para indicar cuántos ítems del ítem en particular tenemos. Los agregamos a una superposición así la superposición entre ellos, y lo agregamos a un cuadro de escala, que pertenece a los botones que agregamos. Y agregamos la caja de escala para hacer que la parte interna llene el botón correctamente. Animamos nuestro inventario usando un seguimiento muy simple de traducción simplemente moviendo el valor x, y comenzamos a crear nuestra función de actualización de inventario. Eso es en si puedo encontrarlo modo de juego aquí, en nuestra función de inventario A. Entonces, comencemos a llenar esto. ¿Qué va a hacer esto? Hablemos de ello a medida que lo construimos. Lo primero que esto va a hacer es conseguir nuestras llaves. Básicamente, nuestras filas de artículos. Y después de eso, vamos a necesitar también nuestros valores para obtener los montos porque necesitamos actualizar los montos también. Estamos obteniendo nuestras claves para obtener de nuestros datos, los datos del artículo. Entonces vamos a promocionar a cada uno una variable local, llamemos a las claves. Promovemos esto también a una variable. Llamemos a estos valores. Oh. Vamos a por bucle a través de todas las claves. Voy a traer las llaves para bucle. Y voy a obtener la tabla de fila de datos de los elementos de la tabla D de datos. En realidad voy a hacer un rayo. Voy a promover esta una variable local. Llamemos a este ítem data. Voy a borrar estos dos y traer los datos del ítem y en conecto la fila de salida aquí. Entonces tengo un rayo con mis datos de ítem también. Ahora, voy a conseguir mis imágenes de inventario. En uno, I M dos, tres y cuatro. Voy a hacer array. Ahora puedo ir todos nuestros botones con bucle 14. F dos. Para cada uno de ellos, voy a hacer una pregunta muy sencilla. ¿El artículo es aca? Llega aquí, conectado al índice, voy a romperlo. ¿Por qué estoy haciendo esto y cómo lo estoy haciendo? Dado que nuestros artículos se agregan a nuestra matriz de inventario en un orden determinado, y este pedido se mantiene a través de nuestras matrices. Entonces, pero en uno, cotejamos para indexar cero de nuestra matriz de inventario, y así sucesivamente Entonces, si nuestros artículos son estables o no, comencemos si no son estables. Necesito el texto, volvamos al diseñador. Seleccionemos nuestros textos. Los haré variables T, En uno. El siguiente sería en dos. La habitación será t En tres. Ahora de las variables, puedo traerlas aquí en el cierto orden otra vez, una, dos, tres, cuatro. W para hacer una matriz. Quiere agregarlos a esta matriz. Dado que estos arrays son correspondientes, puedo obtener un índice que quiero para el patrón específico que quiero y hacer que la visibilidad sea invisible. Oculto en realidad. Voy a ir esto a falso. Lo siguiente que tengo que hacer es obtener nuestro elemento array. Esto va a si un poco. Eso es textura de pincel. Conectado aquí, y para la textura del pincel, vamos a obtenerlo de nuestros datos del artículo, inventariar un desconectado aquí, y esta parte está lista Estamos configurando esa pequeña madera en la parte inferior para que sea invisible, y estamos configurando la imagen de textura a nuestro artículo ture Oh, yo es visible, simplemente vamos a obtener nuestros valores de nuestro inventario, que son los montos. Y vamos a conseguir nuestra textura de la textura, lo siento. Vamos a conseguir el texto para llenar la cantidad. Voy a decir texto. Voy a poner nuestros valores por aquí, voy a conseguir copia, el valor sería el índice que estamos ejecutando. Por supuesto, necesitamos configurarlo visible por si acaso es invisible. Es decir, el texto que estamos agregando un número, y luego vamos a establecer la textura del pincel. Eso sería. Esa sería nuestra función que actualice el inventario. Obtiene nuestros valores y claves nuestras claves y valores, y luego crea una lista de nuestros ítems actuales. Pasa por nuestros botones, y aplica los números y las imágenes o los establece de manera invisible Creo que después de todo esto, hemos terminado con nuestro sistema de inventario. Ahora, creo que después de comer todas estas cosas, es momento de empezar a engendrar a nuestro personaje Podemos comenzar a probar algunas de estas mecánicas. Para ello, necesitamos crear algunas cosas para que la transacción sea un poco fluida. Porque como dijimos, sí tenemos esa carga. En esta carga, vamos a crear una animación, un camión de animación múltiple. Pero vamos a llamarlo fade load. Lo primero que agregaremos es nuestra barra de carga, que va a sumar camión de visibilidad. A camión, camión barra de carga, y otro tipo de camión, que es la visibilidad. Ahora va a estar oculto. Vamos a seleccionar ahora el texto de carga, de nuestra animación en el camión o el elemento. Y ahora agreguemos el camión para manipular el elemento, nuevo la visibilidad, tan oculto. Por último, vamos a seleccionar nuestra imagen. Vamos a volver a la animación, agregarlo como camión, agregar el camión a sus propiedades. Vamos a establecer la opacidad del render. Vamos a darle. Digamos 2 segundos medio, 25, vamos a crear la diferencia, y aquí va a ser cero. Entonces uno a cero. Tenemos este ocho de nuestra carga y pantalla. Vamos a compilar y guardar. Volvamos a nuestro generador de laberinto. Vamos a acercarnos al final. Estamos en 0.85 Vamos a ponerle mal pasta. L establecer por ciento. Esperemos también un fragmento de segundo. Vamos a establecerlo en uno. Ahora llamemos a carga de dolor. Juguemos en la animación. Ahora, vamos a crear una sucursal aquí. En realidad rama por aquí, que esta condición para ser un el nivel generador. Eso equivale a uno. Si este es el primer nivel, vamos a hacer la animación play de la carga. Como vamos a quitarlo de padre. Entonces, lo que necesitamos ahora. Llamémoslo un evento. Voy a hacer un jugador de eventos. Vamos a llamarlo por aquí. Jugador. Y consigamos nuestra animación y tiempo. Pero sabemos cuánto tiempo lleva esta animación, y pongamos un laico. Pero podemos esperar hasta que el phaate esté completo, y pongamos capa sobre troll y tu mouse No te pongas. Ratón. Y esto habilitará nuestra jugabilidad. Pero viene la pregunta, ¿nos hemos escondido la boca? Creo que no lo hemos hecho. No, vamos. El inicio en la jugada de inicio cuando estamos mostrando cargando. Queremos ocultar nuestro ratón. Antes de cargar el show, vamos a establecer el show mouse en false. Vamos a nuestra pantalla de carga, y al widget. Seleccionemos nuestros cavas y pongámoslo a visible. Si todo está bien, no, o no. Esto necesita conectar el objetivo al widget porque reproduce el objetivo animado es un widget de usuario Significa donde estoy jugando esta animación. Esta es la animación que la estoy jugando, pero ¿a quién pertenece? Esto es lo que necesitaba. Archivo guardar un juego de inicio de prensa. Comienza el juego. Maravilloso. Creo que esto es para éste. En el siguiente error. Vamos a traerlo aquí donde está. Es movimiento artístico. Aún no hemos programado estas cosas. Por eso no le gusta. Controlador de bajada. Lo arreglaremos más tarde. Pero esto es para éste. Vamos a continuar con la siguiente. Adiós. 74. Generación del zoom cinematográfico del jugador: Anteriormente, terminamos con nuestra función de actualización de inventario, que obtiene nuestro inventario. Agrega nuestras claves y nuestros valores para separar los valores temporales. Repasamos nuestras claves, las agregamos a nuestros datos de inventario. Obtenemos a través de nuestros nombres de tabla de claves y los agregamos a los datos de inventario. Después pasamos por nuestras imágenes, los botones, básicamente, y estamos sintiendo las estadísticas en consecuencia. Y después de eso, fuimos a nuestra pantalla de carga. Creamos una animación simple con muchas entradas, muchos elementos diferentes. Conseguimos que nuestra imagen de fondo se desvaneciera. Usamos la carga y nuestro bloque de texto para no usarlos. Los ponemos a escondidos al inicio de la animación, así desaparecen y luego empieza a desvanecerse. En nuestro generador de laberinto, llenamos nuestro porcentaje de carga. Y si el generador está en el nivel uno, significa que estamos en el primer nivel. Así que estamos jugando la animación fade de nuestro inventario de nuestra barra de carga, y luego engendramos a nuestro jugador En realidad hicimos solo una función. En realidad todavía no engendramos al jugador. Pero después de eso, conseguimos la hora de fin de nuestra animación. Nos retrasamos y pusimos tan áspero ratón. Y lo siguiente que debemos hacer en realidad Obtener nuestra carga. Nos movemos com parent. No, vamos a engendrar a nuestro jugador ahora. Lo primero que vamos a necesitar, Magine eso, van a ser las coordenadas del calabozo Vamos a conseguir nuestro calabozo. Vamos a encontrar nuestro primer bloque, para dividir esto. Dice 00 por defecto, y vamos a obtener la ubicación. Vamos a añadir un poco de altura a esa canción va a presionar Agregar cien, y esto es punto de desove Ahora vamos a usar actor plus. El actor sería el actor. Vamos a dividir la transformación de esta ubicación de transformación. Si vamos a jugar así, lo que va a pasar es que probablemente vamos a ver el pom. Y en una distancia enorme también. Esto es porque no tenemos control sobre él, porque engendramos pon, es como cualquier otro actor que engendramos en este mundo Entonces, sí tenemos un nuevo error. En su lugar en los artículos de Max. ¿Cuál fue el error? ¿Por qué está tratando de Maze generador? Oh, probablemente dentro del laberinto. No tenemos lo que es nuestro gran pon de pecho en props, spa, atrezos personalizados No. No. Yo solo salgo habitación y voy directamente a sp y nuestro pecho grande está Aquí, ¿auto generador de laberinto? ¿Era nuestro pecho grande o era nuestro pecho pequeño? L et's encuentran el pecho pequeño. Sí, era un cofre pequeño. Yo mismo. Pero el pecho grande. Probablemente no cambié esto o pecho grande en el pecho. Necesitamos un cofre aquí. Aquí. H. ¿Por qué no puedo otra vez, no puedo estar por defecto Lo selecciono de esta manera. No sé por qué no me gustó al revés. Y aquí necesitamos una generación. Entonces aquí es donde engendramos el cofre pequeño, básicamente. Yo no cambié la clase. No sé por qué Andel tuvo un problema tan grande. Oh, porque yo había conectado el valor de retorno correctamente. Sí, por eso. Así que volvamos a nuestro personaje de spawn, y veamos por qué no podemos tocar nada, hacer nada Cuando engendramos a cualquier otro actor, igual, todavía no podemos mover al otro actor ni nada Ahora, las patas y los personajes tienen una habilidad específica llamada poder ser poseídos Y para poseer algo, necesitamos el controlador del jugador. Y desde el controlador del jugador, arrastramos, que en realidad, como puedes ver en la descripción sobre herramientas, se adhiere al controlador del jugador y le da posesión a esa pata desde ese controlador Significa que puedes mover esta pata básicamente. Hay mucho más sobre poseer. No vamos a hacerlo ahora mismo. Pero si lo dejo así, entonces esto significa que puedo mover mi personaje mientras ocurre el desvanecimiento. Aquí vamos a poner un retraso. Y vamos a usar el enti de la animación. Ahora, vamos a presionar play, y verás también la cámara cambiada por aquí. La cámara cambió un poco, y de hecho podemos movernos. Entonces nuestros picos no nos perforan, solo nos hace p. Vamos a arreglar esto. Posteriormente esto. Vayamos a nuestra trampa, vamos a nuestros picos. Dado que esto es solo visual, debemos fijarlo a ninguna colisión físicamente. Esto es algo que sucede visualmente. No queremos que genere eventos de superposición. Además el cuerpo de la trampa tampoco necesita tener ninguna colisión. Vayamos a colisión. Sin colisión. No genere eventos sobre rap, compile y guarde. Todas estas pequeñas cosas simplemente adoptan porque hay muchas trampas, y van a ser muchas más. Y nos desvanecemos el tiempo, y podemos jugar. Yo es algo raro con la animación. Voy a comprobar de qué se trata. Podemos entrar a las habitaciones. Vamos a arreglar esta cosa porque la cámara ahora mismo es rara. Y como pueden ver, estoy dando click por aquí, así que no va correctamente. Estos son problemas de un controlador de ganancia, y hay muchos problemas que debemos solucionar. En cuanto a esta antorcha, por ejemplo, se apaga fácilmente. Déjame ver. ¿Todas las antorchas? Todas las antorchas. Entonces L et's empiezan a arreglar las cosas. Partimos de esta antorcha que vemos como todo lo que encontramos. Deberíamos arreglarlo al instante. Entonces vamos a ir a las luces del pasillo. Va a ir directamente. Así que utilería, utilería de habitación. Vayamos a donde engendramos nuestra antorcha. Una antorcha en realidad lo primero que hacemos. Entonces debo serlo. Antorcha Roo. Cambiemos estos valores a otra vez, estamos en el blueprint room props, esta primera parte de la cadena de eventos ¿Cuál era el problema aquí? Creo que estos son los tres, 320. Comprobemos con 320 y todo. Juego de pila. está aún más lejos. Déjame seleccionarlo. Voy con el niño. Es hijo de niño, así que en realidad no puede hacer eso. Lo que puedo hacer es encontrar los cultivos de habitación. Y a partir de ahí, la antorcha. Entonces 20 fue la dirección equivocada. Eso es 375. Comprobemos otra dirección. Esto es. ¿Cuál es este? ¿Bien? Sin embargo, esa es la misma dirección. Éste. Lo encontré en Sly haciendo clic en él. 375. Sí, básicamente, ese es el valor. Bien, entonces 375, 375 menos 375 -75. Estos son los nuevos valores. Oh, vamos a continuar. Comprobemos primero en realidad. Pero creo que ahora va a estar bien. Estas antorchas están bien están dentro de la pared, pero no importa eso, estas ya son mejores Esto es un poco dentro de la pared. Pero está bien. Bien. No. L et's continúan con nuestra posesión del poema. Lo que pasa realmente. Lo que podemos ver es también que cuando juego, tengo una luz diferente en comparación con cuando estoy poseído y poseyendo el personaje Como cuando eyecto, de repente la luz se vuelve impresionante, cuando no eyecto, la luz es mala No. Arreglemos esto porque es una ruptura instantánea de trato. No podemos estar probando así. Es realmente feo. Vamos a nuestro personaje op down, planos, personaje p down , la cámara ect Empecemos por agregar la exposición a la luz. Esto significa que cuanto más tiempo permanecemos en una luz, nuestro ojo, se adopta, por lo que la cámara crea un efecto como este. Entonces vamos a buscar postura. Vamos a establecer la media de un máximo 2.1. 0.1 podría ser un poco más bajo. Pongámoslo a uno y comprobemos si necesitamos bajarlo jugar. Y ya se puso un poco más oscuro. Si eyecto, podemos ver que la paleta de colores se queda igual, la iluminación, lo que crea Todo esto es fijo. La razón por la que funciona aquí así es porque no estamos usando la configuración del juego. En realidad, le hago clic, no hay mucha diferencia, y e V cero, donde si lo pongo a uno, se va a poner más oscuro, y si lo pongo a menos uno, va a ponerse más brillante. Ahora lo pongo de nuevo a cero. Y lo que esto es el nivel de exposición. Eso es lo que creo que representa E V. Lo que tenemos que hacer también es crear una pequeña introducción porque va realmente abruptamente al personaje Entonces voy a parar. Voy a ir a añadir algo. Añádase rápidamente al proyecto. Voy a ir a cámara. Actor, voy a fijar esta posición a 000 por y ¿sabes qué? De hecho voy a mover el hacia arriba, ir a presionar play. Voy a rechazar. Encuentra la cámara. Creo que esto es. Cera. No, esto es porque como pueden ver, esto es 1520, mientras que nuestra cámara estaba en 300 Voy a buscar esta cámara. Voy a pinchar a él, voy a piloto de cámara. Para ponerlo en una posición general tal vez. Aquí, no lo sé. Esta será nuestra cámara intra que va a nuestro reproductor. Tal vez enfrentando al jugador. Y ángulo. Sí, bien. Ahora voy a presionar A, y se guarda la posición. Entonces, si presiono stop, esta cámara está en esta posición. Ahora voy a ir al plano de nivel. Oh, nosotros teníamos una cámara. Me olvidé de eso. Voy a borrar la primera cámara. Sí, debería romper las conexiones. Y el plano de nivel. Lo acabo de abrir en la última. Voy a elegir la cámara. B el nivel y crear una referencia. Ver ahora se refrescó porque no se refrescó antes de configurar la cámara Esto se desconoce porque borré la cámara anterior. Voy a conectar esto. Vamos a eliminar esto. Vamos a compilar y ahorrar. Y aquí que tenemos reproductor spawner, voy a hacer una secuencia antes del retraso Y te voy a prestar y vamos a deshacer clic sensible al contexto porque no podemos verlo. Entonces voy a seleccionar una vista suave con un objetivo de vista suave con un objetivo de vista conjunto soso con soso Ahora bien, ¿por qué no apareció? Es porque no es una función realmente común, y tiene un requisito. El requisito es el controlador de juego. Entonces, si dibujo desde aquí y obtengo view blend target, veamos blend con target. Veamos objetivo con levantamiento suave y conectemos esto aquí puede ver, instantáneamente lo conseguimos sin el contexto sensible porque pertenece al controlador del reproductor tiene esta función, básicamente. Está en la categoría jugador. Entonces, el tiempo de mezcla sería de nuevo nuestra carga, nuestro no cargando, nuestro pagado de la carga, y tal vez -0.1 segundos cuando termine, tenemos un punto 1 segundo para, esta es mi opinión Y por último, necesitamos conectar nuestro nuevo objetivo de vista con nuestro personaje porque este es el objetivo que vamos a estar viendo. Va a conseguir nuestra actual, nuestra cámara, e ir a otro objetivo. Vamos a probar esta jugada. Y como que funciona. Creo que esto es suficiente para éste. Vamos a arreglar todo en la siguiente porque necesitamos arreglar algunos ajustes, muchos ajustes para arreglar. Te vamos a ver entonces. Adiós. 75. Correcciones de colisiones y detección de mosaicos de jugadores: Hola, y bienvenidos a Game Design Workshop y Real Engine cinco procedimientos Dungeon action RPG curso de creación Anteriormente, creamos nuestra mecánica de cámara que establecemos view get con blend nuestra cámara original en nuestro nivel que colocamos, y creamos una referencia dentro del plano de nivel, que teníamos una anteriormente, pero hicimos una nueva realmente no importa Y también completamos el código cuando estamos desove para mezclarnos entre los objetivos y poseer al jugador cuando la animación fade out haya terminado Ahora, también jugamos un poco y encontramos algunas cosas mientras nos movíamos. Por ejemplo, nuestro jugador cuando estamos dentro de la habitación, el ratón obtiene un comportamiento extraño. Y cuando estábamos en realidad no teníamos ese ejemplo, pero cuando estábamos pasando por azulejos, el personaje estaba haciendo un movimiento extraño, sobre todo entre la conexión de las fichas. Ahora, vamos a deducir por qué están sucediendo estas cosas. En primer lugar, si expulso, todavía puedo seleccionar del menú de espectáculos cosas Pero si selecciono colisiones, podemos ver instantáneamente lo que está pasando Por ejemplo, nuestros arbustos de aquí están puestos en invisibles, pero su colisión está encendida. Lo mismo sucede con nuestros sigilos, que los hacemos invisibles, pero la colisión sigue encendida Y esto prueba que al convertir algo invisible u oculto en el juego, no significa que en realidad estemos cerrando la colisión. Otro tema que ocurre es que cuando empezamos a jugar, nuestra exposición a la luz es diferente a la cámara del juego. Entonces, arreglemos estas cosas. Seleccionemos nuestra cámara en una palabra. Busquemos la exposición, aquí está, y fijemos la exposición mínima y máxima a una como es nuestra cámara en el juego. Va a ahorrar. Ahora, lo siguiente, vayamos a nuestro mosaico DP, seleccione los ns. Al elegir las vides, y vamos a ir al comportamiento predeterminado porque no necesitan generar eventos de superposición No necesitan ser pisados por el personaje. No necesitan tener ninguna colisión. Es sólo una cosa visual. Para que podamos poner todo a ninguna colisión. Vamos a guardar y compilar. Ahora, a veces podríamos tener un choque mientras hacemos cosas con las vides. Espero que lo hayamos arreglado en el lanzamiento. Hay un problema. Déjame mostrarte. Voy a seleccionar un activo. Voy a ir a mostrar explorador. Y en Explorer, voy a ir al curso Dungeon Jin, y voy a ir a guardado y nos registra un rush log, por ejemplo. Ahora. En nuestro registro de bloqueos, si podemos ver que hay un error de repetición, si tuviste un crash, que es sobre las vides sobre solo los mods opacos o de mezcla de máscaras actualmente son compatibles, y tenemos mods de mezcla especificados. Es un problema con translúcido como podemos ver sobre las hojas ine. Creo que lo habremos arreglado hasta el proyecto, pero si sucede, es solo que el motor podría chocar mientras los mueve o cambia la configuración a ellos. Ahora, lo siguiente que haríamos es ir a nuestras decoraciones y seleccionar nuestros CDL Los seleccionan todos, uno, dos, tres, cuatro, los seleccionan todos, y yo voy a ir a la colisión también y comprobar generar sobre piens a no y carácter pisar no y no colisión, porque esto de nuevo, es algo visual No deberíamos estar mirándolo. No deberíamos estar chocando con él. Bueno, si presiono play ahora, esos problemas se arreglarán. Entonces si paso por azulejo, se puede ver un movimiento mucho más suave, Y si voy al lado de puertas, no me bloquea por colisión. No creo que nos estuvieran bloqueando de este ningún caso. Ahora bien, si entro a una habitación, intentemos entrar en una habitación, se puede ver instantáneamente que el ratón tiene algunos problemas aquí. Estoy apuntando tanto a mi personaje al personaje se mueve por debajo. ¿Por qué es eso? Nuevamente, hemos puesto el techo para que sea invisible. En realidad es st aquí. No podemos verlo, pero es aquí, un apagón colisiones. Y vuelve a encenderla, y podrás verla actualizada para demostrar que nuestro techo está aquí. A la vuelta de colisiones, y comencemos nuestro sistema para esconder y mostrar el techo en una habitación Pero antes de hacer eso, solo un pequeño cambio a nuestra cámara. Vamos a nuestra cámara. Vamos a ir en realidad a nuestro personaje, nuestra primavera, no a la cámara. El resorte es como un brazo de brazo. Es como un palo que sostiene la cámara, y tiene algunas reglas por sí solo. Vamos a cambiar la longitud del brazo objetivo a 2,500. Entonces tenemos cierta distancia con nuestro personaje. Y entonces vamos a cambiar la rotación tampoco necesita ser absoluta, va a ser relativa desde -50, vamos a mantenerla -50, y al eje Z, al eje azul, vamos a sumar 45 para hacer nuestra vista isométrica de juego Lo siguiente que vamos a cambiar es, vamos a escribir lag, hay un lag de cámara habilitado que vamos a desactivar porque queremos nuestro personaje esté siempre centrado y no la cámara cambie al personaje. Porque si vamos a jugar ahora mismo, eso hay un pequeño retraso en nuestra cámara cuando nos movemos. Uy. Creo que me equivoqué sobre la ubicación absoluta. Sí. Sí tiene que estar en rotación absoluta. Entonces vamos a seleccionar Mundo 45. Y ahora, volvamos. Sí. Necesitaba ser absoluto. Puedes ver a nuestro personaje se mueve, pero nuestra cámara tiene un retraso. En realidad no es centro de nuestro personaje. Obtiene un retraso hasta que lleva la cámara al personaje. Entonces hagámoslo más como juego ablo sin este retraso. Vamos a ir a un personaje. Voy a seleccionar Lug de nuevo. Voy a desactivar el terminal de la cámara. Entonces ahora, nuestro personaje debería estar quedando en el centro. Tenemos mucho más control como parar aquí, parar aquí. Sabemos lo que estamos viendo. Derecha. Ahora, para comenzar el sistema para las habitaciones. Lo primero que vamos a necesitar es hacer una variable a nuestro personaje para almacenar donde está nuestro personaje. Voy a ir a nuestro personaje. Voy a dar click sobre variables, y voy a crear una nueva variable. Vamos a llamarlo ds, y va a ser de un punto de entrada. Ahora bien, para decirle a nuestro personaje que es cuáles son nuestras coordenadas, también necesitamos ir a nuestro plano de mosaico y crear aquí otro valor Vamos a llamar es. Cambiemos éste en punto también. La mejor jugada para almacenar este punto final sería cuando engendramos la ficha Vamos a hacer incienso editar y exponer nuestro spawn, compilar guardar y compilar, y luego ir a nuestro generador de generación laberinto Vayamos al principio en la fase uno, pero estamos desove nuestras fichas, y necesitamos refrescar esto Contamos con cordones de baldosas. Y para los cordones de baldosas, solo vamos a usar las coordenadas curr Por lo que ahora la información ha pasado a la baldosa. ¿Cómo se lo pasamos al jugador? Bueno, en decoraciones, sí tenemos una colisión que podríamos haber usado para otra cosa, pero ahora mismo la vamos a usar para esto. Pero tenemos que hacer clic en generar eventos de superposición para que sea verdad. Y para los presets de colisión, lo tenemos en Atom Ignorar todo excepto el jugador pon, el estanque, básicamente. Esa es nuestra colisión de cajas en nuestras decoraciones. Ahora a partir de esta colisión, vamos a que los componentes comiencen a superponerse. Vamos a comprobar si el otro componente tiene ug tug, que es el remolcador, vamos a poner una rama y si tiene el remolcador, vamos a emitir de otro actor vamos a poner una rama y si tiene el remolcador, vamos a emitir de Carácter de arriba hacia abajo. Y de nuestro carácter de arriba hacia abajo, vamos a en las coordenadas actuales. Y para obtener nuestras coordenadas actuales, vamos a ir como azulejo BP a la referencia de la baldosa a la que pertenecen las decoraciones, y obtendremos coordenadas de mosaico. Y vamos a conectar esto aquí. Entonces, cada vez que estamos entrando en un bloque, ahora nuestro jugador sabe en qué estilo pisa. Ahora, creo que este es un buen punto de ruptura para este. Te voy a ver en la próxima. Adiós. 76. Mecánico de techos de habitaciones: Hola, y bienvenidos a Game Design Workshop, real Engine five Procesal Dungeon action Bz Creation Anteriormente, almacenamos nuestras coordenadas, nuestras coordenadas de mosaicos a nuestro jugador. Y para ello, creamos una variable val en nuestro azulejo BP. Ahí está. Aquí está, P tile, que se llama coordenadas de teselas, y construimos esa variable cuando estamos generando nuestro mosaico P a partir de las coordenadas actuales Luego procedemos a crear otra variable en nuestro personaje, que son las coordenadas actuales, y usando la colisión de caja de nuestras decoraciones, que cambiamos algunos ajustes en la colisión. Creamos un evento begin overlap que estamos comprobando si el componente tiene la etiqueta de player, y si tiene, estamos dando las coordenadas de la ficha. Y ahora sigamos usando esta información para crear nuestro sistema para ocultar nuestros techos. No. Estamos en las coordenadas del plano. Vamos a recordarnos lo que hemos creado. Hemos agregado algunas colisiones por aquí que serán utilizadas para detectar si el jugador está entrando dentro de una habitación Vamos a ir a sus ajustes de colisión. Vamos a ir a generar sobre eventos. Sí. Vamos a cambiar de paso, vamos a dejar sí y preselección de colisión, vamos a volver a poner costumbre e ignorar todo excepto el sondeo del jugador. Lo siguiente que vamos a hacer es seleccionar cada uno de ellos y seleccionar el evento begin over lap, y el evento de componente end over lap. Para ambos, necesitamos comenzar el solapamiento y el solapamiento final. Podría haber una solución más fácil que pudiéramos vincular estas acciones. Pero hagámoslo algunas veces y acostumbrémonos a agregar cables. Tenemos todo el solapamiento inicial y el solapamiento final. Separémoslos. Entonces tenemos el final solapado juntos y el principio se superpone juntos El orden en realidad no importa. Otra vez, ¿qué estamos pidiendo? Hagamos las superposiciones de inicio. Estamos preguntando si el otro componente es el jugador. Entonces vamos a conseguir la etiqueta de ciervo P y nuestra sucursal. Y vamos a copiar base esto a cada función. Verás, casi cometí el error ahí, casi me conecté con el actor. Estos son los temas con las cosas no vinculantes en las acciones. Pero si no te equivocas, puedes hacerlo en una de las acciones repetitivas El, ¿por qué el oeste no funciona? Entonces vamos a ver que Occidente no está funcionando porque el conectado con el actor. Bien. La siguiente pregunta que debemos hacer es nuestro techo visible. Pero eso es una pregunta para todo, que podamos conectarlo con todos. Voy a poner aquí la sucursal. Voy a conectar todas las sucursales t aquí. Y de nuestra variable de techo que traje de aquí, vamos a preguntar es visiblemente Para la siguiente parte, vamos a necesitar nuestra referencia tangente, vamos a conseguir nuestro mosaico, y vamos a conseguir gon se llama generador O referencia del generador, y necesitamos crear otra función en nuestro generador. Vayamos a nuestro generador de laberinto, creamos una nueva función. Vamos a llamar a esta sala de funciones filling hydrom sep, va a necesitar una entrada de un entero, que va a ser el índice de sala porque cada baldosa sabe si es una habitación y tiene un índice Entonces si bacter decoraciones, cuando llamamos habitación aquí, necesitamos también conseguir nuestra habitación X. No hay índice de habitación, ¿cómo? Lo siento, el índice de habitaciones está guardado en las decoraciones. Se almacena cuando estamos agregando las paredes. De hecho, estamos habilitando la colisión en el componente de la caja cuando agregamos las puertas. Qué componente de caja permite colisiones. Paredes R A, desorden ático, hijos de paredes. Entonces estamos habilitando el componente de caja, que son las entradas. Tener sentido. Pero si los tuviéramos habilitados aquí, entonces esto se dispararía aunque no fuera una habitación, y daría una respuesta de habitación cero. Por lo que cerraremos el evento generar solapamiento de estas casillas. Entonces mi error. Es el programa enorme que no va a mentir. Y todas nuestras cajas entre cajas necesitan que sus muros generen eventos de superposición cerrados. Por lo que sólo disparan cuando son una habitación. Ahora voy a conseguir que el índice de habitaciones esté conectado aquí. Sabes, puede que no lo parezca porque estamos en planos, pero estamos en unos pocos miles de líneas de código y aún más Entonces la memoria es un activo fuerte para un programador. Memoria personal, memoria biológica, no memoria de computadora. Bueno, la memoria de la computadora también es un activo enorme por sí misma. Ahora, vamos a esconder las salas C función. Vamos a completar esta función básica. Pero nuevamente, vamos a necesitar algo extra para completar esta función. Eso sería un núcleo de interfaz de blueprint. Así que vamos a abrir nuestros peines de laberinto y agregemos una nueva función. Llamemos a esto D. Bueno, esto es básicamente hing nuestro techo porque nuestro como comando para ocultar techo viene de las decoraciones. Enviamos a un punto central. Digamos nuestro laberinto porque ahí tenemos las coordenadas de la habitación. Ocultamos los techos de estas habitaciones. Y entonces nuestro Laberinto en este momento estará enviando un mensaje a cada una de las habitaciones del índice para ocultar su propio techo. Entonces es un poco de información de ida y vuelta. En fin, vayamos a nuestro laberinto. No, perdón, a nuestro laberinto, y vamos a promover el índice de habitación de variable, no una variable local, sino una variable real, variable permanente, real. Variable permanente. Llamemos a este índice de habitaciones. La razón por la que necesitamos esto es porque cuando estamos ocultando los techos, vamos a necesitar saber qué índice de habitación necesitamos ocultar el techo. Oh. Ahora, también necesitamos una referencia de jugador y ya que estamos generando la referencia dentro de esta gráfica, en algún lugar de aquí Desaparecer mágicamente, hacerlo hacerlo desaparecer, hacer que parezca que apareció de la nada, no Hacer que desaparezca, básicamente, el error que dejé aquí. De todos modos, para promover esta variable, vamos a hacer clic derecho y promover la variable. Voy a llamar a esto. Entonces ahora estamos sosteniendo una referencia a nuestro jugador. Volvamos a nuestros techos de él, y consigamos nuestra referencia de jugador. Lo que tenemos que preguntar es bastante sencillo es, ¿es nuestro tiempo actual? Acordes actuales Sí. Son nuestras coordenadas actuales, ese jugador que se pone de pie. No pertenece al índice de habitaciones en el que estamos. Pero para hacer eso, vamos a obtener nuestra matriz de habitaciones ST, que es una matriz con nuestras coordenadas de habitación con todas las habitaciones y sus coordenadas. Vamos a conseguir una copia. Voy a conseguir el índice de habitaciones. Y vamos a preguntar si esto está contenido. Ray está contenido en una matriz, lo siento todo lo contrario. Esto sucede cuando piensas en el futuro, no necesitamos salir de la habitación. Solo tenemos que verificar si nuestras cocoordenadas están en esto. En realidad sí tenemos que conseguir. Y sí necesitamos conectar la coordenada, esto necesita romperse. Bueno, porque esto contiene una matriz, básicamente, por eso, y estamos comprobando la matriz contenida si está en las coordenadas de la habitación. Voy a presionar una sucursal aquí, para poner una rama. Y lo siguiente que tenemos que hacer es desde las coordenadas de nuestra habitación, vamos a ho Y como dijimos, vamos a esconder el techo. Ahora, lo conecté a falso. ¿Por qué lo conecté a false? El motivo es porque esto debería desencadenarse cuando estamos entrando en una habitación. No debemos pensar mientras estamos dentro de la habitación, ya que nuestras habitaciones están compuestas por cuatro de estas. Y significa que podríamos tener otra puerta que es colisión va dentro de la habitación. Yo pasamos por estas colisiones, no queremos volver a dispararlo. Por lo que esto debería desencadenarse sólo desde el exterior hacia el interior. Por supuesto, podríamos haber enfrentado una colisión como esta, pero ¿por qué no crear circunstancias en las que podamos usar algún código para comprobar cómo podemos aplicar reglas No, vamos a por nuestro calabozo. Encontremos a nuestras coordenadas, a nuestro actor. De este actor, que es nuestro azulejo, básicamente. Consigamos nuestras decoraciones, que es el contenedor de nuestro actor de decoraciones. Sí necesitamos conseguir actor Y a partir de esto, vamos a presentar un mensaje. Enviaré el mensaje que acabamos crear en nuestra interfaz de blueprint Porque si lo envío directamente a la baldosa, y esto no quiere decir que el niño actor lo consiga. Y también si lo envío a los Corans, esto es un contenedor. No es el actor real. Entonces necesito al niño actor. T vamos a probar Y tenemos otro choque. Volvamos a ver cuál es el problema. Abierto al choque. Esto es ir al archivo g. Empezamos desde aquí. Usado en materiales válidos de máquinas no estáticas. Entonces el material tiene un problema. Sí, son los mismos temas antes. Tiene el blend y opaco y se especificó su modo blend, translúcido, y luego es nit issue Entonces, vamos a arreglar esto, vamos a enviar y reiniciar. Y como pueden ver, no lo hice no guardé antes de compilar y guardar. Así que voy a hacer esto muy rápido otra vez de cámara alla, y ya está hecho. Ahora, antes de probar, vamos de hecho a hacer un código muy simple para ocultar techo Vayamos a nuestra decoración, y vamos a agregar nuestra interfaz porque las decoraciones no la tienen. Entonces vamos a agregar Mize, Pi, PI . Yo lo he implementado. Si no lo has implementado, solo agrega I maze viene aquí. A partir de eso, vamos a ir a la interfaz y seleccionar las alturas. Vamos sólo por ahora entonces en juego. Todavía tendremos el problema con colisión, pero los techos deben estar ocultos cuando entremos a la habitación. Además, vayamos a nuestro techo y encontremos su visibilidad, oculto en el juego, y vamos a esto o ya no está oculto en el juego. Tiene que ocultarse cuando jugamos. Cuando entramos en una habitación. Juguemos. Ojalá, todo esté bien. El cofre necesita la regla. Llegamos al techo, pero no podemos ser felices porque el cofre necesita la regla para no desovar frente a una puerta Vamos a agregar esto rápidamente. Vamos a nuestro generador de laberinto. Vayamos a donde engendramos el est, donde establecemos las coordenadas para el cofre. Y sí tenemos esta regla es colindante a puerta. Mapa. Obtenemos las coordenadas. Intenté tantas veces que falló y se mantuvo tal vez porque sí tenemos esa regla, y esa regla es correcta. Lo comprobamos con las luces. A lo mejor lo intenté tantas veces y no pudo colocarlo en ningún lado. A lo mejor fue eso. Entonces volvamos a jugar. Ahora a veces el parsl se cerró, donde está un cofre. No está frente a una puerta, a lo mejor fue solo un. genial. Vamos a parar aquí para esto. Te voy a cantar en la siguiente. Adiós. 77. Mostrar y ocultar el mecánico de techo: Hola, y bienvenidos a ganar Taller de Diseño, y Real Engine five, Procesal Dungeon, curso de creación de RPG de acción Anteriormente, comenzamos con nuestro mecánico de techos ocultos. Creamos la función ym dentro de nuestro generador de laberinto, que almacena nuestra habitación actual, y comprueba si nuestras coordenadas actuales del jugador están dentro de la habitación en la que estamos tratando de entrar. Si no lo son, entonces estamos ocultando el techo. Y después, para ocultar el techo, creamos una interfaz de planos que usamos en nuestras decoraciones BP. Un minuto. No es así. Esto es todo, pero por ahora solo pone nuestro techo invisible. Oh, vamos a animar esto. Vamos a crear una animación para que el techo se oculte, y la misma animación que vamos a usar para que aparezca. En primer lugar, hagamos una variable para que podamos conocer el estado del techo. Vamos a llamar a esta guarida. En Hight decir, vamos a decirle que es verdad. No. No necesitamos esto más. Sí necesitamos la referencia del techo, pero después, después de establecer lo oculto, vamos a agregar una línea de tiempo. Y vamos a entrar en la línea de tiempo y crear una pista de flujo desde 01, con tiempo cero, cero o cero y tiempo 0.3 o uno. Vamos a usar el último fotograma clave. Sólo corre hasta aquí, y vamos a elegir nuestro techo y establecer vendaval. Vamos a conectarlo para actualizarlo. Lo que vamos a hacer es alertar vectores. Vamos a conectar nuestro Alpha, nuestro camión de flujo de camiones, y vamos a ir 111-001 Por supuesto, al final, en realidad necesitamos el set oculto. Vamos al juego donde vamos a conseguir los elegidos, ¿dónde está el selecto quiere? Para nuestro índice, vamos a usar la dirección. Si va hacia adelante, queremos que esté sí oculto, cuando va a estar al revés, queremos que no esté oculto. Y como sabemos que esto va a crear un problema de colisión, vamos a ir a nuestro techo, y vamos a seleccionar ninguna colisión. Ya está hecho. Pero si no lo es, porque sí tuve un choque. No estoy seguro si lo hicimos anteriormente, lo que tenemos que hacer es no generar eventos de solapamiento en realidad y tener la colisión para volver a caer en nuestro techo. Si vamos a jugar ahora mismo, podremos ver esta animación. Y. Ahora, no vuelve atrás. Pero arreglaremos los swaps. Ahí hubo un retraso de marco. Entonces, se puede ver ahora el movimiento sin colisión, y en realidad sí lo animamos para que no estuviera aquí La colisión no importaría en este momento. De hecho, podemos caminar correctamente ahora en las habitaciones dentro de las habitaciones. Entonces, continuemos con la creación nuestras funciones de techo oculto. Déjame revisar por un segundo. ¿Por qué había un registro de marco así? Oye, creo que solo mi computadora. Ahí tengo algunos problemas. Puedo escuchar la parte superior. Oh, sí. No. Solo fue hipo porque abrí el proyecto desde después de ser Derecha. Vamos a arreglar nuestros techos, básicamente. Empecemos frente esta vez. Vamos a nuestra interfaz de blueprint. Vamos a agregar la función. No. Función de techo, techo. Carácter D. Dijimos que mal llamado es el tema esta vez. Vamos a llamar, que es nuestro mensaje. Vamos a poner lo oculto a falso, y vamos a revertir desde el final. Simplemente reversa, no de fin, porque en caso de que salgamos en el momento en que estamos entrando, no queremos que empiece desde el final, queremos que retroceda desde donde sea que esté. Y lo mismo con el juego, y por eso no lo conectamos para jugar desde el principio. Ahora bien, ¿cuándo sucede esto? Bueno, sí tenemos los eventos de solapamiento final. Hagámoslos más compactos. Pero sí tenemos nuestros eventos de superposición. Vamos a necesitar hacer esta pregunta si lo que se superpone al final es nuestro carácter. Conocemos el procedimiento, copiamos y pegamos estas ramas. Nuevamente, vincularlos habría sido una mejor opción. La forma en que lo haríamos es que vamos a hacer una matriz. Vamos a conseguir nuestras cajas, y vamos a encontrar al comenzar la superposición en un bucle for que tenga todas las cajas y crear un evento personalizado que haga estas cosas. Sigamos. Vamos a conectar esto aquí. Y vamos a conectar esto aquí. Y entonces vamos a necesitar ir a nuestro generador de laberinto. Hacer una nueva función. Llamemos a esto ide. No. Roh paso No vamos a necesitar una entrada porque tenemos almacenada la variable de la habitación actual, y después de todo esto, voy a conseguir lo que es el generador aquí referencia, voy a copiar pegar la referencia aquí y conjunto de sala cuando todos estos sean ciertos. Ahora entremos al set de show room. Encontremos nuestro conjunto de funciones hydrom. Vamos a copiarlo tal cual sin el conjunto del entero, pégalo aquí. O nuestro conseguir que se desconectó, necesitamos nuestras varillas actuales En lugar de escondernos, necesitamos estar mostrando. I. Entonces, compilemos y guardemos. Vayamos a nuestro juego, y vamos a comprobar si está funcionando. Me escondí, y apareció. Pero apareció instantáneamente. Y ahora ni siquiera funcionó. Estoy entrando y me voy. Entré, ¿qué pasó? Tenemos que fastidiarlo. Entró, tal vez entré demasiado y luego me fui. ¿No? En fin, parece estar funcionando. ¿Qué pasó realmente ahí? ¿Todavía estoy en la colisión? Sí, probablemente me quedé en la colisión y no me di cuenta. Entonces vamos a seis la animación. Vayamos a nuestras pieles y veamos qué está pasando. A habitaciones tan pronto. Lo siento, no. O yendo aquí. Pongamos un punto de quiebre. Van así, van así. Hs que ty S. raro. Oh. Oh, ¿por qué sucede esto? Sucede porque al final estoy configurando la visibilidad. Entonces sí reproduce la animación, pero al final muestra techo. Entonces básicamente, vamos a esto tal como está. No hace aros Comentario. Vamos a dejar esto como e e e ir aquí y simplemente conectar esto aquí y hacer que esto sea falso Ahora podemos ver el techo antes de la animación. Esconder, Ocultar, Y, y estamos terminados con nuestro techo. Oh, esto es para éste. Te voy a ver en la siguiente. Adiós. 78. Blueprint de visuales para ascensores: Hola, y bienvenidos a Game Design Workshop real Engine cinco procedimientos Dungeon action Pz llamadas de creación Anteriormente, terminamos con nuestras funciones de mostrar y ocultar techo. Animamos nuestros techos, con nuestra línea de tiempo. Usamos la escala mundial establecida para crear esa animación, y luego creamos el evento show C blueprint interface event Y establecemos el id y a las caídas. Ponemos el techo oculto a caídas, que podamos ver la animación, ya que nos estamos escondiendo en I. Al final de adelante, como al final del evento ding. Y luego conectamos los eventos en nuestro extremo eventos de superposición. Comvisamos si es nuestro jugador el que termina superponiéndose, y creamos el techo de la cerda para que el techo de la habitación en nuestro generador de laberinto, que es exactamente el mismo código que en el techo oculto Pero esta vez estamos mostrando techo. La única diferencia es que estamos usando las coordenadas actuales de la habitación, mientras que en el techo oculto, realidad estamos haciendo ping a esta coordenada. Ahora, sigamos con la creación de nuestro pozo sin fin, en realidad no interminable como hablamos al principio. Pero tiene una posibilidad sin fin. Y vamos a la creación de laberintos. Vamos a completar nuestro elevador. Tener muchas pestañas abiertas. Voy a empezar a cerrarlos a todos. Bae cuantas más pestañas hayas abierto, en realidad vuelve a bajar tu FPS si tu computadora no es tan fuerte Voy a abrir el elevador. Voy a ir a los planos, voy a ir a utilería, y voy a elegir nuestro elevador Voy a traerlo aquí. Y también, vamos a necesitar un nuevo plano. Llamemos a este mecanismo elevador BP. Todo bien. Ahora bien, este mecanismo elevador debería tener nuestra rueda de pasador por aquí. Voy a copiar esto, y voy a traerlo aquí. Ahora, tenemos que cambiar la escala en. Voy a desbloquear esto, y voy a poner 0.4 aquí y aquí 0.3, y en z 0.4. Entonces es un poco más pequeño, y es un poco. Ahora, vamos a ser un poco creativos aquí y agregaremos dos mallas estáticas más, en realidad tres Para los dos primeros, vamos a ir a nuestras mallas, y hay un dispositivo de tortura x Aquí está, y vamos a fijarlo a éste y a uno más. Entonces básicamente, vamos a tener esto por aquí y por aquí, este necesita ser rotado. O cerrar. Movimiento de cadenas, es todo, parece que es algo que está funcionando. Sí, está bien. Entonces voy a usar este lío que tenemos vacío y conseguir una caja. Voy a traerlo por aquí. Para hacerlo un poco más delgado. Así, para traerlo aquí. Y en realidad, voy a hacerlo polar. Pongamos uno del otro lado, también, métrico. Sí me gusta esta rueda de aquí. No lo hagamos simétrico. A mí me gusta ver esto. Si quieres, puedes hacerlo simétrico. Creo que desde el punto de vista anterior, es algo que consideraremos que está bien. A lo mejor podamos hacer esto un poco más grande. Este eje. También este. Está bien. Está bien. Si quieres, puedes jugar más con esto y hacerlo más visible. Lo que vamos a hacer es girar componente, movimiento giratorio. Y vamos a ir al gráfico par, traerlo aquí, y vamos a conseguir nuestra rueda, que es, creo que la malla de la planta. Si quieres, puedes esto, y vamos a ese componente a nuestra rueda. L et's van a nuestro puerto de visión. Vayamos a nuestro rotativo. Si jugamos simulamos, podemos verlo rotando todo. Déjame ponerlo en el guión de construcción. Oh, yo no cambié nada. Oh, mira como puedes cortar esta parte de simular. Sigamos a partir de aquí. Ahora, volvamos a nuestro elevador y cambiemos esta malla estática a nuestra plataforma de elevador. Tenemos una metanfetamina para eso. Come cubo elevador aquí estamos. Esto es. Ahora agreguemos un actor infantil, que va a ser mecanismo elevador. Ahora vamos a seleccionar un sitio para colocarlo. Va a seleccionar este sitio, tráelo. Yo vivo aquí. Sí, creo que está bien. Y ahora necesitamos algunas cosas más. Vamos a necesitar algunas cosas para bloquear a nuestro jugador. Por supuesto, también seremos jugador local para no poder movernos. Pero, ¿por qué no tal vez permitirle moverse? Es nuestra elección si queremos habilitar esto o no y tener algunas paredes que impidan que el jugador se mueva. Entonces, voy a agregar más medidas estáticas. Todas estas plumas. Uno, y va a ser que necesitamos este plano elevador o la malla estática. Vamos a rotar esto y traerlo aquí. A lo mejor necesita ser un poco más grande. Creo que esto está bien, vamos a copiar y pegar esto aquí, vamos a pegarlo de nuevo y girarlo, traerlo aquí, vamos a conseguir esto y pegar, sacarlo por aquí. Todos los lados tenemos una pared. Porque lo que vamos a hacer es cuando el jugador entre al elevador, vamos a estar levantando esto. Ahora, cuando lleguemos al siguiente piso, vamos a necesitar otra malla estática. I. No va a ser un avión, va a ser el cubo elevador 031 antes de usar el 026 Entonces esta sería nuestra plataforma extensible porque tendremos un espacio desde el elevador hasta nuestro azulejo para caminar. Entonces estaremos extendiendo una plataforma como esta basada en el lado que está disponible desde nuestro laberinto, que sería el bloque cero, y vamos a estar extendiendo esa plataforma hacia ese lado. Déjame restablecer su ubicación. Y lo siguiente que vamos a necesitar es una cámara. Y vamos a colocar esta cámara. Sigo dos E. Vamos a colocar esta cámara encima del elevador. Vamos a ponerlo también un poco a un lado o al costado. Este lado, y tal vez un poco más bajo. Eso está bien. Entonces cuando subimos, podemos ver y larp a través de esto, así ya no podemos ver el laberinto. No podemos ver a la izquierda y a la derecha. Sólo vemos el elevador. Aquí lo inclinamos un poco también. Veremos cuando hagamos la animación, veremos cómo se ve. Ahora, lo siguiente que vamos a necesitar es que vamos a agregar una colisión, una colisión de caja, pero sabemos cuando el jugador se metió en el centro. Y en realidad vamos a dejarlo como está porque queremos estar seguros de que el jugador se metió. No queremos que lo actives cuando el jugador está aquí, queremos que lo actives cuando el jugador está en el centro. A lo mejor lo hacemos incluso un poco más pequeño. A lo mejor lo movemos hacia el botón con el mecanismo, un poquito aquí. Sí, eso parece estar bien. Oh, una cosa más que debemos hacer es criar los componentes necesarios que queremos al cuerpo. Vayamos este cuerpo porque el cuerpo va a estar subiendo. Pero no queremos que la colisión esté subiendo, por ejemplo, con el cuerpo. No queremos que esto esté subiendo con el cuerpo. Pero como vamos a ser realmente no importa para ser honestos, porque vamos a estar usando la ubicación del actor. Pero ¿sabes qué? Hagámoslo de la manera difícil. Usemos el cuerpo, no la ubicación del actor, porque vamos a mostrar ambos sentidos. Si usamos la ubicación del actor, debemos desvincular a este actor infantil Entonces esta parte está en el suelo, y luego podríamos mover al actor hacia arriba. Pero vamos a separarlo sólo para mostrar cómo lo separamos. Y luego movamos el cuerpo hacia arriba. Pero si queremos mover el cuerpo hacia arriba, entonces tenemos que criar las cosas que queremos mover con el cuerpo. Entonces esas serían las vallas. Esa no sería la caja. No queremos la caja. Esa sería la cámara. La cámara que queríamos mover con nosotros. Ese sería el plano elevador, y también la barda para. Sí. Por lo que estas cosas tendrían que ser criadas en el piso del elevador Creo que tenemos que bajar un poco esto. Sí. Fue una especie de superposición. Oh. Esta es la configuración de nuestro elevador, y creo que este es un buen punto de ruptura, y vamos a continuar en el siguiente para alimentar el código. Adiós. Nos vemos entonces. 79. Mecánico de laberinto: Hola, y bienvenidos a Gain Design Workshop, n real Engine five, Procesal Dungeon action RPG Creation Course Anteriormente, creamos las imágenes de nuestro elevador. También creamos el mecanismo elevador BP, que es un visual que hará que esta rueda gire y se separe del elevador. Ahora, actualizamos solo la malla estática, que es responsable la rueda con nuestro movimiento giratorio, y creamos nuestra estructura con nuestro cuerpo y los componentes porque vamos a estar moviendo realmente nuestro cuerpo. Ahora, comencemos en lo que sucede cuando colisionamos con la e. con el cubo de colisión No. Un componente comienza a superponerse, hagamos la primera pregunta. ¿Es un jugador? Oh, tiene una y poner una rama. Si esto es cierto, necesitamos verificar si nuestro jugador tiene la clave. Vamos a conseguir el modo de juego. Vamos a lanzar a GM al modo de juego de arriba hacia abajo. Vamos a convertirlo en un elenco puro. Y vamos a conseguir inventario. En nuestro inventario, vamos a encontrar I six, que es el nombre en bruto de nuestra tabla de datos o nuestra clave. Ahora, vamos a usar una sucursal, y vamos a conectar esto a, ¿la encontró o no? Oh, vamos a conectarlo a verdad porque es un jugador, y no lo encontramos, entonces es bastante simple. Tocamos un sonido, y eso es todo. El sonido que vamos a tocar tiene algo que ver con elevador. Falla de elevador. Elevador falla Q porque queremos colas Sí, eso es. Si es cierto, lo vamos a hacer una vez. Porque pase lo que pase después de aquí, no queremos repetirlo. Sucede. No debería haber ninguna posibilidad de que vuelva a suceder. Oh, lo primero que haríamos es desactivar el movimiento del jugador. Pero como aún no hemos creado estas cosas, vamos a agregar más tarde. Lo siguiente que debemos hacer para conseguir a nuestro actor infantil, que es nuestro mecanismo elevador elevador y conseguir actor infantil, y vamos a de actor. Vamos a mantener el mundo. Pero la escala de ubicación y rotación se mantiene igual. Lo siguiente que vamos a hacer es que vamos a cust mecanismo Vamos a convertirlo en un cust puro. A partir de aquí, queremos el componente de movimiento giratorio, y vamos a esa velocidad de rotación. Dos -60. Comienza a girar la rueda, y voy a establecer M 62 y eje. De hecho, vamos a probar esto. Encontremos nuestro elevador. Esto significa compilar De hecho, abramos el menú principal y hagamos que nuestra Sra. un poco más pequeña. Menú principal. Aquí estamos. Y vamos a ir a mosaicos y pongamos esto en diez. Digamos diez por ahora. Voy a compilar. Presionemos play. Un mapa muy pequeño. Creé una habitación. Interesante. Nuevamente, se puede ver que no pudo encontrar un lugar que sea válido para colocarlo, así que optó por estar al lado de una puerta. Nuestro personaje es muy, muy pequeño. De todas formas. Así que va por evert. Esto no debería estar rotando desde el principio. Así que vayamos al mecanismo elevador y fijemos la velocidad de rotación a cero. Vamos a compilar y guardar. Volvamos a jugar. Sí tocó el santo. O eso es porque no tenemos el artículo ni derecho. Pero ahora no está rotando. Es bueno saberlo. Hagamos trampa un poco y agreguemos este artículo en nuestro inventario. Vayamos a nuestro bajista, vamos a nuestros planos Pasemos a nuestro modo de juego. Seleccionemos nuestra variable de inventario, y agreguemos I six con cantidad de uno. Nuestra compilación ahorra Creo que vivimos cantidad a cero cuando no hay cantidad. Vamos a estar seguros de ir a artículos, artículos dt, la cantidad clave uno. Tenemos uno en todo. Lo bueno que agregué uno aquí. Compila y juguemos, y ahora sí tenemos la clave Esto seguro necesita una alerta de cámara diferente. A aquí. Aquí está. Y empezó a girar la rueda. Eso es bueno. Ahora, eliminemos esta clave de nuestro inventario. Volvamos a su elevador. Vamos a conseguir nuestra referencia de inventario que tenemos de aquí, voy a redirigir bajo Y luego voy a redireccionar aquí también. Voy a quitar el seis. Ahora, se retira, pero si tenemos nuestro inventario abierto, esta madera actualizada. Necesitamos actualizar nuestras imágenes en el inventario. Desde nuestro modo de juego, vamos a arrastrar aquí, y vamos a obtener el juego nuestra referencia de widget, la jugabilidad del widget, y vamos a hacer un inventario. Y el inventario sería esto el fuera de aquí. Porque aunque solo la estemos quitando aquí, esta variable ha sido actualizada. Ahora, toquemos también un sonido. Vamos a copiar esto. Vamos a hacer que desbloqueemos. Creo que esto es lo que jugamos aquí. Sí, desbloqueo del elevador. Y ahora es el momento de plantear el siguiente laberinto. Entonces, ¿cuál sería la ubicación de nuestro próximo? Bueno, esto depende realmente de lo que queramos. Por ahora, acabo de establecer la ubicación, obtengo la ubicación del actor. Y a partir de eso, agregué en las Z 2,500 unidades irreales. Oh. Vamos a promover esta variable. Llamemos a este nuevo Centro. ¿Y por qué nuevo centro? Porque nuestros laberintos empiezan a construirse O las mazmorras empiezan a construirse desde el centro hacia cualquier dirección No, vamos a poner una clase de policía, y vamos a elegir nuestro generador. Laberinto gen. Y vamos a dividir la ubicación y conectar esto. Ahora bien, tenemos un montón de opciones aquí que necesitamos completar. Para completarlos, necesitamos saber qué nivel estaba el generador anterior y alguna información del mismo. Lo que vamos a hacer es volver a crear una g de referencia. Vamos a hacer que escriba Me gen. M. Otra vez referencia objeto , claro, y vamos a traerlo aquí. Lo primero que necesitamos son nuestros estilos mac. Porque en base a eso, solo vamos a digamos agregar rango entero aleatorio. Eso sería de digamos uno, dos, vamos a conseguir nuestro nivel generador. Uno, dos niveles de generador más uno. En este caso, uno, 22, entonces sería uno, dos, tres, uno, 24, uno, cinco, y así uno. Entonces vamos a conectar esto aquí, y el tamaño del estilo debería ser 600, significa que por defecto debería ser 600. Estoy confundido. Tenemos el valor correcto en el menú principal. Son 800. ¿Por qué estoy atascado con 600? No lo sé. M talla F ma talla, obtenemos talla ma. Y debido a que estamos sumando una cantidad incrementada, siempre vamos a aumentarla en una sola. Pero hagámoslo solo cuando nuestros estilos mac no encajan en nuestra ma. Entonces como hemos llegado al máximo. Vamos a hacer un menos y vamos a multiplicar esto de t. Entonces, esto básicamente es cuántos azulejos podemos agregar a nuestro laberinto. Y si esto es más bajo de lo que podemos colocar, entonces todo está bien. Entonces vamos a hacer un tamaño de laberinto selecto, voy a usar esto para una condición, y si es cierto, si esto es menor de lo que podemos caber, entonces elegimos el tamaño de may. Nosotros lo mantenemos igual. Cuando no podemos, entonces solo agregamos uno. Vamos a traerlo aquí, para que quede más claro. Agregamos uno a todo el perímetro. Esto podría estar bien. Ahora, por supuesto, necesitamos un nivel generador, así que vamos a obtener nivel generador y sumar uno a ocho. Y conecta esto aquí. Nuestro generador está actualizado ahora. Vamos a verlo en acción. ¿Tenemos un choque maravilloso, o todo está funcionando a la perfección? Entonces vamos al elevador. Tan pequeño personaje. Y estamos mostrando carga y pantalla. Eso no es bueno. Y tenemos un congelamiento. Voy a controlar eliminar. Esto es probablemente algún bucle salvaje para. Eso es un bucle sin fin. Voy a usar el administrador de tareas para y voy a reabrir el proyecto Esto sucede a menudo con bucles. Pueden destruir completamente lo que estás haciendo. Pero existe la posibilidad de que eso no fuera porque sí tenemos nuestra carga, y sin cargar, algunas cosas podrían no funcionar. Volvamos. Creo que este es un buen punto de parada para este. Vamos a arreglar esto en la siguiente. D entonces? 80. Generación continua de laberinto desde el primer mosaico: Y bienvenidos al taller de diseño de juegos bajo Engine five procedural Dungeon action o Pz creation calls Anteriormente, comenzamos con nuestro elevador comenzar evento de superposición, que cuando pisamos nuestro elevador, verificamos si es el jugador. Y luego comprobamos si el jugador tiene la llave que se supone que tiene que tener. Si no lo tiene, tocamos un sonido como fallar. No se puede proceder. Si sí tiene la llave, sí queremos los eventos que van a seguir. Entonces no estamos seguros de eso así que estamos seguros de que no vuelven a correr. Para comenzar, comenzamos con separar a nuestro niño actor, que es este mecanismo por aquí, y fijamos su componente de movimiento giratorio que hemos agregado al mecanismo elevador, para rotar en -16 en el eje y Luego continuamos retirando la clave del inventario, y actualizamos nuestro inventario. Tocamos un sonido que el elevador desbloqueó, y generamos nuestro nuevo laberinto, que tuvo algunos problemas Y para ser honestos, claro, tenía algunos problemas. En primer lugar, no hicimos clic en Continuar. No hice clic en Continuar porque estoy haciendo el curso. Entonces fue este botón de continuar jefe por aquí donde necesitamos dar click para indicarle a este generador que vamos a continuar. Si esta no es la primera pieza, continúe construyendo. También podríamos haber comprobado si el, el nivel del generador era el número uno. Ah, hemos almacenado también Entonces luego me nivelé a la mazmorra, a la modalidad de juego Podríamos haberlo estado tomando del modo juego en lugar de crear referencia solo para esto, pero de todos modos, lo que tenemos que hacer es conectar el continuum al primer estilo Porque no queremos mostrar una pantalla de inventario. Me han quitado de padre. Entonces cada vez que esto se va a llamar, probablemente va a producir un error, pero no nos importa porque sabemos por qué está ahí. Si no quisiéramos ver el error, podríamos poner un nodo es válido. Así antes del porcentaje establecido, y lo conectaremos aquí, si es válido, establecemos por ciento, si no es válido, vamos al siguiente nodo. Pero no vamos a hacer esto. Vamos a dejarlo para que tenga un error, un error controlado. Vamos a llamarlo. Cuando se le llama, alrededor de 5 horas. Está bien. Ahora, en nuestro primero en nuestro estilo spawn first, necesitamos agregar el código de desove el primer ¿Y por qué es diferente? Vamos a pintar. Oh. Cuando engendramos digamos que esto es para acercar. Esto está fuera. Yo es simplemente perfecto. Aquí. Digamos que este es nuestro azulejo que comienza. Esta es nuestra baldosa que tiene el elevador, por lo que esta es nuestra plataforma del elevador. Cuando subamos. Cuando estamos desove el siguiente laberinto y vamos subiendo, se genera directamente encima Entonces, si esta es la primera teja, y necesitamos desplazarla hacia una dirección. Y decirle a este estilo que la dirección que desplazamos lo contrario de la dirección a la que lo compensamos es lo que llamamos la intro, donde en realidad tenemos nuestra caja que vendrá el Entonces, al compensar esto, hacemos el centro de nuestro calabozo, el bloque de introducción a partir de ahora Así que vamos a hacer esto muy rápido. Lo que vamos a hacer es crear una nueva variable local. Pero vamos a llamar dirección offset direction. Va a ser de la dirección tipo. Entonces vamos a establecer un elemento Random a partir de una matriz. Y vamos a hacer matriz para elegir una dirección, eso es a las cuatro, esto será noreste suroeste Norte Suroeste, y esta sería nuestra compensación. Lo siguiente que necesitamos es una nueva salida. Así que vamos a volver a hacer un bucle salvaje, volviéndonos salvajes. Para la condición, vamos a usar nuestra última salida no es igual en realidad dos de dirección establecida. Así, el igual en no el operador. Si bien esto es cierto, no queremos continuar. Necesitamos encontrar una nueva salida aleatoria. Entonces lo que vamos a hacer es esa última salida a cualquier valor aleatorio que pueda asignar. Esto no necesita ninguno Vamos a esto. En fin, continuemos. Entonces para ser honestos, el El verdadero laberinto, no va a cambiar el centro del mismo. Nosotros solo lo compensamos. No significa porque lo que vamos a compensar ahora es el actor real. Entonces lo que tenemos que hacer es la ubicación del actor. No vamos a estar compensando la baldosa. Vamos a estar configurando el generador. Entonces, cuando genere el mosaico, se lo compensará Eso tiene sentido. Y vamos a seleccionar voy a añadir dos pines más, y el índice sería nuestra dirección de desplazamiento. Vamos a traerlo. Y ahora necesitamos hacer una compensación a nuestra ubicación. Eso sería obtener ctación. Eso también se requerirá para realizarlo o remarlo desde aquí. Dividamos esto. Norte sería solo agregar el tamaño de la loseta tamaño a x y el resto permanecería el. Eso sería noreste estaría sumando el azulejo hasta la y y el resto se quedaría igual, x y anuncio. Tu estaría negando este tamaño menos xy, y el resto la s. este es un espagueti increíble, este es el nivel de albonaa U y lo contrario para el poniente, tamaño de azulejo aquí o y y x y establecer lo mismo, y eso será oeste. Ahora tenemos compensado que nuestro actor. Ahora, copiemos parte del código que tenemos a continuación porque lo necesitamos. Necesitamos el azulejo de cuchara BP. Cordones de azulejos, vamos a dividir esto para ser 00. Tenemos que agregarlo para destruir. Tenemos que agregarlo al mapa de mazmorras, los cordones actuales. Necesitamos el especial para agregarlo a las baldosas especiales, y no necesitamos el resto. Traemos esto aquí. Nuestros cables de corriente predeterminados son 00, así que está bien. Vamos rápidamente a través de los cables actuales bien. Eso está bien. Bien cerca adyacente, Noreste Oeste, vamos a pop a cada uno de ellos, así conseguimos a los vecinos. Digamos que el índice es igual a. Lo que quiero hacer es simplemente agregar la dirección de desplazamiento al vacío forzado. Voy a ramificar aquí. Si es igual a norte es cero, dos, dou es uno, oeste es tres, A, y vamos a agregar dos R y la matriz será la manguera I Y ahora sí necesitamos una referencia a nuestro dueño elevador, el elevador que generó este laberinto Tenemos una referencia del elevador en alguna parte, tenemos la referencia del elevador de desove Duplica esto. Vamos a llamarlo dueño elevador. Muy mal nombrar aquí. Entonces lo que vamos a hacer, ir a nuestro elevador y crear un vari, llamarlo acción Va a ser de la acción. Porque lo vamos a necesitar más tarde. Hagamos que la instancia de elevador de spa editable y expongamos en spawn El elevador bactor otra vez, va a refrescar esto. Tenemos el elevador spon, vamos a poner tel El elevador spon, el que nos engendró y el elevador de engendrar, el que laberintos telefoneando Volvamos. Un generador. Un primer estilo pequeño. Al final aquí, consigamos nuestro elevador de engendradores y fijemos Conéctelo para completar y conectemos la dirección de desplazamiento. Ahora tenemos nuestro primer spon estilo. Ahora, si voy a jugar, comenzó en el lugar cero. Yendo muchas trampas. Voy a expulsar lúpulo. Por favor. ¿Verdad? Esto se esperaba. Vamos a controlar Al eliminar cerrar este programa. Y, la tercera vez es el encanto. Vamos a ver en la siguiente lección por qué no siguió. Adiós por ahora. 81. Animación de ascensores y efectos de sonido: Hola. Y bienvenidos al Taller de Diseño de Juegos y Real Engine five procesal Dungeon action LPG curso de creación Anteriormente, terminamos con nuestro evento de primer azulejo de desove Agregamos el desplazamiento basado en una selección aleatoria de nuestra ubicación Maze. Entonces empezamos a desovar el primer azulejo. Lo agregamos a nuestras listas, y nosotros también por el desplome PD. Bien. Entonces déjame agregarlo realmente rápido otra vez. Vamos a ir al elevador. Yo guardé las indicaciones aquí. O, consigue nuestro engendrado por elevador, no el engendrado. Nos quedamos con esto también. Así que vamos a obtener esa dirección de direcciones y establecer la dirección establecida a nuestra dirección de desplazamiento. Ahora, después, intentamos jugar y se pincharon. En primer lugar, vamos a comprobar dónde estamos desove el elevador, que proponer Lo primero que hacemos, y no tenemos la referencia del generador Vamos a hacer click en nuestra variable generadora, vamos a hacerla instancia editable y exponer en spawn dentro de nuestro elevador Vamos a compilar y guardar, y voy a refrescar esto. Tor, y para generador, vamos a ponernos a sí mismos. Esto cubre hasta cierto punto. Vamos a nuestro gráfico de eventos. Vamos a nuestro evento Built, creo. O, no el construido. Volví a ir al primer azulejo porque aquí hay un error. Queremos lo contrario de esto. Agregamos la dirección de desplazamiento y utilicé el 02 basado en nuestra cruz multada adyacente Sí necesitamos lo contrario de esto. Entonces ese sería uno. Entonces sur sería cero. Eso serían tres, y lo que serían dos. Ahora bien, esto debería tener cerdos son temas. No sé si vamos y mejor tocamos uno con el cofre, el vino. ¿Qué es el elevador? Lejos. Tenemos algo. Ellos están arriba engendrados, pero no nos estamos moviendo Ahora, como pueden ver, todo proyecta una sombra para arreglar esto. Vamos a hacer trampa un poco y vamos a abrir nuestro azulejo, y vamos a seleccionar nuestras paredes principales, y ponerlas para que no proyecten sombras. Y vamos a hacer esto también para el uso de la palabra. Y las vides. Voy a compilar y guardar play. Un poco de marco ahí. Vamos a movernos. A lo mejor deberíamos hacer estas cajas un poco más pequeñas y hacer que la agricultura sea un poco más grande. ¿Dónde está el elevador de ahí? Oh, por cierto, he cambiado mi talla de ma a 20 otra vez en lugar de diez. Yo tipo de cámara. Entonces no tenemos estas enormes sombras que teníamos, pero sí tenemos un resplandor. Estoy adivinando que el resplandor viene de esta lava que hay debajo de aquí Así que vamos a hacer trampa un poco de nuevo. Vamos a salir a donde teja otra vez. Vamos a duplicar el piso. Base un piso, un poco abajo, por lo que esconde lava. B otra vez. Fue un bonito resplandor estar encendido yo era el mono. Resplandor demonio. Lo que el piso es lava, así que tenemos que esconder la lava. Y sí, voy en la dirección correcta. Y ahora no tenemos este resplandor. No bloqueamos al jugador. Porque el ratón realmente golpea aquí. No puedo moverme Oh, es hora de hacer subir el elevador. Solo estoy comprobando que se encuentra en la ubicación correcta. Sí, tenemos d aquí, así que supongo que el S&P una buena primera pieza, dos opciones aquí para izquierda o derecha elevador y la caja están bien. Tener algo de tiempo ahí. Ahora, volvamos a nuestro elevador. Y tienes esta referencia. Y ahora hay que pasar dos cosas. Oh, vamos a poner una secuencia, y vamos a crear un evento. Llamemos a esto estaciones de eventos, y llamémoslo el indicado. Y vamos a completar esto después. Ahora, lo segundo que necesita lo primero que tiene que pasar es que obtengamos nuestro controlador de reproductor. Entonces podemos sacar la nota que queremos, que es el espacio objetivo de vista terrestre, algo así. Ver objetivo con planta. Oh, el tiempo del plan sería de 3 segundos, y el resto, sólo nos vamos a dar ese. Después de que comencemos a reproducir las animaciones, vamos a retrasar o 2 segundos. Y luego vamos a crear un bulion en las variables. Llamemos a esta condición, y vamos a establecer esta condición verdadera. Ahora bien, ¿qué va a hacer esta condición? Vamos a usar el evento tick para impulsar nuestra animación. Vamos a tener esta condición por aquí. Eso es condición de calidad. Un nombre poco mejor. Con base en esta condición, vamos a estar manejando real cuánto sube nuestro elevador. Y claro, estaba bromeando cuando dije, vamos a hacerlo de la manera difícil de mover el cuerpo y no al actor Vamos a estar moviendo al actor. Es mucho, mucho mejor ya que también desconectamos, desapegamos al niño actor. Pero vamos a explicar cómo iría para no el actor y si fuéramos a mover el espacio relativo del cuerpo. Oh. Cuando nuestro elevador se mueve, queremos estar tocando un sonido. En este momento, solo queremos reproducir sonido. Vamos a crear un sonido porque nuestro elevador podría por un segundo. Vamos a hacer que el elevador se mueva en consecuencia como lo haría la parte de carga, esperaría a que se completara el laberinto para llegar a destino. Porque si no hacemos eso, existe la posibilidad de que el elevador suba y llegue al destino sin que el laberinto esté completamente construido. Y esto es algo que no queremos. Entonces vamos a tener una unidad Alpha, como hicimos en los Lerbs, como hicimos en las líneas de tiempo para Oh, comencemos con el sonido. Lo que tenemos que hacer para que el sonido pueda controlarlo. Yo hago un sonido Lay. No tengo control sobre. No tengo control sobre esto. Yo solo tengo control sobre volumen playa, hora de estrellas, ajustes de concurrencia, que es algo así como puedes poner reglas como tamaño de reverberación, donde está un poco completo En fin, no tengo una referencia real al sonido, donde si utilizo el sonido create, D. Entonces tengo este valor de retorno, que es una referencia al sonido que estoy tocando pero en realidad creando, no jugando todavía. Porque cuando estoy creando un sonido, necesito ordenarlo para que haga lo que quiera, es solo crear una variable de sonido, un canal de audio básico. Entonces voy a promocionar esto pongamos primero el sonido, elevador algo. Creo que es la máquina del elevador. Sí. Es la señal de la máquina del elevador. Voy a promover esto tan Variable. Llamemos a este elevador con destino. Y ahora vamos a empezar a jugarlo. Voy a presionar. Jugar. Y solo pienso en este sonido. Nosotros lo hemos configurado para que sea un looping. Entonces esto es un sinfín. Hay que detenerla cuando queremos dejar de tocarla. Oh, ve a guardar todo. Caso Justin. Y comencemos con nuestras animaciones. Pero hagámoslo en la siguiente lección. Ese es un buen punto de parada por ahora. W para verte en la siguiente. Adiós. 82. Cinematografía de cámara para ascensor: Hola, y bienvenidos a ganar taller de diseño, y real Engine five, Procesal Dungeon, curso de creación de juegos de rol de acción Anteriormente, creamos las últimas partes de nuestro evento de superposición inicial en nuestro elevador. Plantamos el objetivo de vista con nuestro que realmente necesita yo aquí. No se mezclaría a través ningún objetivo si no tiene un nuevo objetivo. Así que nos mezclamos con nuestro nuevo objetivo, y creamos el evento de inicio de animaciones que vamos a sentir en esta lección. Usamos el retraso para configurar las cosas, nuestras animaciones y todo lo demás, y establecemos la condición t en true después de eso. Creamos al sonido, y lo almacenamos en una variable, y lo configuramos para que se reproduzca. Y explicamos algunas cosas sobre cómo va a funcionar nuestro movimiento de elevadores. Éste, comencemos por crear la animación. Comencemos la animación. Lo primero que vamos a necesitar es una línea de tiempo. Entonces vamos a agregar item, y vamos a entrar y crear una nueva pista de flujo. Va a ser una pista de flujo de flujo muy pequeña otra vez, vaya a ser tiempo cero, valor cero, y 0.3, 0.3 es cinco. 0.3. Sería uno. Vamos a hacer clic. También use el último marco clave. Regresa aquí. Ahora, conseguiremos a nuestros fans. ¿Vamos a hacer? Voy a conectar esto. Voy a hacerlo. Voy a conectar esto para actualizar. Y ahora vamos a conectar esto, para conseguir c. me voy a dividir. Voy a catión. Y voy a dividir el. Voy a agregar x e y. Ahora, para nuestra t, aquí es donde aprenderemos. Vamos a dejar flotar y vamos a usar el camión nuevo. El lugar al que queremos moverlos es de lo que sean ahora mismo, a cero. Para ello, vamos a ir a empezar a jugar. Eliminar este acto, no importa, y vamos a conseguir la primera barda, obtener la ubicación relativa. Voy a dividir esto. Voy a promocionar la b y quedarme esta regional y que la voy a conectar aquí. Ahora esto está almacenado. Voy a volver a la línea de tiempo, y seleccionar esto para Alfa, y B sería cero para A, no Alfa. Alpha sigue siendo nuestro nuevo camión, nuestro camión de flujo. Entonces, veamos que esto funciona. C play. Objeto. Ve a agarrar a mi personaje porque no voy caminando por ahí. Voy a traer aquí al personaje. Yo recobro. El mando hace mucho, pero la barda sí sube, y sí, está funcionando. Entonces el siguiente paso es hacer subir el elevador. Y para eso, vamos a usar e. Ahora, tenemos nuestra condición. Si la condición es cierta, yo para subir gasolina. Mientras que, si hiciéramos relativo aquí, estableceríamos una ubicación relativa, y necesitaríamos el cuerpo como referencia. Y esto llevaría todo lo demás con nosotros. Pero vamos a usar el conjunto de una ubicación. Oh, para la nueva ubicación, necesitamos ir entre la ubicación actual y nuestra ubicación objetivo. Entonces vamos a necesitar ir a empezar a jugar de nuevo. Creo que está por encima de todo, y vamos a hacerlo. Vamos a estar promocionando estos dos originales lo. Lo siguiente que haremos es sumar a esto nuestra altura, que queremos engendrar el siguiente laberinto, que sería más 2,500 Pero como necesitamos ir un poco más alto, haríamos esto 2 mil 900 Tenemos que bajar, tener algo de espacio para bajar abajo. Ahora, vamos a promover esto. Este sería nuestro get pariente Pat. En realidad no relativo. Lo siento. Me pongo paciente. Ahora, tenemos estos dos valores. Volvamos a nuestro Tiki doblado. Oh, Cuando tenemos una línea de tiempo, tenemos un vector y vamos a nuestro origen y nuestro objetivo. Este es nuestro origen, y este es nuestro objetivo. Y el Alpha está siendo establecido por nuestro camión de flujo de línea de tiempo generalmente. Ahora necesitamos promover esta variable que se llama alfa máxima. Porque vamos a estar configurando esto desde nuestro generador de laberinto como hicimos con la carga. Y en base a eso, esa es la altura donde elevador intentará alcanzar hasta que este Alfa llegue al número uno. Entonces va completamente de A a B. Para hacer esto. Vamos a usar en constante. Que como dice la propina, trata de alcanzar un objetivo a ritmo constante. Entonces tenemos una corriente y tenemos un objetivo. Para nuestra corriente, vamos a conseguir una ccation. Y nuestro objetivo sería el erb, el resultado del erb Para nuestro tiempo Delta, ahora mismo, vamos a usar los segundos Delta, que hace que sea un poco confiable en el marco Hay una fórmula para que no sea confiable en fotogramas, velocidad de fotogramas no afectaría el movimiento, pero no vamos a hacer esto ahora mismo Para C, en velocidad terp, que es el paso de esta vena b, usaremos 350 Ahora bien, lo siguiente que debemos hacer es hacer una pregunta. Hemos alcanzado nuestro objetivo, porque has alcanzado nuestro objetivo, entonces deberíamos detenernos y revertir nuestras animaciones, hacer que las vallas bajen No, hay muchas maneras de hacer esto. En realidad, podríamos guardar nuestro Alfa igual a uno, pero asegurémonos de que nuestra ubicación objetivo es la misma que nuestra ubicación actual. Vamos a hacer un igual, perdón, casi igual. Para los que no vieron fue este fondo aquí, no el exactamente igual, el casi igual, y vamos a darle digamos 1010 y unidades reales, que es yo diez centímetros. Ahora podemos darle la vuelta a nuestra condición también. Este evento de palo ya no se ejecutaría. Lo siguiente que debemos hacer es que vamos a establecer la longitud de la pieza objetivo aquí. En lugar de vender para el nuevo objetivo, desde nuestro controlador de juego, vamos a ser controlados, y este sería nuestro nuevo objetivo. De la cámara del elevador, regresamos al jugador. Vamos a poner un 52 aquí en la mezcla exponencial, que es Controla la forma de la curva como puedes leer en la descripción sobre cómo va Lo siguiente que tenemos que hacer es que podamos entrar en el generador de laberinto y crear una nueva función. Llamemos a esto así formas. Y vamos a conseguir que nuestros actores destruyan. Somos Paul Look. Vamos a comprobar si es válido. La razón por la que estamos comprobando si es válida, es porque incluso estamos agregando artículos que vamos a recoger. Si tenemos recoger el artículo, entonces ya no es válido. Entonces debemos verificar eso. Entonces el actor, si el actor es válido. Entonces nosotros de nuestro hijo elevador, que es el elevador del nivel anterior. ¿Ahí está? Ahí está. Este elevador no debería ser destruido cuando creamos el nuevo laberinto, porque si se destruye cuando creamos un nuevo laberinto y caeremos a la nada realmente al vacío sin fin. Entonces tenemos que verificar si esto es válido también. El motivo por el que tenemos que verificar es porque si es el primer laberinto, entonces no tiene este elevador. Por último, vamos a destruirnos a nosotros mismos. A. Vamos a compilar. Dave Dave y compilar. Dave todo en realidad. A ver si está funcionando. Para conseguir un personaje. Voy a mover el personaje y conseguir el personaje. El elevador está aquí. Entonces me estoy ocupando y el actor no se mueve. Esto es porque no hemos puesto el pa. Blow Lo que tenemos que hacer es en nuestro generador de laberinto, donde sea que estemos realmente establecidos por ciento de nuestra carga diferenciar entre estos dos y establecer por ciento en nuestro elevador de bonos. Oh. Eso es algo que haremos la próxima vez. Te voy a ver entonces, adiós. 83. Solución: problemas de mezcla de vistas de cámara: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG Creation Course Anteriormente, terminamos con nuestras animaciones de elevadores. Completamos la animación de las cercas usando una línea de tiempo y un bucle for para atravesar todas las cercas, y establecemos la ubicación relativa basada en Z y cero originales Porque en nuestra Z original, ahí abajo. Entonces continuamos con nuestro t evento que cuando nuestra condición t es verdadera, lo que significa que podemos empezar a movernos. Trasladamos la ubicación del actor thro entre el original y el objetivo en la ubicación objetivo a la que deberíamos ir Y usamos el Max Alpha para conducir la distancia entre estos dos. Y luego usamos la bahía interpretamos constante desde nuestra ubicación actor hacia el objetivo con pisar 350. Entonces verificamos con una sucursal si alcanzamos nuestro objetivo, y si lo hicimos, mezclamos la cámara de visión y apagamos nuestra condición t. Ahora, continuemos con nuestro generador de laberinto, donde sea que tengamos el porcentaje establecido de carga para crear dónde está el primero. Aquí está el primero. Este se pone a cero. Cero, empezamos, no necesitamos hacer eso. Pero tenemos que diferenciarnos en la construcción. Aquí en realidad hemos puesto el válido, lo que nos da la rama básicamente. Hagamos algo de espacio. Vamos a necesitar más espacio. Creo que ya es suficiente, más que suficiente. Así que vamos a leerlo aquí y en realidad, la carga podría seguir siendo válida porque no vaciamos la variable. Esta validez no es lo suficientemente buena. Necesitamos una sucursal. Pero si es continuar, pero cuando es, hacemos lo nuevo, cuando es falso, hacemos el porcentaje establecido. Y lo nuevo llegará a conseguir el elevador sponer. Y ese Alfa. Creo que esto es 0.4, vamos hasta el 40%. Sí. Así que establece Max Alpha en 0.4. Nikki cosita aquí, casi no la veía, y me preguntaría por qué esto no se mueve Una rama de copia y el setter, y la segunda carga está aquí arriba Podemos saltarnos este acto. Ir directamente 0.5. Vamos a la rama, lo falso va a lo viejo. Lo cierto es lo nuevo, este 2.5. L et's avanzan. Vamos a estar guardando algunos de ellos. Vamos a poner aquí 2.7. Aquí, las caídas a lo viejo al nuevo peso. Esto es correcto. Desde Alpha, estamos pasando exactamente al siguiente desde el porcentaje establecido. Claro, lo suficientemente claro. Vamos a quedarnos 85, y vamos d uno. En realidad, esto no necesita conectarse aquí. No estamos empeñando a un jugador, no estamos jugando ninguna animación No estamos haciendo nada de esto. Entonces esto puede terminar aquí en realidad con uno. Entonces podemos cambiar 0.7, pongamos 0.8. Y eso sería suficiente. ¿Deberíamos pensarlo dos veces? No, vamos a jugar. Inicio. ¿Le daríamos un segundo pensamiento? No. Juguemos. Para. Encontremos el todo cerca. Madera. Y estoy consiguiendo dz otra vez. Nos estamos moviendo. Nos estamos moviendo y se construye el segundo laberinto. Y llegamos al segundo laberinto. Y el primer laberinto no se destruye. La música no ha dejado de sonar. Todavía podemos interactuar con esto. Lo primero es lo primero. Detengamos la interacción. Lo que hacemos aquí es ponerlo en nuestra colisión. Después de los do unos, entonces obtenemos nuestra caja y está habilitado para no colisionar, que es el valor predeterminado. Segunda cosa. Arreglemos este mareo con la cámara de verdad me hace marear Acerquemos un poco la cámara. L et's set inrotation a o Dios o éste, parece No. Creo que el primer cero fue el de hacer dasy uno Vamos a escoger esto. Ahí está el elevador. Oh, laberinto raro. Oye. Un poco mejor. Lo que estoy viendo estoy empezando por el lado opuesto. Oh, ¿por qué empieza tan raro? Ahí. D toda la cámara solo ve directamente arriba digamos, 800. Digamos, 600. Todo bien. Salgamos a los pacientes. Hoo. Sólo voy a atender la cámara 98 99. Puedo moverlo un poco más fácil hacia aquí. En rotación. Tienes otra vez 108. Voy a dejarlo 9000600, así que no tenemos más tiempo Puedes ponerlo donde quieras. Creo que esto estaría bien. Carácter. Elevador, que no conseguí el personaje. Pero el piso. Me moví el, el personaje cayó. ¿Dónde está el elevador? ¿Verdad? Oh, es incluso peor que nunca. Esta Increíble. Ocho, como se recomienda, es 60 -90 18 Los valores son que necesitamos arreglar este también. Como soy yo . Así que investigué un poco sobre lo que está pasando. Es un problema con cómo funciona el objetivo de vista soso con algo llamado bloqueo Kimbal, que convierte la pantalla en giros básicamente en pantalla partes lejanas sobre Northeast Southwest y sobre rotaciones ¿Qué pasa? Vamos a ver. Ahora, va a mover al jugador al lado del elevador. Nuevamente, en el suelo. Ahora, podemos 123 círculos, básicamente. Como puedes ver, prende casi tres veces. Esto tiene que ver con las pudriciones, rotaciones relativas y Lo que vamos a hacer y va a funcionar es que vamos a conseguir nuestra cámara y girarla 23 veces en círculo completo. Ahora si compilamos y vamos a jugar, estos arreglan el bloqueo de cardán en nuestro elevador Elevador y casi fijo. Esta arriba y abajo del elevador de caja a esta comprobación de dirección del jugador. Y está arreglado. Sí. Pero, lo mismo que tenemos que hacer para el juego de inicio. Esto vamos somos semicírculo, vamos una vez esto w Oh, fue todo lo contrario Voy a deshacer la rotación de la manera opuesta. O. En círculo completo. Ayuda. ¿Qué está pasando exactamente aquí? Y voy a expulsar la cámara. Yo estaba buscando desde aquí, esos son los jugadores. La cámara está equivocada, debería estar más hacia este lado, que es nuestra cámara original. ver lo que yo. No lo hice pre De nuevo, voy a moverlo de este lado. Voy a presionar K, posición David. Voy a pilotar esto. Mirando correctamente, nuestro jugador. Et's voy a presionar a Kate tocando de nuevo. Sí, básicamente, acabamos de traer la cámara para que se vea más desde el lado del jugador. Trabajó. Puedes jugar con rotaciones hasta conseguir un movimiento que está bien para ti y para la posición, vamos a dejarlo como Comprobemos que el elevador siga funcionando. Elevador. Todo bien. Por último, nuestras cámaras están fijas. Creo que fuimos de acuerdo con este con los lotes arreglando. Esto fue realmente crucial. Y paremos aquí y continuemos en la siguiente. 84. Animación de ascensores e inventario: Hola y bienvenidos al taller de Diseño de Juegos bajo motor cinco procedimientos Dungeon action z llamadas de creación Anteriormente, por fin arreglamos las rotaciones para las cámaras De hecho, podemos tener una transacción sin problemas y no esta máquina lavavajillas. No sé en qué estábamos. Y el elevador sea También Sí. Y podemos llegar al siguiente piso. Pero el sonido sigue sonando y las paredes no están bajando. Así que vamos a arreglar estos problemas. Y una cosa más que menciono es que nuestro laberinto anterior no estaba recibiendo id Entonces, comencemos con eso porque el código para eso, simplemente no lo hemos llamado. Vamos a conseguir nuestra referencia. Y vamos a llamar Destruir Laberinto. Laberinto anterior, que en realidad lo estamos llamando en el laberinto que va a ser destruido, así que destruir Maze sería un nombre mejor. Y vamos a probar. Como, bien. Al no lo superé. S. Hay un poco de brecha en la multa, y nuestra llamada laberinto anterior destruida, pero no nuestro elevador actual. Eso es bueno. No queremos que esto destruya porque no vamos a caer a ninguna parte. Sigamos arreglando el resto de las cosas. Lo primero que vamos a arreglar es la animación. Oh, tenemos que dejar caer las vallas. Yendo al auto eso. As en. Vamos a darle el nombre de barda. Oh. Lo primero que tenemos que hacer es del sonido del elevador. Vamos a detener la variable de audio. Ahora, vamos a eso porque queremos reproducir el sonido de parada. Y es elevador algo, elevador, una Q, y luego vamos a tocar sonido. Sólo juega. Y luego vamos a conectar el extremo inverso. Ahora, esto hará que bajen. Sin embargo, no hemos terminado. Necesitamos ampliar nuestra plataforma. No, vamos a hacer un interruptor de dirección. Y vamos a conectar esto en el acabado de la línea de tiempo. Espacio, paquetes arriba, que aquí, creo que está bien, y ahora necesitamos una nueva línea de tiempo desde atrás una línea de tiempo. El revés porque la razón es cuando pagamos hacia atrás, bajando la barda, no extendemos la plataforma. Y obtendremos nuestro avión elevador, que es nuestra plataforma, y esa ubicación relativa. Ahora, recuerden, almacenamos una variable llamada dirección. Y esta variable la almacenamos cuando creamos el primer estilo en nuestra generación de laberinto. El primer estilo continuó. Y esta dirección fue el offset que hemos compensado el primer estilo básicamente. Entonces sí tenemos esa dirección, que es nuestra salida hacia básicamente. Entonces hacia dónde está nuestro primer estilo que debemos extender. Y esto es lo que vamos a hacer con la nueva ubicación. Pero primero, tenemos que el er, de, no sorbe normales, perdón. Ert Y necesitamos agregar una línea de tiempo. Digamos que son dos segundos de lías, tardan 2 segundos 00 y uno, alimentemos y también usemos el último fotograma clave No, vamos a conectar este Alfa, y para B, vamos a seleccionar y la condición el comodín índice será nuestra dirección. Ahora, para Alpha, necesitamos la ubicación original de la plataforma. Entonces, vamos a ir al plato de inicio. Vamos a conseguir nuestra plataforma, vamos a conseguir una ubicación relativa, y vamos a promoverla a una variable. Vamos a nombrarlo pf ubicación relativa. A lo mejor la plataforma original re no importa. Vamos a conseguir esto aquí, vamos a conectarlo a Alpha, y luego vamos a agregarle. Bueno, vamos a agregar para oriente, norte y norte y oeste, vamos a quitar así que va a ser 300 en x o norte, duplicar esto, va a ser cero en x y 300 en y o este, entonces vamos a duplicar estos dos. Voy a conectar la plataforma al prest uno, y negar la x conectada al sur, a negar, al oeste conectada al oeste Ahora, Esto concluye un poco nuestro elevador. Y digo un poco porque vamos a necesitar cambiar algunos estados del personaje para soportarlo básicamente para que no pueda moverse mientras esté en el elevador Ahora, lo siguiente que debemos hacer es llevar nuestra interfaz de usuario a nuestro juego. Ya hemos creado la función para ello en nuestro modo de juego, que es s gameplay. Y lo único que tenemos que hacer es ir a nuestro personaje. Abramos este plano y busquemos ser juego. Y consigue el modo de juego. En cuanto a abajo, modo de juego, convertir a puro elenco, modo esta variable, conectado para ganar juego, esto como una variable, sin jugabilidad. Y esto traería R U Y cuando iniciemos el juego. Ahora ya podemos ver las monedas. Eso es lo único que podemos ver todavía porque no tenemos una llave traer el inventario. Hagamos una solución rápida para arreglarlo ahora. Vamos a traer nuestro inventario. Voy a escapar. Voy a ir a abrir nuestro controlador de arriba hacia abajo donde usamos los elementos de pegamento del botón Alt. Ahora, voy a usar el Este es el fondo que abrirá nuestro inventario y lo cerrará. Lo que tenemos que hacer es presionar. Vamos a rebaño. Cuando estemos en A, vamos a abrir un inventario, así que vamos a obtener nuestra referencia de inventario y hacer esto. Pasando al modo A. Lanzar modo de ganancia de arriba hacia abajo, convertir a reparto puro, y a partir de esto, vamos a conseguir que la peluca A. actualice. Inventario. Vamos a conseguir nuestro inventario. Y luego de nuestra madera tu jugabilidad, vamos a llamarlo animación, y vamos a jugar animación. Necesito algo de espacio. Por una caja fuerte contra fallas. Vamos también Animación. Poner un retraso. Y luego conseguimos. Y vayamos a nuestros widgets de jugabilidad. Y necesitamos caja horizontal de esta caja horizontal. HB. Tenemos que convertirlo en una variable. Volvamos a nuestro controlador. B, inventario y habilitado cuando estemos cerrando, le pondremos agujeros. No es cierto. Entonces tenemos que volver a jugar, la animación. Conectemos la animación, y necesitamos conectar el objetivo, que es el juego del widget. Vuelva a ponerse, y esta vez va a ir en reversa, no hacia adelante. Ahora, teóricamente, tenemos un error. Os no compilamos la jugada del juego. Por eso. Dave. Juguemos. Tengo uno de prensa. Tenemos nuestro inventario, que los botones no se ven muy bien. Oh, creo que esto es un arreglo para la próxima vez. Te voy a ver entonces. Adiós. 85. Sistema de minimapa: Y bienvenidos a taller de diseño de juegos y motor real cinco procedimientos Dungeon acción RPG curso de creación Anteriormente, terminamos con nuestros mecánicos de elevadores, casi terminados. Como decíamos, hay algunas cosas más que tenemos que hacer para cambiar estados del personaje. Pero terminamos con nuestro reverso de la barda. Paramos la música, el sonido del elevador, empezamos un nuevo sonido, y luego procedemos a bajar las barandas con el mismo código a la inversa de la línea de tiempo Y luego creamos nueva línea de tiempo basada en el canal hacia atrás de la línea de tiempo anterior, como cuando la línea de tiempo anterior termina al revés, luego ejecutamos esta, y agregamos la ubicación relativa de nuestra plataforma en función algunos valores codificados hat y la relativa, la ubicación relativa original. Además, agregamos nuestra jugabilidad que a nuestra pantalla, e hicimos la clave para generar el inventario, que en realidad está en el controlador de arriba hacia abajo Entonces ahora empezamos a hacer más cosas en el controlador y pronto mucho, mucho más. Y usamos el número uno en el teclado para flip-flop entre A y B, lo que A significa actualizar el inventario y reproducir la animación hacia adelante. Y con un retraso de la hora de finalización, lo establece enable, y B sería hacer lo contrario, lo pone deshabilitado, y la animación se reproduce hacia atrás. Habilitar y deshabilitar es porque queremos no poder presionar las teclas mientras la animación aún se está reproduciendo. Ahora, sigamos arreglando uno de los errores que acabamos de ver, uno de los problemas, que viene cuando no tenemos imágenes, exactamente el mismo principio. Cuando no tenemos imagen, cuando esta regresa, la textura de nuestro artículo devuelve nula, luego pone una imagen en blanco. Entonces, lo que vamos a hacer usa una selección en la textura hetect Y luego me voy a conectar. La imagen del inventario aquí, es posible que necesitemos desconectarla. Pero para el índice para lo que necesitamos, debemos verificar si esta imagen es igual a nada. Si es igual a nada, entonces seleccionamos otra cosa. Si no es igual a nada, seleccionamos la imagen del inventario. Otra cosa sería la imagen que hemos seleccionado aquí. Voy a ir aquí, encontrarla. A, y después voy a volver a la gráfica. Y arrástralo y suéltalo aquí. Ahora bien, esto debería haber solucionado nuestro problema. Como yo, es arreglar las imágenes, y tenemos nuestra clave porque agregamos nuestra clave al inventario. Podemos ver una pequeña caja blanca alrededor de esto, lo cual no es muy agradable. Oh, vamos a arreglar eso también. Vamos a ir al juego. Vamos a ir a diseñador. Vamos a ir al primer botón, y hay un empate alrededor de esa caja. Al presionar G podemos ver la vista del juego, y vamos a seleccionar de nuevo el primer botón. Si cambio esto a imagen, entonces lo está arreglando. Entonces, voy a cambiar esto a todo, a todo. Pero el hovert, deprimido, y lo normal, No molesto logger a veces Tan dibujado como imagen en todo. Y voy a copiar y pegar este azulejo a todo, copiar, y obtener este botón, voy a pegar. Voy a pegar aquí, y voy a pegar aquí. Y está arreglado. Ya no tenemos borde blanco. Para presionar play. Va a traer inventario. La primera vez que llega el inventario, no deshabilitado, mientras que todas las demás veces lo presentó Arreglemos eso también. Déjame probarlo otra vez. Claro. Sí, la primera vez que viene, no se presenta. Por defecto, calzamos tener esta barra desactivada. Finalmente deshabilitado, necesitamos deshacer clic habilitado, básicamente. Compilar y guardar, y este problema también se soluciona. Ya que estamos aquí arreglando el inventario, agreguemos también nuestro mínimo. No, vamos a necesitar una superposición. Vamos a traerlo por aquí. L et's lo unc a la esquina superior derecha. Por posición, vamos menos 370, posición y 50, empate sería 32020 Entonces hace una caja. Ahora, dentro de esta superposición, agreguemos una i. Re dos imágenes que van a estar sintiendo. Segunda imagen. Vamos a nombrar el segundo orden de imagen, que sea una variable. Hagamos la primera imagen que yo la llamo mínimos. Que sea una variable. Para nuestra frontera, la pérdida es, tenemos nuestro mapa de pedidos de fantasía, frontera mínima. Para nuestro minimapa, sí tenemos un material, creo. No, nosotros no. O borde llano. Tenemos el objetivo renderizado. ¿Qué significa el objetivo renderizado? No, vamos a ir a nuestro personaje y agregar Es la captura a de componente. Ahora bien, esta es una cámara básicamente, pero no es ninguna cámara. Una cámara con reglas muy específicas a la que apunta. Bueno, no los objetivos. Puede renderizar cosas específicas y no renderizar otras cosas. Pero no lo muestra a viewport. No es una cámara desde la que miramos. Una cámara que alimenta su velocidad a algo llamado render texture render target. Entonces, este es nuestro mínimo de arte. Vamos a seleccionarlo en el objetivo de textura de la cámara. Y en realidad vamos a establecer su altura muy alta. Vamos a fijarlo en 3 mil 303 mil. Puede capturar una gran distancia a lo largo de nosotros. Ahora, hagamos una comprobación más de que en realidad no tenemos el material. Nosotros lo hacemos. Creo que tenemos que rezar para volver a jugar. Entonces para cerrar esto, y ahora vamos a abrirlo de nuevo o podríamos evolucionar que esté aquí. Y ahora sí tenemos el objetivo de renderizado del minimapa material. Pero vamos a abrir por un segundo, y vamos a cambiar una cosa. Vamos a seleccionar nuestra muestra de textura, cómo ya está establecida t minimapa, y ahora vamos a conectar creo que la máscara de opacidad, o está conectando Este debería ser uno, la forma el círculo de forma, debería ser uno, y vamos a ahorrar. Ahora supuestamente vamos a seleccionar el material en nuestro minimapa mínimo que renderizo, y está funcionando Ahora bien, esto es un mínimo de tres D, lo que significa que es caro Pero podemos quedarnos un poco. Vamos a arreglar este movimiento de izquierda y derecha. Y pero sí tenemos un resultado. No podemos ver lo que nos rodea. La razón por la que no podemos usar una técnica tradicional y usar texturas y coordenadas y todo es porque nuestro mapa se está generando aleatoriamente. Entonces vamos a necesitar tres D mínimos. Hay otras formas de hacerlo también, pero para nosotros, esto estaría bien. Creo que este es un buen punto de parada para este. Vamos a continuar con el siguiente. Adiós. 86. Toques finales del minimapa y descripción de inventario: Hola, y bienvenidos a ganar Taller de Diseño, Real Engine five, Procesal Dungeon action RPG Creation Curse Anteriormente, arreglamos algunos problemas con la apariencia de nuestro inventario. Usamos ellos nos dibujan imagen en nuestro estilo para quitar las cajas blancas alrededor de los botones, y solucionamos el problema de tener una variable nula en esa textura cuando estamos configurando la imagen de inventario. Entonces necesitamos una rama que cuando es nula, cuando no es nada, entonces solo usa nuestra imagen para nada. En el inventario de actualización de código. No. Entonces procedimos a agregar nuestros elementos mínimos en nuestra pantalla, que es una superposición y dos imágenes Las dos imágenes son una para el borde, que elegimos la imagen de fondo de fantasía que tenemos imagen de borde, y para el material, elegimos el material M mínimo I, que es un material que hemos hecho y cambiamos algunas cosas dentro del material. En realidad, cambiamos una cosa, que el círculo de forma debe ser el valor predeterminado de uno, por lo que el material lbs para elegir el círculo porque está diseñado para un cuadrado o un círculo mínimo. Ahora, no volvamos a guardar. Agregamos a nuestro personaje, render, este no es nuestro personaje. No, es un personaje. ¿Bien? Entonces, agregamos nuestro componente capturado, que es una cámara especial que renderiza cosas específicas. Y establecemos el objetivo de textura para que sea el mínimo RT, que es donde se proyecta la alimentación de la cámara, digamos, más o menos eso. Entonces, ahora vamos a filtrar un poco lo que graba la cámara. Porque ahora mismo, como podemos ver. Lo graba todo. Incluso podemos ver al jugador. Realmente no podemos ver al jugador, pero sí podemos ver al jugador. El jugador está aquí. Sí me gusta que graba esto. Pero seguro, no debería ser la grabación de poemas. No, volvamos a volver a nuestro personaje. Seleccionemos la cámara. Pasemos a nuestra categoría de captura de escena. Vamos a hacer clic en Avanzado. Digamos que no queremos grabar los ESPs atmosféricos. realidad no usamos esto. No queremos la niebla. O lo hacemos. No lo sé. Si quieres la esfera en la atmósfera en la niebla, puedes mantenerlos. Lo que desde luego no queremos son mallas esqueléticas. A lo mejor partículas que eliminarán las puertas de él, pero no importa, mantendrá las mallas de las puertas de curación Y dejamos todo lo demás como facilidad. Si está tomando demasiada potencia de procesamiento, tal vez podamos eliminar algunos rayos. Pero si tu computadora puede manejarlo, puedes dejarlo como. Si no es así, sólo sigue revisando las cosas. Probablemente la iluminación También la iluminación oculta, translucidez tal vez. Sí. De todos modos, o siempre puedes establecer los ajustes de escalabilidad de tu motor para bajar Y eso resolvería mayoría de los problemas si tienes una computadora baja. Ahora, lo siguiente que debemos hacer es volver a ir a nuestro personaje, ir a nuestra ventana gráfica y arreglar el giro de la cámara Entonces vamos a traer nuestro componente de captura de escena aquí en comenzar a jugar. Vamos a permanecer absolutos, que es un nodo que le dice al componente si debe estar siguiendo coordenadas mundiales o coordenadas locales. Y queremos seguir la rotación absoluta del mundo, por lo que se queda igual. Entonces vamos a usar esto, y ahora nuestro minimapa debería estar listo Sí. Constante, pero está en nuestra dirección equivocada. Vamos a nuestra cámara y seleccionemos 45 grados aquí. Compila y guarda, y juguemos. Y ahora está en la dirección correcta. Podríamos hacer que el mínimo aparezca en el momento en que termine la larp de la cámara Pero esto va a estar bien por ahora. Vamos a dejarlo tranquilo. Y sería bueno que estuviéramos cerrando los mínimos cuando lleguemos al ascensor, porque podemos ver el laberinto el laberinto anterior desaparecer En fin, esto es gracioso, por lo emisivo del cofre, el material emisivo aquí, podemos ver estas aguas en el suelo No sé si son visibles que es una reunión. En fin, pronto vamos a cambiar algún modelo. Así que vamos a emparejarlo. Ahora que tenemos este sistema por aquí. Pongamos un punto para que el jugador también vea al jugador. Bueno, vamos a nuestro personaje. Agreguemos un sprite de papel. Oh, vamos a nuestro personaje. Agreguemos un sprite de papel. Y para el sprite de papel. En nuestras texturas, en realidad, solo podemos seleccionar el sprite de papel y simplemente seleccionarlo desde aquí Fuera. Vamos a girarlo para enfrentarlo correctamente con la flecha del personaje apuntando como el personaje, y fijemos su altura en 2,900 y es la escala 2.1 En todo, compilemos y guardemos. Ahora vamos a jugar. Tenemos un mínimo. Tenemos un sprite de papel para mostrar nuestra dirección al mínimo Espera. Y como vemos mucho del cofre siendo engendrado al principio, al no poder encontrar algún lugar para desovar, vayamos a nuestro generador de laberinto en nuestro create o Dividamos esto de nuevo por dos y en realidad solo agreguemos este nuevo por división a la primera división. Entonces llegamos al 75%, y conectemos esto aquí. Vamos a conectarlo también aquí. Y eso sería todo. En realidad, también está aquí. Y ahora, ojalá, est vamos a estar desove mejor. Pres el elevador. Oh, esta es una sierra muy bonita comparada con donde estamos. Prometedor, muy prometedor. Ahora ya que estamos en el tema UI. Agreguemos algo más a nuestro inventario. Agreguemos algo que cuando estamos rondando estos botones nos da información sobre lo que estamos rondando Entonces vamos a hacerlo de manera muy sencilla. Vamos a agregar bloque de texto de texto. Vamos a traerlo por aquí. Comprobemos con la animación. En algún lugar a la mitad de nuestro inventario. Eso podría estar aquí, creo. Podemos simplemente mirarlo ahora mismo. No hace falta que sea perfecto. Aquí está bien. Voy a traer su ancla también entrar. El centro está aquí arriba. Así que sólo vamos a traer el ancla aquí y establecer alineación 2.5 y 0.5. Lo siento, debería ser cero y el s ser menos. No. En realidad correcto. Genial. No importa. Talla 200 porque esa es la talla que necesitamos, y pongamos la justificación media ¿Por qué no me gusta? ¿Por qué pienso que es A, está completa? Esa es la posición en x e y, y luego la alineación 5.5, no vimos que esto estaba apagado. Ahora, sigamos adelante. Está un poco apagada, pero está bien. Vamos a hacer esto al. Vamos a llamar a esto la g vamos a hacer una función. Hagamos una nueva función. Digamos sobre propina, y vamos a necesitar algunas entradas. Va a ser de tipo habilidad. Verificación de visibilidad. Sí. Eso es lo que necesitamos. Voy a ponerle nombre visibilidad. Y vamos a necesitar otra entrada, va a ser entero, y va a estar adentro. Ahora, vamos a conseguir el modo gay. Vamos a GM. Hacer modo ga. Vamos a convertirnos a puro reparto, y vamos a conseguir ing. Ahora, del inventario, vamos a conseguir las llaves. Los vamos a hacer aquí. Y de la llave, vamos a conseguir la ranura de inventario. Entonces vamos a hacer una pregunta. ¿Existe nuestro artículo? Para ello, lo que vamos a utilizar la longitud de nuestro inventario, y lo vamos a comparar con plus, uno del artículo que es entrante. Estoy haciendo más uno porque cuando voy a llamarlos, los voy a llamar botón cero, botón uno, botón dos, botón tres, y la longitud comienza con uno. Entonces por eso soy más uno. Simplemente no pude hacer el cero, uno, 23 e ir con 1234. Pero vamos a acostumbrarnos a tener estas diferencias de conteo cero y al mismo tiempo, conteo normal con corte en uno. Bueno, vamos a comprobar si esto es mayor o igual. Y esto, voy a conectarlo aquí. Ahora bien, si es mayor o igual, si en realidad no lo es, necesitamos este texto fuera. Vamos a traerlo aquí. Voy a poner texto. Y vamos a decir, voy a establecer bility a la visibilidad entrante. Ahora bien, ¿qué pasa cuando es verdad? Bueno, vamos a conseguir mesa. Fila. Y para la fila, vamos a conectar este get. Para esa mesa, vamos a usar artículos, y vamos a romper la SD. Vamos a copiar y pegar este código por aquí. Y vamos a seleccionar el nombre aquí. En realidad no necesitamos el resto, y la visibilidad estará conectada aquí, que es la visibilidad de entrada que tomamos de aquí. Es así como hicimos la descripción sobre herramientas, la función que la hace visible o invisible Ahora bien, ¿dónde lo llamamos? Nuevamente, va a ser bastante sencillo. Vamos a ir a nuestros botones, y vamos a bajar en la lista y ahí está cómo necesitamos hacerlos variables. Entonces los necesitamos encendidos y encendidos. Hagamos esto por cada botón. Variable n hover. Coloca el cursor. Ir al tercer botón, es variable. Vamos al cuarto botón, es variable. Vamos desde dentro de la gráfica. Lectm aquí, es mucho más rápido sobre hover y botón tres hover y hover Hagámosles una buena lista. Para ponerlos en orden después. Y. Entonces tenemos el botón uno, dos, tres, cuatro, y tenemos el botón uno, dos, tres, cuatro Ahora traemos la función hover a cada patrón. Pasemos de cero, uno a tres, y visiblemente por lo contrario N sería el que el que entonces I. Aros a y escondido Y escondido. Comp y ahorremos. Vamos a jugar. haberlo sd invisible al principio. Pero cuando voy a otras cosas voy y cuando voy a la llave, voy a la llave. Cuando estoy cerrando, desaparece. Cuando estoy abriendo, aparece. No aparece hasta sobre algo. D. Ahora vamos a establecer el valor por defecto de que debe ser invisible visibilidad predeterminada, vamos a la visibilidad, y configurarlo en oculto. Y ahora tenemos nuestro. Hicimos mucho en esta lección. Sigamos con la siguiente. Pod por ahora, viéndote entonces. 87. Sistema de salud del jugador y widget: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, configuramos un poco los ajustes de nuestro componente de renderizado D en nuestro personaje. Entonces, fuimos a nuestra cámara y dijimos qué se debía renderizar y qué no se debía renderizar. Nosotros hice clic en la cámara. Tenía la intención de hacer clic en la captura sinusoidal al componente. Usamos los ajustes avanzados de captura sinusoidal para ir a nuestras banderas de espectáculos generales, y deseleccionamos partículas BSP y medidas esqueléticas Y como decíamos, también podemos seleccionar otras cosas si no deseamos que aparezcan en nuestra captura de pecado en nuestros mínimos Ahora, también agregamos sprite de papel para representar a nuestro personaje al mínimo Entonces cuando jugamos, podemos ver nuestra dirección, podemos ver hacia dónde estamos mirando en nuestro mínimo. Entonces sí sabemos hacia dónde estamos mirando. De todas formas, Luego procedimos y cambiamos nuestra regla en nuestra generación laberinto en la creación de cordones para el pecho En lugar de usar la mitad del laberinto, usamos aproximadamente el 75% del laberinto y para verificar dónde deberíamos poner nuestro índice de tesoros. Para lograrlo, dividimos la ya división del último índice por dos nuevamente por dos, y eso lo agregamos a la primera división. Oh. Después, procedimos a agregar en nuestro widget de juego un cuadro de texto que contendrá el nombre del artículo Hobart en Para hacer esto, usamos realmente nuestros eventos hover y no hoovered en nuestros botones, y creamos una función que toma el espacio de inventario basado en el botón que Y hicimos algunos creamos una cadena de eventos básicamente tomando el inventario del modo de juego, comprobando su longitud si es, si es mayor o igual al ítem más uno solicitado porque recuerde, la longitud comienza desde cero, lo que significa que no hay ítem y uno, que gana que sí tenemos un ítem. Y luego agregamos uno en la ranura de inventario porque cuando estamos diciendo qué botón estamos usando, en realidad hemos usado cero para comenzar. Yo uso cero para comenzar. Entonces cero más uno significa uno, y si tenemos una longitud de uno, estamos bien. No, que nosotros matematicas hice aquí. De todas formas, cuando no tenemos un artículo, decimos ninguno, el texto dice que no, y establecemos su visibilidad, y cuando tenemos un artículo, obtenemos de nuestro el nombre del elemento y lo configuramos en nuestro tooltip Ahora, sigamos con la creación del uso de los artículos. Al igual que cuando hago clic en un elemento, pasa algo. Y a través de eso, podremos seremos requeridos, en realidad para llenar algunas mecánicas de nuestro carácter. Por ejemplo, comencemos con la porción de salud, y cuando usamos una porción de salud, necesitamos agregar algo de salud a nuestro carácter. Esto requiere tener un sistema de salud que podamos agregar o quitar salud. Y una visualización de eso a nuestro jugador. No, comencemos con la parte visual. La forma en que hemos configurado nuestro sistema para la parte visual es a través de un material que cambiamos un parámetro interno para llenar el material a su valor máximo o a su valor cero. Oh, vamos a mostrar cómo hacemos esto. Vamos a conseguir una imagen Bueno tráela por aquí. Hagámoslo como lo opuesto al mínimo. Entonces posición, voy a poner 50, 50 o y veces x 256. 256. A lo mejor voy a bajar esto un poco más. Aquí, los anclajes también para estar seguros, tal vez un poco aún más bajos A lo mejor hacerlo un poco más pequeño también. Sí, por eso. ¿Correcto? No está alineando, pero es problema. Nuestro material, vamos a usar el M U I HP. Este material vamos a abrir el material. Tiene este parámetro HP, que va 1-0 y cambia el aspecto de nuestra barra de salud. Entonces este es un valor que vamos a estar manipulando a través de nuestro plano Para ello, volvamos a nuestra jugabilidad de Wood. Hagamos esto viable. Llamemos a esto barra P. No, es una imagen y vamos a ir a nuestra gráfica, y vamos a crear una nueva función. Llamemos a esta fecha fecha HP. Debería ser una E aquí. Ahora, vamos a necesitar una entrada, que va a ser del tipo de float porque tenemos el valor cero a uno, y vamos a llamar a esto HP. Lo siguiente que vamos a hacer es conseguir nuestra salud básicamente, un elemento, y vamos a conseguir material dinámico. El cual es un nodo que nos permite acceder y manipular el material del material de cualquier cosa que queramos dinámicamente en la jugabilidad. Lo que vamos a hacer es que un parámetro por valor, y vamos a conectar el valor aquí. Esto en realidad así que sea p por ciento. Porque no es el valor real de HP. Es un valor escalar 0-1, y es un porcentaje No es como si tuvieras 300 HP, devolveríamos 300 HP de 50 como no estamos devolviendo las matemáticas. Estaremos devolviendo directamente el porcentaje. La parte importante aquí es el nombre del parámetro. Esto se mecanografiará exactamente como en el material. Vamos en el material, creo que es valor HP. Y. Para estar siempre seguros, podemos elegir el parámetro y simplemente copiarlo y pegarlo aquí. Uy copia. Copiar y pegar. Lo que pegué era en realidad coed porque el control no funcionaba Cuando presioné el control C, no funcionó por alguna razón. A lo mejor lo hice hacia adelante. Fragmento de segundos de segundos. Mi teclado es un poco pegajoso, viejo mecánico. Ahora bien, ¿dónde actualizamos este valor? Si recuerdas cuando hicimos la trampa, vayamos a utilería. Vamos a abrir la trampa. ¿No está aquí? S corredor deberían ser enemigos. Entonces en nuestra carpeta enemigos, tenemos la trampa BP. Ahora, cuando aplicamos daño a nuestro enemigo, usamos el nodo aplicar daño. Entonces, si vamos a nuestro personaje, Tipo A daño. Hay un evento cualquier daño. Por lo que esto se dispara cuando estamos aplicando cualquier tipo de daño, y los tipos de daño. Podríamos estar estableciendo clases y todo, pero no vamos a hacer eso. Davis, vuelve a nuestro personaje, y hemos recibido algunos daños. Vamos a crear una función para eliminar la salud. Entonces lo voy a llamar Salud. R y va a necesitar dos entradas, aquí, entradas, O será un bulion que dice agregar, cuando son dos, estamos agregando, y un flotador que es daño. Lo siguiente que vamos a necesitar son dos variables. Van a ser del tipo de flotador, y uno será salud actual, y el otro sería salud Mx. En MCs health, vamos a dar un valor predeterminado, y ese valor predeterminado sería Ahora, vamos a establecer el valor actual a la salud de Max en comenzar a jugar. Así que vayamos a nuestra jugada de inicio después de que fijemos el absoluto, vamos a establecer el valor actual a la salud de Max. Y luego conectemos nuestra función y eliminemos la salud a nuestro cualquier daño. Y entremos en nuestra función. Lo primero que debemos saber es que estamos agregando o abstrayendo el daño porque el daño también podría serlo Curar vamos a hacer un menos o un plus. Menos debería estar en el fondo porque vamos a conseguir Maxel así Maxel menos el daño, y luego Max salud plus. El daño sería el talón. Vamos a hacer una selección. Vamos a conectar nuestro anuncio aquí. P A, estamos sumando. Si no es P A, es Pico B, así que estamos restando Vamos a regordete este valor. Pero eje, flotación de abrazadera. Porque queremos significar max. No queremos que vaya por encima de nuestra salud MAC o por debajo de nuestro bajo cero, básicamente. Vamos a conseguir nuestra salud MAX, y la vamos a conectar a Mx, y el valor mínimo sería cero. No deberíamos estar restando por debajo de cero. Y vamos a establecer nuestra salud actual. Ahora, lo siguiente que debemos hacer es dividir nuestra salud actual entre la salud Max. Y eso nos daría eso nos daría un porcentaje de nuestra salud. Ahora, vamos a conseguir nuestro modo gay. Vamos a conseguir Nuestro juego de widgets. A partir de eso, vamos a decir que HP actualiza HP. Vamos a conectar este año, y vamos a conectar nuestro porcentaje aquí. Expediente, vamos a presionar. Guardan y compilan en realidad todo. Vamos. A ver si funciona. Vamos a ir a una trampa. S. Pero ahora mismo, no estamos muy seguros qué parte de estas acciones no son trabajo. Empecemos por nuestra trampa. Vayamos a nuestra trampa. Lo que queremos comprobar si estamos aplicando daños. Voy a comenzar la comprobación desde aquí. Consideremos que todo lo demás se dispara correctamente, y queremos ver si aplica daño. Llegamos a este lugar, por lo que estamos aplicando daños. Voy a parar porque tiene un retraso y para quitar el punto de quiebre de aquí. Voy a ir a nuestro personaje de arriba hacia abajo y aplicar un punto de quiebre al evento cualquier daño. Ahora, encontremos la trampa. Las gorras no se reproducen en las habitaciones. Eso es algo bueno. A, aplicamos daños. Nos habíamos quitado. Este valor es nueve. A tomamos un daño. 0.9 actualizar HP. B. Actualizamos HP, estableciendo el valor en 0.9. Nosotros sí tenemos el correcto porque pegado. ¿Qué? Bien, no tiene vista previa porque estoy jugando. Debería bajar nuestra salud. Quitar punto. Lo hace, y yo no lo veo. La copa tiene un sonido equivocado. Copa está jugando un sonido equivocado al ataque. Ir al ataque. Aquí no estamos tocando el sonido. Bien, estamos tocando el sonido aquí. Este es un sonido correcto. E cultivo. Volvamos al material. Estamos conectando esto, si esto es 0.9, debería estar luciendo así, si esto es 0.8, debería ser así. Cero. Vamos a probar si el valor predeterminado es cero. ¿Se actualiza? Sí, lo hace. Pero después, no lo hace. Siempre yendo a 0.9. Ir a nuestro personaje. Se puede ver que también podemos depurar durante el tiempo de ejecución. Puedo ir a mi personaje, puedo seleccionar personaje. Este solo tiene un nodo. No lo veremos fácilmente, pero si lo traigo aquí, visible. De hecho podemos verlo durante el tiempo de ejecución. Pero corre, lo que hace. Sí se mueve hacia adelante. Voy a poner un punto de quiebre aquí. Voy a ver el valor 0.9. Cada vez que el valor llega 0.9. Bien. Esto es algo que voy a resolver la próxima vez. Lo voy a dejar aquí. Adiós por ahora. 88. Poción de salud de usabilidad de artículos de inventario: O Hola y bienvenidos al taller de Diseño de Juegos bajo motor cinco procedimientos Dungeon action Pz llamadas de creación Anteriormente, comenzamos a crear nuestro sistema de salud. Agregamos nuestra imagen en nuestro widget de que estamos manipulando su parámetro escalar, valor HP obteniendo la instancia dinámica, que es el valor HP aquí Vamos a poner esto de nuevo en uno. Y luego continuamos creando en nuestro personaje, el evento de cualquier daño y la función add remove health, que en realidad hice un error muy grande aquí. Estoy restando y agregando un valor a la salud MAX en lugar de la salud actual Cada vez que aplicamos 0.1 de daño, en realidad estamos reduciendo nuestra salud MAX, por lo que siempre es 90%. Ahora, conectemos la salud actual en lugar de la salud MAX. Si vamos a revisar, y esto debería estar funcionando. S aquí. ¿Correcto? Sí. Está funcionando. Perdiendo salud gran cantidad de salud también. Y tenemos el sonido correcto finalmente en la trampa. Cambiamos el sonido de reproducción aquí, después del retraso, que es el momento en que dañará al personaje. Juega antes de la parte de gatillo, y después la parte con el ataque de pico. Continuemos con nuestra porción de salud. Para ello, tenemos que volver a nuestro modo de juego Widegit. Y vamos a necesitar nuestros botones. Vamos a seleccionar el botón uno. En realidad, vamos a hacerlo desde la gráfica. Ya no necesitamos hacer los botones. Sabemos que por aquí existen. Así que vamos al botón uno, y vamos a presionar Vamos a hacer clic Y luego el botón dos en clicked y el botón tres clicked y el botón cuatro t Bueno, sí tenemos esto para eventos. sí tenemos esto para eventos Lo siguiente que tenemos que hacer es crear una función a la que vamos a llamar use, y va a tener una entrada de tipo integer. Llamemos a esta trama. Así que volvamos a tu gráfica de Ben. En nuestros botones, usemos esta función de uso. Usemos esta función de uso, y conectemos todo, comenzando 0-1, dos y tres Ahora mismo, cuando presionamos a nuestros botones, ejecutan esta función usan uno, dos, tres 0-3 Ahora, entremos en la función. Y necesitaremos nuestro inventario. Así que sí tenemos almacenado en hover, no almacenado, pero hemos usado este código por aquí para obtener nuestro inventario Entonces voy a copiar y pegar eso en uso, y voy a convertir a pure cast otra vez porque cuando estás copiando pegando los moldes que son puros se están volviendo normales otra vez Ahora sí tenemos acceso a nuestro inventario, y vamos a conseguir nuestras llaves. Y los vamos a promover a nuestra variable local. Llamemos a estas llaves. Y vamos a conseguir nuestros valores. Y vamos a promover esto a una variable. También, valores colle. Ahora tenemos acceso a nuestros artículos y acceso a nuestros valores. Ahora, lo que vamos a hacer es usar este índice de ítem para obtener de nuestras claves. Vamos a conseguir. Y vamos a ir I index, s. vamos a conseguir nuestro slot, no item index. Ranura de inventario, básicamente, y vamos a cambiar Basándonos en este nombre, tenemos que poner los nombres en nuestras suites. Voy a ir a detalles, vamos a quitar el pin predeterminado, y los artículos que tenemos para usar son creo que dos por porción, el por tiempo y yo cinco por destrucción. B fue este material compilar y guardar y vamos a revisar nuestros artículos por un segundo. Recuerdo el yo era para la salud. Ahí están los artículos. Aquí está. Los artículos. Las pociones de salud, la poción Pet, la poción eran cuatro y cinco era Bien. Pero el número uno que estamos haciendo ahora mismo, que es el número dos en realidad son las pociones. Volvamos a nuestra Pam p. y cuando es una poción, tenemos que comprobar si nuestro jugador tiene plena salud o no Porque si el jugador tiene plena salud, no deberíamos estar agregando más salud. Pero aunque lo hagamos, deberíamos tener la opción diferenciar si estamos sumando o no sumando. Bueno, vamos a poner una sucursal. Vamos a poner jugador en. Esto nos lleva directamente el pone controlado que somos que nuestro controlador está controlando está poseído. Vamos a pasar el carácter dw, que en realidad es la clase de nuestro estanque, obtener las variables que queremos Vamos a conectar esto por aquí, aquí, y vamos a comprobar si nuestra salud actual es igual a nuestra salud Mx, no establecida, obtener Si estas son iguales, entonces no deberíamos estar haciendo nada porque el carácter es salud plena. Si estos no son iguales, entonces deberíamos agregar salud y debemos presionar el anuncio. Y ahora vamos a darle un valor a nuestras pociones. Digamos que sanan a la salud. Si queremos poder beber pociones mientras el infierno está lleno de salud, solo conectamos esto por aquí O si queremos ser exactos que faltan dos salud, para usar una poción, podríamos crear más reglas por aquí Para nosotros, vamos a mantener justamente esta regla, y lo siguiente que haremos es obtener nuestros valores, que es cuántas pociones tenemos en nuestro inventario Por aquí, y voy a sacar nuestros valores. Voy a conseguir nuestro lote porque este es un espacio de inventario. Y vamos a hacer un menos uno, que es la poción que acabamos de usar Ahora vamos a comprobar si esto es menor o igual a cero, y usar una rama. Si no es inferior a cero, entonces vamos a conseguir nuestro inventario nuevamente. Realmente promovemos esto a variable, pero realmente no importa. Convertir a puro elenco de nuevo, comentario. Elenco. Si no es cero, significa que todavía tenemos porciones, vamos a agregar nuestro artículo de ranura. Y el menos uno de nuestros valores. Pero esto va a ser restado por uno. Sé que puede ser confuso que estemos agregando, pero agregando solo actualiza el valor que ya existe. Ahora, vamos a actualizar inventario para nuestro inventario, vas a usar. Inventario. No importa que usemos la misma variable a la que estamos llamando porque estos nodos son dos cosas diferentes. Pero esto en realidad significa que también arrojará hielo. Entonces promover esta variable haría un poco más óptima, tal vez en constructo, estamos promocionando esta variable y sosteniéndola para que no la llamemos cada vez. Pero es un mínimo impacto en este momento en nuestro juego. Oh, Lo siguiente que tenemos que hacer es actualizar nuestro tooltip Lo que no se llama información sobre herramientas de actualización, se llama sobre información sobre herramientas Vamos a tratar de configurarlo a visible y la ranura de nuestra ranura. La razón por la que esto funcionará es que si ingresamos, estamos comprobando si este artículo existe. Si lo tenemos en nuestro inventario. Si no lo tenemos en nuestro inventario, entonces no estamos enviando ninguno. Volvamos a usar Ahora, ¿qué pasa cuando estamos en cero? Oh, qué pasa cuando estamos en cero, tenemos que eliminar del inventario. Oh, voy a conseguir nuestro inventario otra vez. Nuevamente, no importa que copie y pegue este código porque aunque lo arrastre de esto, volvería a hacerlo. Ahora me voy a mudar. Y para nuestro retiro, vamos a conseguir nuestras llaves en slot. Vamos a poner nuestras llaves en la ranura. Y luego sólo vamos a actualizar el inventario. No, vamos a probar esto. Pasemos a nuestro modo de juego, seleccionemos nuestro inventario, y agreguemos algunas porciones, que es yo dos, y agreguemos dos pociones. Vamos a lastimarnos. poción está funcionando aquí, entonces yo. No pasa nada, y vamos a buscar una trampa Voy a usar uno. Pero tonto, vuelve a lastimarte. Demasiado pequeño, el 90% realmente no se muestra y el 80% muestra demasiado. En fin, usemos la poción y ya no está. Un tema, el remolcador por aquí que tenemos las dos porciones no mostró Entonces echemos un vistazo a esta. L et's van a nuestra jugabilidad. Vamos a la gráfica de Ben y no coloquemos el inventario de actualización en realidad Podemos ir directamente de la función, d inventario, y queremos cuando lo estoy configurando a oculto, donde debería ser visible. Pero ahora, Nosotros sí tenemos las dos pociones. No pasa nada, colocándose sobre uno, uno a la izquierda, a la izquierda. ¿Por qué era tan grande el uno? Creo que lo hicimos un poco demasiado grande. Está un poco compensado. Entonces arreglemos estos dos. De una manera, te estás preguntando cómo hice lo de la pantalla completa. Presioné F 11. Y si pulsas realmente shift N F 11, lo hace completamente a pantalla completa. Cubre hasta la barra de ventanas que no se puede ver por aquí. Pero sí, Shift F 11 lo cubre completamente. F 11 simplemente lo hace a pantalla completa sin la barra de ventanas. En fin, arreglemos el problema visual. Sí, no se ve bien. La razón para ello desaparece debido a las reglas de renderizado. Entonces esto iría un poco a la izquierda. Creo que ya está. Sí. Entonces voy a hacer trampa y usar la transformación de renderización de traducción. No muy óptimo uso, pero vamos a hacer por ahora menos tres. Así que aquí. Y vamos a pegarlo aquí. Se puede ver cuando hago clic, porque es el mismo tipo de elemento. Incluso si hago clic en el botón también porque sí tienen tipo de los mismos tipos de elementos. Me quedé en el fondo. No restablece esto, lo cual es una característica muy agradable. Digamos menos aquí también. Creo que ahora quería decir que se ven mejor, pero el grueso. Sí, porque el lugar tipo está en negrita. Entonces cambiemos esto para que no lo sea. No me gusta regular. Sí, regular regular está más bien. Vamos a usar. Podemos terminar menos optimizando las imágenes y todo. Está bien. Está bien, está bien. Bueno, creo que esto es para éste. Te voy a ver a continuación. Adiós. 89. Barra de tiempo de juego y poción de tiempo: Hola, y bienvenidos al taller de diseño de juegos, Real Engine five, Dungeon procedimental, RPG de acción, curso de creación En la lección anterior, comenzamos con nuestro mecánico de uso. En nuestra jugabilidad b, usamos el evento on click en los cuatro botones y creamos una función de uso, que usamos una entrada de un entero para determinar qué botón, básicamente qué ranura del inventario estamos presionando. Dentro de esta función, obtuvimos nuestro inventario, de nuestro modo de juego, que almacenamos las claves y los valores en variables locales separadas. Después de eso, en base a nuestra ranura, obtenemos de nuestras llaves el nombre de la llave, que es nuestro propio nombre, y estamos cambiando en base a estos elementos que tenemos. Yo dos, yo tres, yo cuatro, y yo cinco. Yo dos es la poción de salud. Entonces comprobamos si nuestro jugador está lleno de salud. Porque si nuestro jugador está lleno de salud, no deberíamos beber la poción. Y si la salud no está llena, utilizamos la función remove health, para agregar dos HP a nuestro jugador. Después comprobamos los valores, de la ranura actual, que son las pociones de salud, para ver si menos uno está haciendo cero o menor que cero En realidad, más bajo que cero nunca debería activarse. Y si tenemos pociones básicamente, eso es lo que estamos comprobando aquí Si tenemos pociones o si las pociones se están convirtiendo en cero cuando estamos usando, actualizamos nuestro inventario en consecuencia eliminando o agregando la misma clave al Y luego actualizamos nuestro inventario y actualizamos también el tip hover Por si acaso se convierte en cero, entonces dice que no. Ahora bien, la orden nos dice que deberíamos hacer la poción de velocidad ahora mismo, pero no quiero comenzar con la mecánica de los personajes exactamente en este momento Entonces, como estamos en el widget de jugabilidad, vamos a crear la poción de tiempo, que prácticamente son solo dos variables Vamos a hacer una variable de flotación. Vamos a llamar a este padre de familia. Vamos a duplicarlo y llamarlo Max. Lo que vamos a hacer es que vamos a añadir a la hora actual un valor. Digamos que nuestra poción de una sola vez nos da 60 segundos porque vamos a estar saliendo en segundos, y eso es en lo que deberíamos establecer nuestra hora actual Pero solo vamos a sujetar, sujetar eje. Lo siento, aprieta el flotador. Vamos a conectar esto aquí, y nuestro grupo sería nuestro tiempo máximo. Y vamos a dar tiempo máximo al valor predeterminado. Tenemos que compilar para eso. Y eso sería digamos 220. Digamos que es 220, y estamos agregando un minuto cada vez. Estamos bebiendo una poción de tiempo. Y vamos a conectar eso a cinco. Ahora, lo siguiente que debería pasar ya está hecho. Vamos a conectar esto a la sucursal aquí, y va a verificar si el slot de valor actual tiene suficiente, y eliminará o agregará si es sable, que no es sable. Creo que las pociones del tiempo son de un solo uso. Yo todo se usa una vez excepto las pociones, y la poción de velocidad Entonces, vamos a crear el indicador para el tiempo, como necesitábamos en la interfaz de usuario. Vamos a p. vamos a usar la misma técnica que el material que la barra de salud. Entonces vamos a usar una imagen. Et puso el ancla a la mitad y a la parte superior. Vamos a establecer posición x -300, posición y 50 tamaño x 600, es decir y 60 Y creo que es un buen bar para pasar el rato. Ahora, para la aparición. Vamos a ir a cepillar, y vamos a usar el mer. Material de instancia. Ahora tenemos nuestra barra de tiempo. Vamos a programarlo para que haga algo porque tenerlo no significa que haga nada. Entonces vamos a ir a nuestra gráfica. Vamos a ir a nuestro gráfico de eventos. Vamos a ir al constructo del evento, que es como empezar a jugar o planos Y ahora vamos a usar un. como el tiempo por evento. Para los que son nuevos, lo que es un temporizador, es básicamente un nodo utilizado para crear un evento cronometrado que activará una acción después de una duración específica, que, si hacemos clic en Lupin también se puede configurar para que se repita en intervalos durales Y la forma en que lo estamos usando, estamos creando un evento personalizado, y estamos vinculando este evento a través del delegado de aquí a nuestro tiempo. Cómo sería alguna información extra que no importa realmente cuántas veces tengas y dónde las tengas. Importa cuántas acciones realicen porque detrás en código, son consideradas como un temporizador de un solo tiempo, como hay una selección general detrás de todo lo que acaba de acumular más o menos explicado, no así exactamente, pero digamos que acumula las acciones de los tiempos Ahora, en nuestra teoría, pongamos algunos valores. Entonces nuestro temporizador va a estar haciendo un ciclo. Va a estar dando vueltas cada 1 segundo. Esto significa que el primer palo correrá 1 segundo después de que haya comenzado el juego. Entonces, vamos a estar fijando nuestra hora actual. Cada 1 segundo, dos tiempos actuales menos uno. Y entonces vamos a preguntar si esta vez es igual a cero. En realidad igual o menor que cero. Menor o igual. Ordene el asunto de tiro en esto cuando quiero una nota rápida. Si es menor que cero, vamos a t a nuestro juego de jugador básicamente. Lo que no hemos llamado así, vamos a hacer esto más tarde. Ahora, sólo una información más. No vamos a estar haciendo una pausa o estoy posando este temporizador, pero para hacerlo por temporizadores, sí tenemos un sistema llamado Handles, Ter Handle Si promociono esta variable, y vamos a llamar a este Timer ble y yo Ahora, si tuviera que llamar a este asa en cualquier parte, si tuviera acceso a ella, puedo pausar o unpause timer y preguntar también si se plantea el temporizador Esta es la forma en que estamos haciendo esto. Y también hay un artículo claro e inválido. Hay algunas opciones más. Yo solo quería agregar esto. No voy a usar esta variable. Voy a borrarlo. Ahora tenemos un temporizador que cuenta hacia atrás, y cuando estamos usando nuestro artículo, agregamos a nuestro tiempo. Ahora, no se actualizará instantáneamente, pero se actualizará básicamente instantáneamente porque es cada segundo, cada segundo, se actualiza, y sí lo actualiza. Volvamos a nuestro temporizador. Vamos a necesitar una función. Y la función será muy sim será muy similar a la que queremos actualizar HP. Voy a duplicar esto. Todos estos se actualizan. Y en lugar de la barra, voy a usar el. Hay un bar. No es una variable. Vamos a diseñador. Vamos a seleccionarlo. Hagámoslo una variable. Lo van a traer aquí. Pero esto nos da un porcentaje a partir de cuando estamos haciendo los cálculos de salud. Pero tenemos que hacer los cálculos aquí para el momento. Tenemos que traer la hora actual, voy a necesitar x tiempo. Vamos a dividir a estos dos. Obtenemos el porcentaje, y vamos a conectar esto aquí. Vamos a eliminar esto. Y por alguna razón, estoy seguro de que este valor sería el mismo. Pero vamos a comprobarlo. Vamos a revisar. Abrimos la instancia. Entonces sí, este valor es el valor P. Entonces esta es nuestra variable de parámetro. Si abrimos el material principal, podemos ver que este es el parámetro que estamos llenando y su valor P. Entonces estamos llenando la P del temporizador. No el querer culpar a otros por nombrar convenciones, para ser honestos Pero de todos modos, ya no necesitamos esta entrada porque estamos actualizando aquí. Y usemos esta función antes de nuestra sucursal. Vamos a configurar este temporizador de actualización. Ahora bien, si quisiéramos ser realmente, muy precisos, podríamos copiar esto a nuestro uso cuando establecemos la hora actual, y se actualizaría instantáneamente. No es de un hussle, pero no creo que también importara Estamos usando la poción, como el siguiente palo que se sentiría Lejos. Vamos a hacer trampa para probar nuestra poción. Vamos a agregar un nuevo artículo al inventario. Vamos a llamar a esto I cinco. Creo que cinco, y va a ser uno. Y voy a compilar y jugar. Guardemos todo antes de presionar play. no nos importaría. No nos estrellaríamos en esto. No hemos hecho ningún código. Ah, y ya no está funcionando. Oh, porque no hemos fijado la hora actual a nada. Entonces, en realidad uso esto. Podemos ver que está funcionando. Pero sí necesitamos establecer la hora actual al tiempo máximo en la construcción. O la otra cosa que podemos hacer, pero entonces tenemos que cambiarlo cada vez que es nuestro tiempo máximo es 2:20 Podemos establecer la hora actual en 220. Simplemente usamos el set max time a hora actual y comenzamos a jugar o construir, así no tenemos que cambiar ambos valores cada vez. En fin, dejémoslo tan fácil. Creo que esto es para éste. Te voy a ver a la siguiente. Adiós. 90. Poción de velocidad y efectos de partículas: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, añadimos nuestro timeer a nuestra ventana gráfica. Agregamos la barra del temporizador, y agregamos en el evento Construct, que es el inicio de juego de los Planos, establecido por evento, que es un evento que ocurre cada cierta cantidad de tiempo Y creamos un evento personalizado que nosotros ella a evento. Y usamos este evento personalizado para establecer la hora actual -1 segundo. Luego seguimos adelante y actualizamos nuestra barra a través de nuestro valor de parámetro escalar, que es el valor de HP, y obtuvimos el porcentaje de nuestro tiempo actual a nuestro tiempo máximo. Luego procedimos con nuestro evento de uso para completar actuamos al revés Hicimos el evento de uso primero, pero de todos modos, así que procedimos a hacer el evento de uso cuando estamos usando el elemento I five, que es una porción de temporizador, agregamos 60 a nuestro tiempo actual, 60 segundos Sí, básicamente 60 segundos. Estamos afianzando a nuestro tiempo máximo, y luego estamos actualizando nuestros temporizadores, así que esta es una actualización instantánea y no espera ni un tick 1 segundo Y luego usamos el código que tenemos para las porciones. También. Es un código común. Para toda esta acción, será un código común para verificar si tenemos otras porciones en el inventario, y si no tenemos que eliminarlo de nuestro inventario y actualizar el cursor sobre la información sobre herramientas Ahora, vamos a hacer la porción de velocidad. Yo tres. No. A mí me gusta que arrastre esto. El mal clic es increíble. Ahora, para hacer esto, vayamos a nuestro personaje, y vayamos a nuestras partículas. Bueno, en realidad establece para una partícula. Ya me fijé para ello. Vamos a necesitar el puerto de cabeza glaseado P revenant. Si eso tiene algún sentido, esa es la partícula que necesitamos. Vamos a seleccionarlo, y luego vamos a presionar add, y vamos a elegir el sistema de partículas en cascada en cascada, y se agrega a nuestro personaje. Ahora vamos a hacerlo un poco más grande. Vamos a fijarlo en dos. Y eso está bien. Y vamos a abrir nuestra partícula. Haz algunos cambios. Voy a traer aquí la partícula. Lo que queremos es este MC carbonizante y vamos a cambiar la vida de uno, 2.5 Te diré en un segundo por qué. Y básicamente, este es el tiempo que dura el partic esta parte de la partícula, que si la cerramos, podemos ver que son las llamas reales llamas Esta cosa. Y vamos a cambiar también no el tamaño por vida Sí, el tamaño por vida, vamos a desactivarlo. Es una talla todo el tiempo. De lo contrario, si no lo hacemos, déjame deshacer clic en esto Quizá lo preferimos de esta manera, pero en realidad no lo hago. Parece que estamos propulsados por gas. No queremos que nos promuevan gas. Queremos ser corredores de apuestas. No sé, algo diferente. Entonces no lo vamos a eliminar, sino deshabilitarlo, presionando esta x aquí así esta la desactiva, y ahora es más como un aura, más como un rastro real que estamos viviendo Cuando estamos estáticos, también es muestra que tenemos esto habilitado. Eso sería desde el lado de las partículas. Vamos a programar esto. En realidad, una ambientación más al artículo. Volvamos a la partícula. No queremos que se active de forma automática. Entonces voy a evaluar para activar, y voy a desactivar la activación automática. Queremos activar esto. No queremos que sea un estado constante. Voy a compilar y guardar, y volvamos a nuestra jugabilidad. No nuestra jugabilidad. Mi error otra vez, tenemos que quedarnos en el personaje. Vayamos al gráfico de eventos y creemos eventos personalizados en alguna parte. Voy a hacer un evento personalizado aquí. Y llamémoslo, no lo sé. PD. PD es un buen nombre. Entonces, consigamos nuestro puerto de cabeza glaseado P revenant, y activémoslo También necesitamos en realidad, no necesitamos establecer activos. Sólo necesitamos. Esto es solo un nodo de activación. No necesitamos activarlo, y vamos a restablecerlo también Ahora, hagamos también su visibilidad, iden, y vamos a encenderlo por si acaso esa visibilidad aquí está si acaso que no termine y no empiece correctamente, por lo que no empieza abruptamente Se ve mejor. Por ejemplo, a lo que me refiero son tecnicismos. Vamos a pintar otra vez. Lo que quiero decir es, si tenemos nuestro carácter y nuestro efecto termina aquí. Por si acaso la activación no empieza desde aquí. Para un marco, vemos esto. No queremos ver esto de inmediato, queríamos ver expandiéndose poco a poco. Es por ello que jugamos con la visibilidad, reiniciándola y luego encendiéndola y Entonces lo que tenemos que hacer es usar nuestro movimiento de personaje ¿Qué es el componente de movimiento de personajes? Es específico para planos de personajes. Por ejemplo, este plano me ha dejado visible. Vamos a la configuración de clase. Y ver clase padre es carácter, que cuando estamos creando planos, si voy a crear un plano aquí, me pregunta, ¿es actor ¿Es un alfiler? ¿Es un personaje? Ahora bien, los personajes y uno debajo del estanque, no en esta lista en jerarquía, porque los personajes son estanques, pero los estanques no son todos Algunos de los estanques pueden ser personajes. Es como lo del diagrama de la camioneta, lo que significa que básicamente el carácter hereda del estanque, Pond no hereda del Y la especial de las cosas especiales del personaje es este componente de movimiento del personaje, que es básicamente para manejar lógica de movimiento para tres caracteres D. Se puede usar para dos d, pero va a ser un poco duro, podría necesitar algunos enchufes. De todas formas. Entonces, esto, que es responsable movimiento de nuestro personaje tiene un montón de ajustes, una cantidad infinita de ajustes, si se quiere. De veras. De todos modos, lo que queremos de todos estos ajustes es nuestra velocidad máxima de caminata. Entonces por defecto, lo tenemos 600, y creo que es una buena velocidad. Pero cuando seamos rápidos, pongámoslo en algo mayor. Entonces vamos a establecer max walk. Velocidad. Digamos a 900. Entonces lo que vamos a hacer suele ser poner un retraso. Por ejemplo, podríamos poner un retraso, y después de digamos 14 segundos, restablecemos la velocidad máxima de movimiento a 600 de nuevo a nuestra velocidad original, y establecemos la visibilidad de la partícula, dos. Podríamos establecer también podríamos de activar o usar el otro nodo que no usamos, establecer act a negativo y luego restablecerlo, por ejemplo. Pero tampoco podríamos hacer nada, pero esta partícula quedaría con los recursos, muy pocos. Depende de la partícula también. Así que vamos a desactivar. Sólo para ahorrar unos pocos recursos. Ahora bien, este retraso aquí funcionaría como puerta. Como si estuviéramos pasando por esto, estamos fijando 900. Si el retraso se está ejecutando, no se ejecutará hacia adelante hasta que termine el retraso, entonces puede ejecutarse de nuevo. Pero si usamos un retraso recuperable, triste a 14. Esto significa que cada vez que bebemos una poción, el retraso recupera la cuenta regresiva Entonces hagámoslo. Entonces básicamente, si seguimos encontrando pociones establecidas, seguimos reactivando esta cuenta regresiva de 14 segundos No vamos a agregar tiempo extra, solo estaremos reactivando los 40 segundos Ahora, llamemos a ese evento desde nuestro uso. O aquí. Vamos a sacar del elenco dos jugadores de BP abajo, vamos a ponernos rápidos, y vamos a conectar rápido aquí con el grupo. Vamos a compilar y guardar, y vamos a hacer trampa. Pasemos a nuestro modo de juego y cambiemos un artículo de inventario. Vamos a establecer estos dos I tres, y yo tres tiene dos usos por defecto. Juguemos. Y me estoy moviendo normalmente. Estoy abriendo inventario, hielo, botella azul, estoy usando una, y tengo rápido. 13 segundos, 14 segundos. En realidad, volvamos a reactivar. Lo estoy usando de nuevo, y ahora debería ser fo segundos. ¿Qué es el elevador? Oh, Ratones. Justo por aquí, elevador aquí. Mazmorra de laberinto de ratones. Oh. Eso es todo para éste. Te voy a cantar la siguiente. Adiós. 91. Poción de ira y efectos de partículas: Hola, y bienvenidos a Game Design Workshop er motor real cinco procesales Dungeon action Bz creation Anteriormente, agregamos nuestro evento rápido a nuestro personaje. Un evento que hace que nuestro personaje se mueva más rápido. Para ello, agregamos una partícula a nuestro componente de clase de personaje, que es el renacido Frost porte Y cambiamos algunas cosas en la partícula, cambiamos la vida útil, y deshabilitamos el tamaño por vida Entonces hace más de un efecto que se esté moviendo con nosotros, estaban dejando un rastro. Después, nos dirigimos, y creamos una cadena de eventos, activamos la partícula, porque la configuramos para que no se activara de forma automática en los detalles. Entonces establecemos la visibilidad en true ya que la establecemos en false, porque no queremos que lo haga no queremos ver un fotograma que sea de la activación anterior, como que no se active, en el último estado de la partícula, por ejemplo. Ahora, cambiamos la velocidad de movimiento de nuestro personaje a 900, y luego con un retraso recuperable, lo que significa que podemos beber otra poción y restablecer el tiempo aquí Volvimos a cambiar la velocidad después del retraso a 600, lo que estableció la visibilidad en. Debería ser falso, mi mal, y desactivamos la partícula Después, fuimos a nuestro widget de juego, y llamamos al evento Speedy a través de nuestra referencia de personaje, y conectamos la función con el resto. Del código que está administrando el anuncio y eliminar del inventario y actualizar nuestros widgets. Ahora bien, una cosa que me di cuenta es que nuestro rápido incluso tiene dos cargos, pero no lo hace tan número. Y basado en nuestro código, no funcionaría. Por ejemplo, si lo pusimos en stock, entonces podríamos recoger más pociones y podríamos pegarlas sin cesar Y si en realidad, lo que tenemos que hacer es crear algún código personalizado para decir que si es el ítem I tres, entonces mostrar las acciones, lo cual no vamos a hacer, simplemente lo dejaremos así. O si quieres, también podemos ir a nuestra poción de velocidad en nuestros artículos Dt y establecer la cantidad en uno, y eso sería todo Está arreglado. No necesitamos ver un número. Y ahora vamos a hacer el I cuatro, que es la poción, que va a destruir todo Bueno, en realidad dañará, pero el daño va a ser tan grande que va a estar destruyendo todo lo que nos rodea. Y por todo, no me refiero al mapa. No tenemos un mapa detracti. Quiero decir matar a todos los enemigos y a las torres, lo que llamamos Puerta del Infierno. Para ello, necesitamos otra partícula. Escojamos el mapa esta bonita explosión, tráela por aquí. Tenemos esta linda explosión. Es básicamente para otra escala, pero vamos a aumentar su tamaño y va a estar bien para nuestros fines. Entonces vamos a ir a nuestro personaje. Y mientras estamos siendo seleccionados, vamos a agregar cascada. Operaciones. ¿Qué está pasando? Sí, no deberías escribir anuncio en anuncio. Simplemente no funciona, y vamos a activarnos de forma automática. En realidad, dejemos la activación automática. Nos figuramos tamaño, y un grande. L et's cambian su escala a tres. Nosotros sí queremos que afecte a un área grande. De hecho, usemos una prueba clave esto. Entonces lo que haremos, vamos a crear otro evento personalizado. Toda esta gama. Y consigue nuestro artículo o éste, uno , y di activar Y establecer que se establece en true. Ahora lo que vamos a hacer es ir a un controlador y hacer clic derecho y usar, digamos Teclado base. Barra base, aquí estamos. Consigamos nuestra referencia de personaje. No tenemos ninguna. No importa, vuelve a casa. Carácter de personaje dw convertir a puro elenco o rabia. Y vamos a compilar e ir a jugar. Y queremos que nuestra partícula sea k del tamaño de una baldosa. Pero si estoy presionando espacio. Sí, esto se ve y sobre d. Esto se ve del tamaño que queremos. Ahora, para el alcance, para el área de daño, como cómo vamos a hacer daño. Vamos a estar usando una esfera de colisión. Entonces un miedo de colisión. Colisión de esfera. No. Voy a ir y poner su oculto a juego a caídas. Y entonces voy a aumentar el radio a, digamos, 400. Sí, 400 parece w. 500 parece mejor. Pero podemos comprobar ya que hicimos la visibilidad oculta. A 500 es un poco demasiado. Entonces cambiémoslo a 400. Juguemos de nuevo. Sí, pienso visualmente, estamos en estos límites No obstante, no importa la distancia del círculo, sino de la lesión, vamos a estar haciendo el mismo daño en todas partes. Entonces esto parece estar bien. Pero no lo vamos a dejar así. No lo vamos a usar tal cual. Sabemos que el radio de velocidad es de 400. Lo que vamos a hacer es cambiarlo 0-400. En realidad podemos subir la distancia también desde donde calentamos. No vamos a hacer ese código, pero se puede hacer fácilmente. Cuando tenemos una esfera que está aumentando de tamaño. Ahora, vamos a establecer su colisión. Ignorar algunas cosas. Vamos a hacerlo a medida. Vamos a ignorar la visibilidad, la cámara, la estática mundial, no la dinámica mundial. Cuerpo físico, en realidad, dejemos el cuerpo físico también encendido y destructivo. En realidad, vamos a cerrar también dinámica mundial. ¿Cuál es nuestra puerta del infierno? Déjame recordarme a mí mismo. Vamos a ir a Blueprints. Vamos a ir a utilería a los enemigos. Vamos a ir a la puerta del Infierno y seleccionar su propia cápsula. Es una colisión de damas. Vamos a ir a los ajustes preestablecidos de colisión. Es una dinámica mundial. Entonces no queremos ignorar las dinámicas mundiales. Entonces vamos a dejarlo superpuesto. En física cuerpo, hagamos que las cajas se muevan con nuestra porción de furia. Lo único que tenemos que cambiar ahora es de consulta a colisión. Empecemos sin colisiones. Y cuando estamos a punto de expandirlo, dijimos que es colisión entonces. Digamos radio para digamos uno no cero. Pongámoslo en uno. Y ahora, volvamos a nuestro código y agreguemos una línea de tiempo. No es una línea de tiempo. Lo siento. Primero necesitamos habilitar la colisión. Ahora vamos a conseguir la esfera. Quedémoslo para conseguir colisión de pociones. Y colisión habilitada. Y optan por variar solo no hay física. En, sí queremos física, porque decidimos poner los elementos de física a, y ahora necesitamos una línea de tiempo. Entonces línea de tiempo. Vamos a entrar. Vamos a crear una pista de flujo de 0.31 y cero, cero Por supuesto, que nuestro uso último marco clave. Lo siguiente sería ir a Gráfico de eventos, actualización. Consigamos nuestra colisión de esfera, califique el bote y el radio de la esfera. A está conectado a la actualización. Aprendamos de 12400 con el Alpha de nuestro nuevo camión. Ahora, cuando terminemos, volveremos a conseguir nuestra esa colisión, esa dos ded no colisión básicamente. Y vamos a establecer el radio de esfera también. 21. Ahora bien, ¿qué sucede cuando nuestra colisión de pociones de rabia Vayamos a nuestro inicio sobre la vuelta, de nuestra olla de rabia. Hagamos algo de espacio. Ten esto aquí. Ponle un comentario sobre esto. Vamos a enfurecer la olla. Pongamos un comentario en este colli. Y eso es todo por ahora. Oh. Seleccionemos nuestra otra comp y ask en realidad no es la otra comp, el otro actor. Porque ahora vamos a estar comprobando por IA. Entonces estamos seguros de que la IA solo tiene la colisión para su cuerpo y nada más. Bueno, el componente de la cápsula. Entonces vamos a comprobar si hay un remolcador. Si el actor tiene tirón, vamos a la rama, a hacer el si, y luego vamos a conseguir a nuestro actor y aplicar daños Y daños, vamos a aplicar, digamos diez. No usaremos los otros nodos, y esa sería nuestra colisión de pociones, colisión de pociones. Ahora, llamemos a este evento en nuestra función de uso. O yo cuatro. Vamos a llamar desde nuestro carácter de arriba hacia abajo, la función H depende en realidad no función, y luego conectarla por aquí. Vamos a crear un truco poner yo cuatro de uno. Vamos a nuestro controlador y eliminemos nuestro demag. Para ser honestos, vayamos a nuestra puerta del infierno y vayamos a nuestro actor tira y vuelta de los incumplidos en el tirón de la puerta del infierno, y agreguemos el remolcador y agreguemos el Pero no tenemos un sistema de salud en nuestra torre. Deberíamos hacer eso siguiente. Vamos a probar nuestra porción. Una poción de búsqueda. Estalla, desaparece, y es todo punto Eso está lleno. Eso es todo para éste. Te voy a ver en la siguiente. Adiós. 92. Música de combate y modo de combate Hellgate: Hola, y bienvenidos a ganar taller de diseño, y real Engine five, Dungeon procedimental, RPG de acción, curso de creación Anteriormente, añadimos la funcionalidad de poción de rabia. Agregamos la colisión de rabia a nuestro personaje, que es una esfera que se incrementará de tamaño con una línea de tiempo. Agregamos la marca de reman y parte que aumentamos también en tamaño es toto activando Sí, no debería ser auto activando, compilar, y luego completamos la función, el evento, rabia, que activa nuestra partícula, dice el permiso de colisión en la poción de rabia, usa una línea de tiempo para aumentar el tamaño de la esfera, y luego la apagamos Entonces en la colisión de la esfera, cuando choca con algunos, usamos una etiqueta E para enemigo Si el otro actor de etiqueta tiene la etiqueta E, nos ramificamos y aplicamos daño. Después, fuimos a nuestro juego, llamado a este evento cuando se usa el cuatro elemento cuatro y lo conectamos a nuestra función, a nuestra cadena de eventos, pero eliminamos del inventario la poción Ahora, después, fuimos a nuestra puerta principal y pusimos la etiqueta E. Pero decidimos que no podemos usar todavía no podemos probar la puerta del infierno porque no tiene código. Entonces comencemos a llenar algún código en la puerta principal. Pero antes de hacer eso, volvamos a explicar lo que tenemos aquí, lo que hemos creado. Entonces, tenemos dos líos estáticos que representan la parte visual de la puerta principal, y también una partícula que también representa la parte visual Y un punto ligero para hacer todo esto un poco más resplandeciente. Podríamos cambiar algunos ajustes en el punto de luz, Vamos a sd it a Lúmenes. Digámoslo a 150. Digámoslo a un color rojizo. Digámoslo a una misiva rojiza. Hace 1011. Veamos cómo se ve. Gran cambio. B. El rango de la amplia gama. Rango 600. Oh, no cambié el color. ¿Qué pasó aquí? Oh, ¿qué soy? Estoy sentado en una masiva a la luz. Sí, eso no está pasando ahora. U puedes eliminar esta parte? Cambiar una misiva a la luz me hace parecer como no mucho. Sí, fijemos su atenuación reducida a excien, y vamos a una luz a algo 0.1 verde y 0.1 azul. Prueba. I. También hay un resplandor más rojizo en las paredes. W lo veo en tierra, Tal vez se ve mejor. Nuevamente, lo tenemos. Podría ser un poco más intenso, pero creo que está bien. Ahora, volvamos a la puerta del Infierno. Vamos a seleccionar. Pero antes de comenzar a codificar, recordemos lo que hemos construido aquí. Tenemos una malla estática con una malla estática como un niño y un sistema de partículas. Esta es nuestra parte visual. Lo que representa es la parte visual de la puerta del infierno. Entonces tenemos una luz puntual que deberíamos lib cambiar sus opciones, digamos un radio generacional a 700 Digamos esto a nosotros y 150, y cambiemos el color claro a rojizo oscuro Con una pared de uno en bu así que por favor. 05, a la derecha. Y creo que esto sería por la luz. Y luego tenemos una cápsula. La luz, tenemos que hacerla un poco resplandeciente alrededor del término La cápsula es donde nuestra caja de calor, pero podemos golpear con el jugador porque hemos puesto ambos de estos mensaje de no colisión. Y la cápsula tiene toda colisión porque es una cápsula, y así probamos. Podemos optimizar el bit, pero no lo hace Entonces, tenemos una colisión de esfera, pero aún no hemos aumentado su tamaño. Lo que hará esta colisión es que detecte si el jugador está al alcance de disparar o no. Vamos a optimizar su colisión dejar Vamos a establecer no importa porque nos estamos superponiendo. Vamos a configurarlo a medida e ignorar todo excepto el hogar. Ahora, también, pongamos estas dos mallas estáticas para que no proyecten sombras No queremos que estén proyectando sombras. Y nos hemos puesto en comenzar el juego que nuestro movimiento giratorio actualiza sobre los ses estáticos, por lo que giran alrededor. Ahora, si compilamos y guardamos, comencemos con nuestra colisión. Lo primero que tenemos que hacer es calcular el radio de la esfera. Vamos a establecer juego oculto para que no sea cierto. Vamos a compilar. Vamos a establecer el radio predeterminado en, digamos 100. Qué grande es esto. También, en nuestro jugador, deberíamos ir a nuestra colisión de bote de rabia, que el juego oculto sea cierto porque no lo giré. Lo apagamos al tamaño, pero no lo encendimos para volver a ocultarlo. Oh, voy a compilar y salvar al personaje. Vamos a jugar. 700 parece un poco excesivo. No nos consigue cuando engendramos, pero si nos movemos, comenzará Bueno, podría comenzar porque la visibilidad será un problema, pero empezará a atacarnos. Bueno, digamos que es un poco más pequeño. Queremos un azulejo y, entonces 600 tal vez. Azulejo más un poco de un azulejo. Casi casi 550, creo que será la clave. Así que 550 juegan ect. Eso parece lindo. Pero no va a estar atacándonos a través de esto. Es un bonito anillo. Dejémoslo ahí. Regresa. Y hagamos algo con esta colisión. Vamos a elegir la superposición de inicio. Vamos a preguntar al otro componente que es P para nuestro jugador. Voy a poner una sucursal. Haz la pregunta y luego vamos a crear una variable. Llamemos a esto fuego. Y voy a hacer que sea cierto. Ahora, vamos a necesitar una superposición final, por supuesto, de la esfera. Y vamos a preguntar lo mismo y va a ser falso. Lo siguiente que debemos hacer es que vamos a cambiar nuestro material en ambos mensajes estáticos. Secuenciar ese material para que sea el que realmente tenemos en el piso y está resplandeciendo y volviendo a la normalidad C M instancia. Creo que es la tercera. Y realmente el infierno. Ya veremos en juego. Pero sí, creo que este es el indicado. En fin, lo siguiente que debemos hacer es ir y superponernos y atender esto de nuevo a la normalidad, este sería el G M. Ahora bien, lo que queremos hacer también es cambiar la música. Cuando estamos en combate, debemos ser alertados al respecto. Eso es combate o Así que vayamos a nuestro personaje y creamos un componente de audio y audio. Vamos ic. Para ello, queremos el bucle variable para ello. Este lazo de oro tigre relámpago. No queremos que se active de forma automática, así que vamos a desactivar la activación automática. Y vamos a hacer un evento personalizado. Y vamos a llamar a esta jugada acción autoyp. Música de acción. Algo de espacio. Ahora bien, la primera pregunta es, ¿está sonando la música? Tanto sobre eso. Jugando entonces si no está jugando, nos vamos a desvanecer. Usemos pings aquí. Tengamos una duración de pad de 2 segundos y la hora de inicio a las dos. Este es un dos porque tiene una larga introducción, y queremos empezar un poco más adentro Ahora, vamos a poner una gala y vamos a conectar ese canal a este retraso. Entonces, cada vez que estamos colisionando, y en realidad cuando estamos siendo atacados, vamos a llamar a este evento Si está jugando sólo va a reactivarse, nuestro enfriamiento para salir del combate, por ejemplo Vamos a poner estos dos 15 segundos. Y voy a renombrar este dos n necesita un n tal vez un A. mayúscula Oh, ¿qué hacemos después del retraso? Vamos a desvanecer nuestra película de acción. Música de acción. Fue una película así de fácil. Sería genial, ¿no? Voy a poner dos aquí, sin duración. Voy a compilar y guardar, y esto está prácticamente listo. Oh, vengamos aquí a nuestra puerta principal. Y ahora necesitamos una referencia al personaje, que sí tenemos. Es el otro actor de aquí. Voy al personaje pop. Convertido a puro reparto. Voy a tocar música de acción. Voy a conectar esto aquí. Ahora podemos probar cuando estamos en el rango y cuando no lo estamos. Oh, vamos a ver esto. No tenemos música. Encontremos la puerta del infierno por aquí. Encima. Está bien. Es tocar nuestra música. Ahora, vamos a probarlo un poco más rápido porque 15 segundos, no quiero esperar ahora mismo, y sería una pérdida de tiempo. Entonces vayamos a nuestro jugador. Vamos a establecer lo legal para digamos 3 segundos. T. No hay puerta del infierno. L espn otras formas. Uno por allá. ¿Verdad? El material sí cambió. Comprobemos la música. Uno, dos, tres, se detuvo. Vamos a entrar y salir. Constantemente. Sí. Entonces, nuestro mecánico está trabajando. Y creo que este es un buen punto de parada para éste. Vamos a continuar en la siguiente. Adiós. 93. Sistema de salud Hellgate y muerte: Hola, y bienvenidos a Game Design Workshop y Real engine five Procesal Dungeon action RPG curso de creación Anteriormente, creamos la cadena de eventos para comprobar si nuestro personaje está al alcance de nuestra torre. No, comprobamos si tiene el componente P, comprobamos si es una colisión capsual de nuestro personaje, y establecemos una variable a la que llamamos fuego Luego cambiamos el material a un material que salta de resplandeciente a normal, y luego lo volvimos atrás. Y creamos la mecánica de tocar música de acción en nuestro personaje, que comienza a jugar con un desvanecimiento o desvanecimiento cuando ha pasado un tiempo Pongamos esto de nuevo a 15 Podría ser largo. Vamos a ponerla de nuevo en diez. Y luego nos desvanecemos ya que han pasado 10 segundos, y no nos han golpeado, así que se desvanece. Ahora, sigamos con nuestro sistema de salud de puertas de salud. Como usamos para el personaje, el cualquier daño. Vamos a comentar esto. A Música. Como usamos cualquier evento de daño para nuestro personaje, mismo haremos con nuestra torre, ya que estamos aplicando daño cuando estamos usando la poción y cuando empezaremos a disparar Un evento de daño, y vamos a necesitar dos variables, claro, o salud actual y salud Mx, van a ser enteros No enteros. Me refería a flotadores. Ese punto decimal es importante y lo facilita con las divisiones. Cualquier evento de daño recibido. Tenemos que quitar a los damats de nuestra salud actual, no para nuestra M. Vamos a hacer un menos Vamos a conectarnos. Esto en realidad aquí y esto aquí porque estamos restando de nuestra salud actual Voy a agrupar la carga. Voy a fijar nuestra salud actual, y la pinza, por supuesto, sería mínima a Mx. Al comenzar a jugar. Vamos a establecer MC. Pongamos la corriente a Mx. Vamos a establecer un valor en la salud de MC. Eso digamos cinco salud. Tenemos que compilar. De la salud. Siguiente. Lo vamos a hacer es hacer una pregunta. Volvamos a nuestro cualquier daño. Vamos a poner una rama, y vamos a comprobar si esto es igual o menor menor o igual que cero. Porque tenemos nuestra rabia y nuestro ataque mediático hará más de un daño. Nuestro tiroteo hará un daño. Queremos verificar por menos de cero, también, aunque estemos sujetando, que hace que esto sea obsoleto. Pero en fin, si no estamos sujetando, hagamos A sirst Si no somos cero salud tm. No, vamos a hacer una vez. Lo siento, me estoy adelantando. Estos serán todos nuestros enemigos, los que hacen. Antes lo hacemos una vez, porque hacemos una. Hagamos algo complicado con esto con nuestra puerta de hel. Lo que vamos a hacer es que vamos a reducir el tamaño de nuestras mallas Entonces parece que se está haciendo más pequeño cada vez que lo estamos atacando. Vamos a elegir estos dos líos. En realidad, solo necesitamos el padre, que es uno de malla. Vamos a eliminar el otro, y vamos a s todos un tres D. Lo que vamos a estar configurándolo es porque estamos empezando en 0.5. En realidad vamos a volver a almacenar esto como una variable y comenzar a jugar. A una escala de pared. Vamos a promover esta variable. Vamos a llamarlo original. Aquí. Ahora, lo que vamos a hacer por el mundo sanador establecido, vamos a larp Por qué vamos a dejar porque vamos a leert a través del original, que sería B en nuestro caso, y una quinta parte del mismo Vamos a dividir. Vamos a convertir esto en un entero. Vamos a dividirlo por 555. O Alfa sería el porcentaje de nuestra salud y salud actual. Vamos a dividir a estos dos. Entonces como estamos comenzando con porcentaje completo, esto estaría pasando de B a A, porque cada daño reducirá el Alfa. Y cada vez que queremos cambiar una quinta parte de la escala original. Y los unos, nos vamos a ir para después cuando tengamos algo de IA. Ahora bien, ¿qué hacemos cuando llegamos a eso va a hacer un evento personalizado Vamos a llamar a esto muerte, y vamos a llamarlo desde aquí. Ahora, vamos a sentir la muerte. Lo que vamos a hacer es en un medidor en el lugar. Y la ubicación sería nuestra brecha en p. ubicación. P metro sería una explosión. Entonces tenemos la explosión P, y va a ser una escala b hacia arriba, cinco. Permanezcamos autodestruyendo y activemos de forma automática. Ahora, lo siguiente que tenemos que hacer es conseguir nuestro piso de baldosas y restablecer su material, no restablecer su material. Cuando vamos a nuestro azulejo, cuando tenemos una puerta, tenemos un sge en el suelo Lo que queremos es hacer desaparecer al sge. Para ello, sí necesitamos una referencia de mosaico. Entonces, en nuestra puerta principal, vamos a crear una variable de mosaico para llamarla pila. Va a ser del azulejo tipo P. Seré un objeto de referencia compilar y guardar, y vamos a ir a nuestro laberinto que estamos desove W es nuestro laberinto Aquí está, generador de laberinto. Cuando estamos desove las puertas de la cabeza en nuestros apoyos, dueño, que es Sí, este, el complejo Tenemos que hacer la instancia variable editable y exponer en spawn Entonces ahora en nuestro laberinto, el utilete donde engendramos, esto no es todo. Cuando engendramos la puerta del infierno, ¿compilé esto? Yo no compilé. Queremos refrescar esto, y ahora tenemos nuestro azulejo. Entonces, ¿qué conectas para el azulejo? Bueno. Nosotros sí tenemos por aquí que estamos tomando las coordenadas. Entonces voy a conectar esto aquí. Y vamos a compilar y guardar, y ahora tenemos nuestra referencia a nuestro azulejo. Entonces vamos a conseguir nuestro azulejo, el azulejo, vamos a conseguir el piso, y material o elemento cero porque en el elemento cero, tenemos la C y vamos a ponerla en vacío. Se necesitarían algunas acciones más sobre la IA. Pero cuando tengamos nuestra IA, vamos a estar completando. Básicamente, cuando atacamos a la T, lo que hará la IA es configurarla automáticamente en estado para atacar, por lo que buscará al jugador y atacará al jugador. Y al morir, básicamente lo pondremos en libertad. Vamos a crear un comportamiento que se escapen, y tal vez en algún momento te vuelvan a cambiar y o empiecen a patrullar en algún lugar al azar, pero veremos el Desde que tenemos nuestra muerte En realidad tenemos que destruir también al actor. Porque si no destruimos actor, entonces nuestra puerta seguirá ahí. Ahora, compila y guarda. Tenemos una porción de daño que puede destruir esta puerta. Vamos a probarlo. Boom. Sí, funciona. Genial. Creo que esto va a ser por éste. Te voy a ver a la siguiente. Adiós. 94. Sistema de animación y orientación de balas Hellgate: Hola, y bienvenidos al Taller de Diseño de Juegos bajo el motor cinco Convocatorias de Creación de Pz de Acción de Calabozo Procesal Creación de Pz de Acción de Calabozo Anteriormente, terminamos con nuestro mecánico de Hell gates Health. Agregamos el evento de cualquier daño, y creamos dos variables, salud MX y salud portadora. Seguimos el procedimiento para abstraer la salud y verificar si estamos muertos o no. Si estamos muertos, estamos ejecutando nuestro evento personalizado de muerte, que genera un medidor e, pone el material del suelo a cero a nada, el material CG, y luego destruye a nuestro actor Si no estamos muertos, estamos reduciendo nuestro tamaño en una quinta parte, eso no podemos verificar porque en realidad, no podemos verificarlo si cambiamos el daño de nuestra, ge porción. Entonces, si pongo el daño a ser ¿cuánta salud tenemos? Nosotros sí tenemos cinco de salud. Lo que vamos a hacer es llegar a un daño, y vamos a poner el retraso de 2 segundos. Vamos a hacer esto un poco interminable. Pero podemos detener el tiempo de juego cuando queramos 2 segundos para ello. Encontremos una puerta del infierno. No hay puerta del infierno. Es bueno que a veces empiece sin una puerta infernal. Presiona una porción de salvia. Obtener No, no lo hace. Porque esto no es davibl. Vamos a promover esta veble temporal. Después comprobamos por la sucursal. No dice nada más. Yo voy así por aquí. R. Vamos a revisar 12, tres. Sí, se está haciendo cada vez más pequeño y apretado. Entonces funciona. Volvamos a nuestro personaje. Eliminemos esta variable. Vamos a conectar esto a. Vamos a esta demora. Sentemos la variable también de variables, compilemos y guardemos, y volvamos a nuestra puerta él. Ahora, sigamos haciendo la puerta principal. Ahora, empiezo a jugar. Vamos a necesitar hacer algunas cosas. Pero primero, vamos a crear la bala que va a desovar la puerta l Vamos a ir a planos, vamos a crear una nueva carpeta. Llamemos a esto ab. B. Ener y crear un nuevo plano. Vamos a mecanografiar actor, va a ser BP, bala de puerta L. Ahora vamos a abrirlo. Vamos a traerlo aquí arriba. Dave, Lo primero que debemos agregar es sistema de artículos. Oh. Vamos al contenido, Busquemos ferrocarril. Que vamos a utilizar este sendero primario. De hecho, vamos a duplicar esto. Entonces tenemos rastro primario uno. Vamos a entrar en este sendero primario uno. Cambiemos la vida del color de la escala. Ir a iones, puntos de curva constante, y cambiemos todo a algo amarillento, rojizo Hagámoslo misivo. Esta una copia este Uno, copia pegando disponible En realidad, ¿y si lo cambiamos a vector constante, y lo hacemos rojizo Mejor cambiar a vector constante, de todas las tangentes, va a ser un poco más Constante, no va a cambiar tanto, pero va a estar bien Y 11 aquí. Y cambiemos el color inicial o algo rojizo. 55 un poco. R. Sí, esto es bueno. Vamos a ahorrar. Cierra esto, vamos a volver a nuestra bala de la puerta del infierno, y vamos a agregar cascada, y aquí está. Ahora, necesitamos una colisión colisión, aquí necesitamos. Pre colisión. Vamos a bajar un poco más la fiesta. S. La colisión no debería ser hijo de la partícula. Por colisión debe ser hijo de la podredumbre predeterminada. Eso está bien. Creo que ve aquí. Hagámoslo mover. No, primero necesitamos optimizar un poco de la esfera. Vayamos a colisiones de la esfera. Comprobemos el átomo, y vamos a ignorar todos excepto los estanques. Compilar y guardar. Ahora vamos a hacer que se mueva. Lo que vamos a necesitar es un objetivo porque vamos a cronograma desde nuestra posición hasta el objetivo para tener a ritmo de tiro de viajar. Y lo que hacemos va a conseguir la ubicación de nuestro actor. Pero el actor, no queremos que sea nosotros mismos. Queremos la pata del jugador, así que vamos a poner al jugador para conectar esta ubicación de obtener actor. Y lo que vamos a crear es una caja alrededor del jugador. Al igual que, a algunos de los tiros le faltará el jugador a propósito. L obtener disparos de izquierda y derecha, algunos de ellos van a ir al jugador, pero la mayoría de ellos van a ir de izquierda y derecha. Oh, vamos a hacer un menos digamos 100, digamos que estamos apuntando al piso. Y entonces vamos a estar obteniendo un punto aleatorio en el cuadro delimitador Un área alrededor de nuestro jugador. Vamos a establecer este 200 201, y vamos a hacer una selección. Porque como decíamos, algunos de ellos estarían yendo a nuestro jugador. Y vamos a poner esto en la ubicación del actor. Aquí vamos a poner un tirón aleatorio algunos de ellos están apuntando a nuestro jugador, algunos de ellos están apuntando a otra parte, y este será nuestro objetivo. Entonces voy a promoverlo a variable y llamarlo target. Voy a conectar esto en comenzar a jugar. No necesitamos los otros dos, los voy a eliminar. Consigo esto un poco más bajo. Y ahora necesitamos la ubicación original de los actores. Entonces vamos a conseguir la ubicación del actor. Voy a promocionarlo a ubicación original variable. Y ahora necesitamos la línea de tiempo, así que agrega timeline. En este momento, vamos a hacer algo diferente. Vamos a utilizar dos vías de flujo, una de ellas para controlar la distancia, y la otra para controlar la altura de nuestro proyectil Entonces, entremos en la línea de tiempo. Agreguemos dos pistas de flujo. Podríamos hacerlo con una pista vectorial, pero solo usemos dos vías de flujo. Creo que es más claro lo que hace cada uno, y es más fácil configurarlos. Pero el primero sería 00.0 y valor cero, y el segundo sería ¿cuánto tiempo debería estar viajando nuestra bala Digamos en algún lugar por aquí, sea lo que sea 0.85 A lo mejor eso es demasiado 0.8. Punto cero 0.8. Quiero el cercano al 75, así que 0.8 suena bien, y valoramos uno. Encajemos esto aquí. Para la siguiente pista, sumemos los puntos. El primero sería cero, cero. El segundo sería al medio tiempo, llamemos a medio tiempo de 0.8 0.4 0.4. Ese sería uno. Y el último punto sería 0.8 sobre valor cero. Ahora, vamos a llenar esto. Lo que quería decir es que éste es el que está controlando nuestra distancia desde el origen hasta el jugador, y éste estará controlando solo el eje Z desde la altura de origen hasta la altura original. Ahora, vamos aquí. Lo que vamos a hacer es la ubicación a. Vamos a dejar vector. Vamos a conectar la ubicación original con A. Y vamos a conseguir nuestro objetivo. Y vamos a sumar la altura que vamos a estar controlando desde nuestra pista dos. Voy a hacerlo. Vamos a conectar la pista dos aquí, vamos a conectar la pista uno aquí, vamos a conectar esta aquí. Y para los valores, solo vamos a sumar 100 a Z. Cuando hayamos terminado nuestra línea de tiempo, vamos a en un metro en el lugar Y t. Esto es y. En un metro en el lugar. Vamos a elegir la explosión de partículas. Vamos a escalarlo para escalarlo en realidad 2.5 0.55. Por la ubicación, vamos a conseguir nuestro objetivo. Y luego vamos a este acto. Ahora, existe la posibilidad de que nos destruyan antes de esto, que es cuando estamos colisionando con el jugador No, hagámoslo. Consigamos nuestra colisión de esfera, comencemos a obtener el evento begin over lap. Preguntémosle al componente. Si el componente tiene tachuelas P, vamos a aplicar daño al otro, que es el jugador Voy a aplicar, digamos p un daño, y luego voy a copiar este medidor en el lugar. O aquí. No vamos a usar el objetivo. Lo haremos en la ubicación del actor del otro actor. Realmente, podemos usar el resultado de barrido y romperlo, y podemos usar la ubicación, la ubicación del punto de impacto. Para que podamos engendrarlo exactamente donde queramos porque el otro actor le dará el centro de nuestro actor Oh, vamos a usar la ubicación del impacto, y luego vamos a destruir al actor, y esto no nos importa porque el actor ya está destruido. Creo que este es un buen punto de parada para este. Vamos a continuar en la siguiente. Adiós 95. Disparo de balas Hellgate y SFX ligero: Hola, y bienvenidos a ganar taller de diseño, y real Engine five, Dungeon procedimental, RPG de acción, curso de creación En serio, terminamos con nuestra bala de la puerta del infierno. Agregamos un efecto de partícula que cambiamos algunos ajustes, básicamente, el cambio de color de por vida a lo largo de la vida, que lo convertimos en una constante, y luego cambiamos también el tamaño inicial. A continuación, fuimos y creamos nuestra bala de puerta de plano que usamos una clase de actor, y agregamos esta partícula y una colisión de esfera, que usamos act Si estamos colisionando con el jugador, estamos obteniendo el resultado de barrido de esta colisión, obtenemos el punto de impacto preciso y engendramos pimter, y aplicamos un daño al jugador, 0.1 de daño, y luego destruimos Ahora bien, la forma en que se mueve este actor es que en la obra de inicio, estamos almacenando una ubicación objetivo a través de la ubicación de nuestro jugador más un punto aleatorio alrededor de los pies del personaje básicamente. Y luego almacenamos la ubicación original, y usamos una línea de tiempo con un punto muy rápido, de cero a 0.8 para llegar al objetivo, y usamos las diferentes series, usamos dos pistas de flujo diferentes, una de ellas para cambiar la distancia y la otra para controlar la altura. Usamos la ubicación del actor del set para mover al actor. Entonces si no alcanzamos nuestro objetivo, realidad no le pegamos al jugador, alcanzamos nuestro objetivo. Usamos la ubicación del medidor de desove para generar una explosión, y luego destruimos actor Ahora, continuemos en nuestra puerta del infierno y el evento de inicio de juego para comenzar a crear la mecánica de tiro. Así que vamos a utilizar un evento de tiempo de nuevo. Y va a estar buscando cada 0.3 segundos. El mecanismo de disparo rápido. Voy a crear un evento personalizado. Vamos a llamarlo deber. Y usemos una rama decidir cuándo realmente está disparando o no. Y sí tenemos la condición, sí lo llamamos fuego. Vamos a usar esta condición por aquí. Ahora bien, no siempre queremos estar disparando. Aquí es cuando podemos disparar cuando el jugador está al alcance, pero ¿el jugador está en línea de visión? Esa también es una pregunta. ¿ Vamos a hacer un rastreo de línea? Por canal o canal Tamela. Y vamos a utilizar la ubicación del actor para el arte. En realidad, vamos a hacer lo contrario. Vamos a usar la ubicación o final del actor y no solo la ubicación del actor, la ubicación de malla estática porque es un poco más alta que donde las cucharas del plano Estamos empezando desde aquí. Estamos terminando ahí en realidad no comenzando, nos vamos a preocupar la ubicación Porque es un componente. Necesitamos la ubicación de la palabra de la metáfora estática? Voy a conseguir p y del pon, vamos a conseguir localización porque el pon es actor. Voy a usar eso desde el principio. Pero en realidad estamos comprobando desde el jugador hasta la torre, ¿es visible? ¿Podemos pegarle a algo? S. ¿ Vamos a comprobarlo? Ese es el componente que estamos calentando, rompamos esto. Resultado de golpe. Ese es el componente que estamos calentando al actor así que g E. H calentamos nuestra torre Eso es sólo si calentamos algo. Primera pregunta, ¿ en realidad le pegamos a algo? Si calentamos algo, ¿tiene el g E? Si lo hace, vamos a todos en clase. Vamos a dividir transformar. Vamos a conseguir volvamos a conseguir la medida estática. Ubicación de Word. Sponse un poco más alto, y ahora tenemos que pagar sonido Ahora, para el sonido, no tenemos un sonido para esto, pero hay un sonido en irreal que me parece bien para este uso, no el mejor Vamos a ir al contenido. Y como puedes ver, no hay contenido de motor. Vamos a ajustes y seleccionamos ningún contenido del motor. Vamos a tener una nueva carpeta que se llama motor. Ahora bien, no se recomienda cambiar ni hacer nada en este contenido si no estás sabiendo exactamente lo que estás haciendo. Porque puede estropear el motor, pero no podemos usar un sonido de ahí. Y vamos a usar la ventana tkable. El cercano. Sí, ésta. Cerrar ventana de conversación. Y ahora tenemos nuestro fuego listo. Vamos a compilar y guardar. Yo no elegí una clase, bala P. O aquí, elegimos un actor, que es P H gate Bullet. Vamos a compilar y guardar. Camino. Las cajas son enormes. Y no nos está disparando. ¿Por qué no nos está disparando? Vayamos a Puedo soportar esta música. Mucho para pruebas. Vamos a ir a nuestra puerta principal. Ahora, tenemos algunas puertas principales. Digamos que teníamos más. La forma en que lo podemos hacer es que vamos a seleccionar esta. Rechazemos, seleccionemos esta, y podemos ir aquí, y podemos ver que está seleccionada. Veamos qué está funcionando. Está golpeando algo. No podemos E, ¿esta clase tiene etiqueta? Debe tener en etiqueta. Sí. Porque nuestra pareja no lo hace ni. Hagamos una depuración en este rastro para endoprótesis al jugador. Vamos a mover al jugador al lado de una puerta infernal. Estamos pegando al jugador. Esto es mientras porque puede bien. Entonces este opuesto realmente no funcionó. Entonces vamos a hacer lo contrario. Vamos a partir de la malla como gente normal. Nosotros solo vamos a demostrar que lo contrario suele estar bien también. Esta vez, no lo es. Vamos a cambiar al actor a, y vamos a y vamos p. I. Ahora bien, esto pegándole al jugador pero aun así no está disparando. Comprobemos y. ¿Qué? Debido a que estamos comprobando por actor, necesitamos verificar el componente como una T, necesitamos algo de sonido para una T necesitamos algo poder verificar si se está reproduciendo el sonido de disparo. Tenemos fuego escupido. Derecha, eliminemos toda esta depuración, para que podamos verla un poco más clara. Vayamos a la esfera. Vamos a colocarnos ocultos en el juego. Dos. Qué más necesitamos depurar líneas apagadas. Y solo por el bien de ello, vayamos a nuestro personaje y agreguemos hacer un componente de audio. Hagamos este ambiente. Vamos a elegirlo para que sea de ambiente sonoro. Creo que esto es todo. No estoy seguro. Sí, eso es. Ambiente, la Q, no el sonido, y se activará automáticamente para activarse Vamos a revisar. Un ambiente p. no tenemos una puerta infernal. Todo bien. Tener fuego rápido. Se queda un poco en el suelo, y luego explota A lo mejor podríamos poner algún código para eso, pero no vamos. Todo bien. Lo siguiente que debemos hacer. Noto que la iluminación es un poco estática este ligero overs La ventana se ha movido. Esta luz de aquí es un poco estática, y tenemos un código para la luz para hacerla parpadear Está en nuestras antorchas. Vamos a nuestras antorchas. Son policías que cojan la antorcha. Voy a usar este código por aquí. Regresa a nuestra puerta infernal. La bala. Cierro la bala, no la vamos a necesitar más. Puerta del infierno, y para poner esto aquí. Voy a poner una secuencia. Lo puse antes del evento del tiempo, para que podamos simplemente hacer estas acciones seguidas. Derecha. Ahora, voy a ir al semáforo. Voy a conseguir el color. Voy a ir a A, pegar. Voy a pegarlo y cambiarlo un poco bien. Y tal vez más naranja aquí, y la luz será de densidad. Lo tenemos 100 150 dicen al azar. No se puede hacer al azar en actualización, eso va a ser d e. El rango será de 700-800 Hagámoslo más grande, y eliminemos algunos puntos. Vamos a quedarnos con esa. Sí, está bien. Y vamos a comprobarlo. No hay puerta. Tendremos uno. Y si, ahora mismo, la luz , claro, es mucho mejor. Hace algo. Leer. Creo que esto es para éste. Te voy a ver en la siguiente. Adiós. 96. Widgets de ratón personalizados y malla renaciente: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG Creation Course Anteriormente, hemos terminado con nuestra puerta del infierno. Completamos nuestro evento de rodaje, que utiliza un tiempo establecido por evento y desencadena el evento de rodaje. Entonces estamos preguntando si somos capaces de disparar. Si somos capaces de encontrar, lanzamos una línea de rastreo desde la malla estática al jugador. Lo contrario realmente no funcionó para nosotros. Y entonces estamos preguntando si calentamos algo. Ahora bien, si es cierto, si calentamos algo, entonces estamos preguntando si ese es el jugador. Y si es así, estamos generando una bala de puerta infernal, y estamos tocando un sonido También creamos nosotros no creamos. Copiamos pegado el código de nuestras antorchas, lo que hace temblar la vida. Cambiamos un poco la línea de tiempo, y cambiamos un poco los valores. Entonces ahora, nuestra luz de nuestra puerta infernal también como animación, básicamente. Oh, vamos a salvar esto. Creo que es hora de empezar a hacer algunas cosas más relacionadas con jugadores. Oh, comencemos con el ratón. Vamos a crear dos widgets. Uno para ellos para ratón a sobre enemigos, y otro para que sean normales. Entonces vamos a llamar widget de usuario. Vamos a seleccionar widget blueprint, widget de usuario, W G ratón normal Voy a copiar pegar y nombrarlo W G mouse. Ahora, vamos a ir a la configuración de nuestro proyecto y buscar o cursor. Y aquí tenemos nuestros cursores de software, que podemos anular con algunos widgets Vamos a sumar dos de ellos. En realidad, no nos deja añadir una segunda porque ésta tiene que ser única. Pero el primero sería el predeterminado, y el segundo sería el cruz suyo. Como puedes ver, estamos eligiendo entre set list. Ahora, para nuestro default, vamos a elegir el ratón normal W G, para el punto de mira, vamos a elegir el ratón W G. Ataque, creo Ratón de ataque. Aquí está. Vamos a cerrar los ajustes del proyecto. Ya no los necesitamos. Ellos guardan automáticamente el momento en que hacemos algunos cambios, y vamos a abrir nuestros dos widgets. Vamos a abrir el ratón normal, traerlo aquí. Abramos también el ratón de ataque. Para el ratón normal, vamos a colocar un lienzo. Y vamos a usar una imagen. Y vamos a ir a nuestro mage y establecer su tamaño en 90. Queremos que sea una caja, y para el ema pincel, vamos a seleccionar UI mouse. Debería haber un mouse de interfaz de usuario. Parece que jugamos bastante y apareció. Así que vamos a elegir el mouse UI. Ahora, podríamos crear algún código complejo y hacerlo rojo. Pero lo que vamos a hacer es op the Canvas, volver a nuestro mouse de ataque y pegarlo aquí y seleccionar el mouse e ir a su tinte. Vamos a hacerlo rojo brillante. Y ahora tenemos un ratón rojo para apuntar en lugar de hacer cualquier tipo de código. No. Básicamente, Eso es a partir de esta parte. Lo que hay que programar es la parte que cambia de color cuando estamos flotando a un enemigo Pero para eso, necesitamos cambiar algo de código primero en el controlador del reproductor. Entonces no hagamos eso todavía. Lo que debemos hacer es finalmente ir a nuestro personaje, cambiar el modelo. Entonces, dentro de nuestro personaje de arriba hacia abajo, vamos a ir a la ventana gráfica Vamos a acercar un personaje, y vamos a seleccionar nuestra malla. Ahora, no vamos a ir sobre demasiados detalles sobre animación y mallas porque sólo vamos a hacer que funcione para nosotros. Va a estar usando el carácter paragon, que está pensado para algo para un uso completamente diferente Así que solo vamos a hacer que el personaje paragon funcione para nuestro conjunto de habilidades y nuestras habilidades y jugabilidad deseadas Para nuestra malla, vamos a seleccionar a nuestro renacido. Y como pueden ver, está en una posición muy rara. Esto se debe a que estamos usando el conjunto ym de dinero C, que necesitamos cambiar al plano reverendo ym Y como pueden ver, claramente cambió todo. Ahora, si compilamos y presionamos play, veremos un problema en el carácter de ingresos. Vamos a abrir el carácter de ingresos. Aquí hay algún código que hoy en día está obsoleto. La forma en que resulta esto ya no existe en la configuración del proyecto. Entonces vamos a eliminar estos eventos que plantean un problema. Y vamos a compilar este plano y guardarlo, y vamos a presionar play Entonces ahora tenemos nuestro personaje renacido en nuestro juego. Pero nuestra arma se extiende constantemente, lo cual es algo que no es muy agradable. Así que arreglemos eso. También voy a bajar el sonido porque vamos a estar probando mucho. Oh, vamos a abrir nuestro plano de animación de personajes. Vamos a abrir el acto de malla esquelética renacido porque la persona está Tienen todos los talones por aquí, que podemos ir al plano de animación o al montaje de escenario a nivel, o al Podemos ir a cada categoría. Entonces ahora mismo, voy a ir al plano, pero no quiero el aparejo de BP renant Quiero el plano de animación renacido. Voy a seleccionar esto y abrirlo. Ahora mismo, estamos dentro de la locomoción, que está dentro de la gráfica de animación, que determina en qué animación reproducir Antes de comenzar a configurar la animación, vamos a Evenra La razón por la que recibimos un error a un personaje que no estamos usando el personaje renacido es porque hay todos estos moldes aquí en animación inicializada del blueprint del evento para lanzar al Entonces como tiene una referencia dura, un casting, en realidad, no una referencia dura, yo hago referencia a eso, así que cuando presionamos play, comprobó si esto compila o no Y no lo fue. Entonces, voy a eliminar esto porque no vamos a necesitar la animación inicializada No necesitamos cuando el auto BP sens bla, bla, bla. No necesitamos esto. Y no hacemos esto y no lo hacemos el montaje llano al principio, que es el intra montaje, y creo que no necesitamos los notificadores de animación de Vamos a crear el nuestro propio probablemente. Yo también voy a borrar esto. Y la forma en que vamos a estar animando es que vamos a estar tocando montajes De hecho vamos a crear un enorme gráfico de animación con mucha funcionalidad. Entonces, en nuestra locomoción, en gráfica de animación, vayamos a la locomoción Tenemos la locomoción de tierra base, que luego se divide para compensar anim a las ranuras de la parte superior del cuerpo, y hace algunos planes raros que no vamos a usar mucho Entonces pasa por todo esto y nos da la pose de salida. Y lo que vamos a hacer es ir al interior locomoción terrestre y cambiar el ralentí de inactivo, que es esta animación que tiene el cañón extendido buck Entonces no necesitamos este ralentí con el arma extendida, necesitamos el bucle inactivo no de combate. Y tenemos que jugarlo. Vamos a agregarlo aquí, y vamos a compilar, y ahora nuestro ídolo está con un arma abajo. Entonces volvamos, y entremos en nuestro inicio de trote Ahora, tenemos nuestro inicio jog forward, pero necesitamos de nuevo el que no sea de combate Entonces vamos a conseguir que no combates jog forward, que es inicio FWD, y vamos a seleccionar play, que si hacemos clic en él, este Bueno, este es nuestro inicio de trote. Ahora, volvamos y vayamos a nuestro jog stop, que necesitamos de nuevo, el no combate Entonces combate Jog W, y vamos a jugar. Y esta animación tiene esta animación muy bien encabezada. A veces retrocederá porque no tenemos un sistema completo, pero está bien. Por último, vamos a correr, y aquí podemos ver un espacio de mezcla, que en realidad es multidireccional para forro y todo Ya que no vamos a necesitar todo esto. Volvamos. Vamos a eliminar esto. Nuevamente, vamos a usar el jog forward no o Dog forward, non combat, entre play, que es esta animación constante corriendo Ahora, vamos a guardar volver a nuestro juego. Presionemos play. También tenemos el nuevo ratón. Y puedes ver ahora mismo tenemos una mejor animación para andar y correr con águila. Yo uso una porción de Murciélago. Yo no tengo uno. Creo que esto sería por éste. Te voy a ver en la siguiente. Adiós. 97. Animación de impulsos físicos y ataques cuerpo a cuerpo: Hola, y bienvenidos al taller de Diseño de Juegos y motor real cinco procedimientos Dungeon action iz llamadas de creación Anteriormente, creamos nuestros widgets para nuestro mouse. Creamos el widget de ataque del mouse y el widget normal del mouse, y los agregamos en la configuración de nuestro proyecto a nuestro software de cursor a nuestros cursores de software Entonces entonces procedimos a sumar nuestro modelo Aragón a nuestro personaje Y cambiamos la clase de animación para que fuera el plano de animación del plano renacido y la malla esquelética por el Se procedió a hacer algunos cambios en el plano de animación, cual fuimos al gráfico de animación dentro de la locomoción terrestre, y cambiamos en el Jog start jog stop y run a Ahora, procedamos haciéndome atacar. Pero antes de hacer eso, me di cuenta de que cuando estamos dañando con la poción de rabia, no estamos aplicando ningún impulso a los elementos de física, que como habilitamos que los elementos de física se superpusieran por la colisión de rabia, se superpusieran por la colisión de rabia, entonces deberíamos hacerlo Entonces, antes de esta rama aquí, vamos a poner una secuencia. Y vamos a poner una rama, y vamos a copiar en realidad, no queremos que el actor tenga tirón Es un componente. Nuestros objetos de física, las cajas son componentes. Entonces vamos a ir a componente y tiene remolcador un componente tiene remolcador Y la etiqueta será H. Si lo hace, vamos a obtener el componente y a pulso. Si es verdad. Vamos a necesitar más espacio. Un poco más alto. Para nuestro impulso, vamos a necesitar dar algún número. Lo que vamos a hacer es dividir este vector en x y z. Vamos a obtener una carga aleatoria en el rango. Y vamos a duplicar esto dos veces dos veces tra. En realidad entre los dos primeros, vamos a seleccionar en base a un bul aleatorio. Esto se conectará en x e y esto se conectará en muerto. Ahora, para los valores, vamos a poner menos 220. Y en realidad, esto tiene que ser menos 260, digamos, y esto debería ser menos 220, porque el máximo está más cerca de cero. Entonces este valor, ya que estamos en menos, este debería ser menor que este. Y hagamos lo positivo aquí, que sería 220 mínimo y 260 máximo. Y para el impulso de altura, pongamos 200 a 300. Y ahora, teóricamente, comprobemos también el cambio de velocidad Que lo que hace, básicamente, es como amontonar la masa del objeto, si eso tiene sentido, porque los elementos de física tienen Pero es un poco más complicado que eso, pero consideremos más o menos que hace eso. Así que vamos a jugar. Encuentra algunas cajas de nuestro inventario. Sí. Se están moviendo, están recibiendo un impulso. Ahora, vamos a usar este código también en nuestro ataque masculino. Pero vamos a copiarlo y pegarlo en ese momento. Ahora, para crear un ataque A M, primero tenemos que hacer algo de pre trabajo. Lo que vamos a hacer es ir a nuestra carpeta de blueprints en nuestra carpeta de enumeraciones y crear otra enumeración, que va a ser el estado del jugador Ahora vamos a tener la mayoría de los estados, todos los estados básicamente en enumeración. Pero se recomienda tener más de uno. Vamos a llamar a este jugador estado. Vamos a abrirlo. Tráelo aquí, y voy a agregar dos estados. Creo que el exacto. Llamemos así al primer estado. Llamemos al segundo estado. Normal, todo el tercer estado A o cuando estamos apuntando, llamemos al quinto, al cuarto estado. Stan, porque cuando nos van a golpear, queremos que suceda un Mini stan, y llamemos al último estado M. La forma en que vamos a usar esto es principalmente para no hacer las cosas mientras estamos en otro estado. Lo siguiente que vamos a hacer es ir a nuestro personaje y crear una función para cambiar el estado. Entonces vamos a llamarlo cambio ocho. Para la entrada, va a tener un estado de jugador e. Esta fecha. Vamos a crear una variable de tipo player state. Llamemos a esto también jugador ocho. Paté. E jugador estado. Y vamos a duplicar esto. Y vamos a llamarlo Jugador estado edad. Oh, tenemos que estar poniendo estas cosas aquí. Lo primero que debemos hacer es establecer nuestro estado de jugador al estado anterior. Y lo siguiente que hacemos es establecer nuestro jugador el estado del deseo que está entrando. Ahora bien, no creo que vayamos a usar el estado anterior, pero ¿por qué no tenerlo? Lo siguiente que debemos hacer es agregar el estado a nuestro controlador de arriba hacia abajo. Y debido a que vamos a estar usando la referencia del controlador a menudo, vamos a empezar a jugar. Y aquí que estamos guardando el modo de juego abajo. Que X y Maro hagan lo mismo con el controlador del reproductor. No, vamos a conseguir jugador y elenco. Abajo para que sea un elenco puro. Promover esta variable. Conecta esto y ahora tenemos una referencia a nuestro controlador. Ahora vamos a nuestro controlador y creamos una variable. Llamemos a este jugador ocho. Jugadores ocho. El estado del jugador B ya es una variable. El tipo será e estado jugador. Compilar guardar. Volvamos a nuestra función, y estado. Vamos a obtener nuestra referencia de controlador de arriba hacia abajo, y vamos a los jugadores estatales. Ocho nuestro estado. Oh, ya terminamos con esto. Y lo siguiente que debemos crear es nuestro montaje de animación para M Montage Oh, vamos a establecer para st, que es la animación que queremos usar, y vamos a hacer click derecho sobre ella y ocho montaje de animación Ahora bien, ¿qué es un montaje de animación? Vamos a pintar por un segundo. Oh, consideremos que tenemos nuestro personaje y a nuestro personaje corriendo. Esta es una animación. De todas formas. Entonces nuestro personaje corre constantemente. Y de pronto queremos jugar un ataque. Y digamos que no queremos cambiar de carácter desde el desperdicio hacia abajo. Queremos que esta parte sea la misma. Entonces podemos usar otro sistema llamado slots. Ir demasiado grande. Pero podemos usar otro sistema llamado slots, y podemos decir que podemos decir simplemente reproducir una animación sobre esta parte o mezclarla con la parte de abajo. Y aquí donde están los montajes. Como estamos diciendo, toca esta animación. Llamemos a ataque uno, y él extiende, por ejemplo, su brazo así y para darle un puñetazo. Ahora, vamos a utilizar hasta esta parte para nosotros, pero los montajes tienen habilidades hacer un ataque, también, por ejemplo, después, y lanzar este puñetazo si el jugador sigue presionando o si no Y básicamente, es una herramienta que nos ayuda a crear más potentes y no solo más potentes, sino que nos permite controlar animaciones complejas. Por ejemplo, combos de ataque, movimientos especiales, que pueden ser activados por el juego De todas formas, vamos a entrar en esto. Entonces, estamos creando nuestro Montage. Abramos nuestro montaje. Oh, queremos en algún lugar de aquí, por ejemplo, jugar para crear una partícula o para reproducir otra animación. Lo que haríamos es crear algo llamado Vamos a hacer click derecho. En realidad, tenemos que hacer clic aquí en notifica. Esta es la barra del notificador. ¿Y qué es un notificador? Básicamente, es un marcador que podemos colocar en puntos específicos dentro la animación para desencadenar algunos eventos. Entonces, coloquemos un modificador de animación. En algún lugar de aquí. Todo esto aquí, una notificación, y vamos a un nuevo notifique llamarlo. Bueno, no es partícula. En realidad es un yo atacar nuestro plano me que vamos a crear, pero llamémoslo partícula Ahora bien, si tuviera otra animación aquí dentro, como puedo traerla. Puedo traer otra animación. Ese fue un mal ejemplo. Lo que vamos a hacer aquí dentro. Y lo que vamos a hacer aquí dentro es que vamos a crear un notificador, que en realidad es una marca, un punto en el que podemos desencadenar algunos eventos que queremos que algo suceda Podrían ser sonidos. Podría ser otra animación. Por ejemplo, si traigo una animación. Ahora esta es la misma animación. Pero si traigo Incluso la misma animación, y quiero decir, hazlo de nuevo. Yo necesitaría alguna cosa al notificador para explicar cuando vamos en qué animación Lo que vamos a hacer es por aquí, vamos a crear un notificador nuevo Vamos a llamarlo temprano. Ta. Y ahora tenemos aquí este notificador, cuando esta animación se coloca aquí, desencadena esto Hay una manera de encontrarlo realmente aquí. Sí, aquí no. Esta es la gráfica de animación. Lo sentimos, el gráfico de eventos en para estar en el gráfico de eventos en la parte de programación, no en la parte de animación. Sea esto es un evento. Es una cosa de programación, así que mi evento me notifica ataque. Y esto desencadenaría en ese momento. Pero como sólo tenemos un notificador, hay otra manera de llamarlo. Y sólo para demostrarlo por ahora, vamos a conectarlo en la siguiente lección. Vamos a Pen gra en nuestro personaje de jugador. Vamos a crear teclado espacial. Vamos a usar el espacio del teclado. Nosotros hacemos el ataque M. Entonces, si las jugadas tenemos esto notificado, comience y luego notifique al final, y obtenemos nuestro nombre notificado para que podamos cambiar por aquí. Hay muchas maneras de ir para las animaciones. Escogeremos unos específicos solo para que nuestro personaje funcione. Ahora, creo que este es un buen punto de parada para este. Vamos a seguir construyendo nuestro espacio y tocar montaje y toda la lógica de nuestro ataque Mi y crear también un plano que será nuestro ataque Mi en la siguiente lección Adiós. Nos vemos entonces, 98. Colisiones y efectos de planos de ataque cuerpo a cuerpo: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, creamos una fecha personalizada para nuestro jugador usando la numeración y teniendo nuestros estados Y procedimos a crear un estado de cambio a nuestra función de carácter Eso se llama estado de cambio, y estamos almacenando el estado anterior en una variable. Estamos configurando el nuevo estado, el nuevo estado del jugador al estado, y también estamos pasando esta información a nuestro controlador de arriba hacia abajo de que creamos el estado del jugador, otra variable. También creamos el estado anterior y el estado del jugador en la variable de personaje del jugador. Ahora, luego procedimos a crear nuestro montaje de animación, y creamos un modificador de animación Eso va a notificar a nuestro me ataque cuando a una nuestra partícula, que dijimos, no va a ser una partícula. Va a ser un plano que va a tener cierta lógica. Ahora, vamos a cerrar este montaje. Vamos a crear nuestro yo actor. Vamos a ir a la carpeta Habilidades, hacer clic derecho y crear una nueva clase de blueprint Vamos a ser actores, y llamémoslo BP. No vamos a programarlo ahora mismo. Vamos a ir directo a nuestro coleccionista. Vamos a ir a nuestro evento espacial, evento Bace ball, y vamos a cambiar según nuestro estado Vamos a conectar esto en prensa. Aquí es cuando vamos a poder hacer un ataque de mell. Y el único lugar al que queremos poder es cuando estamos normales. No, entonces lo siguiente que vamos a hacer de lo normal es cambiar de estado. Vamos a traer nuestra función de estado de cambio. Voy a ponérmelo a mí. Entonces esto me cambia nuestro estado. Ahora bien, si sigo presionando la barra espaciadora, no se reactivará. Ahora bien, lo siguiente que debemos hacer es pagar un sonido. Vamos a tocar sonido dos d, y vamos a elegir por un sonido el fuerte esfuerzo swing. Esfuerzo. Vamos a usar el esfuerzo cantar. La razón por la que vamos a usar esto es porque tiene un montón de ala diferente ¿Qué es este diálogo de diálogo también? Ah. Sí, sonará diferente cada vez que atacemos. Ahora, vayamos a nuestro reproductor, y después de nuestro sonido, deberíamos tocar nuestro montaje Y para jugar a Armona, necesitamos un componente de desorden esqueleto. Esto es necesario. Porque ¿quién toca este montaje? Esto es importante. Pero aquí nos vamos a conectar. Y para el armontaje, vamos a elegir nuestro ast montaje. Ahora, antes de decir que podemos usar el inicio notificado o cualquiera, se activará siempre que se utilice algún notificador Y como tenemos uno, podemos simplemente usar esto sin ningún nombre de notificador y decir, acto class, Y esta sería nuestra BP Melly O la transformación, vamos a dividirnos y necesitamos una ubicación. Vamos a conseguir nuestra malla. Obtener ubicación. Ubicación de futbol, ¿qué significa eso? Creo que estamos usando esta malla esquelética porque aquí es de donde podemos obtener una ubicación de fútbol Si vamos a nuestro esqueleto, volvamos a la persona y vayamos a nuestro esquelético Podemos ver que hay un montón de cosas extra como ¿Qué es un slot básicamente? Quiero decir socket, no una ranura. Entonces, ¿qué es un socket? Podemos ir a aquí estamos, y ojo hocico dos Se puede ver que aquí también hay un socket, que es algo a lo que podemos adjuntar algo, como una ranura en la que podemos colocar cosas. Y no necesita estar exactamente en la báscula. Como pueden ver este enchufe de aquí está muy lejos, lo que podría hacer por nosotros. Pero creo que este es el brazo equivocado con el y r para encontrar el zócalo y R en nuestro montaje Sí, es la otra r, el brazo derecho, no el izquierdo. Entonces necesitamos y r, arma r. a aquí estamos en r derecha, nd R uzle uno Usemos este bozal. Nombre del socket por aquí. Puntaje muscular uno. Volviendo a nuestro personaje y usar el nombre del socket. Lo cual no hice correctamente. A veces el control C simplemente no quiere operar. Hocico uno Esto le dará cualquier posición de palabra que nuestro socket esté en ese estado. Lo siguiente que haremos es adjuntar nuestro meacor a nuestro hd Y así nuestro ataque me sigue un poquito h. Vamos a hacer toque de aduch Al actor. Porque estamos engendrando un actor y queremos adjuntarlo a nuestro actor Y vamos a mantener la palabra. Esto quiere decir que cuando giramos nuestro ataque también gira, y parte actor sería. A lo mejor podemos abusar un poco de nuestro ataque, nuestro ataque de mayo, y simplemente dar la vuelta cuando estamos atacando y golpeando a muchos enemigos. Oh. Ahora, lo único que queda por hacer es crear un enfriamiento de la frecuencia con la que me podemos. Oh, vamos a cambiar de estado aquí después de 1 segundo. Entonces quiero poner un retraso. 1 segundo. Y cambiemos de estado a lo normal. Esto sería un problema si permitimos que algo más suceda mientras estamos enviando un ataque por correo, porque digamos, por ejemplo, soy estado AM y presiono mail attack, y luego vuelvo al estado AM instantáneamente. Después de 1 segundo, cambiará mi estado AM a normal. Pero ya veremos cómo se planifica esto y haremos los cambios correspondientes. Vamos a abrir nuestro plano principalmente de ataque, y nuestras habilidades. Agreguemos una esfera de colisión. Por colisión. Hagámoslo 100 y radio. Además, tenemos que moverlo un poco hacia adelante. Uh, tal vez aquí estaría bien. Ahora bien, por qué lo movemos hacia adelante porque el centro del plano es donde engendraría Entonces necesitamos que esto aquí no esté aquí porque eso se superpondría con nuestro carácter. No nos importa superponernos con un personaje. Así que en algún lugar de aquí sería encantador. Ahora, lo siguiente que necesitamos es una partícula en cascada. Para el sistema de partículas, vamos a usar el primario renacido Un montón de primarias rendidas. Queremos que el carácter primario de ella renacido. ¿Verdad? Hagámoslo un poco más grande no en todos. Voy a hablar esta x en una, y en la dos. Oh, este será el artículo. Punto. Más grande. Vamos a verlo como se ve en el mapa. Ahora, lo siguiente que agregaremos es una luz puntual. Haz que produzca algo extra ligero. Dejemos arriba la zona cuando estamos simplemente atacando. Bueno, básicamente iluminó un poco el piso. Vamos a conseguir luz puntual, vamos a ponerle radio dos. Y vamos a colocarla cerveza poco más baja. Aquí. Ilumina nuestra zona y un poco adelante, también. No demasiado porque no quieres ver a nuestro personaje, algo comenzando aquí, y luego también comenzando aquí. Quieres ver como empieza desde cuenca. Tenemos que cambiar el color también a algo rojizo, fino. Y vamos a programar esto puede atacar. Ahora, solemos usar destruir actor cuando queremos algo. Pero esa también es otra forma. Vamos a clase por defecto. Eso es para toda la vida. Podemos ver que tenemos esta variable por aquí, cuánto tiempo vive este actor. Ero es para siempre. Pero si ponemos 0.3, por ejemplo, entonces esto morirá en 0.3 segundos. Este actor, no necesitamos destruir. No necesitamos llamar a destruir nunca. Lo que tenemos que hacer es ir a nuestra esfera. Que colisión, elegir personalizado. Voy a ignorar todo excepto el pon y el objeto de física. En realidad, necesitamos no ignorar por dinámica, es nuestra puerta infernal también. En la cápsula. Esta es nuestra colisión. W dinámico. Oh. Ahora, nuestra esfera necesita hacer algo cuando comienza a superponerse. Cuando engendramos actores, aunque el otro actor ponga dentro de la esfera, activará el evento begin overlap. Oh. Tenemos que preguntar a otro actor etiqueta, y si el otro componente hace una secuencia. Haz esto por separado. Uno es para enemigo. El otro es para P H. físico Dos ramas. no podemos sentir la parte del Todavía no podemos sentir la parte del enemigo porque nuestro macho no haría daño al golpe más grande de nuevo a nuestro final. Pero podemos hacer la física. Lo vamos a hacer para la física va a ir a nuestro personaje. Yendo a recubierto. Aquí. Solo necesitamos agregar impulso, flotadores aleatorios Vamos a volver por mi ritmo esto aquí. Es verdad. Un objeto válido. También revisa esto. Por si acaso está destruido o algo así. Aquí nos vamos a conectar. Y eso sería. En realidad, necesitamos conectar el target también, ¿a quién le estamos comprando impulso? Y ese sería nuestro otro componente. Vamos a probar porque creo que vamos a tener un problema con la rotación de nuestro mell. Yo soy. No pasa nada porque hemos habilitado la entrada en nuestro personaje. Wing the end of beg play, consigamos nuestra referencia del controlador del jugador, y digamos Tal vez conecto la referencia del controlador al controlador del jugador, objetivo sería uno mismo. Comparemos. C, no pasa nada. Comprobaremos por qué? Creo que sé por qué. Debido a que el estado por defecto está muerto, pongámoslo a la normalidad porque es nuestro primer estado. Crea la variable pero no fue un estado de jugador. Volvamos a probar. Yo sí tengo sonido. No tengo montaje. O salgamos. Pienso de nuevo, conozco la razón. Vayamos a nuestro montaje de reparto y vamos aquí, como dije antes, necesitamos usar un slot Ahora mismo está en toda la ranura y se dice que hacer a todo el cuerpo. Ve y revisa nuestro gráfico de animación. Veremos que esto no lo va a cortar porque el cuerpo completo no tiene básicamente una trama. Pero tenemos que hacer la ranura de la parte superior del cuerpo. Vamos a ir a fontage, y a trazar Tam. Parte superior del cuerpo. Podría congelarse, pero compilamos y guardamos. Se congelará. No lo hice. Hacer. Si dejo de jugar. Oh. En fin, vayamos a nuestra jugada. Creo que esta vez va a funcionar. Sí. Puedo ver explicar la animación correctamente. Aunque la vista previa se congelara, eso no significa nada. Hay algunos problemas con cambiar las cosas. Pero no estamos desovar la partícula. ¿Es porque esto no está desencadenando? Hay una posibilidad. Vamos a tog punto de ruptura aquí, ¿ o tal vez la palabra ubicación de Mcle uno? O h, activando. Obtener un poco de búsqueda del alma, y tipo de averiguar cuál es el problema. Cuando creé una notificación y agregué una nueva notificación, este es un notificador esqueleto esqueleto, que es diferente al montaje del plano Nuestro nodo aquí. Eso en la descripción emergente, solo funciona con lay Montage Notify y no con esqueléticos Vamos a cambiar vamos a eliminar este ataque M, y vamos a usar esto. Montaje Nodify. Vamos a nombrar ataque M. Ahora funcionaría. Sí, podemos ver como tenemos nuestro artículo. Pero como dije, sí tenemos un problema con la rotación. No, para arreglarlo, iremos a nuestro PPM. Vamos a ir a nuestra obra de inicio, y vamos a la rotación de st actor. Para la nueva rotación. Vamos a por qué una rotación. Y el inicio sería jugador po. Vamos a hacer una voy a conseguir el vector forward también. Que es un vector que nos dice dónde estamos viendo, básicamente. Entonces start sería la ubicación pont, y n sería la ubicación en la que nos encontramos más el vector forward para darle una dirección. Otra rotación debe ser fija. Sí, habla. No me gusta el lugar donde está desove. Pero a mí me gusta en algunos. En primer lugar, vayamos a nuestra tasa de juego. Bien, ya lo he cambiado. Deberíamos estar cambiando dos tal vez dos un enfriamiento. Ocho. Dejemos a la velocidad enemiga en un punto. Cinco y de uno. Vamos a elegir la ubicación del hocico dos. Creo que fue un poco más adelante. Aunque esté en la mano equivocada en el momento en que estamos reproduciendo la animación. Oh, no, no. Hocico uno fue Pero hagámoslo tri un poco más tarde para nuestra mano. Vamos a tal vez. Dave. Esto mejor. La vida es un poco demasiado intensa. Lo haría un poco más bajo. Vamos a establecer. ¿Verdad? Vamos. Sí. Se ve bien. Si mueve las cajas, debería poder mover cajas. Cajas en esta habitación otra vez. Habitaciones. Es la caja. La hay, ¿verdad? Perfecto. Estamos moviendo cajas. Genial. Creo que esto es para éste. Te voy a ver en la siguiente. Adiós. 99. Mecánica de apunte estático y disparo: Hola, y bienvenidos a Gain Design Workshop, n real Engine five, Procesal Dungeon action RPG Creation Course Anteriormente, terminamos con nuestro ataque a mí. Creamos un montaje de animación que usamos un montaje notificador notificar para notificar cuando queremos pospone nuestro ataque me, y usamos también en el plano del personaje y el evento de la barra espaciadora para distinguir entre los estados del jugador, así podemos atacar solo cuando estamos normales Cambiamos de estado inmediatamente después. Tocamos un sonido, tocamos el montaje y comenzar notificamos del montaje Nosotros engendramos nuestro VP puede atacar, y lo adjuntamos al actor Entonces esperamos 0.8 segundos y volvimos a cambiar el estado. En nuestro plano Mi ataque, Comenzamos fijando la rotación del actor hacia donde está mirando la pata Y luego creamos el componente comenzar evento de superposición con una esfera basada en nuestra colisión de esfera que comprueba si el actor tiene es un objeto de física o es un enemigo. Como decíamos, el enemigo se llenará más tarde, y eso fue todo. Y nuestro actor puede atacar está compuesto por una luz, una partícula y una esfera de colisión. Ahora, sigamos haciendo nuestro mecanismo de disparo. Pero para eso, primero, necesitamos hacer de un yo un mecanismo de puntería. Pero para eso, necesitamos hacer un mecanismo de puntería. Entonces cuando nuestro personaje está estudiando todavía, está pasando turno, por ejemplo, podemos decir que el personaje está apuntando, así el coleccionista puede disparar. Ahora pongamos aquí un comentario. Llamemos a esto M y vamos a crear nuestro pánico. Como dije, vamos a usar el botón shift, así que vamos a usar el turno a la izquierda en los teclados Y vamos a crear un bulion que sabremos cuando el turno esté abajo o no Vamos a estar fijando y amigos. Ahora, lo siguiente que haremos es encender el estado del jugador. Oh, ¿cuál? En ambos. ¿Cuándo vamos a poder apuntar? Bueno, básicamente, cuando estamos normales, o estamos apuntando ya porque la animación no ha terminado, deberíamos poder apuntar de nuevo. Sin embargo, lo que haremos, conseguir nuestro movimiento de personaje y cambiar una cosa. En nuestro movimiento de carácter, hay una orientación Aquí está orientar la rotación al movimiento, lo que significa que el personaje se está orientando hacia nuestro movimiento Cuando estamos apuntando, no queremos que esto esté sucediendo. Queremos que apunte a donde apunta nuestro ratón. Entonces tenemos que apagar esto. Vamos a rotar a movimientos y luego cambiar nuestro estado. Ahora, no voy a sentirme forse uno porque sí necesitamos el montaje para tocar primero y luego hacer esto, ponerle esto encendido, mientras que aquí, tenemos que poner esto en marcha y luego tocar el Vamos a poner estado a a. para nuestra puntería, vamos a usar la pose que teníamos al principio, que tiene el arma extendida. Vamos a crear un montaje a partir de esto. E montaje de paciente BE Montaje. No necesitamos en realidad, sí necesitamos hacerlo. Necesitamos establecer la ranura, la ranura predeterminada para que sea parte superior del cuerpo, nombre, parte superior del cuerpo. Ahora bien, si queremos restablecer esto, podemos simplemente re que hayas trabajado. A veces retrocede. Y ahora, ahora si voy a otro lado y vuelvo a él, funciona, y nuestro montaje de reparto también funciona Como pueden ver, lo que necesitamos de aquí es en realidad esta parte que de abajo a A. Oh. Volvamos. Vamos a página. Ahora, también hay un jugador en Montage, que es un nodo clasificador con menos opciones Pero usamos esto porque tiene muchas más opciones al final. Ahora vamos a usar la malla esquelética. Para el montaje, vamos a seleccionar el inactivo. Ahora, para el descenso de la puntería, vas a hacer trampa un poco. Usa este montaje. Normal, y nuestra tasa sería menos uno. Por lo que esto lo obligará a jugar en reversa. Y después de esto, vamos a cambiar nuestro estado después de bajar nuestra arma, donde a medida que vamos bajando el arma, ponemos a la normalidad. Lo siguiente, debemos orientar hacia atrás nuestro movimiento porque estamos en estado normal Ahora, aquí después, cuando pusimos el ratón para que se ponga rojo, cuando estamos apuntando a un enemigo. También lo pondremos para que se ponga rojo en ambos en realidad se vuelven rojos cuando apuntamos y se vuelven normales cuando no estamos apuntando. Entonces cuando apuntemos, nuestro ratón estará constantemente rojo, lo que indica que podemos estamos listos para disparar. Vamos a probar esto. Presionemos play. Presiono turno, podemos ver nuestra pistola. Pero ahora mismo no estamos apuntando. Entonces empezó a moverse y apenas apuntó hacia el arma. Pero como puedes ver, si cerramos el sonido, es demasiado fuerte. Como puede ver, nuestro objetivo a rotación funcionó como si no estuviéramos rotando hacia el movimiento en este momento. Pero si lo apago, estamos rotando de nuevo hacia nuestro movimiento. Ahora estamos amabunados, lo cual no está mal, pero no es lo que queremos De todos modos, para que esto se solucione, necesitamos subirnos al controlador del jugador y arreglar nuestro movimiento. Pero no vamos a hacer eso ahora. Vamos a continuar con nuestro mecanismo de disparo. Oh, vamos a hacer eso. Goo a nuestro personaje Pongamos aquí. Oye. Vamos a ver el botón de la casa izquierda para crear nuestro evento de ataque. Lo primero que haremos es cambiar y estado. Set. Cuando queremos atacar, estamos apuntando. Oh, vamos a hacer una pregunta. Es una rama. ¿Ya estamos atacando? Voy a promover esta variable, y llamarla un ataque. Porque si ya estamos atacando, no deberíamos volver a atacar, esto debería ser un tiempo de reutilización, de lo contrario nuestra pistola estará encapsulando como una ametralladora lo más rápido que podamos hacer clic Oh, si no estamos atacando, entonces vamos a poner el ataque a la verdad. Lo siguiente que vamos a mí es tocar nuestro montaje. Esta vez, ya tenemos un montaje, se llama primarificador hecho montaje y algunos notificadores que no vamos a estar usando, Y llevemos nuestra malla. Aquí. Ahora, lo siguiente que vamos a hacer es atravesar nuestra bala. Y antes de hacer eso, vamos a crear una función llamada spa. Bala. Nosotros usamos esto. Pero ya no vamos a usar esto. Lo que vamos a hacer es completar nuestro mecánico ing. Oh. Cuando toquemos montaje, vamos a spa Bala. Oh, lo siguiente que necesitamos para hacer el reset ho es atacar a ba. Necesitamos un enfriamiento. Entonces pongamos un retraso de digamos punto. Y tenemos que reiniciar. Voy a crear un evento habitual. Y este reinicio. Tira de aquí. Esto necesita cambiar en función del estado del jugador, porque por ejemplo, queremos hacer otra cosa cuando estamos apuntando y otra cuando somos ataque normal. Por ejemplo, cuando flotamos sobre un enemigo y presionamos clic, es un final diferente que si presionamos shift y comenzamos a disparar Ahora, cambiemos Por supuesto, en ambos estados, no necesitamos atacar. Pero cuando estamos atacando normales, pongamos esto también a stat porque si nos quedamos atónitos durante un ataque, deberíamos poder reiniciar nuestro ataque Ahora bien, cuando estamos atacando normalmente o cuando estamos iniciados, queremos bajar nuestro arma en caso de que no estemos atacando de nuevo, como si coloco sobre un enemigo y disparo, y luego un flotar, puedes mantener la mano arriba en la posición de disparo, debería bajar Y para ello, vamos a hacer trampa de nuevo un poco e ir por un evento personalizado pistola inferior. Y vamos a conectarlo a esta cadena de eventos porque eso es lo que queremos que suceda. Si esto es cierto, realmente no importa. Ya va a Vamos a dejar que el set vuelva a hacer. Oh. Vamos a llamar a arma inferior inferior. En ambas situaciones normales. Y eso sería una parte de nuestro ataque de tiro con botón de puré izquierdo. Pero sigamos con la bala, que es la siguiente parte. En nuestra siguiente lección. Adiós. 100. Plano de bala para jugador y visuales: O Hola, y bienvenidos a Game Design Workshop y Real Engine cinco procedimientos Dungeon action RPG curso de creación Anteriormente, comenzamos con nuestra mecánica de tiro. Entonces, creamos el evento AM con turno a la izquierda. Nosotros bajamos la puntería o AM no está abajo cuando estamos presionando y soltando. Estamos cambiando con base en el estado E. Estamos poniendo orientación para el movimiento fuera, y estamos cambiando de estado a AM y tocando un montaje, lo que lleva nuestro arma a nuestro lado, por ejemplo Ahora, cuando soltamos, jugamos primero el montaje para bajar el arma, y luego cambiamos los estados de nuevo Entonces, antes de que el set nos diga la espalda, sabemos que por lo menos hemos empezado a bajar nuestro arma. Ahora bien, para ser honestos, este conjunto orientar la rotación al movimiento es algo decorativo por aquí, solo para demostrar lo que significa que cuando estamos orientados en base al movimiento, realidad podemos dar la vuelta al personaje, donde cuando no lo estamos, el personaje se mantiene estable y es más como bombardeo. Déjame bajar un poco el sonido. Esa es la diferencia con esta variable. El uno es básicamente estrafeo. El otro es seguir la orientación al movimiento, seguir la rotación al movimiento. Bueno, para nosotros, lo que vamos a hacer es que vamos a estar rotando constantemente donde está nuestro ratón. Entonces esto en realidad no se necesita eso. Pero si se queda aquí, no afectará a nuestro código. Ahora, a continuación, queremos usar nuestro botón izquierdo del ratón. Para volver a crear una cadena de eventos basada en el estado de nuestros jugadores. Entonces seguimos seguimos con hacer una pregunta si estamos atacando, y si ya estamos atacando, como si estamos disparando, no vamos a hacer nada. Pero si no estamos disparando, vamos a disparar. Entonces dijimos atacando a verdad, jugamos el montaje de tiro que creamos En realidad, no creamos esto estaba existente, que es filmar. Y luego procedemos con nuestra función spawn bullet que dejamos no llena Y luego después de un retraso de 0.65, reiniciamos el ataque para que podamos volver a disparar. Pero cuando estamos apuntando, no estamos bajando el arma, que es un evento. Creamos y pirateamos nuestra forma de crear un nuevo código y lo usamos en el turno liberado, que es nuestro cañón inferior Ahora, sigamos llenando esta función, y para ello, necesitamos crear un nuevo blueprint, vamos a ir a blueprints Vamos a ir a habilidades. Vamos a hacer clic derecho y crear una nueva clase de blueprint Ahora bien, esto no es exactamente una habilidad, pero Hel Gate Bullet tampoco era una habilidad. Entonces vamos a llamar a esta bala de capa PP. Voy a abrir esto. Lo primero que vamos a necesitar es una partícula. Entonces vamos a agregar un componente de partículas en cascada, y va a ser de plantilla y Mark, hay muchas marcas. Marcar il. Hay dos. El es glaseado, queremos el normal. Nosotros, tenemos una buena bala por aquí. Un efecto para nuestra bala. Ahora, lo siguiente que necesitamos es un tubo de colisión. Una esfera de colisión en realidad no cubo. Dejemos su radio a 32, dar mucho para poder calentar área no importa si calentamos directamente. Seamos amables con nuestros jugadores. Lo siguiente que necesitamos, de hecho lo tenemos instalado en nuestro BP ML es este punto de la vida por aquí que queremos iluminar el piso ya que la bala está viajando. Volvamos a nuestra bala y peguemos esta luz. A lo mejor es un poco grande que sea radio de expiación a 200 Vamos a acercarlo a la bala, y creo que está bien. Por último, lo que necesitamos es un componente de movimiento de proyectiles. Ahora bien, este componente es como el componente de movimiento como lo es el componente de rotación, es un componente con muchas opciones. Y lo único que necesitamos cambiar son en realidad dos cosas. Es la rotación que sigue la velocidad, pero queremos que el actor esté siempre mirando hacia su velocidad. Y también, queremos cambiar la escala de gravedad del proyectil a cero Tal vez 0.1, nuestras balas tienen una pendiente descendente, tal vez 0.1. Pero si es demasiado y podemos ver que nuestras balas van muy rápido al suelo, deberíamos cambiarlo de nuevo a cero. Ahora bien, este componente de movimiento de proyectiles tiene un vector que se llama velocidad, lo que significa hacia qué dirección y a qué velocidad voy? Esto es algo que vamos a calcular más adelante. Pero lo que vamos a hacer es ir a nuestro gráfico de eventos a nuestra jugada de inicio, obtener nuestro movimiento de proyectil y una velocidad Voy a este pin y hago una nueva variable, llámalo velocidad velocidad. Lo que debería ser. Entonces vamos a convertirlo en un vector. Vamos a dividir esto así que solo vamos a usar x y. Vamos a hacer esta variable, editar incienso, y exponer en sp. R La razón detrás de esto es porque estamos en isometría y con una cámara inclinada. Y eso significa obtener la rotación correcta y mirar para encontrar nuestra velocidad, donde debería nuestra bala co no es tan simple como un juego pop down. Así que por ahora nuestra velocidad aquí vamos a estar usando la x y , pero creo que esta información será útil para más adelante. En fin, lo siguiente que debemos hacer es verificar nuestra colisión. Entonces, ¿golpeamos a un enemigo? Vamos a seleccionar la esfera. Vamos a ir a comenzar eventos de solapamiento. Y vamos a comprobar si el otro actor antes que nada es válido. Porque si estamos disparando a un enemigo que está muriendo, por ejemplo, va a ser destruido, no deberíamos hacer nada. Ahora bien, lo siguiente que debemos preguntar es, ¿otro componente tiene remolcador La etiqueta sería mi enemigo, y creamos una rama. Y si se trata de un enemigo, en realidad deberíamos aplicar daño. Apliquemos un daño de uno. No olvides conectar al actor de daños. Entonces lo que vamos a hacer es ación. Este error. A T, probablemente. Y lo que vamos a utilizar es el final de marca otra vez, como hicimos en la explosión. Pero esta vez, vamos a hacerlo, mucho más pequeño, 444. Y la ubicación sería nuestra ubicación de actor. Ahora bien, si no golpeamos a un enemigo, sólo vamos a engendrar a Dmter No vamos a aplicar daños, a menos que tuviéramos terreno destructible y luego vamos a de actor Entonces, golpeamos a un enemigo, aplicamos daño, generamos una partícula No golpeamos a un enemigo, solo engendramos una partícula y destruimos actor Entonces, habría un problema con esta configuración de que cuando estamos generando una bala, si no golpea nada, simplemente continuará para siempre y para siempre Bueno, en realidad no, pero sí. Lo que vamos a hacer es ir a los valores predeterminados de nuestra clase e ir a nuestra vida útil, y pongámoslo en No sé, 5 segundos. Creo que es suficiente. Ahora, sólo para probar nuestras balas. Cuando terminemos, creo que esto sería por éste. Te voy a ver en la siguiente. Adiós. 101. Disparo de jugadores y VFX: Hola, y bienvenidos de nuevo a Game Design Workshop rail engine five Procesal Dungeon action at Ps curso de creación Anteriormente, creamos nuestro plano de bala. Oh, usamos una partícula para mostrar el efecto rastro y el efecto bala. Y usamos la esfera para detectar colisiones si estamos colisionando con el entorno o con un enemigo Y usamos la luz puntual para mostrar un poco de luz roja no blanca en el suelo mientras la bala está viajando. Utilizamos el movimiento del proyectil para establecer nuestra escala de gravedad, y será responsable de controlar nuestro movimiento, nuestra velocidad de bala, nuestro movimiento de las balas Desde sus ajustes, apagamos la escala de gravedad, y establecemos la rotación que sigue a la velocidad. Nuestro actor siempre mira hacia la velocidad. Ahora, en comenzar a jugar, no nos almacenamos. Estamos estableciendo la velocidad de movimiento del proyectil a una variable que creamos debería velocidad, y estamos usando x e y de ella Lo hemos hecho editable el incienso y exponer sobre desove. Cuando estemos desove la bala, le daremos velocidad Después, completamos el evento de superposición que estamos preguntando si nuestro actor con el que chocamos es válido, lo que estamos comprobando, básicamente, si el actor que chocamos, ¿está pendiente de ser destruido? Entonces, si está pendiente de ser destruida, no le hagas nada. Y luego verificamos con una rama si tiene etiqueta E, lo que significa que es un enemigo. Entonces aplicamos daño, si no es un enemigo, solo estamos generando una partícula que hacemos también cuando aplicamos daño, y luego destruimos al actor Por último, cambiamos la vida para estar en, creo, 5 segundos, A 5 segundos, que nuestras balas no se vayan para siempre cuando les estemos disparando. Ahora, vamos a completar nuestro evento de bala de spa. En realidad spa función bala. Lo primero que tenemos que hacer es crear un bozal falso Y la razón es que si vamos a nuestra malla esquelética, la búsqueda de hocico Podemos ver que están colocados en posiciones muy raras. Eso es porque van con habilidad específica, tiempo específico, una forma muy específica de ser utilizada. Entonces no vamos a usar esto. Vamos a hacer trampa un poco y crear un músculo en una determinada posición a la que alcanzará nuestra pistola. ¿Y cómo vamos a hacer esto? Vamos a agregar un componente sinusoidal a nuestro plano y usar su ubicación, llamemos a este músculo en realidad Cada ubicación para generar nuestros efectos para nuestro rodaje. Así que vayamos a nuestra viewport y la ubicación. En realidad, tengo una ubicación en mente que probé y se ve bien. Va a ser 128 en x, va a ser -28 en y, y va a ser o en realidad e ocho en Z. Así que aquí es en realidad donde llega nuestra pistola y está en la punta del arma, que esto es sobre donde debería estar nuestro músculo Así que volvamos a nuestra bala de spam y usando esta variable muscular, vamos a obtener la ubicación, obtener la ubicación de la palabra. Y vamos a sone meter en esta ubicación. Vamos a conectar esta ubicación dos. Para el medidor e, vamos a usar el último tiro al ras del hocico. Hay mucho de eso. Pero creo que sólo hay uno con ese nombre. El resto son locales, lo que significa coordenadas locales y el glaseado. Entonces sí. Último tiro al ras del hocico. Ahora, si vamos y solo jugamos con esto, veremos instantáneamente un problema con el ze flush. Nuevamente, es la rotación que debería conseguir rotación de nuestros personajes porque ahora mismo es lo contrario. Y es un poco grande también. Yo también quería probar el tamaño. Así que volvamos. Vamos a establecer su escala en 0.3. Y la rotación. Vamos a conseguir nuestra rotación de cápsulas porque ahí es donde estamos viendo. Pero ahora esto debería estar funcionando bien. Nos estamos moviendo después de que estamos disparando. Pero eso es porque no hemos hecho las restricciones movimiento y básicamente el jugador controla en el controlador. Porque todos nuestros controles son básicamente el ratón. Así que el ratón necesita un poco de código para decidir qué hace. Ahora, detengamos la jugabilidad, volvamos. Y lo siguiente que vamos a hacer es volver a generar un metro Pero esta vez apegado. Y esta vez, vamos a usar el músculo para. Un lugar que sigue porque estos puntos, estos son puntos de contacto, que son los nombres de socket del esqueleto que vimos seguir el movimiento del esqueleto donde están. Pero vamos a repetirlo en la ubicación del hocico Y vamos a mantener la posición de la palabra. Sí, solo mantén la posición de la palabra. La rotación realmente no importa. Y para el artículo, vamos a seleccionar el último punto exuberante. Y voy a modificarlo un poco porque no queremos lo real, vamos a encontrarlo primero, local, Lastlh Creo que esto es todo. Lo quiero cerrado. ¿Hay uno desbloqueado? Sí, la hay. Un tiro muscular más bloqueado. Esto es lo que necesitamos. Vamos a esta partícula. Lo que vamos a cambiar es un detalle muy pequeño. Vamos a ir a la droga, y vamos a cambiar el valor de dos a, digamos 0.5. Es un poco más así, no tanto la resistencia al aire. Vamos a cerrar esta partícula. Volvamos. Podría ser un poco grande. Vamos a comprobarlo. Tal vez queramos bajar un poco de heno. Ni siquiera comas. L et's depuran esto. Bueno, volvamos a nuestro plano Mira lo que está pasando. Bien, no lo he adjuntado al componente. Estamos fijando qué hueso bloquear, qué hueso unir, pero no estamos fijando qué malla. Entonces vamos a usar esta malla. Comp guardar. Entonces volvamos y probemos. Creo que el tamaño sería grande. Turno. Ick. Sí tenemos humo. Todo bien. Derecha. Está trabajando en todas las direcciones correctamente. Esta es otra forma de hacer que algo siga tu rotación. Se lo anexas a tu personaje. Ahora, sigamos con desovar nuestra bala. Vamos a llamar desde clase. Vamos a dividir la transformación. Vamos a seleccionar nuestra bala. La palabra ubicación debería ser nuestro músculo otra vez. Y ahora necesitamos una velocidad de disparo. Ahora, por ahora, sólo vamos a usar solo para ver nuestras balas. Vamos a usar el vector realmente directo de la cápsula. Déjame traer la cápsula aquí. Vamos a adelantar vector. Multipliquemos esto por una velocidad que yo no y 101,000 Conectémonos a la velocidad. Vamos a disparar. Estamos disparando irrelativamente a donde está nuestro ratón, estamos disparando y nuestra bala explota Entonces, por último, por supuesto, sí necesitamos un sonido. Así que vamos aquí, y después de que engendremos nuestra bala, vamos a reproducir el sonido D, y vamos a usar el sonido de la pistola Ahora deberíamos tener sonido al disparar. Por favor, ¿puedo verificar si daña esto, lo cual creo que no lo hace? Deberían ser cinco pul, no debería. Así que vamos a revisar esto. Y creo que ya sé lo que es. Deberíamos ir primero a la puerta del infierno. El remolcador de los defols. ¿Ves? Tenemos actor tira Es en la bala, le pido etiqueta de componente Entonces no se debe pedir componente. Debería preguntar por actor. Como etiqueta E del componente. Pero ahora, deberíamos poder filmar algo. Si logramos a un. ahí hay dos puertas infernales. Vamos. Sí. No podemos destruir las puertas del infierno. Estamos llegando ahí. Oh, creo que ese sería un buen punto de parada para este. Quiero verte en la siguiente. Adiós. 102. Animación y mecánica de la muerte del jugador: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos y motor real cinco procesales Dungeon action RPG curso de creación En la última, terminamos con nuestro desove de nuestra bala Terminamos. En citas porque sí necesitamos la velocidad correcta Entonces, lo que hicimos fue generar un medidor electrónico en un hocico falso Creamos una ubicación falsa que llamaremos hocico frente a nuestro personaje, y ahí generamos un medidor e Y usamos la rotación de tapas para rotar eso un metro, que es el emter que hace que nuestro hocico destella, por ejemplo Oh. Después se procedió a desovar un emisor adjunto y el adjunto también fue la malla en el músculo del zócalo Entonces tenemos nuestro humo siguiendo un poco de nuestra pistola. Nuestro movimiento en nuestra pistola. Luego procedimos a engendrar a nuestro actor pullet con la ubicación del engendro para ser la palabra ubicación del hocico, y luego creamos una velocidad falsa hacia el frente Y luego tocamos un sonido. Ahora, antes de continuar y arreglar el movimiento de nuestro personaje y hacia dónde está apuntando realmente, deberíamos completar el último. Pongamos un comentario aquí. Mascota. En realidad dispara. Yo estaría más en lo correcto. Ahora, lo último que necesitamos es nuestro sistema de salud. Lo hemos creado hasta cierto punto. Pero no hemos diseñado lo que sucede. No tenemos nuestro stan. No tenemos muchas partes que sucedan después de recibir daños. Entonces, continuemos con esta lógica. Lo primero que dijimos protagonizaremos a nuestro personaje cuando recibamos algún daño. Y eso quiere decir que este debería ser también un periodo de gracia que no nos vamos a quedar atónitos, de lo contrario, vamos a quedar bloqueados cuando estemos recibiendo nonmag continuo por ejemplo, para la torre que dispara continuamente, o si muchos enemigos nos golpean al mismo tiempo Vamos a poner una sucursal aquí, y vamos a preguntar, ¿nos pueden quedar mirando? Vamos a promocionar esta variable, y llamémosla C B. Ahora bien, en realidad este es muy mal nombre. Vamos a llamarlo a enfriarse. Si Sn está en enfriarse, lo hacemos, si S no está en enfriarse, hacemos otra cosa. Lo primero que hacemos es poner a Stan en enfriar. Pero si esto vuelve a disparar, es a partir de la t. Lo segundo que debemos hacer es cambiar nuestro estado. T. Lo siguiente que debemos hacer es tocar un sonido de calor. Un sonido dos D. La razón por la que lo estamos reproduciendo solo en Stun es que no queremos que cada calor produzca un sonido, sino que cada calor que nos acarree debería dar Pero vamos a vamos a usar el calor. Yo Herm. Vamos a usar un Hert Mel. Y entonces vamos a hacer una pregunta si estamos muertos. Porque si no estamos muertos, entonces vamos a hacer otra cosa. Si estamos muertos, vamos a jugar a la muerte, y a jugar a la muerte, si promovemos esta arial. Todo esto muerto. Llamemos a esto muerto. Vamos a crear un evento personalizado. Toda esta muerte y llamarla falso. Ahora bien, si no estamos muertos, queremos jugar un efecto de calor. Por lo que demuestra visualmente también que nuestro personaje consiguió calor. Nosotros hacemos esto. Vamos a crear otro montaje. Bueno, se fija para el calor. En realidad, tenemos que ser paragon. Entonces tenemos este calor reaccionar frente. Vamos a crear un montaje a partir de. Vamos a entrar en el montaje, ranuras de grupo para ser ranura superior. Parte superior del cuerpo. L et's vuelven a nuestro personaje y interpretan su montaje. Seleccionemos nuestra malla esquelética. Y nuestro montaje. Reacciona al frente. Y ahora, lo que vamos a hacer es que no vamos a pasar por esta cadena de eventos, es decir, cuando dejamos de tocar las montas, hacemos las siguientes cosas, vamos a elegir la completa e interrumpida Entonces si algo interrumpe esto o esto se completa, entonces vamos a hacer otra cosa. Lo que vamos a hacer es obtener nuestro estado de jugador, qué estado de jugador, porque este resultado variará en función del estado del jugador, un poco, no mucho. Y si estuviéramos en A normal o yo, queremos volver a una posición normal. Vamos a cambiar de estado otra vez. A la normalidad. Si fuéramos normales, si estuviéramos apuntando porque interrumpe nuestra puntería Si estamos tratando de disparar y algo nos dispara, y nos golpea, interrumpe nuestra puntería, así que deberíamos apuntar de nuevo, y también lo meramente lo mismo Y lo que vamos a hacer después se va a retrasar un poco. Digamos 2.5 segundos. Y entonces vamos a establecer el non cool down no me gusta este ruido y s. no me enfrío, podría haber sido una C. De todas formas, compilar y guardar. Pero básicamente, esta es nuestra cuenta regresiva para cuando podamos volver a quedarnos atónitos Ahora, en el caso estamos atónitos. Si no dejamos nuestro turno. Estoy apuntando y estoy disparando y me estoy quedando atónito. Ba este es el caso cuando estamos en enfriarnos. No podemos estar en este caso si nos hemos quedado atónitos, lo que pasó aquí Conecté conecté las cosas equivocadas. Lu mientras pasaba. Eso está aquí. Entonces, ahora somos estrella, nos estamos subiendo al stand, y estamos cambiando de estado. Entonces, cuando estamos cambiando de estado, no podemos estar apuntados, así que estaremos en el stand. Pero si ya estamos de pie y estamos apuntando, entonces debería interrumpir nuestro objetivo, pase lo que pase. Pero si nos quedamos atónitos y seguimos presionando turno, deberíamos volver a nuestro objetivo Pero aquí vamos a poner una sucursal. Y si es falso, vamos a conectar aquí, y si es cierto, vamos a conectarnos aquí, y la condición es si estamos apuntando todavía, así que apunta hacia abajo, si seguimos presionando turno. Básicamente, cuando estamos atónitos, no nos están interrumpiendo por disparar Pero si estamos apuntando y ya hemos quedado atónitos, entonces nos interrumpen La segunda vez que algo nos va a atacar, en realidad rompemos nuestra puntería, que sería una mecánica oculta dentro del juego. En fin, sigamos con nuestra parte triste, nuestra muerte cuando perdemos, pase lo que pase tiene que pasar una vez. Entonces dos una vez. Lo siguiente que deberíamos pasar, deberíamos tocar el sonido de la muerte, así que toca sonido a D. En realidad, no debería ser lo primero, pero saquemos ese sonido horrible al principio. Creo que se llama dolor. Dolor dos. Bueno, podemos elegir esfuerzo dolor o probable, este es más agresivo, más muerte. Ahora bien, deberíamos estar parando el movimiento aquí, pero no hemos hecho la parte del controlador, así que lo vamos a hacer más tarde, y claro, cambiar nuestro estado a muerte, que es el predeterminado. Y ahora necesitamos reproducir una animación. Entonces, vamos a encontrar nuestra animación de muerte, así que va a ser la muerte. Como una muerte al revés y una muerte hacia adelante, creo que el delantero es mejor para la mayoría de los casos porque el revés se vería raro en algunos casos, pero vamos a crear un montaje de animación a partir de él Vamos a cambiar su ranura a parte superior del cuerpo. Otra vez, R ¿verdad? Volvamos a nuestro personaje y toquemos un montaje. Seleccionemos nuestra malla esquelética. Seleccionemos el montaje. Y eliminemos nuestro widget de juego de nuestra pantalla. Entonces no hay más partes de salud ni nada. Modo de juego de arriba hacia abajo. Aquí estamos. Jugabilidad. Pasar de padre. Esto sucederá instantáneamente. No vamos a esperar a que termine el montaje ni notifique nada. Lo que tenemos que hacer es crear un juego sobre pantalla. Pero hagámoslo en la siguiente. Adiós por ahora. Nos vemos entonces. 103. Sistema de detección de ratón: Hola, y bienvenidos de nuevo a Game Design Workshop motor cinco Procesal Dungeon Action ApS creación Curse Anteriormente, nos quedamos con nuestro evento de muerte función de muerte, en realidad. Y dijimos que necesitamos un juego sobre el que básicamente mostrar cuando morimos. Pero tomémoslo desde el principio. Creamos la continuación de nuestro cualquier evento de daño que tuviéramos que agregar eliminar la salud. Preguntamos si ya estamos en Stun, si estamos en Stun enfríese Si no estamos en Stun enfriarse, entonces estamos girando que estamos en Sun cool down, y estamos girando nuestro modo para aturdir Y luego tocamos un sonido, que le indicará al jugador que nos quedamos atónitos Si estamos en aturdimiento enfriarnos, entonces simplemente vamos directo a hacer la pregunta si estamos muertos? Si estamos muertos, continuamos somos evento de muerte. Si no estamos muertos, estamos tocando un montaje de animación para demostrar que somos golpeados, pero puede ser interrumpido caminando, moviéndose, o lo que sea y cambiar Y completos o ininterrumpidos, estamos cambiando en base a nuestro estado, ¿qué hacemos? Entonces básicamente, creamos una mecánica oculta que para nuestra primera, cuando estamos apuntando y disparando, volvemos a nuestra puntería para que podamos volver a disparar. Pero si estamos en el segundo hit, lo que significa que ya estamos apuntando porque no cambió de estado porque estábamos firmes, entonces estamos volviendo a la normalidad e interrumpiendo nuestro ataque A continuación, esperamos 2.5 segundos para encender el aturdimiento, enfriarse, así que este es nuestro periodo de gracia para no quedarnos atónitos En nuestro evento muerte, lo hicimos una vez, tocamos el sonido de la muerte, un sonido horrible, y cambiamos el estado a muerte, y tocamos nuestro moa de muerte Ahora, vamos a crear nuestro widget También eliminamos de padre el widget de jugabilidad, así que ya no vemos la parte de salud ni nada. Oh, Ahora vamos a crear nuestro widget para nuestro juego sobre pantalla básicamente. Vamos a la interfaz de usuario. Vamos a hacer clic. Vamos a widgets de usuario, plano de widget de usuario y vamos a terminar el juego G IR. Vamos a abrir esto. Y vamos a traer un Cvass. Y un texto. Escribir juego terminado. Vamos a anclarlo a la mitad. Desplazemos la posición x dos menos 175. Cambiemos de posición y dos fy. Digamos tamaño x tres y tamaño 89. Ahora, pongamos nuestra talla en seis. Se ve un poco más grande. Voy a dejarlo en negrita. Vamos a escribir para texto, juego terminado. Esto en realidad, creo que es una palabra. Está a la altura del juego o juego sobre una palabra o dos palabras. A mí me gustan dos palabras, se ve mejor. Es un poco de conjunto basado en la r, pero está bien. No creo que se notará. Ahora bien, lo siguiente que necesitamos sería describir nuestro puntaje. Vamos a traer un texto, y envolvamos esto con una caja horizontal. Duplicemos este texto. En el primer texto, vamos a escribir cuatro bases dos puntos. Y el siguiente texto debería ser digamos uno, dos, tres, cuatro, cinco, 50. Ahora, hagamos que la caja vertical pueda encerrar esto Así que vamos a anclarlo también en el medio. Vamos a establecer el desplazamiento menos 125. A mil cien, yo debería ser dos. Es grande, pero está bien. Lo que podemos hacer es simplemente dejar que este ement los dos en fiel. Esta alineación a la derecha, es demasiado centro. Falsa alineación a la derecha. Sí, eso ya se ve mejor. Esto será para nuestra puntuación. Hagamos una variable de nuestro texto 00, y pongámosle un nombre a la puntuación de subrayado Es una variable. Podemos configurarlo a algo, y ahora lo que necesitamos es otra caja horizontal. Tráelo en los cavas. Vamos a establecer su corbata visualmente. Queremos que sea aquí abajo. En esta parte de la pantalla hasta aquí, tal vez. Vamos a establecer las compensaciones. Todos los ajustes aquí. Ahora, lo que vamos a poner aquí dentro va a ser una caja vertical. Y dos espacios. Entonces podemos controlar el cuadro vertical donde se linea, y el espacio debe ser uno al inicio, uno debajo de la caja vertical. Para que podamos comprobar en todo. Y vamos a cambiar los dos espacios a 0.1. Entonces le dimos este espacio vacío a los lados. Dentro de la caja vertical, pongamos también dos espacios y una caja horizontal nuevamente entre los dos espacios, y vamos a configurar Esta caja en realidad será la caja que está sosteniendo los botones. Que también necesitan algunos espacios. Vamos a traer los botones y los espaciadores. Necesitamos dos botones, uno, dos. Vamos a traer algunos espaciadores otra vez. 12, tres, y seleccionemos todo para sentir. ¿Correcto? Ahora, vamos a cambiar los laterales para que sean 0.1 p. creo que por defecto, esto nos da un bonito lavabo para nuestros botones. Ahora optemos por enviar un mensaje de texto O aquí y uno aquí. Llamemos a este menú principal. Y al otro, llamemos a este juego de quid. En realidad acaba de renunciar. Lo que vamos a hacer es ir a realmente, necesitamos estos dos botones a e ir y seleccionar en cada uno de ellos. El evento clicado. L et's nombra estos patrones porque no tengo idea de qué es cuál. Entonces este es el menú B, y este es el B qui. Ahora los eventos se nombran, así que este es el qui que jugamos. Y este es el menú principal que abrimos nivel. Recuerda el bucle del que hablamos al principio. Este sería nuestro nombre de nivel. Vamos a copiar pegados, es nivel de juego. Pulsar vuelve a cargar todo y nos lleva a nuestro menú principal y abandona nuestro juego Ahora, lo que queremos hacer construir, obtener nuestro puntaje T y un xt. Vamos a conectarlo aquí. Nuestra puntuación, lo que usaremos para una puntuación. Usemos nuestras monedas para una partitura. Entonces vamos a conseguir un modo. Yendo a lanzar de arriba hacia abajo. Vamos a convertir a puro elenco y conseguir nuestras monedas. Total de monedas. Vamos a conectar esto aquí. Entonces nuestro puntaje son nuestras monedas. L et's compilar, y vamos a probar nuestro sistema de muerte. En realidad antes de que revisemos nuestro sistema de muerte. Vayamos a nuestro personaje muy rápido y cambiemos nuestra salud Mx a una. Entonces morimos instantáneamente de una trampa, y no esperemos diez hits. En realidad vamos a morir junto a esto. No nos estamos muriendo. Vamos a dar forma a lo que está pasando. Esto se debe a que aquí estamos comprobando la muerte, variable muerta, que deberíamos estar comprobando es nuestra vida igual a muerta, es nuestra vida actual igual o menor que cero. Si es así, pongamos también este muerto cierto Ahora, deberíamos poder morir. Aquí la trampa. Oh, murió, pero aún podemos movernos, como pueden ver. Pero no podemos recibir más daños. Pero sí morimos. Ahora somos capaces de movernos porque necesitamos hacer una función de stop movement. Pero para hacer una función de stop motion, necesitamos controlar cómo nos movemos. Además, el widget no está haciendo estallar porque no lo llamamos. Entonces vayamos a nuestra muerte. Vayamos primero a nuestro juego, nuestra sección de creación de widgets. Vamos a crear un respiradero personalizado. Llamemos a este evento GO. Vamos a copiar esta parte de aquí y el controlador de juego. VAYA aquí. Vamos a promover esta variable. En realidad, no necesitamos promoverlo. Porque simplemente restableceremos el juego después. Simplemente abrimos de nuevo el menú principal. Entonces sumamos para ver puerto, y luego vamos a ir a nuestro modo de juego y llamar a GO. Ahora, así tenemos pantalla de muerte. Sí. Todo está a bit offset. S. Pero está bien. Podemos dejarlos un poco compensados. Este no es un producto final. Entonces creo que esto es para éste. En la siguiente, arreglemos nuestro movimiento, que tenemos toda esta bolsa toda esta larga. Básicamente, lo que esto es que cuando estoy apuntando fuera del mapa, ahora que llegamos a este lugar, pintarlo. Si traigo el registro de mensajes por aquí, registro registro de mensajes dos ventana Un registro de mensajes. Vamos a aclararlo. ¿Cómo va a ir esto? Se puede ver que no hay error, no hay error, no hay error. Si muevo el ratón a algún lugar en algún lugar que no le pega nada. Debería estar produciendo el error, pero no lo es. ¿Dónde está este error ing? De veras pensé que era eso Ahora, ¿qué está pasando? Por qué no tenemos, aquí está. Bien, así fue si hago clic, vamos a leer el error. Mejor leer primero los errores. Un movimiento de entrada BP o un acceso no tratando de leer propiedad, llamar diversión obtener p. Así que básicamente, aún no hemos poseído nuestro pone Por eso esto está sucediendo porque cuando comenzamos a jugar y engendramos el pone, aún no lo hemos poseído. Todo bien. Ahora bien, otra cosa que quiero mencionar es que si tienes este pool de streaming de texturas de más de nueve K, esto podría hacer que tus gráficos se vuelvan un poco malos en algunos lugares. Ahora bien, si tienes una computadora fuerte, la razón es que este personaje tiene cuatro texturas de resolución K, y la predeterminada Sí tenemos muchas otras cosas que son de alta textura. Como pueden ver, este ícono de aquí, esta vez se estropeó un poco Esto se debe a la piscina de streaming de texturas. Entonces, ¿cómo arreglar esto? Vamos a presionar la tecla tile, inx a uno, y vamos a presionar R punto M. Textura de punto. No. Voy a dejarlo simplemente encontrar el comando, texturas, streaming es texto humeante piscina Nuestro tamaño de pool de streaming. Si establecemos esto a 3,000, por ejemplo, entonces nuestro error se ha ido. Nuestras texturas también se vuelven claras. Pero esto quiere decir que dedica tres K Ram a nuestras texturas. Solo recuerda que se trata de V Ram, así que esta es la memoria de la tarjeta de video. No es la memoria de la computadora. Si tu tarjeta de video es no tiene tanto Ram, no aconsejaría aumentar el tamaño. Lejos. Eso sería para éste. Te voy a ver en el siguiente arreglando estos errores y separando el movimiento y disparando desde el ratón W a verte entonces, adiós. 104. Interacción avanzada con el ratón para elementos: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, Curso cinco procedimientos de Real Engine creación de RPG de acción Dungeon Anteriormente, terminamos con nuestro juego sobre pantalla. Agregamos nuestro juego sobre texto, un texto para la partitura Mundial y un texto para nuestra partitura. Esto es un poco compensado entre ellos, pero no importa si quieres pasar algún tiempo arreglando las posiciones, sé mi invitado. Ahora, usamos dos botones para nuestro Qi y para el menú principal, que reinicia nuestro juego Para reiniciar nuestro juego, usamos el nivel abierto por nombre, que reinicia todo como hablamos, y vuelve a mostrar el menú principal y elimina todo lo que hemos hecho El anterior Yo. Ahora, para nuestro quid, acabamos de usar un juego de quid, y eso fue todo Para nuestra puntuación en start Construct, obtuvimos nuestras monedas totales y establecemos el texto. Ahora, comencemos con algo más interesante. Vayamos a nuestro controlador de jugador de arriba hacia abajo. En este controlador, vamos a encontrar una función llamada get location debajo del cursor. Me lo acabé al principio. Es este de aquí. La podemos encontrar también por aquí. Esto es en realidad bajo el dedo. Queremos debajo del cursor, éste. No vamos a usar debajo del dedo, así podremos eliminarlo, y lo que sea que se utilice. Dónde se utilizó. Entonces no necesitamos el evento touch también hasta que también esté bien. Entonces, ¿qué hace hasta ahora nuestra ubicación get debajo del cursor? Entonces lo que hace es usar el resultado get heat bajo cursor por canal, y el canal es visibilidad y trazas para complejo, y nos da el resultado de calor. Cómo funciona detrás de escena, en realidad crea una línea de traza desde nuestra cámara hasta la posición de nuestro cursor en nuestra pantalla y toma en cuenta la profundidad y si golpea algo o no. Entonces, lo que queremos hacer para un primer paso es duplicar esto pero con una esfera de traza, para que podamos aumentar un poco el tamaño de nuestro cursor de nuestro click. Ahora, una razón más por que vamos a usar esto es que queremos poder crear una lista que ignoraremos en caracteres. Por ejemplo, nuestro jugador. Y hablando de eso, vayamos a nuestro personaje de arriba hacia abajo. En realidad vamos a crear primero una variable a en los controladores. Llamemos a esta referencia. Como pueden ver, ya es para mí en el personaje de arriba hacia abajo VP. Si necesita cambiarlo a P carácter de arriba hacia abajo. Una referencia de objeto. Esto se debe a que estaba probando algunas cosas, y la última variable se ha dejado aquí. Entonces, ahora que tenemos nuestra referencia de juego, vamos a poblarla en nuestro personaje de arriba hacia abajo en comenzar a jugar Vamos a conseguir jugador un get. Vamos a establecer la referencia de juego y conectemos a la referencia de juego. Y ahora está poblada. Nuestra referencia está poblada. Y volvamos al mando, y de nuestra referencia de juego, vamos a conseguir. Cámara, vamos a conseguir la ubicación de wold. Hay otra manera en que podríamos haber conseguido que nuestra cámara fuera irrelevante para nuestro plano de jugador Podríamos haber usado el administrador de cámara. Y a partir de eso, podríamos haber obtenido la ubicación de AC, lo que nos da la ubicación de nuestra cámara. Pero de esta manera también está bien, es solo hacer que sea confiable para nuestro jugador Y este es nuestro comienzo. Ahora, vamos a traer un rastro de esfera. Canal bi. Vamos a establecer su radio en 20. Nuestro final debe ser nuestra ubicación, nuestra ubicación de calor del ratón. Pero, ¿y si el ratón no le pegó a algo? ¿Y si el ratón no estamos apuntando a nada? Entonces, vamos a tener una sucursal para preguntar esto primero. ¿Estamos odiando? Si estamos calentando, entonces crea la esfera. Si no estamos calentando, haremos otra cosa. Voy a desconectar estas cosas aquí porque vamos a estar cambiando los resultados de calor en función de nuestras necesidades. Ahora bien, ¿qué hacemos cuando no estamos odiando nada? Bueno, lo que hacemos es la posición del ratón, y vamos a ir también en el nacimiento b al mundo. La reubicación al espacio de palabras. La razón por la que voy a hacer esto es porque cuando no estamos pegando nada, como podemos ver ahora mismo, necesitamos reconectar algunas cosas ¿Correcto? Como podemos ver ahora mismo, cuando estoy pinchando sobre nada, Nuestro personaje no se mueve, y podemos ver que la ubicación está por aquí. Podemos ver dónde está pensando en realidad, estamos calentando. Se tiene que bajar la música. Ya que cuando está volviendo falso, esto en realidad devuelve cero. Tenemos que cambiar eso. Tenemos que ser capaces de avanzar hacia nuestro ratón. Entonces lo que vamos a hacer es que vamos a agregar esta ubicación, la palabra ubicación es algunos multiplicar, no un sumar. Este es el anuncio. Tiene este símbolo bajo, lo convierte en un anuncio. Ahora bien, nos vamos a multiplicar. Vamos a multiplicar la dirección. Y vamos a cambiar esto a un entero, y vamos a darle un rango a esta dirección. 3,300. Y 3,000. Consideremos que el alcance de nuestra cámara es de aproximadamente dos k, así que queremos que sea al menos menor que el personaje, al menos a la misma altura del piso. Entonces 3 mil aproximadamente estarían bien. Y lo que vamos a hacer es promover esta variable, una variable local. Y llamemos a esto itation. Por ejemplo, si voy a conectarme, desconectémonos un poco con la línea de traza. Si voy a conectar esto a las cataratas, y luego también conectarlo aquí, y obtener nuestra ubicación de calor o la salida. Ahora, y conectar esto aquí, ahora deberíamos poder caminar hacia los acantilados. Por el momento hago clic aquí, no, ¿por qué sucede esto? No tiene sentido. Ese no es el controlador. ¿Cuál es el código original? No sucede porque el código que es por defecto bal le dice que solo se mueva cuando tenemos un calor a través. Entonces si conecto esto también, entonces deberíamos caminar hacia el acantilado. Sí, estamos caminando hacia nuestra perdición. Está funcionando. Puedo ver el piso aquí cding. Vamos a arreglar esto más tarde, ¿ o lo vamos a dejar como estos? Realmente no importa. Es solo posicionar las paredes de la baldosa. Entonces, este no es el controlador. Ahora, en realidad solo arreglamos ese problema que si no estamos pegando, todavía podemos avanzar hacia la nada. Pero ese es sólo uno de los temas. Desconectemos esto, y volvamos a conectar esto y desconectemos Entonces, si no estamos golpeando algo, estamos ajustando la ubicación de calor a lo que sea nuestro mouse y debajo es. Y ahora continuemos con esta lógica. Que otra vez, vamos a preguntar, ¿golpeamos algo? Cambiemos esto a cámara, el canal de rastreo. Si no le pegamos a algo, entonces significa que el ratón calienta algo, pero no debemos prestarle atención porque estamos en un canal diferente. Oh, esto significa que nuestra ubicación debería convertirse en una ubicación de calor de ratón. Así que vamos a cambiar nuestra ubicación de calor a nuestra ubicación de calor del mouse. Ahora, como puedes imaginar, los espaguetis aquí serán maravillosos o un curso familiar completo. Tratemos de mantenerlo lo más limpio posible. Vamos a continuar. Como podemos ver, tenemos una salida de calor. Cambiemos el nombre de esto a calor enemigo. No, porque la forma en que nuestro sistema va a funcionar, no le importará si es un enemigo golpeado o no para moverse, nos moveremos independientemente, no independientemente, independientemente. No. Lo que vamos a hacer es promover esta variable, variable local, llamar a esto. Se. Enemigo temp. Porque sabemos que tenemos un problema con el mismo nombre nombre. Vamos a establecer aquí que el enemigo no fue golpeado. Esto sería si no tuviéramos am y si no tuviéramos disparos. Ahora, hagamos disparos después. Vamos desde el punto de vista de que no golpeamos nada, y no es un enemigo. Sólo estamos pinchando en el suelo. Preguntemos, ¿es a lo que le estamos pegando un artículo? Para ello, vamos a usar una secuencia. Porque pase lo que pase, 01 es para igualar la salida, y nuestro cero es en realidad incluso salida, y el nuestro sería otra cosa. Ahora bien, esto no debería estar realmente conectado aquí. Este estaría conectado aquí, porque no queremos cambiar nuestra ubicación de calor, pero queremos apagar la temperatura de calor de nuestro enemigo, que está desactivada por defecto. Entonces aunque lo conectáramos aquí, realmente no importaría porque por defecto. Pero seamos justos. Esto así que apártate. Ahora, cuando estamos comprobando por un artículo, debemos verificar si nuestro actor de calor es válido. Voy a romper nuestro resultado de calor. Voy a traerlo aquí, y preguntar si el otro actor es válido. Ese sería el inicio de nuestro viaje para detectar artículos. Una cosa que debemos hacer es antes de continuar con el código, ir a nuestros artículos interactuables a nuestro pecho grande, p el cofre por aquí también ¿Con qué más estamos interactuando? Los apoyos de la habitación. Creo que eso es todo, y los artículos, por supuesto, vamos a ir a los artículos y al artículo BP. Vayamos a Cofre grande más valores por defecto y busquemos remolcador. Pongamos la etiqueta I. Voy a guardar esto, y pongámosla también en el pecho. Yo por artículo para interactable, no lo sé. Interferencia, Este es el remolcador que elegí. Puedes elegir tus propios remolcadores, claro, solo recuerda colocarlos correctamente. Artículos y cofres de la etiqueta I porque podemos hacer click sobre ellos como un ítem Ahora, creo que este es un buen punto de parada para este. Vamos a continuar con el siguiente con nuestro código de cuatro artículos. Adiós. 105. Sistema de interacción con ratón y entradas: Él Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Motor real cinco Procesal Dangon Acción Un Curso de Creación BZ Anteriormente, continuamos con ubicación de nuestro mouse bajo Cursor. Función, básicamente nuestro resultado de calor mouse que el resultado de calor del mouse personalizado que estamos haciendo, y comenzamos con obtener nuestro calor bajo el cursor. Comvimos si estamos vinculando algo, si calentamos algo, y si no lo hicimos, estamos obteniendo la posición de nuestro mouse, depjecting su anillo a ubicación mundial, y obteniendo un punto hacia esa dirección, 3,000 en realidad en rango hacia esa dirección y configurando eso como nuestra ubicación de calor Ahora bien, si golpeamos algo, estamos creando una carrera de esfera con radio de 20 que comienza en nuestra cámara y termina en nuestro resultado de calor del ratón. Estamos preguntando si le volvemos a golpear algo porque esta vez estamos comprobando el rastro de la cámara. Ahora bien, si golpeamos algo, estamos ajustando el calor si no golpeamos algo, estamos comprobando la ubicación estamos configurando la ubicación al resultado del cursor del mouse, este resultado, y estamos configurando que no golpeamos a un enemigo. Entonces tendremos que hacer algunas otras cosas, y obtenemos la nota de devolución. Pero lo siguiente que deberíamos hacer, y empezamos a hacer fue nuestro sistema para comprobar si estamos rondando algo o no Y la primera acción sobre esto es conseguir nuestro resultado de actor de calor. También, procedimos a agregar a nuestro cofre, nuestra caja, nuestro cofre, nuestro cofre grande, y nuestros artículos, el remolcador Oh, esto es lo siguiente que estamos comprobando después de que estamos comprobando que el actor es válido. ¿Tiene el actor el remolcador I. Así que un remolcador y la rama, y la letra I, y completamos esta pregunta Ahora, vamos con una rama forse, que sería si lo que estamos pegando no es un ítem Lo que necesitamos es una función. Entonces, vamos a hacer una función. Llamemos a esta función ear em elect. Porque si no estamos pegando algo con i, entonces no tenemos objetivo. Para llenar esta función, necesitamos dos variables. No locales, normales. vamos a hacer y va a ser el tipo de acto. Ese sería nuestro objetivo anterior. Digamos que flotamos porque estamos flotando sobre los artículos. Vamos a nombrar al otro padre. Entonces, ¿qué hacemos con estos artículos? Recuerda, cuando hicimos el elemento PP, creamos estos dos mensajes start hover y end hover , mensajes de interfaz blueprint Entonces, cuando no estamos aspirando nuestro artículo, deberíamos terminar de pasar el cursor sobre cualquier artículo que estuviéramos sosteniendo Entonces vamos a conseguir nuestras vistas previas, y vamos a obtener nuestra corriente. Y si nuestras previsualizaciones son válidas, aquí, entonces sobre end hover message Entonces vamos a verificar si el hover actual es válido. Y vamos a conectar el no es válido del nosotros hover, y por supuesto, también el final hover Vamos a hacer lo mismo por éste. Vamos a copiar base este año. Trae esto un poco más cerca y estamos terminando hover a lo que sea que estemos actualmente rondando Y entonces vamos a poner la corriente sobre y la anterior sobre a null, ya no son válidas. Vamos a conectar el no válido también aquí. si acaso esto es válido y esto no es válido o cubrimos todas nuestras bases. Ahora, volvamos a nuestra función, y llamemos a esta nueva función. Seleccionar artículo de auto en falso. Entonces, cuando estamos cubriendo algo y no es un artículo, aclaramos la selección de artículos. Ahora bien, si estamos flotando algo, necesitamos una pregunta. ¿Nuestro actual hover es lo mismo que el headactor? ¿Esto es igual al actual hover? Este es él dactor. Y si es verdad, no hacemos nada. Si no es cierto, entonces obtendremos nuestro actual hover, y lo haremos por encima porque significa que hemos hecho algo nuevo Pero solo si esto es válido, si nuestro último no fue, entonces sí necesitamos verificar si es válido. Porque si es válido, necesitamos establecer el vis hover al actual hover Si no es válido, entonces este error de calor, yo diría que estás tratando de establecer null a null. No me gustaría. Ahora, lo que tenemos que hacer es establecer nuestro actual hover para calentar un poco el as No sé si lo cortaron. Intenté conectarme este año y no me dejaste. Y la razón es que se trata de un actor, pero se trata de un personaje de arriba hacia abajo. Cambio. Referencia del actor, cambiar tipo de variable. Genial, sin choques. Arent Hover y Previous sean ambos actores. Car Hover no debería ser el personaje de arriba hacia abajo. Tiene sentido, creo. Voy a traer esto por aquí. Por supuesto, si nuestro actual hover no era válido, esto significa que vamos a dejárselo directamente a nuestro actor actual Y tenemos que hacer el inicio hover a este actor. Pero el actor sabe que está siendo rondado. Empiezas a interactuar. Sí necesitamos otra función. Pero vamos a llegar aquí y llamarlo al. Y lo llenaremos más tarde. Por ahora, vayamos a Gráfico de eventos, y vayamos a nuestra entrada mejorada, un clic de destino de conjunto de IA de acción. Ahora, no vamos a usar el consilt, así que voy a desconectar esto Lo que vamos a utilizar para nuestra interacción es la completa. Esto significa que he pulsado clicked y básicamente tiene algunas reglas sobre hacer clic en el mismo fotograma y soltar Pero básicamente cómo funciona es cuando haces clic, sucede. No vamos a usar click hold y más detalles que eso. En realidad, lo estamos porque se ha usado por aquí, y vamos a mantener una parte de esto, pero después, ahora no. Ahora, lo que vamos a hacer es que vamos a comprobar si nuestro a, nuestro jugador es válido. Así que no obtenemos ese error molestos que tuvimos todo este tiempo. Quiero el completo. Cuando desconectas algo, desaparece. El motivo es porque tenemos esta r por aquí que muestra el resto de las opciones porque se están escondiendo. Por lo que sí necesitamos terminado. Conectémonos aquí. En realidad vamos copiar y pegar al principio así. Trig no desencadena este error molestos. Y no vamos a usar actor también. Vamos a usar el stop moving, pero vamos a hacer uno de los nuestros. Nuestro actor es válido, y sigamos conectando esto. Lo que vamos a hacer es cada uno en el estado del jugador, porque tenemos el estado del jugador por aquí, y queremos interactuar sólo cuando estamos normales. No queremos interactuar cuando estamos pirateando o algo así, no elegimos artículos al azar. Y en realidad, usemos este umbral que tenemos. Pongamos una sucursal aquí. Entonces, si nuestro tiempo transcurrido es menor que el umbral Nos conectamos a la normalidad. Esto significa que si estoy haciendo clic en un elemento por una cantidad de tiempo específica y no liberando, esto no sucederá. Interactuar no va a suceder. Entonces solo necesito hacer clic y soltar para que interactúe. Si solo estoy rondando con el descanso clickeado, no deberíamos poder elegir artículos Bueno, en realidad, de esta manera, no deberíamos poder escoger artículos. Si no usamos este nodo, podremos hacer clic en elementos como pasar el cursor sobre la m y decidir cuándo lanzamos y simplemente pintarlo Pero hagámoslo que no puedes escoger artículos si tienes que sostenerlo. Entonces, vamos a usar una rama dos aquí, y vamos a traer esta función de interacción. Ahora bien, si lo dejamos así, cada vez que estamos haciendo clic, estamos tratando de interactuar. Pero, ¿y si queremos movernos? ¿Cómo diferenciamos entre estos dos cuando quiero hacer clic y mover y cuándo quiero hacer clic y recoger algo? Bueno, eso sería sencillo. Tenemos nuestro actual hover por aquí. Si esto es válido, entonces estamos interactuando. Si esto no es válido, entonces nos estamos moviendo o atacando. A ¿vamos a traer esto aquí? Ansi fy las cosas un poco. ¿Esto también? Conectémonos aquí. Agrega una cosa más, deberíamos agregar esta pregunta que estamos pasando el cursor sobre un ítem a la rama francesa sobre la rama trigger Basar la misma pregunta que queremos hacer en el gatillo. ¿Estamos flotando un artículo? No estamos flotando un artículo. Veremos qué pasa después. Si estamos rondando un artículo, no vamos a hacer nada porque queremos comprobar cuánto tiempo estamos sosteniendo el mouse Básicamente, es un evento de lanzamiento con un ter. Bueno, no en el lanzamiento, en el evento de prensa con a. algo entre estos dos. Y eso podría concluir casi concluir nuestro sistema de interacción. Sí necesitamos interactuar. Pero tenemos que hacer algunas otras cosas primero. Entonces, continuemos con la siguiente. Creo que este es un buen punto de tope para este. Yo quiero verte entonces. Adiós. 106. Sistema de interacción de rango mínimo: Hola, y bienvenidos a Game Design Workshop y Real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, casi terminamos con nuestra secuencia de interacción. Terminamos en realidad con nuestra búsqueda artículos si estamos teniendo elementos parte de la función. Pero comprobamos si es válido. Comprobamos si el actor ha cavado no conecte al actor. Sí, sí necesitamos conectar al actor. Si tiene pato el i, y lo comprobamos con una sucursal. Si no es un actor con yo, estamos limpiando todas nuestras selecciones a una función que termina hover en elementos actuales o anteriores de hover en ambos Y luego procedimos a verificar desde la rama verdadera, si nuestro objetivo actual es el objetivo que estamos pegando Si es así, no hacemos nada. Si no lo es, entonces estamos configurando nuestro actual hover para terminar hover Estamos configurando nuestro hover actual a anterior, y luego estamos configurando el elemento que estamos rondando a nuestro hover actual y configuramos nuestro personal hover Ahora bien, en caso de que nuestro actual hover no fuera válido, entonces no teníamos nada en blanco Solo estamos poniendo nuestro actual hover al actor objetivo Luego procedimos a ir a nuestra acción de realzar IA A Un clic de destino establecido Eso es horrible. Bien. la rama terminada de la acción, que tiene algunas reglas por sí sola. Y básicamente, mantuvimos la regla de que si se presiona en cierto umbral, no estamos interactuando. Y no terminamos de interactuar porque sí necesitamos algunas cosas extra. Y una de las cosas extras es que borramos la parada de movimiento, así que vamos a hacer una de las nuestras. Oh, vamos a crear un evento personalizado. Llamemos a esto parada. movimiento. Y vamos a crear un bleion. Llamemos a esto bleion movimiento. Y pongámoslo compañeros porque cuando dejemos de movernos, esto bajaría Cuando dejamos de mover esto, queremos que esto sea cierto. Y luego vamos a comprobarlo. O comprobar si el control p es válido porque no queremos marcapasos antes de que comience el juego Y vamos a agregar entrada que sería cero si el punto del controlador es válido. Pero esto nos hace dejar de movernos. ¿Y por qué necesitamos esta variable? Bueno, tenemos este movimiento de dos funciones por aquí. No lo vamos a usar. Haremos nuestra propia función en el evento tick. Pero yo estoy haciendo una digresión. Aún no estamos ahí. Entonces, hay algunos otros puntos que necesitamos para dejar de movernos además de interactuar. Y eso sería cuando estamos apuntando, cuando nos estamos muriendo. Pienso cuando estamos tomando algún daño. Entonces, volvamos a nuestro personaje. Vamos a nuestro objetivo. Necesitamos la referencia del controlador aquí, vamos a traer el controlador BP. Vamos un poco más allá. Vamos a movernos. Lo que nos lleva hasta aquí. Ahora, personaje, pasamos, queremos que esto suceda en cualquier daño, y eso sería después de quitarle algo de salud. Y el último lugar, claro, que lo necesitamos es a nuestra muerte, ponlo después de tocar sonido. Bien. Sí, después de que coloquemos ahora, está bien. No importa porque esto apagará nuestro bulling y no podremos volver a encenderlo Oh. Agregamos nuestra parada de movernos a todas partes que se necesitaba. Que el lugar del que empezamos a hablar, que lo vamos a agregar, y esa sería la función de interactuar. Oh, ¿qué hace nuestra función de interacción? Comprueba si nuestra corriente es válida. Y luego enviamos mensaje. Correcto. Y aquí deja de moverte. Entonces básicamente, ahora, podemos interactuar con nuestras cosas en el mundo. Pero también porque hemos estropeado esta función, probablemente no podremos movernos Comprobemos esto muy rápido. Sí, no podemos movernos en este momento. Pero somos capaces de disparar y movernos mientras somos Impresionantes. Y entonces no podemos movernos. Increíble. Solo funciona afuera, dentro del laberinto, realmente no funciona, pero afuera, estamos consiguiendo un punto que deberíamos estar obteniendo. En fin, ¿importa porque ya tenemos las herramientas para arreglarlo? Solo necesitamos un poco de código extra. Nosotros sí tenemos el recurso. Quiero decir que necesitamos. No. Lo que vamos a hacer es te En realidad, sí necesitamos una sucursal, pero solo necesitamos una Vamos a eliminar el seguimiento. No necesitamos el seguimiento. Sí necesitamos el destino del elenco y solo falso. Porque cuando no golpeamos a un enemigo, es entonces cuando estamos caminando. Y no queremos estar caminando en ninguna situación. Queremos caminar cuando estamos en estado normal. Lleguemos a su estado. Conectemos normal. Ahora si somos normales y estamos golpeando a un enemigo, vamos a disparar. Eso se hace fácilmente. Lo que vamos a hacer para eso es acudir a nuestro mecánico de tiro. El rodaje por aquí. Y claro, vamos a hacer trampa un poco de nuevo. Vamos a usar esta parte por aquí porque esta pregunta se a través de nuestro controlador de pod de juego, y vamos a hacer un evento personalizado. Llámalo. Dos y sólo vamos a conectarnos por aquí. Ahora, desde el controlador del jugador, podemos llamar desde la referencia del jugador, tiro. Ahora cuando estamos azotando sobre algo, somos capaces de dispararle. Pero otra vez, para disparar a algo deberíamos poder movernos. Entonces, cuando tenemos un destino de caché guardado, cuando tenemos nuestro destino de caché guardado, que en realidad es nuestro calor, o ubicación del cursor, podemos establecer el movimiento. Y como vamos a movernos ya que eliminamos la mudanza a, básicamente, lo que no agrega una simple ubicación de movimiento. Creo que el anterior agrega solo la entrada de movimiento publicitario. En realidad en la función seguir. Sí, tenía la entrada de movimiento add. No. Vamos a esta función, pero actualizado un poco. Porque vamos a llamarlo en ti, y esto estaría agregando constantemente un movimiento a nuestra ubicación actual. Hagamos un chequeo o x e y de la ubicación de nuestro estanque. Entonces rompamos este vor aquí. Rompamos la ubicación de la que vienen. Este vector por aquí, por supuesto, siendo la ubicación aún actor, nuestro estanque. A vamos a comprobar si esto es casi igual y es para x y con la x e y de nuestra ubicación entrante. Vamos a una tolerancia de 15, siendo este valor correcto porque lo que vamos a hacer más adelante significa que nuestro personaje puede tener el brazo realmente extendido por el arma. Si traemos nuestro ratón a esta zona, Y va a ser un problema porque si estamos tratando de apuntar aquí y nuestra arma muscular está aquí. Y esto crea un problema. Se va a tratar de disparar hacia adentro, y digamos, no, esto no es posible Por lo que vamos a crear un área alrededor del jugador, que el ratón en realidad cuando entra en esta área, se mueve hacia este lado o este lado basado en algunas reglas o este lado o en base a algunas reglas. Tendremos una zona muerta básicamente alrededor de nuestro personaje. Ahora, vamos a comprobar si esto es igual, casi igual a ambos, porque si uno de ellos no lo es, muévete. Pero si son iguales, deberíamos poner en movimiento dos pliegues. Llegamos a nuestro destino. Volver al gráfico de eventos. Llamemos evento ártico. Esto se va a llamar perfram, y lo vamos a hacer es válido Nuestro personaje, los personajes aquí. Y luego vamos a hacer una secuencia porque vamos a agregar algunas cosas a este evento tick. Ahora, pongamos una rama aquí, resto de la secuencia y preguntemos si nos estamos moviendo. Si nos estamos moviendo, entonces estamos siguiendo. Para la ubicación, el destino de caché. Compilar y guardar. Teóticamente, ahora podemos caminar No. Incluso el anterior. Y caminar. Conozco la razón porque nuestro estado claro perno muerto normal, que no se actualiza ya que no hemos actualizado el estado predeterminado del personaje, y el estado predeterminado del personaje es normal porque lo cambiamos. Pero no lo hace, entonces no actualiza el controlador. Ahora así podremos mover No, y el punto de retorno, siempre el centro del personaje, que está afuera, no lo es. Por supuesto, porque no hemos completado esa parte de la función. Esa parte de nuestro lote más de a. no hemos completado la parte de la función, si nosotros si golpeamos un objetivo, y no es un enemigo, ¿qué hacemos? Entonces hagamos esto en la siguiente. Y te dejaré por ahora. Adiós. 107. Terminación de disparo estático y puntería: Hola, y bienvenidos a Taller de Diseño de Juegos y motor real cinco llamadas de creación de PZ de acción de Dungeon procesal creación de PZ de acción de Dungeon Anteriormente, comenzamos con nuestra función de interacción, pero terminamos terminando en el movimiento. También terminamos la función de interacción, espero. Revisaremos cuándo podemos movernos y elegiremos algún cofre o un artículo. Ahora, lo que hicimos a continuación fue que creamos la mecánica de stop move, que en realidad convierte nuestro lingote de movimiento en caídas y agrega una entrada de movimiento de cero si nuestro controlador de jugador es válido Si nuestro peón jugador es válido. Lo siento. Entonces procedimos que en nuestro disparador, esto significa que cuando empezamos a hacer clic, sigue funcionando ya que estamos manteniendo pulsada el click U vamos a repasarlo una vez más. Primero, verificamos si nuestro jugador es válido, luego si nuestro ho es válido porque si estamos flotando un ítem, no deberíamos movernos hacia ese ítem Si queremos movernos hacia ese ítem, si por ejemplo, no estamos en rango, podríamos hacer algún código aquí, si no estamos en rango del ítem, si nos movemos hacia el ítem, si no, lo que queremos hacer esto. Oh, entonces comprobamos si nuestro jugador está en estado normal. Entonces, cuando nuestro personaje está en normal, comprobamos si estamos golpeando a un enemigo con nuestro cursor, o si no lo estamos, estamos fijando la ubicación de nuestro calor a nuestro destino de lanzamiento, y estamos poniendo el movimiento a true. Si estamos solo estamos filmando que creamos un evento personalizado aquí en rodaje desde la sucursal porque no necesitamos esto, y está siguiendo la misma lógica. Ahora, de vuelta a nuestro controlador, La razón por la que estamos estableciendo el movimiento verdadero, y estamos configurando el destino del elenco es porque nuestro movimiento está controlado por nuestro evento tick, el cual preguntamos si el jugador es válido, si nuestra referencia del jugador es válida, y luego estamos haciendo una comprobación si nos estamos moviendo o no. Si lo estamos, usamos la función follow que areal nos proporciona, que obtiene el controlador de par el estanque controlado, obtiene su ubicación, obtiene vector de dirección único de dos, y proporciona eso para agregar entrada de movimiento Actualizamos esta función comprobando si llegamos a nuestro destino comprobando los valores x e y del destino y nuestra ubicación actual. Y si es cierto, entonces ya no nos estamos moviendo porque llegamos a nuestro destino. Y nos dimos cuenta de que todavía no podemos movernos porque si vamos a nuestra um get location under cursor function, podemos ver que nuestra ubicación get no se está estableciendo cuando estamos golpeando algo con nuestra línea de traza. Bueno, esa lógica simplemente no lo es. Lo que vamos a hacer es conseguir nuestro resultado de calor aquí en realidad, porque vamos a necesitar valores de él. Pero vamos a necesitar preguntar si es el actor que calentamos un enemigo. Entonces como etiqueta e. pero si no tiene la etiqueta E, entonces no estamos golpeando a un enemigo. Vamos a hacer la lógica de golpear a un enemigo después. Pero ahora por ahora, vamos a conectar falso a aquí. A lo mejor necesitamos sacar esto un poco más adelante. Eso está bien. Esto comienza a convertirse en un espagueti familiar del tamaño de una porción. Pero creo que está bien. Ahora, si vamos en juego, en realidad podemos movernos, podemos disparar a Ida. Pero el problema viene con apuntar. No podemos apuntar. Puedo presionar shift y puedo empezar a disparar, pero no puedo apuntar donde disparo. Arreglemos esto. Vamos a necesitar por qué esto persiste en el movimiento en solo voy a poner un es válido aquí Ojalá esto lo arregle. Sí, no más errores. Por último. Ahora, tendremos que apuntar a donde estamos filmando. Y para ello, en realidad necesitamos crear el sistema del que hablamos que entre un cierto rango, va a compensar Nuestro vector hacia adelante y nuestra puntería, nuestra rotación. Solo vamos y agreguemos realmente rápido a nuestra ubicación de get debajo del cursor, puro. Tenemos que cambiar este nombre de todos modos. Vamos a agregar dos variables en la nota de retorno. Uno de ellos sería un vector. Llamemos a este objetivo hacia adelante. F, ¿no? Tal vez. Y entonces necesitamos otro vector pero rotador esta vez Llamemos a esto de Fation, que en realidad incluirá las normales, pero de todas formas, promovamos a estas dos en variables locales L et's los nombra de eso sobre dame así FA y de strtation, de set Vamos a ponerlos en algo. Vamos a poner a demostrar el problema, en realidad, lo que está pasando aquí, aquí, para nuestro offset para A, vamos a conseguir nuestro personaje. Una referencia, vamos a sacar adelante vector actor adelante vector. Y para rotación. Consigamos la ubicación del actor, y consigamos nuestro resultado de calor, que es copiarlo, aquí está, obtener nuestro resultado de calor, y vamos a encontrar del actor en realidad. Rotación. Ningún pariente, lo siento. Rotación, y va a comenzar desde nuestro personaje, y va a terminar con nuestro resultado de calor. Ahora bien, para que esto funcione, necesitamos algún código. Tenemos que estar estableciendo en algún lugar la rotación, e iremos a nuestro evento e, y vamos a ir a partir de entonces uno de nuestra secuencia. Entonces, vamos a encender el estado del jugador. Porque hay algunas veces que no queremos cambiar nuestra rotación de personajes. Básicamente, sólo hay dos veces que sí queremos cambiar la rotación de caracteres. Es de lo normal o de la ruta A. Re aquí. Puedo conectar ambos, y vamos a conseguir nuestra referencia de juego y esa rotación. Rotación de Ca. Vamos a necesitar algo de espacio aquí. Un poquito más. Creo que está bien. Oh, lo que vamos a hacer es que vamos a nuestro inter. Vamos a hacerlo constante. Esto significa rotar en un valor constante basado en un tempo basado en nuestro Delta T. Para Delta T. Vamos a usar el evento tick. Esto hace que sea un marco amable relevante, pero está bien. Y para la velocidad, vamos a usar 100. Ahora bien, ¿cuál es nuestro actual? Bueno, vamos a conseguir nuestra referencia de jugador. Vamos a conseguir rotación. En realidad vamos a usar esto o actual, pero el objetivo, no cambiamos la x e y vamos a mantener lo mismo, así que vamos a esto. Vamos a romper esto. Roll y pitch permanecerán igual. Yo, que está dando la vuelta, será el único que está cambiando. Así que vamos a obtener la ubicación de nuestro mouse en la función occurs. Rompe esto. Vamos a conectar esto. Y una cosa más antes de que terminemos. Volvamos a nuestro personaje P de arriba hacia abajo. Vayamos a nuestra bala de engendro y cambiemos este vector hacia adelante que teníamos de la cápsula, que son los delanteros nosotros nuestra bala Consigamos nuestra referencia de controlador de jugador. Vamos a ponernos sin el git. No. Ese no es el nombre. Debe tener un get get pacientes Obtener en el resultado bajo Kersor Esa es nuestra función. Pero éste. Vayamos a nuestra ubicación gt bajo la función Kursor. Vamos a ver eso. Esta función por defecto está protegida por especificador de acceso, lo que significa que no puede ser llamada por nada más. Hagámoslo público. Podemos acceder a él. Voy a conseguir la ubicación debajo del Cursor, aquí estamos, y vamos a conseguir nuestro objetivo de desplazamiento hacia adelante y conectados aquí. Vamos a jugar. Esto nos dará algún tipo de rotación. Y como pueden ver, rote hacia mi ratón. Pero, ¿ve que hay un pequeño desplazamiento a la bala en comparación con donde hago clic? Esto se debe a que estamos en el mundo tres D, y estamos tratando de apuntar en un mundo de dos d. Entonces en algunos lugares, está bien, es directo, como si vamos a este ángulo, podemos ver que es directo en la bala en el ratón, o Hay un ángulo que es casi directo, y cualquier otro ángulo, empieza a realmente compensarse. Ahora, vamos a hacer los cálculos requeridos para cambiar este offset, hacer que apunte correctamente. Así que volvamos a nuestra ubicación de obtención bajo ers pure, y vamos a necesitar mucho espacio para arrastrar de esta manera por aquí. A lo mejor es suficiente espacio, y vamos a estar desconectando a estos dos L et's comienzan calculando la dirección de nuestro hocico. Vamos a conseguir la referencia del jugador, y vamos a conseguir bozal De nuestro hocico, vamos a conseguir el catión mundial. En realidad solo necesitamos la z aquí, voy a romper esto. La dirección hacia dos sería nuestra ubicación de calor. Consigamos nuestra ubicación de calor. También rompamos esto. ¿Por qué hacemos esto? ¿Por qué necesitamos encontrar la dirección? Porque necesitamos saber la dirección del arma al objetivo donde apunta el ratón para ajustar la puntería correctamente en consecuencia. Hagamos la resta para encontrar la dirección que menos Ahora tendremos que calcular la dirección desde la cámara hasta el mouse git porque la perspectiva de la cámara afecta a cómo vemos y apuntamos a los objetivos debido a nuestra vista isométrica Lo que realmente hacemos es y vamos a convertir la ubicación en espacio mundial. Conectemos la y también. Es algo importante. Y la siguiente ubicación, que necesitamos es la cámara, así conseguimos a nuestro jugador. Tenemos a nuestro jugador aquí. Busquemos cámara. Consigamos la ubicación de la palabra. Restar estos dos Obtenga la dirección de la cámara hacia el calor del mouse, la ubicación de la palabra del mouse. El siguiente paso sería normalizar esta escala. Ahora, normalicemos los componentes z de estas dos diferencias a Para ajustar el vector de dirección, considerando las diferencias de altura entre la cámara y el arma y el objetivo porque todos estos tres son diferentes ejes Z. Ahora bien, para los que son nuevos en matemáticas, ¿qué es la normalización? Bueno, es el proceso de ajustar los valores medidos en diferentes escalas a una escala común, si eso tiene sentido. La forma en que vamos a hacer esto, vamos a romper este resultado. Vamos a dividir. Es el resultado por la z, la dirección del resultado de la dirección de nuestro músculo a nuestro calor en comparación con nuestro calor y la dirección resultado de nuestra cámara y nuestro ratón en la pantalla. Y lo que tenemos que hacer, tenemos que convertirlo en un vector. Es una división sabia de elementos. Así que vamos a cambiar este pin de salida a un vector. Como puede ver, esta división se convirtió en una división sabia de elementos, que es una X dividida por x, A por lo que todos estos valores son iguales. Y esto compensará nuestra algata. Sí necesitamos escalar este factor a nuestra diferencia de cámara a ratón, Multipliquemos esto con el resultado de la resta con esta dirección básicamente, y vamos a ajustarlo a nuestra ubicación de calor Así que vamos a agregar nuestra ubicación de calor aquí. Ya que estamos usando nuestro músculo. Utilicemos de nuevo nuestro hocico, para encontrar la mirada a la rotación con el nuevo offset Vamos a conseguir la rotación mundial. Vamos a conectarnos con el arte. Entonces vamos a conectar esto para encontrar y conectemos esto aquí, y vamos a conseguir mundo. A y conectarlo por aquí. Pero no hemos terminado, pero veamos qué creamos. Ya ves donde hago clic, en realidad apunto. Aquí es donde irá la bala, donde hago clic. Pero si voy a acercarme a mi personaje, se puede ver de repente una bala vino por detrás. Este en realidad choca con un personaje. Nos estamos disparando a nosotros mismos. Creo que puedo conseguir que vuelva a disparar por detrás. ¿Vías que esto era increíble? Además, nuestra animación es getering. Se puede ver que la animación geters mucho porque estamos demasiado cerca del hocico Entonces en este caso, la prioridad del modelo tiene prioridad la rotación del modelo toma más prioridad que el hocico porque estamos demasiado cerca Si me voy un poco más lejos, todo está bien. Si voy demasiado cerca, Comenzamos el jittering y nuestro tiroteo se vuelve muy malo Ahora, creo que esto es suficiente para éste. Vamos a arreglar esto en la siguiente. Adiós. 108. Bajo la mecánica del cursor enemigo: O Hola, y bienvenidos a Game Design Workshop, real Engine five procesal Dungeon action RPG curso de creación Anteriormente, terminamos con las matemáticas para nuestro desplazamiento de puntería. Obtuvimos nuestra dirección de nuestro músculo a nuestra dirección de calor, y obtuvimos nuestra dirección desde nuestra ubicación de palabras hasta desde nuestra ubicación de sala de cámaras hasta nuestro mouse una ubicación de sala de pantalla. Obtuvimos la dirección, normalizamos el eje Z a partir de estos dos, y le dimos la escala de la dirección base en la normalización aquí, y ajustamos la ubicación de calor para dar cuenta del desplazamiento de armas. Entonces agregamos la ubicación de calor a este resultado, esta dirección de escala. Ahora, Pero tenemos que hacer arreglar el problema que estamos teniendo eso cuando estamos demasiado cerca, entonces esto es el targeting es muy, muy compensado. Necesitamos verificar solo por una distancia si nuestro resultado de comer básicamente es mayor que una distancia o menor que una distancia en comparación con nuestro personaje crear pequeño círculo que hablamos alrededor de nuestro personaje. Y tengo un valor en mente. Entonces pongamos una sucursal aquí. C el Conectar esto a la sucursal, cae aquí. Vamos a co-representante aquí. Y qué vamos a hacer pedirte distancia menos. ¿Para qué es menos? Voy a conseguir un vector. Para hacer 107 aquí. Este es el valor que descubrí, me encabeza jiggling y aparece un tener valores equivocados básicamente F vector uno, necesitamos nuestro músculo. Vector dos, necesitamos el desplazamiento de una ubicación. Y cuando esto es dos, cuando la distancia es más alta, así que estamos más cerca de nuestro personaje, este círculo bajo personaje, porque esto es radio básicamente. Conectémonos aquí antes que nada. Vamos a necesitar los nodos que tenemos aquí. No necesitamos la ubicación. Solo necesitamos la mirada de hallazgo. Y esto comenzará aquí. Este será vector hacia adelante. Vamos a traer fondo opuesto va a estar aquí. ¿Verdad? Vamos a conectar esto, y nuestro objetivo vuelve a ser el calor compensado. Vamos a conectarnos a este calor de aquí. Y esto lo arregla. Vamos a la arcilla. Y como podemos ver, podemos disparar cerca de nuestro carter y va a disparar recto. S. Tenemos tiroteo, ahora podemos apuntar a donde queramos. Tenemos que aumentar el tamaño objetivo de esto. Es pequeño, es longitud de carácter, y esto es algo enorme. Pero ahora podemos movernos y disparar. Pero no podemos disparar cuando estamos flotando sobre un objetivo. Deberíamos poder mudarnos aquí tal vez. No hemos hecho la extensión de plataforma tal vez. realidad no hemos probado. Nosotros lo hicimos. Nosotros lo hicimos, no vamos. Vamos a deb después. lo que debemos continuar es con lo que sucede cuando estamos flotando sobre un enemigo Esto es algo importante. Simplemente no queremos estar disparando solo con un turno presionando y disparando. Queremos poder filmar con picking también, 100 gaming. Entonces, tenemos una nueva ubicación de calor. Tenemos una ubicación de calor de un objetivo ahora. No tener en el suelo, que es el ratón. Si quisiéramos un calor más específico, este sería el punto de impacto. Esta ubicación sería, por ejemplo, donde golpeamos el blanco. Tenía cuerpo. Pero para nosotros, realmente no importa, pero promovamos esto a nuestra ubicación de calor. Entonces voy a conseguir la ubicación de calor. Y voy a ponerla en el punto de impacto. Antes de que empecemos a disparar o cualquier cosa, sí necesitamos verificarte si estamos perdidos básicamente, si estamos en línea de visión, porque no puedes estar disparando a través de paredes. Me gusta, Bien, esta ubicación sombrero viene de nuestra cámara a nuestro ratón. Pero no sabe si nuestro jugador tiene un muro entre él y el ratón y el objeto. Entonces lo que vamos a hacer paréntesis, escogemos artículos a través de paredes de todos modos No hagamos eso por nuestro tiroteo. Entonces vamos a lanzar una línea trazada por canal. Y la ubicación estadística sería hocico. Encontremos la ubicación de la sala de hocico. Donde final estaría esta broca, corte fino, rotación. El objetivo es la ubicación. Los arranques son hocico, vector. Agreguemos este vector hacia adelante a nuestra fase de ubicación de barrio. Sí necesitamos darle un rango. Entonces multipliquemos esto. Integer, que este es un rango 2000. Después lo agregamos a la ubicación de nuestra junta. Fard en este rango y en el de porque básicamente esto es un punto Entonces un punto de distancia, donde en el mundo debe estar ir esta distancia. Tiene una dirección también, claro, porque es hacia adelante, y así es como mucho. Ne trace podría ser un poco fácil. Tal vez podamos, no importa. Dejémosle trazo de línea. Yo diría para que sea una esfera con un radio, así que no podemos disparar a través de brechas muy pequeñas, pero bien, tal vez la bala colisionará Si no choca, pero debemos ignorar a un actor. Entonces ve a, y el actor que estamos ignorando es nuestro jugador Obtengo nuestra referencia de jugador y la conecto aquí. Ahora bien, si hacemos calor o si no lo hacemos, si hacemos calor, significa Básicamente, no golpeamos significa que no golpeamos a un enemigo, así que deberíamos apagar al enemigo él. En realidad, no necesitamos apagarlo. Vuelve aquí. Entonces nuestro calor es nuestra ubicación underma. Ahora bien, si volvemos nuestro calor a nuestro nuevo resultado, que sería el nuevo punto de impacto, desde nuestro arma desde nuestro músculo hasta el enemigo. Si el actor tiene un objetivo tiene un actor de etiqueta, aquí está, como g E. Vamos a fijarlo en consecuencia porque podríamos estar pegando a otras cosas, no a los enemigos. Podríamos estar golpeando paredes. Y en realidad, nuestro canal de rastreo debería ser cámara, no visibilidad porque así es como hemos configurado las, las colisiones del laberinto Ahora, lo que queremos hacer es seleccionar elementos claros. Porque en este punto, en las anulaciones de tiro, no queremos hacer clic para estar interactuando con los elementos Queremos que esté disparando. Y lo que queda es establecer realmente nuestros vectores y compensaciones sobre, y necesitamos el nodo de retorno también porque este es otro punto al final de la función Repac esta copia pega esto necesitamos una glucaroación fina. Necesitamos un Podemos para recrearlos. Aquí aquí. Y para nuestra rotación, consigamos nuestra ubicación de actor, nuestra ubicación de juego de la ubicación de actores de am controllers. Y para nuestro objetivo, de cose necesitamos nuestra ubicación de calor. Ahora, para nuestro off set de am, necesitamos nuestro mcle vamos a buscar nuestro hocico Lo que necesitamos es estar apuntando hacia lo que calentamos. Oh. Esto no es un calor de traza de línea. Esta es una esfera de calor traza, lo que la calentamos primero. Oh, vamos a conseguir esto, A. Pero necesitamos crear un rumbo ahí. Para hacer eso, vamos a queso de nuevo, vamos a c rotación, que objetivo sería este, luego vector hacia adelante. Obtener vector adelante a partir de estas rotaciones, y vamos a conectar esto a nuestro offset. Y eso sería todo. Vamos a disparar las cosas. Y todavía no podemos filmar las cosas. La razón por la que no ha terminado nuestro evento click. No. En realidad, esa no es la razón. El motivo es porque no hemos terminado el cambio del mouse type de, cual seremos responsables si estamos golpeando a un enemigo o no también, pero terminemos con el evento click porque hemos dejado muy pocos nodos. Bueno, un nodo que debemos hacer es que movimiento cae cuando nuestro umbral es menor. Eso es pasar a que podamos patear y movernos. Verdadero sobre verdadero, falso y falso. Entonces esto realmente detendrá el pequeño bicho que vimos. Pero hice clic y empezó a moverse sin fin. Ahora, si suelto mi mouse, deja de moverse. Y cuando hago clic, antes cuando hice clic en mi mouse y lo solté, el personaje siguió moviéndose Pero terminemos con nuestro ataque. Esto fue un pequeño paréntesis. Consideremos esto como parentinos para hacer el ataque. Tenemos que hacer el ursor para cambiar de normal a cross ers, y al mismo tiempo, cambiar nuestro estado de carácter para apuntar básicamente A partir de nuestro evento tick, esto tiene que estar sucediendo constantemente. Al mover el ratón, necesitamos saber instantáneamente si algo debajo de nosotros. Yo enemigos debajo de nosotros. Vamos a hacer una sucursal. Vamos a traer nuestra función obtener ubicación bajo Cursor. Y vamos a conectarlo. Habitación. Entonces vamos a hacer una vez. Ambas o caídas porque pase lo que pase tiene que pasar una vez, y cada uno se restablecerá entre sí. Vamos a hacer una secuencia, una copia pégala ambas y lo primero que hacen es que restablecen otra. Ahora bien, ¿qué es lo siguiente que hacen? Cambian el mo si estamos golpeando a un enemigo a través, vamos a cruzar el suyo, que es el ratón que diseñamos Hemos anulado con nuestro ratón rojo. Es esto. Aquí tenemos un problema. Si estamos apuntando, no deberíamos estar cambiando el cursor, así que queremos seleccionar. Vamos a comprobar si nuestro estado jugador es igual, es igual en igual. Dos a. si es verdad, entonces vamos a mantener el punto de mira Si no lo es, vamos a volver al default. Si lo dejo así, hay un problema con la D real no competir. Qué está funcionando. Trabajando. ¿Todo bien? Creo que vamos a resolver este próximo. Y te voy a ver entonces, adiós. 109. Correcciones de plantilla posterior al proceso y detección de enemigos: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos y cinco procedimientos de Motor Real creación de RP de acción Dungeon Anteriormente, terminamos con nuestro personaje de arriba hacia abajo apuntando parte de nuestro Este no es un controlador de juego. Este es un personaje. Este es un controlador. Así que hemos terminado con nuestra parte de G ubicación bajo la función sor en nuestro controlador de juego. Pero si estamos apuntando a un enemigo, entonces estamos comprobando. En realidad estamos lanzando una línea de rastreo desde nuestra ubicación de impacto, que es el punto de impacto. Hacia bien hacia ese punto de impacto térmico desde nuestro músculo. Ahora bien, si esa línea traza calor algo, significa que podríamos tener un enemigo, podríamos haber golpeado una pared. No lo sabemos. Si no golpea nada, lo cual probablemente nunca sea el caso, entonces volvemos nuestro calor a nuestro calor normal y luego suceden las siguientes cosas. Pero si golpeamos algo, estamos comprobando si es enemigo o no. Así que eso establece la variable temporal enemiga de calor. Luego nos fuimos y despejamos la selección de elemento porque si tuviéramos un artículo en nuestro selecto, no deberíamos tenerlo porque nuestro clic interactuaría en lugar de disparar. Y luego continuamos con el establecimiento de las compensaciones de rotación y una de nuestro músculo a nuestro actor de calor Obtuvimos el vector hacia adelante de rotación azul fina para establecer el vector hacia adelante, y pasamos de nuestro jugador a nuestra ubicación de calor para encontrar la rotación a la que necesitamos estar enfrentando. Ahora, tuvimos algunos problemas. También terminamos nuestro evento click como un pequeño paréntesis para detener el movimiento cuando soltamos el click porque se movía constantemente Y luego procedimos a cambiar para cambiar el cursor del ratón en función de si estamos golpeando a un enemigo o no, con tener que hacer los eventos de uno en base a esta rama de aquí, y ellos se están reiniciando entre sí, y estamos configurando el cursor y ellos se están reiniciando entre sí, y estamos del ratón Ahora bien, lo que quería mostrar que no necesariamente sucede cada vez es que el mouse pueda restablecer su posición cuando estamos cambiando el widget. Puede tener algunos problemas. Pero no logramos demostrarlo porque había un problema con la focalización. Supongo que es un problema de colisión. Vamos a comprobarlo. Pero lo que deberíamos hacer como una solución alternativa, podría estar arreglado ahora mismo. Pero vamos a establecer ul position. Y la posición que vamos a poner al ratón es la posición del ratón. Entonces vamos a conseguir la posición s. Y portón. Redondea esta carroza. Lo hace automáticamente si intentas conectarlo a integer, y esto mantendrá nuestra posición básicamente en su lugar. Oh. Vamos a averiguar qué está pasando. ¿Por qué no lo pudimos? Vamos a recrear esta situación. Teníamos una puerta principal que no podíamos disparar. Hay una puerta del infierno. Vamos a traer el carácter de la baldosa, el personaje. Al lado del infierno bop. Aquí nos dispara. Voy a cerrar de nuevo el sonido. Y voy a recuperar Bien. Cuando selecciono una puerta, no pasa nada. Entonces veamos qué está pasando en nuestra focalización. Voy a conseguir el controlador btn, ir a desconectarlo y traerlo por aquí Este lo atracan. No estoy segura. Desacoplarlo, tal vez. Voy a ir a la función t ubicación bajo Cursor. Esta es la función que queremos estar comprobando. Y lo que nos importa es esta rama de aquí si puede encontrar un enemigo o no. Ahora, para mostrar lo que está pasando. Tenemos que dar click sobre esto aquí. Podría decir que no el error, pero podría ser también auto aquí. Ahora podemos ver la línea de errores. Así que vamos a traerlo por aquí. Si no apunto a nada, va correctamente. Pero si voy al blanco, sí, no pasa nada. No creo que sea porque tenemos una pequeña colisión. Creo que es porque dejé la colisión para ser explicada más adelante. Pero hemos hecho algunas explicaciones. Vamos a la cápsula. Lo que realmente tenemos que hacer es cambiar los ajustes preestablecidos de colisión a personalizados, y queremos bloquear la cámara Podemos superponernos con cualquier otra cosa, pero queremos estar bloqueando la cámara. El canal de colisión de cámara, que es irrelevante para lo que dice cámara Acabamos de decidir que esta respuesta de carrera va a estar bloqueando para nosotros y basaremos nuestros hits en. Realmente no importa esta es la razón por la que elegimos cámaras porque no importa lo que diga aquí. Importa cómo elegimos usar el sistema. Estos son solo los sets que Unreal ha establecido, pero es sabiamente usarlos tal y como se describen debido a la gran cantidad de mecánicas que golpean debido a la gran cantidad de al motor que funcionan con esta lógica Pero de nuevo, cuando estás creando tus propias cosas, puedes hacer la programación que quieras. Al menos funciona, y otras personas pueden leerlo. Vamos a presionar play. Creo que esto solucionará el problema. Un ratón debería ponerse rojo cuando encontremos que la puerta L no tiene en este mapa, así que voy a intentarlo de nuevo. Vamos a tener bastante aquí. Ciento de verdad, el ratón se pone rojo. Es como la puerta, y puedo disparar a leer. Ahí puedo abrir. Mi salud está en uno, y paso en una trampa. ¿Dónde está mi salud de MC? Comienza a jugar. Aquí estamos. La salud de Max, digamos que vuelve a las diez. Entonces no morimos instantáneamente. Si quieres ser realmente cruel, puedes morir instantáneamente. M jugadores pueden morir instantáneamente cuando pisan una trampa y tienen una salud. Ahora bien, lo último que deberíamos hacer por nuestro personaje sería ir a la configuración del proyecto. Eso es para tencel Aston profundidad stan sil pase, y en vez de habilitar tenerlo habilitado con sencil Lo siguiente que haremos es ir a nuestro nivel y traer un post procesamiento incorrecto. C. Volumen de proceso posterior, y queremos seleccionar para ser mundo de palabras. ¿Cuál era el nombre? Lo que estamos buscando es ser infinitos. Sí, desató esta extensión infinita. Lo siguiente que tenemos que hacer es ir a nuestros materiales de proceso. Encuéntralos. Vamos a agregar un material a esta matriz. Sería Sería o proceso al. M post proceso. Creo que hay una instancia. M pose proceso inst, eso sería todo. Y luego deberíamos ir a nuestro personaje o a nuestra costumbre de malla estática . Tenemos que habilitarlo. Entonces busquemos profundidad personalizada de renderizado. Sí, queremos esto, y vamos a establecer este 21. Ahora, teóricamente, podemos ver a nuestro jugador detrás de las paredes. Sí, aquí está. Y como funciona es que nuestro material, vamos solo por el material por un segundo. Lo sé. Esto me ha sido explicado. Esta es la instancia, esta. Entonces básicamente, acecha entre el color Básico, y el que queremos detrás del objetivo que aparezca, B es ese objetivo Y esto lo decide una máscara como esta de aquí, que esta es la parte cambiar el material en sí, y esto es sobre qué material muestra básicamente. Entonces porque tenemos el valor uno, donde sí tenemos muchos valores uno, pero de todos modos, creo que es este, si este fuera un valor diferente, creo, afectaría a qué profundidad snsiil dijimos, si he entendido esto correctamente Entonces básicamente, si eso fuera un dos en nuestro personaje, este debería ser dos. Y porque todo lo demás en el mundo es cero, veríamos a los dos, por ejemplo. O creo que simplemente funciona con el uno y cualquier otra cosa en el mundo. Sí, creo que ya está. Creo que todo en el mundo es cero. Entonces porque esto se convirtió en uno, podemos verlo detrás de las paredes. Y básicamente, eso es todo para nuestro personaje. Hemos terminado nuestro carácter. Entonces ahora Turn tiene un I y todas las cosas de depuración que necesitamos hacer. Probemos una cosa más. Bien, el elevador no funciona, pero ¿funciona el cofre? ¿No he probado eso? ¿Podemos recoger algún artículo? Tengo un este es el inventario. Déjame usar esto. ¿ Hay un cofre aquí? No. ¿Dónde está el cofre? Aquí está, hago clic en él. Ahora, no puedo. Veamos por qué por un segundo. A lo mejor si es algo sencillo, ya podemos depurarlo fácilmente. Controlador, estamos en nuestra función. ¿Por qué vuelve a ser una colisión? Juguemos. T. Vamos a mover el acter directamente al pecho. Y no me está imaginando, supongo que no estás colisionando Creo que es un problema de colisión otra vez. Vamos a nuestro pecho. Impresiones, ps pecho grande. No tenemos colisión. Simplemente tenemos este cofre por aquí y lo hemos puesto en la parte inferior del superior. Nuestra masa va a golpear a la de arriba, no va a golpear a la inferior. Entonces tal vez esto lo he puesto al fondo. Voy a copiar esto. Como puedes ver, incluso puedes copiar grupos enteros basados en ellos. Y trabajo de trabajo, copia porque consiguió este grupo pz solamente Necesito copiar toda la colisión tal vez. Propiedades, como propiedades. Funciona no, no importa. Vamos a hacer que estas colisiones sean ciertas. Así que solo queremos bloquear todo para bloquear la combinación de visibilidad y colisión pom, como alguna colisión. Si es no, No va a dejarlo a ninguna colisión, y no va a estar generando eventos de superposición. Creo que esto lo arregla. Si no es así, sólo vamos a hacerlo en las colisiones. Personaje al lado de la caja, lo cual es muy agradable con música más cercana. Aquí. O no lo hace. Ni siquiera en el fondo aquí, estoy dando click en el fondo, pero realmente no hace nada. Entonces, copiemos esta configuración de colisión y hagamos que estemos bloqueando la cámara. Estás bloqueando O, no funciona. Hecho En ambos casos, es capaz. Donde debería estar funcionando. Vuelvo a verificar desde aquí. Para volver aquí. Et lleva al personaje al pecho. Nuevamente, no está funcionando. Pero ahora tenemos que probar la línea de traza también. Tenemos que depurar eso. Entonces vamos a seleccionar. Digamos para un fotograma. A ver si estamos pegando algo con la caja. Expulso en mi caja acor. Es una h. La idea me moví al personaje, me moví de azulejo. Entonces sí, en realidad estamos golpeando la caja aquí. Compruebo. Aquí estamos golpeando la caja. Entonces viene la pregunta, qué pedimos para tener Actor Gran pecho tiene tirón I ¿ Está corriendo hasta aquí, veamos I. Empecemos a la caja, ¿dónde está la caja? Bien. No, no maneja esta sucursal en absoluto. Yo hice un poco de pruebas, y por alguna razón, si lo conecto opuesto, conecto primero luego cero abajo y luego uno funciona, lo cual no tiene sentido. Lo estoy adivinando del objeto que somos cada uno que está aquí estamos probando No estoy muy seguro de por qué no funciona. Manera normal, pero sí, esto lo hizo funcionar. Entonces entonces cero debería bajar y luego uno f esta parte izquierda. Supongo que porque éste sale en realidad. Piénsalo. Este sale, y éste no. Entonces básicamente para desconectarlo, podríamos crear una cadena de eventos, pero creo que esto está bien Ya que está funcionando. Creo que esta es la razón por la que pienso porque ésta sale y ésta alguna manera no se asegura de que esto corra antes de esta salida. Creo que esa debe ser la lógica. En fin, vamos a jugar. En realidad, sí jugué y probé. Tenemos algunos otros problemas que arreglaremos en la lección, y luego comenzaremos a hacer la IA. El personaje arroja paredes, bonito, donde esta la caja. I. No puedo ver el tooltip, y vamos a comprobar por qué Pero si hago clic, sí se abre y sí fila los elementos todos en un solo lugar. Vamos a calcular esto en la siguiente. Adiós. 110. Arreglos de extensión de artículos y widget de pecho: Hola, y bienvenidos al Taller de Diseño de Juegos bajo el motor cinco, Curso de creación de RPG de acción Procesal Dungeon Anteriormente, terminamos con nuestro personaje y encontramos algunos errores durante el juego. Ahora, comencemos a arreglar estos errores. Entonces, antes que nada, vayamos al ítem BP. Y en nuestro IOP, cuando estamos buscando palabras drop, estamos probando para la visibilidad. Cámara B. Ahora, probemos nuestras colisiones. Ahora, nuestro artículo colisión sería Atom, bloqueando la visibilidad, bloqueando la cámara y la dinámica de guerra, y estar cansado solo sin física Ahora, vayamos a nuestra esfera, y nuevamente, a nuestra configuración o configuración de colisión. Entonces esto debería ser simplemente ignorando todo, sin física y superponiéndose con el personaje porque esta es nuestra gama Vamos a nuestro widget, que sho no tienen colisión R Eso es tener UI, pero cambiemos esto sin colisiones. Realmente no importa ya que lo traemos a la pantalla. No genera eventos de superposición. Todo bien. Compilar. Y vamos a nuestro pecho grande. Arreglemos esto primero. Seleccionemos nuestras dos mallas y sean digamos generar eventos de física, si algo realmente sabe Vamos a dejarlo puesto. Vayamos a colisiones habilitadas Queremos que ambos sean solo sin física, ambos estáticos, y digamos que ambos estén bloqueando a todos. Ahora, volvamos a nuestro artículo y también aumentemos el centenar. Entonces le damos un poco de rango. Vamos a anidar. Por la caja. Ábrela. Más cerca. La posición en la pantalla podría ser, pero ni siquiera podemos ver los artículos. ¿Están todos aquí? Todavía están todos aquí. Esto no lo solucionó, podría ser que cuando estamos moviendo los elementos en nuestra línea de tiempo por aquí, y el ev graficando los artículos Nosotros nos movemos con teletransporte. No. Eso no es inventario completo. No quieres este en el artículo animado. O por aquí. Sí, el teletransporte no se hace clic aquí. Podría ser eso porque si hace una, toma en consideración colisión. Y la caja grande aquí, Como si vi mover los artículos. Parece que se mueven, pero al final, vuelven a o Así que vayamos a nuestra línea de tiempo, pero volvemos a animar el ítem. Así que vayamos a nuestra línea de tiempo, pero volvemos a animar el ítem Y al final, vamos a establecer la ubicación del actor. No actualizar, terminar al destino final, que obtuve ubicación. A ver si esto funciona. Podría haber algo que lo restablece. Esto está a nuestro lado. Sí, funcionó. Entonces se quedan ahí. Bonito. Bien. El texto es un poco grande. Vamos a hacer clic en. Uno de ellos. No puedo recoger oro. No, puedo. Pero no se está destruyendo. Puedo recoger oro sin fin. Entonces, la primera vez que lo recojo, reproduce la animación del inventario completo. Interesante. Ahora, escojamos una poción. Yo sí tengo poción, vamos a usarla. ¿Por qué seguir moviéndose? Poción de rabia. Lo recogí, se queda ahí. Entonces parece que no se están destruyendo a sí mismos. Arreglemos el widget por un segundo. Eliminemos todas estas líneas de traza porque son agradables de ver. Entonces nuestras líneas de traza están en nuestro bucle wi. Y en lente, Dave. Veamos por qué no están siendo destruidos. Cuando los escojo, ese es el modo de juego. Inventario de tazas cuando cae y es pin va aquí. Y no regresar recogido al final. Porque no estamos devolviendo ningún pico en las otras opciones cuando es seleccionable y estamos llenos atascados o el inventario está lleno Estamos regresando que no podemos recogerlo, pero no somos que podemos recogerlo cuando lo recogemos. Entonces esto debería arreglar eso vamos a arreglar el widget por un segundo. Vayamos a I y vayamos al artículo viejo. Cambiemos el tamaño a 21. Negrita. Todo esto audaz. Ahí cualquier otro Vamos a usar dro it ss mejor y distribuir por defecto. Ahora, deberían verse mejor. Esa línea que ves aquí, es porque no tengo la pantalla de carga. En serio, no creo que sea eso. Pero agreguemos la pantalla de carga, así que abramos la pantalla de carga. También. Lo que podría ser. Oh, es visible. Tienes la pantalla de carga. Sí, lo hacemos. Entonces vamos a comprobar cuáles son las líneas aquí. Vamos a buscar los artículos. O es el cofre afuera de aquí. Picando en el pecho, los artículos caen. Se puede ver que vuelven. Pero por ahora, está bien. Puedo recogerlos, me destruyen. ¿Había oro? Tenemos un área secreta. Eso lo revisaste. Por qué no. Una manera. Copiemos este est a un pequeño cofre también. Vayamos al cofre pequeño. Ambos. Voy a ir uno por uno. Yo sólo voy a copiar colisión, esto y pegar. Yo trabajo. O va a funcionar. Prisa sólo más allá de esto. Esta debería ser la categoría de este grupo, pero no lo hace. En fin, uno por uno. Debemos ignorar todo, bloquear la cámara, y la visibilidad, bloquear p, y corregir. Siempre Jack consulta solamente, ambos consultan encendido, ¿verdad? Eso sería. Vamos a probar los puntos. Están siendo destruidos. Creo que van a estar siendo destruidos. ¿Cuál es esa línea? Es muy molesto. Una rabia rabia furia una moneda. Necesito que se me caiga la moneda. Sostener. Aquí estamos. ¿Correcto? Yo claro en oro. Yo lo conseguí. Genial. Consiga las cosas, úselas. Consigue el resto. Ya tengo una llave. Por eso puedo conseguir la llave. Esto aparece un poco rápido, ¿no? Yo sí lo quiero un poco más lento. Puedo ver el widget apareciendo, pero es muy rápido Eso está bien. Segunda vez , corre un poco rápido. Algo I. Un poco rápido. Entonces, antes que nada, el cofre no tienen el widget que muestra cuando los estoy flotando. Así que escojamos eso también. Lo que falta es el código para eso. Así que vas a copiar y pegar el código del elemento BP es start hover y event and hover Vamos a copiar esto. Tiene esta función. Vamos a copiar y pegar la función primero. Así que la visibilidad del widget, vamos al cofre, vamos a las funciones, pégalo. Todas las variables existen, todo es bueno. Operaciones. Tenemos que cerrarlo. Ve al cofre grande, pégalo también aquí, todas las variables son buenas, buenas para ir. Vayamos a nuestro artículo. Copia esto. En gráfico de ventilación, pegarlo aquí. O verse bien. También en pecho, incluso gráfico, vamos a arreglarlo aquí, ahora deberíamos tener gs por encima del cofre. Algo cuando la cámara cambia, creo que cuando sus cañadas crean esto con el pecho. Entonces o crea algunos escenarios bastante impresionantes. Así que aquí está el widget. Y estoy dando click en el widget y no pasa nada. Si hago clic en el pecho, pasa algo. Oshión. Wold Oh. Emisión. El click así. Lo entiendo. A veces significa un segundo clic. Yo supongo que tiene que ver con el enfoque. Deberías arreglarlo también. Vamos a parar. El montón de errores. Vamos a llenarlos. Qué visibilidad visibilidad es la notabilidad, qué visibilidad. Se. Porque cuando recojo el ítem y el widget desaparece, entonces necesitamos un válido aquí. Cuando tenemos que recogerlo, se está destruyendo, así que el widget no existe. Trata de esconderse. No hay problema. Vamos aquí el siguiente. Propiedad Widgets, no válida. Yo supongo que este es el, es lo mismo. Estoy adivinando que para la misma visibilidad, visibilidad del widget, colisión, el widget Entonces esto estaba golpeando porque cuando estábamos recogiendo un artículo, se estaba destruyendo, y estábamos solicitando hacer todo esto Entonces, creo que este es un buen punto de parada. Vamos a seguir golpeando al siguiente. Adiós. 111. Correcciones de widgets de elementos y código de ascensor: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos Motor real cinco Curso de creación Arbsic de acción de Mazmorra Procesal Anteriormente, depurábamos algunas cosas en el juego, y ahora vamos a seguir con eso Ahora, seleccionemos nuestra cámara. Y lo que debemos cambiar es la restricción la relación de aspecto porque esta pequeña línea verde que aparece aquí es porque está tratando de constreñir la relación de aspecto y el post proceso con el stand sil realmente no va con él Y entonces sí, solo vamos a desactivar esto y cambiar el campo de visión a 55, que es nuestra cámara para el jugador, 55 campo de visión. Entonces ahora Si jugamos, ya no vemos esas líneas por aquí para constreñir la aspección, hacerla como una cinematográfica Pop, y vamos a esconder esta línea de rastro de la casa. Vamos a obtener la ubicación debajo del cursor dentro del controlador optan y configurarlo en el error Y me di cuenta de que hay un problema. Cuando estoy pinchando en los artículos y no me detengo, y la caja es la caja. Digamos que me mudo y el oficial quiero un artículo. No, me detuve. P. El problema que tenemos es que la primera vez que hacemos clic en el widget, no sucede, y la segunda vez que se ejecuta el scroll, corre más rápido. Entonces, vamos a arreglarlo. En primer lugar, el tema con el cofre, no en realidad sobre, el enfoque sobre que el cofre no tiene un código encuadernado para abrir cuando estamos dando clic en él El ítem sí, como si vamos al ítem, podemos ver que tenemos binded interactúan en widgets Botón. Vamos a copiar esto. Vamos a nuestro pecho e interactuemos base este COVID. Haz de esto un elenco puro. I un botón personalizado w. Bind Zoo . Conectado aquí. Copiar más allá de esto. En realidad, tenemos que ir a empezar a jugar primero. Llamemos al botón. Ahora tenemos esto copiado por aquí. Y vamos al pecho. Base este año, convertiremos a puro reparto. Conectemos este año y en comenzar a jugar, llamemos al bind. Bindon. Ahora, arreglemos el problema de enfoque. Nosotros hacemos esto, vamos a comenzar a jugar del mando. ¿Dónde está eso? Justo en el mapa en contexto, comience a jugar. Entonces, lo que queremos hacer es obtener autorreferencia a uno mismo, por lo que el controlador, y la entrada de Ode y la interfaz de usuario. Ambos se enfocan en cualquier momento. Lo único que tenemos que hacer es deshacer clic en SO durante la captura, así que cuando estamos haciendo clic en una interfaz de usuario, el así no desaparece Oh, la pila de Theven. Vamos a probar esto. No hay salas de pruebas. Sabueso Por último tiene un final para que se caliente, vaya a ser música. Oye, vamos a traer esto aquí. Simplemente no lo vi. Funcionó al instante. Ahora, lo que queremos es que esto funcione al instante, así que haga clic. No, no funcionó al instante. Funciona ahora al instante, pero no funcionó la primera vez. ¿Por qué no pueden tener este resfriado porque estoy pinchando en la porción de furia? Tengo el frío. Ahora, el problema es con los artículos en sí, no se les está haciendo clic al instante Vamos a averiguar por qué. Hagámoslo una prueba más. A lo mejor hice algo mal. Yo no lo creo. Al hacer clic en el pecho, se abre. No tengo una poción de tiempo, quedemos la poción del tiempo. Estoy pinchando, y desaparece y no pasa nada. Aquí. Dispara. La segunda vez que funciona, aunque tenga Alt o simplemente tratando de darle clic normal, en el ítem y luego ir al widget, sigue funcionando. No consigue la primera vez. Quiero probar la primera vez pasando del ítem al widget para que las cosas sean más claras para mí. Pero sí pienso que algo tiene que ver con nuestro código y ese es el cofre. Oye, vamos a abrir desde el ítem hasta el widget. Más rápido. La primera vez que le hago clic así, funciona. Yo le doy click así, desaparece. Entonces cuando presiono, hago clic. La primera vez que desaparece. Debe haber algún tipo de operaciones de orden erróneas. Vamos a checar. 112. Ajustes de widgets del artículo y funcionalidad del ascensor: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, motor real cinco Procesal Dungeon action ps curso de creación Haz algunas pruebas vigorosas. Como que me doy cuenta de lo que está pasando. Es bastante obvio. Pero cuando seleccionamos, cuando estamos configurando la visibilidad, y tenemos enfoque, no estamos configurando qué elemento enfocar. Así que vamos a obtener el controlador Vamos a obtener de nuestro lote de widgets, qué componente nuestros widgets, vamos a obtener widget. Recuerda, este es un componente. Este es el objeto entidad real, y vamos a introducir Y, y vamos a poner el foco en esto. Ahora bien, otra cosa que noté es porque la línea de tiempo no se está reproduciendo correctamente cuando ya tenemos un artículo en nuestro inventario. Porque hemos conectado esta obra. Necesita estar conectado en juego desde el principio porque cuando estamos recogiendo un artículo, no puede caber en nuestro inventario, publicar a caídas, o por alguna razón, no podemos recogerlo de todos modos Comienza desde el juego, y cuando ha terminado la primera vez, nunca vuelve a jugar porque está terminado. Pero sí necesitamos esta jugada desde el principio aquí. Ahora, una cosa más que necesitamos es ir a nuestro modo de juego, y ahora, creo que lo configuramos. Creo que configuramos esto antes, establecemos el modo de entrada juego y UI, y comenzamos a jugar y no a ocultar el cursor. Tampoco y cursor en el ítem. ¿Hicieron clic en eso? Pe no lo hice. Entonces tampoco cursor. Cuando estamos fijando la visibilidad de la peluca. El Eso sería, creo, vamos a jugar. ¿Ahí está el cofre? Ileal no se cayó, bien. Tiging tipos, siendo atacado. Oh, ¿qué está pasando aquí? ¿Esto es visible desde el principio? Esto es por, porque estoy apuntando al pecho. Bien. Sí, porque se está poniendo cuando estoy conteniendo esto. Bien. Sí. Entonces abramos el pecho. G la clave. Entonces, funciona desde el principio ahora. Esto, estoy recibiendo este tiroteo y estoy recibiendo los artículos otra vez, disparando, y funciona. Bonito. Jugando. Ahora, lo siguiente que debemos verificar es en el widget de jugabilidad. Cuando estamos jugando la animación de recoger un artículo. Así que vamos con tu jugabilidad, L et's encuentra la animación, pestaña de animación, selección de elementos, encuentra referencias. Bien, recoge el pincel de ajuste del tamaño del artículo, adelante. Vamos a restaurar el estado porque cada vez debería jugar desde el principio. Esto es necesario restaurar el estado. Vamos a presionar, esto escogerá stat. Et's rápidamente. Es el personaje, lo es. El personaje de aquí, tocando algunas trampas. Ahora tenemos que escoger artículos en una fila. Escojamos esto, y escojamos esto. Y juega el mío. Aquí hay un personaje que sigue movimiento. ¿Cuándo sucede esto? Cuando no puedo llegar a un destino porque sigue intentándolo. ¿Verdad? Creo que vamos a dejar esto como está, realmente no importa. Lo que vamos a tener que hacer es arreglar el elevador. Porque ahora mismo el elevador simplemente no hace estallar esa plataforma, lo hace. Nosotros sí tenemos una llave. Vayamos a nuestro elevador. Rápidamente ve a aquí. Lugar. Comí. ¿Qué pasa después? No. Bien. Creo que esto es bastante sencillo. Vamos al elevador y no he bajado al Pence. Yo llamo a Pence el fin de t evento, que el elevador alcanza n. cerca del elevador Y sh. Aplastar. Oh, espero que no te haya aplastado, pero hay una razón para este choque. Cuando agregué la cerca hacia abajo, necesita un do una vez después de esta rama, lo contrario, sigue reproduciendo la animación una y otra vez. Sigue corriendo esto una y otra vez muy rápido por cuadro, y estalla esto. Y otra cosa que noté es que cuando estamos creando un laberinto, estamos engendrando al personaje Y estamos manteniendo la referencia así. Pero cuando estamos creando un nuevo laberinto, no tenemos esta referencia. Entonces, lo que vamos a hacer es ir a la plaent de inicio, ¿verdad? Y cuando sea continuar, vamos a obtener de nuestros modos de juego, tenemos una referencia sobre un modo de juego aquí. Ahora, no lo hacemos. Pero sí tenemos en el controlador, creo, un controlador ya no está aquí, aquí está. En la pantalla. Entonces sí tenemos una referencia de jugador. Sabemos que para que el controlador del juego tenga esta referencia de jugador, ya se ha llenado cuando vamos al nivel dos, el generador bactor maze, ¿dónde está Aquí está, y vamos a conseguir el controlador del reproductor. Como de arriba hacia abajo. Convertir mascota. Vamos a conseguir pagador. Y vamos a establecer nuestra referencia de juego aquí a ésta. Ve a jugar. Todo debe estar en orden. El elevador está cerrado. Ya tenemos una llave. Después aplaste de nuevo. Bien, después de un poco de búsqueda, me di cuenta de que hay dos cosas mal. primer lugar, en el laberinto, cuando estamos creando el laberinto, estamos engendrando al jugador y estamos sosteniendo la referencia Pero cuando estamos replantando un laberinto, no tenemos forma de pasar esa referencia de un No volvemos a poner esta referencia Entonces el nuevo laberinto no sabe cuál es el jugador. Entonces para arreglar esto, vamos a venir aquí en un principio. Comienza a jugar. Cuando decimos continuar, pero cuando continúas el laberinto, vamos a establecer la referencia del jugador, vamos a conseguir nuestro controlador de jugador. Vamos a derribar. Vamos a convertirlo en un elenco puro. Voy a conectarme. En realidad, vamos a conseguir referencia de juego. Y vamos a conectar esta referencia de jugador con nuestro jugador. Entonces ahora, el nuevo laberinto sabe de un jugador. Ahora, lo siguiente que tiene un problema es, por aquí por aquí. Interesante. Al comenzar evento de superposición, cuando estamos desove el nuevo laberinto Aquí cometí un error. Cuando estoy pidiendo el doble del tamaño del laberinto, cuántos azulejos puede caber básicamente. Estoy preguntando con el más uno. Entonces yo si agrego más uno, puede esto encajar, y luego sigo adelante y no agrego más uno porque se alimenta. Entonces debería estar preguntando si el laberinto actual, y lo que me insinuó a esto es que las dos veces que tuve un choque, fue porque el laberinto tuvimos este error aquí arriba, lo hemos creado Es el único código de error que creamos en realidad. Increíble que esto por accidente se calentara. Así que tenemos este laberinto no se puede construir más. Y cuando los dos cronometramos que se estrelló, tiene este tema Entonces sí, esa era la cosa. Estaba construyendo más de lo que podía manejar. No puedo manejar más, y algunas de nuestras reglas aquí podrían haber dicho que no podemos construir algo, algún látigo podría haberse congelado posiblemente Ahora, vamos a probar una última vez. Y el elevador. Todavía podemos entrar aquí, pero creo que está bien, si no escapamos por error al principio cuando estamos entrando. Eso estaría bien. Entonces, luz muy brillante. Cambia la configuración de la cámara. Voy al segundo laberinto, me voy a dar la llave. Agreguemos un poco más de tiempo. Veamos que esta cosa interminable sucede. Ese es el siguiente laberinto. O. Cuando eyecto, el laberinto de abajo quedó destruido Algo se quedó. El cofre grande no se destruye. Probablemente cuando se agrega, esto debería estar aquí. Debería haber un cofre. Aquí hay un cofre. Los cofres grandes necesitan ser agregados a la lista de actores destructores, y tenemos el tercer laberinto y el conseguir y gesing cada vez más grande. Vamos a mover O lado. Aquí. La clave. Un tiempo también en su momento. ¿Qué es el elevador? Aquí. Posiblemente la siguiente fase debería ser mayor que esta. Esto en realidad más pequeño. ¿Estamos reduciendo de tamaño? ¿Estamos reduciendo de tamaño? ¿O es más grande? Yo solo esta tiene tres habitaciones. Tenemos dos. Vamos a conseguir la patada aquí. Más grande no lo sé. Y se ve igual. Uno. Es el look. La clave del actor aquí. Tres habitaciones. ¿Cuánto agregamos cada vez? Creo que sí agregamos tres bloques cada vez. Dos. No, va a ser aleatorio, ¿no? Uno, dos, tres, cuatro, cinco o seis incluso ocho incluso 12 13, 14, en 21. Dos, 22 y cuadras. Comprobaremos el siguiente. Hecho eso desde el principio, cuente los bloques. Con la llave. En cualquier momento. Consigamos algo de tiempo. Todo bien. Yo el jugador se ve más grande ahora, uno, dos, tres, cuatro, cinco, 1012, 14 15. 2021, 23, 24, 26, 27, 29, y ocho e, f. Oh, estamos agregando cajas. Los estamos agregando lentamente. Podemos aumentarlo si queremos, como nivel generador más tres en cada nivel, y se hace cada vez más grande. Ahora, nuestra parte principal está lista. Lo único que necesitamos agregar es nuestra IA y escoge un poco nuestros colores y luces. Oh, esto va a ser e para éste. Te voy a ver en la siguiente. Adiós. 113. Importación de personajes morigesh y sistema de salud de IA: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos y Rail Engine five Procesal Dungeon curso de creación de Peg accional Anteriormente, terminamos con nuestros bichos. En realidad, no terminamos con nuestros bichos. Estoy bastante seguro de que encontraremos más. Pero a medida que los encontremos, los arreglaremos. Ahora, es el momento de iniciar nuestra IA, lo que significa que tenemos que explicar también algunas cosas. Pero comencemos por crear una carpeta dentro de sus planos. Toda esta IA. Vamos a entrar en esta carpeta. Y también, vamos a descargarnos. Uh No desde aquí. Nuestro personaje de Paragon Morgue Mies, Marie, no estoy segura de cómo se deletrea, cómo se pronuncia, que será en No lo tienes, puedes encontrarlo en el marketplace de forma gratuita, como de la misma manera que mostramos o nuestro otro personaje de Paragon Revenant Oh. Vamos a agregarlo al proyecto. Está aquí. Esto llevará un tiempo. Oh. Ahora que tenemos nuestro personaje Paragon. Volvamos a nuestro comprobemos que lo tenemos. Caracteres hipotecarios, Audio. Un héroe. Derecha. Sí. Todo parece estar bien. Acabo de revisar las animaciones el resto de las carpetas, pero, vamos a nuestra carpeta A, que no existe. Voy a crearlo de nuevo. De veras pensé que sí. De todas formas. En esta carpeta, vayamos a nuestro personaje Morgs. Personajes, va Mig. Duplicemos a este jugador Hipotecario. Vamos a arrastrarlo y soltarlo en la carpeta AI. Oh, antes que nada, tenemos nuestro carácter. La IA necesita un personaje. Lo segundo que necesita una IA es un controlador, que es lo mismo que el jugador. Pero vamos a hacer clic en Controlador de IA. Ahí podemos ir Lue print y AI. Y vamos a seleccionar AI Controller. Vamos a nombrar ya veo porque podríamos tener diferentes controladores para diferentes enemigos. Y cambiemos el nombre del personaje a I uno. En definitiva, ¿qué es el controlador de IA? Está diseñado para gobernar el comportamiento de la IA ya que es para nuestro personaje decidimos las entradas o nuestro personaje, decidimos lo que el jugador lo presionamos, en realidad, y el control traduce eso al personaje o al yo o a lo que sea. Pero lo mismo hace el controlador para la IA. Coverna el comportamiento. Ahora, lo siguiente que necesitamos es un comportamiento de IA t. Llamemos a esto I AIP uno Y, ¿qué es un árbol de comportamiento de IA de árbol de decisiones? Bueno, es una estructura de toma de decisiones. Podemos llamarlo algo así. Es un árbol, organizado en t con varios nodos que determinan lo que debe hacer la IA, base en las reglas. Y los árboles pueden incluir otros árboles. Pueden decidir ir y ejecutar otros árboles, y ser una manera honesta hacer tareas complejas y con una manera fácil de depurarlas. Ahora, el árbol del comportamiento viene con algo más que se llama pizarra, que se encarga de sostener los valores Es una plantilla de valores para el árbol de comportamiento. Almacena los datos, y es eficiente para comunicarse con el árbol y los datos que tenemos almacenados. Pero para ser honestos, también, es un poco cuesta arriba para nuestra escala de IA, pero la vamos a usar solo para mostrar cómo la estamos usando Está más diseñado para acciones de IA muy complejas. Bueno, llamemos a esto. M uno. Y lo siguiente que vamos a necesitar es un servicio y algunas tareas. ¿Qué es un servicio? Es un tipo especial de nodo decorador en el comportamiento tres realizan tareas a intervalos regulares como hacer esta cantidad de tiempo Por ejemplo, usaremos hos para obtener algunos atributos de nuestro personaje y pasarlos a la sala negra. Y tarea son las cosas que son fundamentales para el comportamiento de los árboles. Representan cada acción o conjunto de acciones que la IA puede realizar. Por ejemplo, vamos a estar usando un prescriptado por ejemplo t, que se mueve a la ubicación, pero podemos hacer una tarea Podríamos hacer una tarea que sería mucho más complicada mudarnos a la ubicación, como podría tener muchas otras reglas. Pero vamos a profundizar en tareas y servicios cuando los estemos creando. Porque por ahora, deberíamos entrar en nuestro carácter de IA. Y hazlo compilar. Para ello, eso va a ser algo muy sencillo como seleccionar todo y eliminarlo. También eliminaremos el recuento de cuentas, el está atacando, el ataque guardado, el aspecto base, el giro base, y por supuesto, vamos a eliminar la cámara polo y el boom de la cámara. Pero vamos a añadir algunas cosas más adelante. Ahora bien, podríamos haber usado la plantilla de tercera persona para hacer eso, pero sería duplicar y eliminar muchas cosas llevaría más tiempo Oh, Archivar y guardar. Haz esto todo. Vamos a cerrar todo ahora mismo. Tener las cosas de IA. Y también, abramos el controlador de IA enemigo para incluso graficar. Lo único que vamos a necesitar aquí es el comportamiento t. El comportamiento t sería nuestro t. Saborea. Ahora bien, este es el único código que nuestro controlador necesita alrededor del árbol. Voy a cerrar esto. Vamos a Abrimos el árbol de IA. Pizarra. Ahora, podemos acceder a la pizarra el árbol de IA estas dos copas por aquí En realidad no necesitamos la pizarra abierta no abre el árbol de IA Volvamos a nuestro enemigo de IA y vamos a crear algo sencillo. Digamos que cada vez que tomamos daños o cualquier daño. Vamos a reducir nuestra salud. Oh, vamos a crear dos variables. Uno sería b serían flotadores, y el uno sería la salud inherente Y el siguiente sería M Health. Oh, vamos a conseguir nuestra C y salud. Vamos a restar. El daño. Vamos a aglutinar el flotador a cero y Mx salud. Y en realidad, vamos a compilar y establecer algunos valores predeterminados. Digamos que MC health sería ¿Cuántos calores debería obtener la IA Digamos tres. Oh, pongamos tres. Salud. Vamos a establecer el valor de caída de la corriente t en tres. O podemos ir y comenzar a jugar y establecer la salud máxima a la salud actual. Oh, vamos a comprobar si esto es menor o igual a cero, y vamos a ramificar. No va a tocar un sonido. D, que sería algo Este. Los plátanos atacan a la copa Guo Entonces es un ataque femenino, no lo sé. Suena como un acierto. Y luego vamos a crear dos eventos para clientes. Replicar esto, a uno se le llamará muerte. Y al otro se le llamará personaje aturdido después de que nos golpeen y aún tenga salud, nos quedaremos atónitos o aturdidos Y si no, va a morir de muerte. Ahora tenemos un sistema o una IA para dañarse y/o quedar aturdidos Creo que esto es suficiente para éste. Vamos a continuar con el siguiente. Adiós. 114. Retargeting de animaciones de Revenant a Morigesh: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, Y Real Engine five Procesal Dungeon action RPG curso de creación Anteriormente, creamos nuestro plano enemigo NI. Creamos nuestro controlador enemigo de IA, nuestro árbol de comportamiento y nuestra pizarra Entonces seguimos adelante y creamos algún código. De hecho borramos primero el código que ya estaba aquí y algunos componentes. Y luego seguimos adelante y creamos un sistema de daños para reducir nuestra salud cada vez que nos dañamos. Y si es cero, nuestra salud, vamos a morir o no vamos a morir, y vamos a tocar un sonido y quedarnos atónitos Ahora, seguimos con nuestra mecánica. Necesitamos de nuevo una máquina de estado. Entonces vamos a ir a nuestra carpeta de IA, vamos a escribir click, vamos a ir a blueprints y crear una enumeración de enumeradores Y lo vamos a llamar E AI uno estados. Entrémoslo y agreguemos algunos rebeldes. Digamos que nuestros estados son patrulleros. Si esa es la ortografía correcta, pero no importa, Ataque. Digamos. Tengamos también una posición. Demandar la ortografía para atacar. Muchas palabras en esta. Entonces ahora que tenemos los estados. Volvamos a nuestra IA y los subamos. Vamos a fechar la variable, vamos a llamarla IA. Va a ser del tipo E ocho, me dice uno. Ahora, terminemos con nuestro evento stan porque va a ser fácil. Vamos a preguntar si nuestro estado actual es igual a stat y si lo es, no vamos a hacer nada. Si no lo es, vamos a poner en marcha nuestro estado y vamos a jugar a Amontage Ahora, vamos a crear Amontage. Ve a buscar nuestra animación, mote. Hipoteca y voy a buscar t. estoy en realidad necesitamos crear montaje a partir de ella, ocho montaje de animación, y voy a entrar en el montaje y dejar que el estado a la parte superior del cuerpo, la ranura a la parte superior del cuerpo ranura a la parte superior del Porque en realidad no necesitamos hacer mucho en este plano de animación porque está configurado para este personaje. Esto es lo incorrecto. Ahora, cuando abra el equivocado, podemos cambiarlo de aquí, los tres puntos de aquí, ir al que queramos. Ahora bien, esto ya está usando lo que queremos en gramo, todo. Y en el gráfico de eventos, está todo configurado para el jugador Morigs No vamos a estar usando los ataques ni nada, pero tampoco vamos a tener errores. No, volvamos, voy a borrar esto, cerrar esto. Voy a cerrar el montaje también. Para el montaje, vamos a elegir el frente térmico. Los dos. Voy a arrastrar y soltar esto aquí. No estoy seguro de por qué hay dos. El otro debe ser el modelo uno. De todas formas. Entonces, este es el montaje de juego El montage mooch one. Y necesitamos conectar la malla esquelética, y voy a traer de nuevo Montage Y ahora, ¿por qué necesitamos el más avanzado? Porque al completo, queremos que esto se complete, que sean estado volver a atacar. Porque pase lo que pase, aunque la IA no se dé cuenta de que hay un jugador cerca de ella, si un jugador lo dispara, cambiará para ir y atacar al jugador Dispara hacia el jugador básicamente. Ahora, vamos a completar nuestra muerte. En primer lugar, pase lo que pase tiene que pasar una vez. Hacer una vez. Por si acaso vuelve a dañarse y esto se dispara, necesitamos una variable para saber que estamos muertos. Tenemos a b. Llamemos a esto muerte. Vamos a ponerla en verdad. Lo siguiente que vamos a hacer es tocar un sonido. Sí. Para el sonido, necesitamos gritar. Mujer grita, aquí está. Es un buen sonido de muerte. Voy a una colisión de actor en realidad actocs para desactivar Actor habilita colisión para desactivar polilla. En fin, pongamos actor. Pi deshabilitado. Consigamos nuestro movimiento de personaje porque es lo mismo que el aire. Pongamos la caminata a cero. En realidad, pongamos la velocidad a cero también. La razón por la que estamos haciendo esto, dejando que velocidad y max caminen a cero es por si acaso nuestro gráfico de animación, que se ve afectado por estas variables, obtenga algún comando equivocado en el último segundo, tal vez algo. Entonces cuando morimos, ponemos esto a cero, y nada más cambiamos la animación. Ahora lo siguiente que debemos hacer es tocar un montaje. Bueno, encontremos la muerte. Esta animación un poco. Si tuviéramos una partícula o algo así y ella desaparecería, estaría bien. Pero hagamos algo más a la vez. Creo que un bar, ¿cuál es su nombre? ¿Renacido? Como una mejor muerte. En realidad lo usamos aquí. Entonces lo que hacemos es ir a nuestro navegador de contenido. Muerte esta es la secuencia de animación de muerte hacia adelante de Revenant. Vamos a duplicar esto. Lubricar. Aquí está. Vamos a moverlo a la carpeta AI, para que podamos trabajar con mayor claridad. Ya lo perdí. Objetivo de aquí a A. Aquí. No, voy a hacer clic en target, que lo duplicará también, pero el objetivo sería vamos a hacer el Arti Manan Y O fuente necesita renacido. Yo sería mota. Aquí vamos un objetivo de prensa re. Veamos qué creamos con la IA. Aquí no se crea. Creo que sí, está en el contenido. Todo bien. Esto parece estar bien. El esqueleto está un poco estirado, pero está bien. Creo que es un poco. Se ve bien. Oh, Dave. Ahora, la animación de retargeting generalmente no es tan fácil, pero los personajes de Paragon están de acuerdo con ello. La mayoría de ellos, como Hipoteca y cómo se llama Revenant. No debería ponerlo en carpeta AI, o ahora porque las carpetas de no lo hicieron. Ya existe. Oh, vamos a cambiarle el nombre a esto. Objetivo de muerte. O es la muerte redirigida, y podemos moverla. Y vamos a los ocho un montaje fuera de él. Llamemos en realidad reclamar multa. Entremos en el montaje, cambiemos la ranura del grupo, a la parte superior del cuerpo S, compilar. Volvamos a nuestro enemigo y juguemos al montaje. Ton será nuestra malla, y las montas serán las que acabamos de crear Ahora, necesitamos dejar algunos elementos que código ya existe, de nuestros códigos podrían ser componentes pero copiar pegando por ahora lo hacemos No en nuestros artículos, gotas en nuestro pecho. Voy a ir a nuestro pecho. Y voy a inventariar. Este es nuestro código para dejar caer artículos. Bien. Sí, deberíamos haber comentado. Ahora bien, la parte que necesitamos es básicamente el flop aquí. D necesitamos el generador, pero no tenemos una referencia. Vamos a copiar esto. Es este x número de elementos. Hagámoslo una variable estática de dos. Vamos a poner esto aquí. Y rango 1-2. Poner los dos aquí realmente no importaba, pero de todos modos. Y para un generador de laberinto, solo vamos a crear una variable, posarla y editar instancias. Al responder a la IA, podemos pasar esta referencia. La razón por la que necesitamos el generador por supuesto es agregar para destruir. Tenemos el pecho abierto. Sí dijimos que esto no se agrega para ser destruido. Pero arreglemos esto en otro pase de depuración. Lejos. Lo último que debemos hacer es después de que podamos poseer de nuestro controlador. Haz esto, vamos. Sí. Taller Vamos a conseguir controlador de IA. Ya no somos jugadores. Nosotros somos I. Vamos a Bs. Esto nos deja un montón de controladores de IA que no hacen nada. Pero podríamos hacer un sistema que la IA que se ponga en marcha después, utilice un controlador no poseído Oh. Vamos a dejar el cuerpo como muere porque va a quedar destruido cuando la ma se elimine. Cuando vayamos al siguiente nivel, no importará que los cuerpos quedaron en el nivel anterior. Ellos van a ser destruidos con él. Creo que este es un buen punto de parada. Vamos a continuar en la siguiente. Por A 115. Comprobación de rangos de IA y guardias Hellgate: Hola, y bienvenidos de nuevo a Game Design Workshop, R engine five Procesal Dungeon action ApS curso de creación Anteriormente, terminamos con nuestros eventos y la muerte. Creamos un estado para IA y enumeración de fecha, y dijimos que sea si el personaje no es acérrimo entonces así que se staned, y tocamos un montaje y en completo de ese montaje Nosotros cambiamos de estado para atacar. Ahora, a nuestra muerte, lo hacemos una vez, ponemos una variable a muerta. Tocamos un sonido. Ponemos la colisión, la garrapata y el movimiento a cero básicamente, y jugamos un montaje que rediseñamos del otro personaje de paragon Por alguna razón, sigo pensando que el nombre es Cabal. A lo mejor me recuerda mucha sangre a un personaje, Caleb porque sé que no es Caleb A lo mejor viene Cabal en mi mente. No lo sé. Manera. Luego, después de jugar nuestro montaje, en cambio tenemos un número máximo de artículos al azar 1-2, y fluimos a nuestro mecánico para soltar artículos Y sí tenemos nuestro un bolígrafo aquí que elige un ítem aleatorio 1-5. Y luego poseemos el controlador que dijimos, dejará un montón de controladores no borrados, pero da la oportunidad de crear un sistema para cada nueva IA posea un controlador no utilizado. Ahora, continuemos con nuestro mecanismo de detección de jugador. Para ello, vamos a necesitar una colisión de esfera. Vayamos a nuestra ventanilla. En realidad lo vemos, qué tan grande es. Vamos a poner el número dos, algo así como 900. Creo que este debería ser un buen rango a nuestro alrededor. Esta colisión será nuestro alcance y detección de jugador. Es una zona agradable. Oh, esta colisión está buscando una sola cosa otra vez. Así que vayamos a nuestra configuración de colisión. Cambiémoslo a costumbre, ignoremos todo, excepto los estanques. Pero sí conoce a las otras IA también, sí se superponen. Ellos sí crean. Se podría adelantar el código que con algo. A lo mejor se comunican entre sí. No lo sé. Una es baja salud, otra viene y la cura. Ya veremos. Depende de tu imaginación. No. Vamos a hacer algo con esta esfera. Vamos a necesitar un evento de superposición inicial y un evento de superposición final. Empecemos por el principio. En primer lugar, preguntamos si el otro componente es la colisión del jugador. Especialmente, la cápsula. Así como tira del otro componente. Esto lo hicimos tantas veces. Ahora, lo siguiente que debemos hacer es crear una variable en rango, y pongámosla en cuando esto sea cierto. Después, vamos a lanzar una línea tase por canal. ¿Tenemos visibilidad hacia el jugador, o es que el jugador estaba detrás de una pared y chocó con la esfera Entonces, vamos a empezar por la ubicación. Voy a terminar en nuestro jugador. Entonces una ubicación. Voy a conectar esto hasta el final. Voy a establecer la visibilidad a la cámara, y vamos a romper nuestro resultado de calor. Si el otro actor que calentó g. en realidad, no tenemos un actor para la etiqueta. Tenemos aunque en realidad podemos hacer un actor igual y seguir adelante de nuevo. Apenas check es el otro actor del peón. Si es el peón o bueno, si no es el peón, hagas nada, y si es un peón, vamos a poner al estado Y ahora que tenemos el pone, en realidad podemos pedir al jugador de arriba hacia abajo en música de personaje y acción. Entonces comienza nuestra acción. Ahora, estamos acabando superpuestos, va a ser bastante sencillo. Vamos a comprobar si el solapamiento final es el personaje o tiene abrazo P. O oponente tiene abrazo P. Vamos a poner una rama, y si esto es cierto, vamos a establecer el in range a pals Un sistema que hemos creado aquí para la detección. Todo podría crearse también dentro del árbol de comportamiento con sistema complejo como EQ S, que es el sistema de consulta de entorno y otras formas que podríamos igualar para trazas de líneas aquí o no. Como dije, usar la pizarra y el proceso de agregar claves, quitar claves, actualizar claves, es una especie de exageración para una IA tan simple Entonces vamos a hacer una mezcla de ambos y hablar del medio ambiente, lo siguiente que necesitamos. Cuando estamos en modo ataque, De repente el jugador se sale de la línea de visión. Necesitamos un mecanismo para poder decir, ahora el jugador está en línea de visión, ataque. Porque los jugadores lo pueden queso, ya sabes, solo pueden esconderse detrás de las esquinas, pueden esconderse, pueden hacer muchas cosas. Entonces nuestra IA debe saber cuándo está a la vista directa o necesita moverse para hacer esto. Vamos a ir a nuestra jugada de inicio. Y vamos a hacer un Primer pi. Por ejemplo, esto podría ser un servicio, nosotros cosa que corre cada cantidad específica de tiempo y hace una cierta cosa. Pero vamos también porque vamos a utilizar un servicio para actualizar nuestra información, nuestra salud, nuestro estado. Veamos cómo porque jugábamos con tiempos anteriores, usamos Niveles antes. El ver cómo podemos iniciarlos y detenerlos cuando queramos. Vamos a promocionar este centenar. Hablamos del mango a poco es lo que maneja el tiempo y lo llaman manejar como el tiempo. Y al instante, la voy a pausar. Por el momento se crea, se está planteando. Pongamos un tiempo para ser un 0.3. Vamos a configurarlo para que se vea. Vamos a crear un respiradero personalizado. Nombra este look para jugador. Lo que va a estar haciendo, va a estar lanzando una línea de rastreo. Pero vamos a copiar desde aquí. Esto es exactamente lo que queríamos hacer. Nosotros sí necesitamos esto también y eso equivale a uno. Vamos a copiar todo esto. Esto es lo que hará este evento. Vamos a estar lanzando una línea de rastreo desde el actor hasta el personaje, va a estar comprobando si calentó a nuestro jugador. Ahora bien, qué pasa si es un jugador o no, vamos a necesitar una variable, todo está adentro, va a ser una variable bulion Voy a ponerla en true, y si no lo es, voy a ponerla en false. Si es cierto, vamos a comprobar si estamos atónitos. Si no lo estamos, vamos a poner a nuestro estado para atacar. Entonces ese sería nuestro mecanismo para proteger al jugador. Ahora bien, lo siguiente que hay que hacer es en realidad ver nuestra IA. Para eso, vamos a necesitar algunas variables también. Vamos a necesitar una ubicación de acogida porque los vamos a estar desove alrededor de las puertas Entonces, este es nuestro anfitrión. I. Y los AI deben saber si el anfitrión está muerto. Entonces, si el jugador mata a la puerta del infierno, deberían hacer algo. Vamos a crear otra variable. Va a ser lingotes, todo este anfitrión muerto. Así que ahora podemos terminar el código de nuestras puertas mantenidas. Vayamos a buscar nuestras puertas principales. Vamos a Ben graf comenzar a jugar. En la secuencia, vamos a agregar otro nodo. Subamos esta vez. Y lo que vamos a hacer es hacer un bucle ford. No para bucle f. Sea que necesitamos una cantidad aleatoria de IA para generar al azar. Aleatorio en rango. Ahora, vamos a comenzar con un nivel de generador. Consigamos nuestra referencia de generador, que no tenemos. Vamos a crear uno para esto. Vamos del tipo P. P maze gen. Vamos a exponerlo en cuchara. Vamos a su pone, que está en nuestro generador, impresiones, generador Maze. La puerta del infierno está por aquí. Las puertas del Hall son grandes cosas por aquí. Yo compilé pavimentar, pero el laberinto. Esta es la línea trice. Este es el sponer de la puerta Hall. Así que no encontré esto mal. Vamos a verificar. Así que restablecemos esto a la puerta del Infierno. Y ahora pongamos auto al generador. Compilar Bator he gate, et generador . Vamos a ponernos de nivel. Desde mínimo generador máximo Uno. Ponle esto al azar. Elegir al azar. B más uno o el nivel del generador. Ahora, necesitamos a todos los personajes y llamar más. Personajes de IA. En la transformación no expuse la ubicación del host en el generador. Yo no hice el generador. Vamos a conectar esto aquí. Necesito exponer. Esto es para exponer la ubicación del anfitrión. Ocho. Y para la ubicación del anfitrión, voy a obtener la ubicación. ¿Nosotros los engendramos? Bueno, recuerda ese punto aleatorio en cuadro delimitador. Eso es lo que vamos a usar. Dom punto en caja delimitadora con de medio tamaño de 300, uno, y el centro debería ser nuestro actor ubicaciones dar b de altura más 40, digamos, sería nuestro centro Ahora vamos a conseguir la referencia del generador, Troy voy a En la IA. También necesitamos una lista más de esto y promover esta variedad. Realmente cambiarlo de actor a uno, esto no va a ser un aca sean los zombies, nuestra IA. Voy a conectar esto aquí. Solo tenemos que agregarle. Agrega ops este actor. Ahora bien, ¿qué actores destruir? Llamémosle a esto mis zombis. No, no es IA, no es el nombre de nuestra IA. A lo que ya llamo a los zombis y me gusta. ¿Qué hacemos con este ombies? Cuando morimos cuando muere la puerta. Crees que la muerte aquí está. Queremos el a zombis que morimos. Entonces antes de destruir actor, vamos a voy a usar la matriz M Zombies. Esta destrucción debe ser terminada, conectada desde aquí. Y a mis Zombies, vamos a ese papá anfitrión todos los zombis, todos los enemigos, sabemos que la puerta del infierno murió. Y esto sería un. creo que es suficiente para éste. Vamos a continuar en la siguiente. Adiós. 116. Mecánica de tiro con IA y golpes: Hola, y bienvenidos de nuevo al taller de diseño de juegos sobre el curso real Engine five procedural creación de RPs de acción de Dungeon Anteriormente, creamos un sistema para detectar a nuestro jugador. En nuestra IA, agregamos este tubo de colisión que es responsable de la superposición de inicio y final para verificar si el jugador está dentro del alcance. Después al comenzar la superposición, fuimos hacia y a través de una línea tase para ver si nuestro objetivo es el jugador. ¿Podemos tener una visibilidad directa para el jugador o hay algo intermedio? Y si es así, entonces nos pusimos a atacar, y comenzamos nuestra película de acción, nuestra música de acción. Si no se superponía, solo establecemos el rango de. Después se procedió a crear un temporizador al inicio de juego que planteamos que se encargue de hacer un sistema que verifique constantemente si el jugador está en un rango o no Si es así, si no somos stan, estamos atacando. Y este sistema es un mecanismo que funciona a lo largo del tiempo, como un servicio, cuando lo queremos y cuando nosotros, podemos posarlo a través de nuestro asa asa de temporizador lateral, que se encarga de administrar los temporizadores, básicamente. Luego procedimos a terminar nuestro mecanismo de desove en nuestras puertas principales para nuestra IA, usamos un bucle for con nuestro aleatorio el rango gerne de nuestro nivel generador, agregando aleatoriamente uno, en el nivel más uno, y luego usamos un aleatorio señalando un punto aleatorio en la caja delimitadora para generar nuestra IA alrededor de nuestra agregamos a una matriz a actores para que destruyeran en Mí, y los agregamos a otra matriz para que fueran mysombies, como lo llamamos Entonces cuando el Cuando muere la puerta de curación, esto no es la muerte. O aquí está la muerte. Y la puerta de curación muere. Atraviesa cada uno de los zombis, cada uno de nuestros IA. El hey, me morí. Establece que la variable host está muerta, y luego se encuentra en sí misma. Oh, sigamos haciendo el tiroteo real. Y el tiroteo real va a ser llamado a través del árbol. Y para hacer eso, vamos a necesitar una interfaz de blueprint, puede llamarlo a cualquier IA que esté usando el árbol Vamos a ir a nuestra carpeta AI. Vamos a crear una interfaz de blueprint. Llamemos a esto B I AI. Vamos a abrirlo. Es una función. Eso se llama tachueta En realidad, llamémoslo disparar. Compile los ajustes de Dave BatorA I en esta interfaz. A Ai y ahora tenemos nuestra interfaz ot. Vamos a hacer doble clic y al evento, lo primero que debemos preguntar es si estamos muertos porque si estamos muertos, no disparemos. Y si no estamos muertos, vamos a tocar un Montage Vamos a crear ese montaje, vaya a en el navegador Vamos a la Morgue, Morgue, y busquemos por Marie B. Hay un montaje de ataque primario un lento. Vamos a comprobarlo. Aquí se ve bien. Vamos a usar esto. Cuando no estemos muertos, vamos a montar el nodo de avance Vamos a usar la malla aceletal. Otra vez deja caer el aquí. Lo siguiente que tenemos que hacer es lanzar nuestra bala. Vamos a crear nuestra bala. Vamos a nuestros planos de carpetas. Vamos a Habilidades. Vamos a hacer clic derecho. puerta clase Blueprint y bala P AI Oh, antes que nada, agreguemos un sistema de partículas AD. Mi gasolina. Proyectil. Aquí estamos. Es el resplandor de la daga. Lo siguiente que vamos a necesitar. La malla estática sería daga. Este perng viejo A M LP. Tenemos que rotarlo un poco. Gire la partícula. Necesidad de girar la cuchilla. Es más pequeño y de partículas, así que vamos a incidir a 1.5. Eso parece correcto. Y sí necesita un material. Se trata de un tigre mágico. Aquí tenemos un tigre mágico. Ahora mismo se ve mejor. Podemos moverlo un poco. Esta línea, pero está bien. No vamos a poder ver. Apenas vemos un resplandor y una daga Ahora, lo que necesitamos es apagar la colisión de esta daga porque vamos a usar una cápsula de colisión para hacer la colisión No va a generar solapamiento. No va a tener colisión, y eso es una cápsula. En realidad no está parentado. La Sra. debería estar encendida. Vamos a rotarlo. Es más pequeño. Bit. Creo que está bien. Redacción En esta cápsula solo busca pon, una colisión. En realidad, sí busca muros también st, todo excepto prótico, block wall dynamic Superposición en. No estoy muy seguro de la palabra dinámica si la queremos, porque a lo mejor queríamos atravesar las puertas del infierno. Dejémoslo tan fácil. Es más fácil. Y lo último que tenemos que añadir es un movimiento de proyectil Tendremos que apagar la gravedad. Pongamos la velocidad a cero. Y lo último que tenemos que hacer es ir a comenzar a jugar, obtener nuestro movimiento de proyectil a velocidad, y promoverlo a una variable que vamos a exportar en cisne Y hazlo incienso editar, compilar y guardar. Volvamos a nuestra IA y adelante plus después de nuestro montaje Por supuesto, el actor sería nuestra bala de IA. No es una bala. Es un tagger pero está bien. No, lo hacemos lo engendramos y ¿cuál es la velocidad? Afortunadamente, si vamos al comportamiento, lo siento. A nuestro esquelético. Hay un socket llamado pon pon r. podemos usar esto. Una buena ubicación. Volvamos a nuestra IA y obtengamos nuestra ubicación de malla ckt. Aquí están, toda la velocidad. Sólo vamos a seguir. Va a volver a la rotación. Vamos a encontrar mirada a la rotación. Vamos a sacar adelante factor. Justo ahí. Vamos a multiplicar que será básicamente nuestra cabeza de bala. Entonces, hagamos un entero, digamos 200, un poco más rápido que los jugadores. Eso sería. Este sería nuestro tiroteo. Ahora, sesión de eventos, como decíamos, va a ser conducida por el árbol. Por eso es una interfaz. Para que el árbol pueda mandar a irrelevante del actor. El actor solo necesitará tener el inter No. En realidad podemos ir a revisar algunos telefoneos. Entonces, si vamos a jugar, obtenemos un montón de errores en Hipoteca y plano e Hipoteca Oh, es porque pegó algunos errores. Debido a que dupliqué el personaje, luego el casting en el plano de Morgmention, realidad va a golpear algunos errores porque dupliqué Sí. Así que vamos a arreglar eso. Consigue el plano de la Morgue, tu original. Esta mala manera de buscarlo. Personaje, héroes, Morges, jugador de la morgue, borra todo esto Ir al plano. Veamos esto. L et es esto. Esto y esto. Ahora, está bien. No, podemos jugar. Busquemos una puerta infernal. Y tenemos tres IA. O tenemos tres. Deberíamos tener uno o 21 porque está basado en una o. Sí, porque nuestro bucle for está basado en cero. Vamos a arreglar eso. Volvamos a nuestra puerta infernal. Error muy básico haber ocurrido de todos modos. Enemigos de la puerta. Cero a uno significa dos. Vamos a hacer esto un menos uno. Vamos a estar de cero a cero, lo que significa uno. Y ahora no tenemos puerta del infierno. De nuevo, tenemos una puerta infernal. Esta vez no nos quiere. Oye, tenemos una puerta infernal, y ahí sí tenemos un enemigo. ¿Verdad? Vamos a dispararlo. Intentemos matarlo. En realidad, lo estoy pegando, pero en realidad no tiene und. Tiene sonido. Yo sólo quiero cerrar el sonido. No tiene el remolcador yo voy a ir a Atifs, vamos a ir a remolcadores, vamos a agregar remolcador E, creo, no yo. Estaba por artículos, interfaz, interferir A distancia E es para enemigo. Tenemos el remolcador, deberíamos poder matar a uno. Se están muriendo. Se están volviendo a levantar, pero se están muriendo. Los artículos se están generando en cero, cero, cero. Vamos a p es ahora. Volvamos a nuestra IA y embolsemos así de rápido. Muerte, aquí hay una muerte, floop. Por supuesto, esto vio 000 porque no hemos establecido una ubicación. La ubicación sería simplemente. Pero sí tiran artículos. Entonces esto es genial. Sí, hay una IA Tweet y matarlo y ver que deja caer artículos directamente en la puerta, no importa. Ahora bien, si estoy haciendo clic en él y estoy moviendo el mouse, volviéndome a subir, pero sí arroja artículos. Ahora, el próximo evento que va a ser impulsado por nuestra interfaz es el evento knock back, que es algo que también podemos probar ya. Esto lo podemos hacer deporte, podemos ir en med AI y se pone knoba Oh, voy a ir a nuestra interfaz azul, yo IA, y una función llamada Porque esto también es un mensaje universal. Lo vamos a enviar desde nuestro ataque Mi, y tiene que ser para cada IA, no solo esta cierta. Oh, va a ser una interfaz de agrupación para enviársela a cualquier actor. Pero creo que este es un buen punto de parada para aquí. Vamos a continuar en la siguiente. Adiós. 117. Mecánica de golpes y aturdimiento: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos, Curso Real Engine five Procesal Dungeon Action ARPZ Creation Anteriormente, creamos el plano bala AI que se requiere de una partícula de malla astática o nuestra malla de ira, una partícula para hacerla brillar, una cápsula que detecte el calor o no calor, y un Para controlar su velocidad. Ahora bien, una cosa que no hicimos es atender a la cápsula, pero cuando golpeas a un jugador haz algo, cuando comencemos un evento de vuelta, lo que vamos a hacer es darle el otro componente. E, en realidad, sí necesitamos también, pero sí necesitamos en este momento para jugador. Y necesitamos sucursales. Primero, tenemos que preguntar si el otro actor es válido. ¿Es válido el otro actor? Porque podría ser de, podría estar siendo destruida o algo así. Entonces, ¿es válido el otro actor? Entonces, ¿es el otro actor jugador? Si no otro jugador, es el otro actor enemigo. Y si es nuestro jugador, vas a aplicar daño al otro actor. Daños de uno. Llamemos artículo, emter, ubicación.cion sería Para el emeter, vamos a usar dot mortgage do Impact, que es una nube pequeña Ahora, pequeña nube verde. Si es si el otro actor es enemigo, no deberíamos hacer nada. Yo sólo debería pasar por ello. Pero si no lo es, simplemente formaremos esta nube. Por supuesto, por último, vamos a destruir a un actor. Por ejemplo, si no es un enemigo, es un muro, vas destruido. Después de nuestra bala BP AI. Seguimos adelante y creamos nuestra IA BI, que es nuestra interfaz de blueprint para IA, y creamos dos eventos, el rodaje que completamos y el retroceso que vamos a hacer ahora Ahora, para el rodaje, este no es el rodaje. Esto es un rodaje. comprobando si el personaje está muerto. Si no, estamos jugando un montaje, y estamos desove esta bala que creamos, bueno, daga de ping Y estamos eligiendo por la ubicación, el bolsillo de malla. Lo siento, me mudo. El nombre de toma de masa arma R y por la velocidad entre esa y la ubicación del actor con la velocidad que elegimos. Ahora, continuemos con nuestro evento de espalda. No, llevemos a Pack. En realidad, solo hacemos doble clic aquí en la cara. Obtenemos el evento, y vamos a establecer el estado del personaje en uno. Entonces vamos a conseguir ubicación, retenerla temporal porque vamos a movernos a esa ubicación hacia otro lugar. Vamos a tonificar esta ubicación temporal. Atrás. Y luego quiero hacer otra variable. Vamos a crearlo en realidad. Voy a ser de tipo entero de este rango. Ahora, nuestro knock back puede ser un poco buggy a veces, y pasar por paredes, puede pasar por lugares. La forma en que podríamos esto sería con trazas y algunas reglas más caras y más detalladas, pero esto va a estar bien. Voy a hacer nuestro ing aleatorio en rango, pero en rango. Y digamos 100-150. Lo que tenemos que hacer es tocar un montaje. Toca un montaje, y vamos a cre A Montage. Vas a ir a nuestra carpeta hipotecaria. Ese es Mack. Éste. Y vamos a crear un montaje de animación, vamos a abrir elegir la ranura superior del cuerpo de la ranura Dave s y vuelve a nuestra y. Puedo dejar caer el montaje y esta malla esquelética, y ahora tenemos una animación Ahora, como sucede esta animación, vamos a reproducir una línea de tiempo. Y en actualización, vamos a establecer la ubicación. Voy a alertar. A sería nuestra knockba temporal Para B, sí necesitamos una dirección que vamos a estar multiplicando con nuestro rango trasero Convertir este entero, básicamente, la dirección tiene que venir internamente. Lo que vamos a hacer es que vamos a agregar un factor de entrada a nuestra interfaz de impresión nba. Esta dirección. Compilador Dave Si volvemos ahora a nuestra IA, sí la tenemos por aquí, y podemos traerla aquí. Ahora, para nuestra unidad Alpha, entremos en la línea de tiempo. Seleccionemos el uso del marco aski. Agreguemos un camión flotante. Vamos a sumar dos puntos. Digamos que el tiempo sería 000 primer punto, segundo punto sería 0.5, digamos uno. Y este sería nuestro Alfa. Ahora, cuando estamos empacando, lo siguiente que debería pasar es que estamos cambiando estado después de la manada para atacar. Y sí nos aplicamos daños a nosotros mismos. Si queremos realmente querer lo hacemos. Si queremos que los hombres no hagan daño, simplemente no aplicamos daño a uno mismo Esto sería todo. Tenemos un knock back. Oh, pruébalo. Ir a ganar nivel. Sí necesitamos agregarlo a nuestro mell. Vayamos a nuestra capacidad de mí. Habilidades, donde esta el yo. Bueno, cuando comencemos a superponerse, y el otro actor es E, el otro actor, y volvemos a llamar. Para la dirección, vamos a sacar al actor adelante vector. Ya que esto es rotativo basado en el personaje. Ahora, continuemos con la prueba hay una IA. Ahí está O Realmente se fue muy lejos. Él sí murió. Pasé por el piso. Encontré esto demasiado ruidoso. Bien, entonces tenemos que arreglar esto. Hagamos una pausa en Optily. El no tratar de leer y poseer pluma ahí, está bien. Hagámoslo en su nota válida aquí. Si no es válido, trata de hacerlo. A lo mejor porque no hemos poseído. Sí. ¿Qué tiene de malo el toco que ver con s. actor actor paciente. Cuando lo adjuntamos al jugador, abramos el plano del jugador por un segundo Vamos a los planos, a nuestro personaje principal. Respondeme, estamos adjuntarlo. Actor auto, así que no. Sostén parece estar prendido. Sin embargo, actor. Estamos jugando, así que deberíamos ser ping desde el principio, antes que nada. Bien. Sí, no voy a agregar la ubicación temporal a la dirección. Hace una dirección a partir de esto es por lo que vuelve al inicio del mapa? Es por ello que cuando golpeo a Mack, volvió a la primera baldosa tiró a la primera baldosa en sí aquí porque yo estaba aquí y se tiró aquí. Entonces tiene una dirección, pero en qué parte del mundo. No especificé en qué parte del mundo. Tenemos de nuevo el tema de la texturación. Así que nuestro streaming de tamaño completo 200. Se puede ver que el mapa de aquí está mal texturado a esto, bueno. Y vamos a buscar una IA. Aquí no hay ninguno. Bien. Aquí hay una IA. Junto a ella. Y ahora knock back funciona. Estamos golpeando respaldando a la IA. Es muy molesto que si de pie, pero vamos a arreglar esto. Deberían. Parece que está molestado. Voy a averiguarlo más tarde. Sigamos haciendo la IA. Ninguna espalda está funcionando, nuestros problemas de tiro, pero nuestro nback está funcionando también está haciendo daño Ahora, por último, lo que tenemos que hacer antes de entrar en nuestra decisión T, activar todas estas. Necesitamos crear dos eventos más en nuestro BI, I AI, lo que realidad me permitirá estar en pintura por un segundo. Hace mucho que no lo hemos hecho. Oh, digamos nuestra IA por aquí, y aquí hay un muro. Y nuestro jugador está detrás de este muro. Ahora, cuando la IA intenta encontrar al jugador, se mueve como en algún lugar de aquí, digamos que consigue este punto. Es dirección sería en realidad no hacia aquí arriba, sino el último lugar estaría yendo al lugar al que se mueve. Pero queríamos girarnos hacia el jugador. Entonces vamos a hacer trampa un poco, y usaremos la rotación esta es una R, rara R, pero es una R. La rotación basada en el movimiento, como usar la rotación gira hacia el movimiento. Y luego cuando apagamos esto y usamos la rotación del controlador que se establecerá hacia el jugador. Para la IA, se moverá a un punto y girará hacia el jugador. Y vamos a fijar la tasa de giro y todo en la decisión y la toma de decisiones la. El comportamiento t. De todas formas, volvamos a nuestro proyecto. Y agreguemos estos dos eventos. Vamos a B I AI. Función. Llamemos a este controlador. Hagamos otro, el movimiento gire. Vayamos a AI y llamemos a estos dos eventos. Para compilar. Dave. Rotación del controlador, rotación de movimiento, vamos a conseguir nuestro movimiento de personaje, et rotación deseada. ¿Qué? O Que orienten la rotación al movimiento. Estos son los dos. Esto va a estar apagado y esto estaría en base ellos arriba. Conecta el movimiento del personaje, y esto estará encendido, y esto estará apagado. Y eso sería todo. Nuestro código aquí, está prácticamente hecho dentro de la IA. Vamos a traer esto aquí arriba. También aquí está solo, y eso sería todo. Vamos a compilar y guardar. Y en la siguiente, comencemos con nuestro comportamiento tres. Adiós. 118. Variables de Blackboard y configuración del árbol de comportamiento: Hola, y bienvenidos a Taller de Diseño de Juegos y Real Engine five Procesal Dungeon Action Curso de Creación de GLP Anteriormente, terminamos con nuestros eventos sobre IA, nuestros eventos de BI, nuestro evento de mensajes. Terminamos con knock Back. Ponemos a nuestro personaje para aturdir, establecemos una ubicación temporal, un rango de retroceso temporal Realizamos animación, y mientras se reproduce la animación, jugamos una línea de tiempo de 0.5. Esto es aproximadamente el momento de la animación y esa ubicación del actor en consecuencia, que usamos la dirección a través de nuestro ataque de correo, y agregamos a la ubicación principal. Al final de eso, lo olvidé, la prensa corre, y para dar la dirección donde en el mundo, y pasamos por la ubicación original para estar. Ahora, cuando terminó, configuramos nuestro modo de ataque AI dos y recibe un daño, que en realidad debería ser opuesto La razón está bien, realmente no importa. Porque si conseguimos un daño, nos quedaremos atónitos Entonces sí, por eso sí importa porque si primero aplicamos daños y vamos a ¿cuál es el evento de daño? Aquí está, obtenemos un daño y nos quedaremos atónitos. Y si ya estamos atónitos, no nos vuelve a atropellar. Entonces después de eso, estamos cambiando para atacar. Entonces es por eso que este orden importa. Ahora bien, es una especie de error un poco porque esto no quiere decir que esto va a esperar hasta el evento, porque está llamando a ese evento. Se llama daño aplicado. No creo que vaya a esperar. No podemos poner un pequeño retraso aquí. De 0.1. Entonces para atacar, estar más seguros. De todas formas. Luego creamos otros dos eventos que estamos usando la rotación del deseo del controlador, en lugar de un movimiento orientado que usaremos para apuntar hacia nuestro objetivo, nuestro jugador. Y todo esto sucederá en el comportamiento de IA tres. Ahora realmente deberíamos llenar primero la pizarra. Pero antes de hacer eso, déjame explicarte algunas cosas. A través de la raíz. Este es el primer nodo que se ejecuta cuando ejecutamos el árbol de comportamiento, tenemos algunas opciones. Tenemos el selector, la secuencia y el paralelo simple. Lo que vamos a estar usando es selector y secuencia, no más óptimo. Algunos casos podríamos haber utilizado un simple paralelo, pero estos son los dos más comunes. Pero vamos a traer un selector, y vamos a traer también una secuencia. Ambos puedes ver estas flechas aquí. Si traigo conectar a la raíz dos, desafortunadamente, conectar solo uno. Pero trae otro selector solo por el bien. Se puede ver que tenemos una orden de operaciones 012. Esta es la forma en que corre. Entonces, si traigo esto por aquí, entonces esto se convierte en dos. Por lo que tanto los selectores como las secuencias corren de izquierda a derecha para completar sus acciones Las diferencias entre selector y secuencias que como dice en la descripción emergente, dejará de ejecutarse cuando uno de sus hijos tenga éxito, cuando esto sea lo contrario, continuará de izquierda a derecha hasta que falle uno de los hijos Lo que vamos a usar para el primer nodo va a ser elector Yo voy a aquí. Podríamos haber usado una secuencia. Realmente no importa porque en este nodo, secuencia selectora o paralelo, podemos poner estas decoraciones, que significa cuáles son las condiciones de este selector. Estoy divagando. Empecemos por establecer nuestras variables en nuestra pizarra Las variables aquí se llaman claves, y básicamente son las mismas variables de cosa. Pero para actualizarlos, tenemos que hacerlo de cierta manera. Pero vamos a agregarlos primero. Vamos a crear b, necesitamos en realidad tres bs. Uno, dos, tres. Necesitamos dos vectores. También necesitamos una enumeración de ocho. Digamos este ocho. De hecho, P uno estaría muerto. P dos sería mejor Hospedar muerto. Tirar tres estaría en ocho. No necesitamos el rango porque va a tener otro específico sí necesitamos el rango. ¿Por qué no? Tengamos también en rango. Podemos usarlo. En cierto sentido. Oh. Los vectores deben ser hospedadores. La ubicación y la otra deben trasladarse a la ubicación. Ahora, por último, necesitamos un actor. Necesitamos al enemigo como ellos están en el enemigo. Entonces, ¿qué vamos a hacer puede crear un objeto? La diferencia es que los objetos están por encima en jerarquía de los actores. No podemos tener actores específicos como variable aquí. No podemos tener un tipo de clave como cambiar el objeto a, por ejemplo, este caso actor, pero podríamos haberlo cambiado a cualquier cosa que quisiéramos ser específicos. Pero es mejor mantenerlo lo más generalizado posible. Solo tenemos que estar haciendo un seguimiento de que no deberíamos estar poniendo al actor o al objeto a algo que no es correcto porque podría retroceder las cosas. Puede provocar choques. Así que vamos a guardar esto, y volvamos a nuestro comportamiento, en realidad Podríamos haber ido a esta tina y estrellarnos. 119. Configuración de variables de Blackboard y árboles de comportamiento de IA: Hola, y bienvenidos a Taller de Diseño de Juegos n motor real cinco Convocatorias de Creación de PZ de Acción de Calabozo Procesal Creación de PZ de Acción de Calabozo A veces no le gusta si estás editando una pizarra afuera y tienes abierta en t y causa algunos bloqueos De vuelta a nuestro árbol. Lo primero debería ser el lector, pero realmente no importa porque sólo va a ejecutar un servicio. Vamos a crear sobre el nuevo servicio. Nombre este servicio ES, PT servicio. Servicio am a PD, consíganos. Ábrela, ábrela pavimentar. Lo que necesitamos es n tengas que recibir Tick AI En primer lugar, hagamos una secuencia porque una cosa no queremos que se ejecute cada vez. Y eso sería conseguir el conseguir el actor jugador como referencia. Tenemos nuestra variable en nuestra pizarra, que tenemos objeto Llamemos a este jugador o enemigo. El par es el enemigo del enemigo I, lo que tú quieras. Oh, vamos a crear una variable aquí. Va a ser una pizarra, selector. Ahora pongamos a este selector Enemigo. Vamos a traerlo aquí. Preguntemos si es válido. Vamos a retroceder el valor p. Como actor este valor de pizarra es un actor. Lo sabemos por Blackboard, que es objeto, pero actor de clase base realmente no importa Y esto es parte importante cuando estamos agregando claves de Blackboard Blackboard para saber qué tipo de valor son qué tipo de valor ¿ qué tipo de actor? Qué tipo de variable, qué tipo de variable son. No. Vamos a comprobar si esto es válido. Voy a conectarlo aquí. Porque si yo estaba pidiendo este valor y lo estaba pidiendo como vector y era actor, entonces esto no funcionaría. Pero también hay algo que nos dirá cómo se basa en qué se basa. Agreguemos el servicio aquí para mostrar esta buena oportunidad. Entonces voy a hacer click derecho, voy a agregar servicio, y el servicio que voy a agregar es empezar. Ahora bien, si selecciono este servicio, no expuse la variable. Esto también es algo muy importante. Tenemos que hacer que las teclas de la pizarra sean editables instantáneamente. Deben estar expuestos o el árbol puede verlas. Entonces ahora tenemos aquí al enemigo BB, y necesitamos darle una referencia a nuestras claves de Blackboard, como pueden ver Entonces, ¿cuál es esta clave? Entonces esta clave sería enemiga, que sabemos que es un objeto de tipo actor, y también correspondemos este valor a la pizarra Ahora bien, si alguno de este cambio de eventos no es correcto, esto no va a funcionar. Por eso digo que es un poco exagerado estar usando pizarras para tareas sencillas, pero es una buena manera también de mostrar unas Vamos a continuar. Cuando no es válido, queremos que una pizarra vuelva a clavar esta llave. Como objeto. Porque estamos tratando de ponerla como actor. Se puede ver que no existe. Entonces esto es sólo una forma de evitar, básicamente, lo guardamos como objeto y amable sabemos qué tipo de objeto es. Conectemos esto aquí. Y por el valor, vamos a llegar ahí. Ahora bien, esto es lo único que corre. Lo segundo que tenemos que hacer es actualizar todos nuestros valores. Para ello, vamos a necesitar agregar una interfaz de blueprint, vamos a agregar una función, vamos a todos los get Ts y va a tener un montón de salidas Pero necesitamos o Bulina. De hecho necesitamos copiar nuestras llaves de pizarra. Entonces uno está muerto, el otro, dirigido. El otro está dentro y está dentro del rango. Entonces necesitamos un valor más de E M, no. Un estado EA I. E A uno afirma. Llamemos a esta fecha. Por último, necesitamos uno más, que sería tipo o va a ser la ubicación del anfitrión. Ahora, volvamos a nuestro personaje solo para llenar esta última función. Hay un personaje de arriba hacia abajo, el personaje de IA, Una bala. Está cerrado o volvamos a abrirlo. Probablemente a través del choque. No está cerrado por aquí. Lo es. Esa es esta cosa que la hace muy pequeña. Vamos a bn por aquí. Ahora, vayamos a nuestra interfaz, vayamos a conseguir Starts, y conectemos las llegadas correctas. En rango para dentro de rango, dentro para la visión, muerto por muerto, host para ubicación de host, ocho para el estado, y el host está muerto o el host está muerto. Volvamos por el servicio. Vamos a crear un montón de valores de clave de puerto Negro. El ocho. Obtener Suts estado. Así que consigue stuts. Y podemos ver ¿qué es qué? Necesitamos un muerto. Necesitamos un puesto muerto. Todos deberían tener BB delante de ellos Blackport key. B dentro del rango B. Como r extra duplicar dos veces más B ocho y B. Ahora, necesitamos en todos estos valores. Entonces comencemos de eso, ese Blackward Kias necesitamos copiar y pegar más veces Y conseguimos los bulions, papá, los bion los keys van Conecte esto y conectemos muerto a muerto a host a insight, y rango de rango. Por último, pongamos esta clave blackw como in ation. Va a conseguir el estado aquí. Y por último esa clave de puerto trasero como Vector y conecta esto aquí y esto por aquí. Entonces, todo está listo. En nuestro servicio BTT BT. Tarea BTT BT. Lejos. Cerremos el servicio. Ya no lo necesitamos. Volvamos a tres, y tenemos que establecer. Yo no los hice posar, volver al servicio. Vamos a exponer todo esto. Podemos hacer click en este yo por aquí. No necesitamos realmente hacer clic en esto, pero podemos hacer clic en el I aquí. Ahora volvemos a tres. Seleccionemos el servicio. D compilan y ahora podemos ponerlos todos. BT muerto está muerto. OS muerto es anfitrión muerto. El interior está dentro, el rango I está en el rango, estado AD y la ubicación del host es la ubicación del host. Esto actualizará nuestras estadísticas Nuestras, nuestra pizarra, como podemos ver cada 0.5 con desviación de uno Creo que esto es un poco bajo. Pero tal vez deberíamos hacerlo un poco más rápido. Para ello, lo vamos a poner en 0.4, y desviación de uno, y correrá cada tres, dos, 5 segundos, en lugar de cuatro a seis. Oh. Lo siguiente es, ¿qué hacemos con toda esta información? Bueno, creo que este es un buen punto de sopping para este. Pasamos nuestras referencias, pasamos nuestras variables a nuestra pizarra Y en la siguiente, comencemos a programar lo que sucede con esta información. 120. Comportamiento de patrulla con IA y modo de pánico: Hola, y bienvenidos al taller de Diseño de Juegos, curso real Engine five procedural creación de RPG de acción Dungeon Anteriormente, creamos nuestro servicio para actualizar nuestra información. Y para ello, utilizamos la función en nuestra interfaz de blueprint, que se llama Get Stats En esta función, agregamos algunas salidas y en nuestro carácter de IA, es, llenamos esta función para pasar nuestros inicios. Luego en nuestro servicio, usamos el código apropiado para establecer las llaves de la pizarra obteniendo nuestros inicios desde nuestro pon controlado Ahora, también establecemos el pon pagador para que solo se haga una vez si la clave de la pizarra no es válida Ahora, continuemos. Vamos a crear un lector selector que puedas ver, cuando salimos de ruta, obtenemos muchas más opciones. Esto puede suceder, por ejemplo, ejecutar equs después del primer nodo Y no entraremos en muchos detalles. Pero el primer selector solo debería tener un decorador, y ese sería un decorador de Blackboard, lo que significa una Entonces cuando hacemos clic en el decorador, que es una regla básicamente para que esto proceda, vamos a usar la regla. Vamos a hacer clic en la regla. Y vamos a poner nuestra equery, que la llave de la pizarra que no está puesta, la llave de la pizarra sería anuncio Si estamos muertos, no vamos a pasar por esto, y va a abortar tel Esto significa que todo lo que está pasando en ello, y seguimos por aquí, lo que significa no hacer nada en nuestro caso. Ahora, para nuestro primer elector, usemos ens. Esto podría ser lo mejor primero que nuestro selector intente porque se detiene cuando los primeros hijos tienen éxito. Entonces nuestro primer intento de éxito algo si estamos en modo patrulla. Y esto me recuerda, volvamos a nuestra IA y establecemos nuestro estado para que sea patrulla predeterminada. Eso es por defecto. Eso es muy importante porque si esto no es patrullar, entonces nuestra secuencia no correrá, no voy a jugar. Vamos a agregar la clave del corredor. Vamos a establecer la clave de puerto negro para que sea el estado de enumeración, y esto cambia la consulta de clave y es igual a y el valor clave Oh, sí. Tenemos que ir a la pizarra negra. F la A, tenemos que elegir un tipo, que serían estados de IA. Todos los detalles. Ahora, pongamos el valor E igual a patrullar. Esta es la condición para ejecutar la secuencia. Si esto falla, entonces pasará al siguiente. El primero que tendrá éxito, entrará. Este es el selector. Ahora, vamos a hacer la secuencia, que significa dos cosas hasta que una de ellas falle. No. Lo primero que tenemos que hacer es ejecutar una tarea que obtendrá un punto aleatorio. Vamos a crear una nueva tarea. Llamémoslo tarea BT. Vamos a anotar dos localizaciones aleatorias. Y entramos en él. Ahora. Vamos a ta ejecutar IA, esto significa cuando, no expliqué tanto. Aquí, tenemos una recepción de Tick AI, que el tick determinó a partir de realmente nuestra línea de tiempo. Aquí, hemos establecido un tick aquí donde este recibe una ejecución. Nuestro exudado estará llamando aquí a esta tarea. Entonces llamémoslo en realidad. Podemos ver aquí en tareas, DT tsk ubicación aleatoria aleatoria Pero vamos a llenar el código. Entonces este es el ex recibe IA. Recibir ejecutar evento AI. Para ello, vamos a necesitar tres variables de las pizarras Vamos a crear tres variables, valor de pizarra o Pero estoy teniendo o selector El resto de ellos. Selector de teclas. Keelector El primero sería nuestro paso a clave. El segundo sería anfitrión. El tercero sería nuestro host raíz, raíz. Todos estos necesitan estar frente a ellos, solo para ser correctos. La palabra clave no es necesaria. Vamos a conseguir nuestro punto de control. Vamos a conseguir la ubicación del actor, y vamos a seleccionar. El valor sería si nuestro anfitrión muriera. Valorar como prohibición porque nuestro anfitrión muerto es una prohibición. F B, vamos a obtener la ubicación del host, en realidad, ubicación del host, y vamos a obtener un puerto como vector. Conéctalo aquí. Ahora, lo siguiente que vamos a hacer es apuntar en un radio alcanzable, y vamos a establecer el radio en 800 ¿Qué hace esto? Nos dice si nuestro anfitrión está muerto, consigue un punto aleatorio alrededor del jugador. Si no está muerto, consigue un punto aleatorio alrededor del anfitrión. Y luego vamos a eso la película película, películas notables. De todas formas, Suerte Kías vector, y esto es un resultado Ahora, cuando estamos ejecutando una tarea, necesitamos terminar las ejecuciones. Bueno, no todo el tiempo, pero éste requiere saber que es un éxito de caballo. Veo forse porque aquí no estamos poniendo ninguna condición Si esto falla o tiene éxito , no nos importa Diremos que fue un éxito. Nuestra secuencia puede ejecutar la siguiente tarea, lo cual no vamos a complicarla. Sólo usaremos dos. Para para la clave Blackboard, vamos a usar el movimiento dos, A, vamos a C. Ahora es la ubicación, no es la ubicación. No. Lo que tenemos que hacer es ir a nuestra tarea, verificar que tenemos no lo he hecho público. Siempre necesitan ser públicos, y podemos establecer la mudanza a nuestra mudanza a la ubicación, nuestra ubicación de anfitrión a nuestra ubicación de anfitrión, y el anfitrión está muerto para el anfitrión está muerto. Hagamos otra secuencia a partir de aquí. Poner un decorador, valor de pizarra, y la condición sería root está muerto, host está Y si no está establecido, vamos a entrar. Y lo que vamos a hacer, por favor vaya a esperar 5 segundos. Entonces cuando está patrullando y el anfitrión no está muerto, esperando 5 segundos. Si está patrullando y el anfitrión está muerto, simplemente correrá aleatoriamente por nuestro calabozo Al igual que, creamos un modo de pánico. El anfitrión murió, corremos al azar sin fin. Este será un modo de pánico. No me lo haremos modo pánico. Solo volveremos a patrullar, y va a entrar en pánico por sí solo. Entonces sólo para repasarlo una vez más, estamos empezando, y estamos comprobando si no estamos muertos. Si no estamos muertos, estamos tratando de ver si estamos patrullando Si no estamos patrullando, vamos a estar haciendo otra cosa. Si estamos patrullando, estamos eligiendo una ubicación aleatoria a nuestro alrededor. Nos trasladamos a esa ubicación. Si nuestro anfitrión no está muerto, esperamos. Si nuestro anfitrión está muerto, elegimos otra ubicación y corremos por ahí. Ahora, una última cosa que deberíamos hacer, nuevo, el auto abortar Entonces cuando los cambios, esto aborta, s. y también hacerlo en cuando el anfitrión esté muerto, cuando el anfitrión esté muerto, abortamos esto, abortamos Una cosa fácil de hacer es secuencia de paso del CVI por aquí, conectivo Aquí, va a ser el último porque entre ellos, vamos a poner tiro. Y lo que voy a hacer es en lugar de verificar la patrulla, es que voy a comprobar si hay aturdimiento Y si nos quedamos atónitos, no estamos haciendo nada, eso sería. Estamos atónitos. Lo sé, a lo mejor tú también estás aturdido, pero así es como funciona Este es sencillo. Y nos vamos a dejar a sí mismos si cambiamos de condición de. Ahora, creo que este podría ser un buen punto de ruptura. En la siguiente, vamos a hacer la lógica de tiro porque si no estamos patrullando y debemos verificar si estamos disparando Y por último, comprobamos si hay aturdimiento. Entonces, te voy a ver entonces. Adiós. 121. Modo de ataque con IA y comprobaciones de la línea de visión: Hola, y bienvenidos a Game Design Workshop Under engine five Procesal Dungeon action RPG Creation curso Anteriormente, creamos la tarea BT para elegir la ubicación. Creamos tres variables, las claves de puerto Black, y una de ellas es la ubicación del host. El otro es el traslado a ubicación, y el otro es el anfitrión está muerto. Entonces, si el anfitrión está muerto, estamos eligiendo una ubicación alrededor de nuestro jugador. Si no está muerto, estamos eligiendo una ubicación alrededor del anfitrión. Y estamos estableciendo esa ubicación para nuestra mudanza a. Después se procede a terminar de ejecutar con un cuarto éxito. En nuestro árbol, lo agregamos después de la pregunta si el jugador está muerto. En nuestro selector, lo primero que estamos comprobando es si nuestra IA está en estado de patrulla. Si está en estado de patrulla, estamos eligiendo esta ubicación de tarea aleatoria. Estamos usando esta tarea, que es elegir una ubicación aleatoria. Nos trasladamos a esa ubicación. Si el anfitrión está muerto, estamos esperando 5 segundos. Si no está muerto, seguimos corriendo en modo pánico. Y luego agregamos otra condición, otra secuencia, si esto falla. Tratará de comprobar si estamos atónitos, y si estamos atónitos, no va a hacer No. Vamos a crear nuestro ataque ahora mismo. Pero esta vez otra vez, necesitamos un selector. Porque vamos a verificar entre dos cosas para verificar si estamos ingresando una u otra, porque el selector se detiene cuando uno de sus hijos tiene éxito, por lo que no pasará a la siguiente Ahora, usemos una secuencia en realidad. Pongamos valor al decorador Blackboard. Seleccionemos el decorador, que sería la llave de pizarra, nuestro estado es igual a atacar Por supuesto, abortará por sí mismo. Oh. Consigamos nuestra secuencia. Lo primero que debemos verificar es, es nuestro actor en rango. Vamos a enumerar la variable in range aquí. Ponle un decorador, pizarra. Rango. Eso en realidad no establecido. No estamos en rango si estamos en un estado de ataque, y no estamos en rango, vamos a ponernos en rango. Para ello, vamos a necesitar otra tarea. Vamos a poner esto a la tabla de surf también. Sabes qué, en realidad, no nos pongamos adelante. Si no estamos en el rango, vamos a intentar ponernos en rango pase lo que pase. Incluso si el jugador entra repentinamente en nuestro rango, aún deberíamos ir a la posición a la que decidimos ir. Hará que parezca que la IA va a hacer algo, vamos a crear ansiedad. Vayamos ahora a crear nuestra tarea, llamémosla paso hacia el objetivo. Nueva tarea, en ritmo, y llamemos a esto pupilos y entremos. Vamos a utilizar el evento ejecutar de nuevo. Exuda IA Y lo primero que debemos hacer es acaso ya hemos atacado y estamos rotando hemos configurado la rotación para que rote al controlador. Tenemos que rotar al movimiento de rotación. Estamos enviando a nuestro plano de IA. Esta es la bala que ahora mismo, vamos a mover, y necesitamos usar la rotación de orientar al movimiento. Porque cuando estamos atacando, usaremos la rotación de orientar al controlador. No, servicio bacor, esta tarea bactor. Lo siguiente que debemos hacer es hacer una pregunta. Entonces vamos a poner una rama Bueno, la pregunta sería, puedo llegar a un punto al lado de nuestro jugador? Encontramos un punto Básicamente, vamos a volver a crear una fórmula matemática para crear un círculo alrededor de nuestro personaje. Y si podemos llegar a un punto en ese círculo, va a ser cierto. Si no lo es, va a ser falso, y vamos a terminar de ejecutar sin éxito. Entonces esto volverá a correr. Va a fallar. Entonces cuando el primero falla, aborta, y luego los tres vuelven a correr e intenta encontrar otro punto Oh, ¿cómo hacemos esto? Bueno, empecemos por nuestra fórmula circular. Entonces vamos a conseguir a Pi. Vamos a multiplicarlo por dos o un valor máximo, y vamos a obtener un rango flotante. Y el mínimo sería Pi, y el máximo sería i cuadrado básicamente, pi cuadrado, lo siento, dos Pi, do Pi cuadrado, necesitaríamos multiplicar con italf Y a partir de esto, vamos a conseguir. O seno, asegúrate de que sea un resplandor y grados, y entonces vamos a conseguir un resplandor sinusoidal tiene que ser persistente Vamos a multiplicar esto por 500. Entonces ese sería el rango básicamente. Y luego tenemos que agregarlo a ubicación de nuestro jugador para que el jugador se ponga, obtenga una ubicación a. Y vamos a frenar. Split es cuando lo estamos eligiendo aquí. Freno eligiéndolo con el pasador. Y desde la Z, vamos al punto de trapo aleatorio en radio No queremos eso para radio. Eso queremos. En realidad, esto es un radio, no el 500. También es para x, vamos a usar esto, para, vamos a usar esto y para y, vamos a usar el letrero. Ahora, conectemos esto a la condición, el valor de retorno si lo encontramos o no esa ubicación, si es lote alcanzable, y lo es, necesitamos decirle al controlador de conexión, brunch Mirar los nodos y mirar el código puede ser difícil a veces. Tenemos que conseguir este controlador y establecer el punto focal. Eso es correcto este año. Y por supuesto, necesitamos un valor de clave de pizarra, así que Selector de teclas Black board Todos estos son MB hasta aquí y carecen de valor como vector aquí. De hecho necesitamos promover esto a una variable porque si la usamos dos veces, y vamos a obtener dos veces en punto aleatorio. Y luego vamos a terminar. Acceso. Esto sería pedir guardar. Hagamos la llave bd. Valorar público, virar el I o ir a editar. Volvamos a nuestra mesa, y de nuestra secuencia llamamos a los PTs al blanco. Vamos a seleccionar esto. presentado s ahora vamos a seleccionar esta sea nuestra mudanza a la ubicación. Entonces sólo tenemos que pasar a. Nos trasladamos a la ubicación, que tenemos la patrulla, así que copia aquí, que tiene la variable ya establecida. Aquí. Y eso sería desde un lado. Entonces, si estamos atacando y no estamos en el rango, estamos encontrando un lugar aleatorio. Estamos tratando de encontrar un lugar aleatorio cerca del jugador y movernos a allí. Hasta que lo encontremos, estamos atrapados en este bucle de aquí. Ahora, sigamos al siguiente. Va a ser una secuencia otra vez. Este correrá en base a dos decoraciones. El uno, el rango estaría en rango. Agreguemos otro o k. Y este sería también es por sorpresa, necesitamos otra tarea aquí. Pero creo que este es un buen punto de parada para este. Vamos a continuar en la siguiente. Adiós. 122. Optimización de volumen y búsqueda de caminos de navegación con IA: Hola, y bienvenidos de nuevo al taller de diseño de juegos y motor real cinco, creación psic de acción de Dungeon procesal Anteriormente, comenzamos con nuestro poner parte de nuestra parte de nuestro estado es igual a atacar a nuestro árbol de comportamiento. Entonces, si es igual a atacar, estamos comprobando si nuestro personaje está en rango o no. Si no está dentro del alcance, entonces estamos tratando de encontrar un paso hacia el personaje, movernos a la ubicación hacia el personaje, y nos movemos a esa ubicación. ¿Cómo logramos esto? Bueno, estamos poniendo nuestro movimiento a rotación. Entonces el personaje se mueve en base a su rotación. Y entonces estamos consiguiendo un punto alrededor del personaje. Estamos haciendo algunas matemáticas aquí para crear un círculo alrededor del personaje, y estamos comprobando un radio 200 radio de 200 alrededor del punto de radio 500 que estamos creando el círculo, estamos haciendo el círculo y a partir de ese punto, obtener otro radio 200, básicamente. No, la razón por la que hacemos eso. No le expliqué tanto esto es porque realmente no queremos tomar un punto alrededor del jugador y solo ir aquí. Toma este punto y otro radio 200 tal vez nos alejemos un poco más del personaje. Hay más posibilidades de que eso suceda. Podría haber formas más intrincadas hacerlo más fórmulas matemáticas, más condiciones Pero creo que este es un buen trabajo alrededor para un resultado rápido. Entonces, después de eso, si no es cierto, estamos regresando ejecutar falso. Entonces nuestro tetrac en un bucle aquí hasta que encuentre un punto correcto Y si no lo hace, si encuentra el punto correcto, establece el punto focal local del mouse, y establecemos el valor de la clave de pizarra y terminamos de ejecutar como true Para que podamos movernos a esa ubicación. Entonces empezamos con nuestro lo que pasa si el carter esta en rango y tambien esta en apretado. Ahora bien, cómo va a salir esto , cómo vamos a jugar, vamos a crear una tarea, una tarea para esperar, una tarea para disparar, y una tarea para reiniciar el rodaje. Entonces, comencemos con la am, nueva tarea, base de impresión. Llamemos a esto Am, por supuesto, vamos a necesitar el recei t. Asegúrate elegir la IA ejecutar, no solo ejecutar Vamos a enviar que necesitamos la rotación del controlador para que el mensaje del controlador. Y vamos a establecer punto a partir del punto. Y vamos a conseguir p y vamos a estar atentos. Entonces estamos usando la rotación del controlador. Estamos fijando el punto focal, y éste girará hacia ahí. Entonces vamos a terminar de ejecutar. Ahora, hablando de la rotación del controlador que es el punto. Hay una manera de controlar la velocidad de rotación. Entonces, si vamos a nuestro personaje de IA, vamos al movimiento del personaje y tecleamos rotación, aquí hay ciertos ajustes, y hay uno de ellos llamado configuración de rotación del movimiento del personaje, que está ahora mismo en 40 en adelante, vamos a reducirlo a 360. Pero esta es la tasa que está rotando básicamente. Como puede ver, el cambio en la rotación por segundo utilizado cuando se establece el control de la rotación deseada u orientación al movimiento. Pero esto controla la rotación en ambos casos, o el control de rotación deseado o la rotación de orientación al movimiento. Ahora, volvamos a nuestro BT y cuando terminemos de ejecutar, debemos forzar el éxito. Volvamos a nuestros tres y llamemos a esto tarea. PTT A. Lo siguiente que debemos hacer es esperar. Ahora, vamos a cambiar un poco los ajustes de peso. Tener un tiempo de espera por aquí, así que vamos a esperar 0.2 segundos. Te vamos a dar una desviación aleatoria de 0.1. Entonces podemos esperar 2.3 segundos o 0.1 segundos. Y eso creará una sensación aleatoria de cuando la IA está atacando. Y aquí viene la siguiente parte, que es que vamos a estar filmando. Una nueva tarea otra vez. Ser base de impresión. Llamemos a esta toma de tarea BT. Consigamos la ejecución. IA. Esto es muy sencillo. Lo que tenemos que hacer es conseguir nuestro control pm y mensaje porque ya hemos hecho el código para disparar. Ahora, podemos poner una tarea de peso en nuestro te, o en realidad podemos poner un retraso aquí. Porque después de que disparemos, deberíamos demorarnos por. Vamos a retrasar para un rango aleatorio. Rango flotante aleatorio, lo siento, de 1.4 a 1.1 0.6. Terminemos de ejecutar. Estoy haciendo esto así y no consistente porque quiero demostrar que hay muchas maneras de hacer las cosas. No hay una manera, y realmente no tiene ninguna diferencia si pongo el peso aquí. Entonces básicamente la diferencia es que a lo mejor esto abortará si aborto yo mismo Pero la tarea abortará también cuando aborte yo mismo. Entonces, hay muchas maneras de hacer las cosas. Sólo tiene que funcionar. Oh, llamemos a disparar. T es la sesión de tareas. Y ahora reiniciemos sesión, así que necesitamos una nueva tarea para traer la sesión de reinicio de tarea base. Y lo que vamos a hacer, lo miraremos porque vamos a establecer las variables, vayamos al árbol y mostremos esto. Vamos a establecer estas variables en false. Entonces para que se fijen en verdad. La garrapata necesita volver a correr. Va a necesitar verificar cada 0.3 o 0.5 en estos números, et ellos de nuevo a true. Entonces esta es otra forma de crear un pequeño retraso. Ahora, vayamos a resetear el rodaje. Vamos a recibir exudados. IA. Solo necesitamos en realidad crear dos variables, claves de pizarra o negras Pizarra llaves elector, y una de ellas será Bp. El otro sería rango PB. Esto da la oportunidad también cuando el jugador se mueve fuera de rango. Ese retraso, ese retraso, por ejemplo, cuando salimos de rango entre los segundos nos da oportunidad de acciones más complejas si quisiéramos. Entonces, volvamos a esto y al valor de desplumar. Valores y acabado ejecutar. En cuanto a que estamos poniendo estas dos caídas, y debemos hacerlas públicas. Podemos establecerles nuestra IA. Tres aquí compilan. Yo creo que estoy eligiendo el evento equivocado. Sí, eso debe ser , así que B t este conjunto. Y aquí, claro, están aquí. Apretado en el rango. Básicamente, esto es para. 123. Volumen de navegación y optimización: Hola, y bienvenidos de nuevo al taller de Diseño de Juegos, y motor real cinco procesales Dungeon action AR Phys curso de creación Ahora, para que se mueva y haga todas nuestras cosas maravillosas. Como podías ver en cada tarea que necesitábamos un punto aleatorio o un movimiento hacia, necesitamos un dato nervioso, que en realidad no lo necesitamos porque puede obtenerlo automáticamente. Pero lo que vamos a hacer es que vamos a crear un volumen enorme. Esto. Entonces necesitamos otro volumen de rebote de malla. Establezca su ubicación en 00. Pongamos su a cuatro K en todas partes. Podemos aumentar mucho su altura porque estamos empezando en 00, así que tal vez. Sí, eso son 30 k. Si esto es cero. Esto es lo que hace que nuestro no pueda ser infinito porque no podemos mover la navegación me libra planos de volumen Como puedes ver, intenta construir el volumen de navegación, aunque no haya nada en él. Pero sí necesitamos hacer algunos cambios. Voy a construir. Vamos a continuar después. Y permítanme demostrar por qué necesitamos estos ajustes. Se trata de un enorme volumen de navegación. En primer lugar, demostramos que necesitamos ir a la configuración del proyecto, algún tiempo, que es un entorno de nación, y queremos que sea dinámico. Yo presiono Lo último, tenemos que cambiar el perno de refundido a Es generación de tiempo de ejecución , entonces estoy bien. Lo obtuve de la configuración del proyecto. Ahora bien, si presiono play, para ver un poco fornido Y si elijo nación, Así que si elijo navegación, puedes ver. Es un área grande. Se bs navegación incluso en los tejados. Entonces sí, es un área grande, y cuanto más brazo grande va a conseguir más áreas que tengamos, y se va a ensuciar Va a conseguir realmente frame y toda esta IA moviéndose a su alrededor. Para cambiar esto, vamos a usar algo. No se supone que seas honesto al hacerlo así como este edificio en tierra tiempo en una enorme zona de navegación. Pero cualquier otro sistema requeriría mucho tiempo y trabajo para completarse y splus plus Pero para ser justos, se puede lograr un poco de optimización a través de planos y Para nosotros, lo que vamos a hacer, voy a dejar la navegación en realidad es que vamos a volver a ir a la configuración del proyecto. Vamos a buscar invocadores. Bien. Así que vamos a utilizar esta configuración generar navegación solo alrededor del invocador de navegación ¿Y qué es la navegación en Oker? Entonces básicamente, son son una herramienta, una herramienta que se utiliza para generar y gestionar dinámicamente medidas de navegación, los meas básicamente en entornos de un mundo grande o abierto Demostremos esto. Vamos a agregarlo a nuestro personaje. Vamos a nuestro personaje de arriba hacia abajo. Agregar Voker, navegación en Vocer Vamos a optimizarlo un poco porque 3,000 radio es grande, así que voy a hacer un radio de eliminación 200 400 Quieres que el radio de remoción sea un poco más grande que la generación, por lo que crea como un rastro para que lo elimine. Así que vamos a presionar play ahora. Expulsión de L et. Y ya se puede ver, el lío de navegación, lo que se está calculando sólo en torno a nuestro personaje. Entonces, vamos a hacer lo mismo con nuestras IA. ¿Cuál es este error por en rastro por jugador, Porque la IA existe antes que el jugador. Esto es un problema. Realmente no importa. Es un error nulo. No pudiste encontrar al jugador ni por un segundo. Vamos a repetir. En realidad, volvamos a nuestra IA. Agreguemos el invocador L et's establece su radio de teja 2200400. Veamos en realidad la IA. ¿Cómo puedo? No, nosotros no. Pero sí tenemos una llave. Pasemos a lo anterior. Oscuridad otra vez. Mis algunas sombras. Tenemos que cambiar el vino al elevador. Mejor. ¿ No hay IA aquí también? Hay IA. Bien. Ahora, podemos IA si está haciendo algo. Por el momento, parece que se está quedando. Oh, a deba fácilmente, vayamos al árbol. S. y no puedo encontrar, lo sé. No le hemos dicho a nuestros pons, que están siendo controlados por esto básicamente Porque si no ponemos a nuestro pon que ellos IA, no lo sabrán. Piensa que tiene sentido. Entonces en el detailb, en el valor por defecto b básicamente, va a buscar controlador de IA En lugar del controlador de IA genérico A, vamos a usar nuestro uno, AIC N one, y ahora están siendo controlados. Empecemos de nuevo, y aquí sí tenemos una IA. Pero otra vez, no hace nada. Esta vez por una razón diferente. No puedo encontrar mucho de nuevo. B. ¿Pero yo sí? Oh, este es el personaje. Mi error. Volvamos a la IA. Aquí es donde tiene que estar. Entonces la IA necesita que la IA la controle, no el personaje. Así que vamos a jugar. Ja. Juguemos de nuevo. Tienes IA. Genial. Y no hace nada. Y aún así encontrar mucho. Bueno, sí tiene sentido. Lo siento. Sigo olvidando lo básico. Al igual que la autoposesión A por encima del controlador enemigo IA, eso es un lugar en el mundo donde no estamos colocando la Estaríamos colocando si estuviéramos depurando en un mapa diferente, pero ahora mismo nos han colocado o generado porque estamos generando esta IA Nosotros, compilamos y guardamos, Tercera vez, cuarta vez, tiempo de enfermedad es el encanto. Y veamos que no se mueve se está moviendo. Genial. Moviéndose, pero la animación no se está actualizando. Impresionante. Bueno, arreglemos esto en la siguiente. Voy a llamar a verte entonces. Adiós. 124. Comportamiento de acabado de disparo y depuración: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, Rail Engine five Procesal Dungeon action en el curso de creación de Pred Anteriormente, terminamos con nuestra IA, y agregamos también nuestro volumen de respuesta de navegación, y agregamos también nuestros revocadores de navegación También terminamos con nuestras tareas de BTT. Creo que se les explicó suficientemente bien. Ahora, teníamos algunos errores que corregir. En primer lugar, vayamos a nuestra IA de aquí, donde todo este plano de animación de IA Donde está recibiendo toda esta información del dueño de pw, intente obtener Peón Pero esta vez, nuestro por dueño no es un jugador. Entonces esto podría estar fallando. Pero lo que vamos a hacer es en el plano comenzar a jugar. Vamos a tratar de conseguir dueño de Pw. Y vamos a pedirle a AI AI e one, que haga puro reparto y promocione a estos dos personajes. En realidad, voy a como lo llaman AI personaje personaje fue tomado. Y vamos a cambiar eso. Ahora bien, a. la razón por la que estamos haciendo esto es porque queremos cambiar aquí, que rompemos la forma en que lo tenemos para conectar aquí, esto va aquí. En lugar de ponerse Acceler actual ¿qué es esta búsqueda por aquí Para eliminar esto por aquí, y conectar el personaje con nuestro movimiento de personaje. Y lo que vamos a conseguir es la velocidad. Que va a ser al final, y vamos a conectar esto aquí. La razón es porque la aceleración no funcionaba realmente con la forma en que se mueve nuestra carta. Entonces, vamos a compilar, s, vamos a jugar, y ahora se supone que nuestra IA se mueve. No hacer nada. No, no, se mueve. Genial, y está construyendo más navegación, como puedes ver a su alrededor, se puede mover a cualquier otro lugar. Ahora, intentemos atacarlo. Nos ve, nos mira. Y no hizo nada, lo que nos dio la vuelta. Haz este error y mira qué está pasando. Abre el juego. Esta ficha. Voy a expulsar de aquí, voy a seleccionarlo, seleccionar la IA Porque la forma de encontrarlo aquí, aquí, hay que tenerlo seleccionado. Debería decir seleccionado, bueno no. Bien. Tratemos de igualar qué IA es cuál porque aquí hay dos, o se mueve. Pesos. Ambos están esperando. Creo que éste es éste. Este completamente retrocedido, porque éste sigue moviéndose. Entonces hay que decir cero. Sí, que en realidad no está haciendo nada. ¿Por qué no hace nada? la vuelta. Lo dispararía por error, y es una comprobación constante O AI de los seleccionados el estado o tenemos? A es un Déjame intentar depurarlo. Bien. Después de un poco de depuración, me doy cuenta de que he creado este mango por aquí, pero nunca lo usé No, básicamente, lo que tenemos que hacer es cuando empezamos a superponernos aquí. Y cuando pegamos con el jugador, estamos en rango, deberíamos comenzar nuestro tiempo. Despausamos el tiempo de unpause por mango, cuando el rango en el rango, comenzamos a buscar a nuestro jugador Y claro, al morir al morir , aquí está, justo después de la muerte, volvamos a conseguir el asa y despejarla e invalidarla Ya no se ejecuta, ni siquiera en pausa. Oh, el siguiente lugar sería ir a nuestro PT tarea pisada hacia objetivo. Otra vez, aquí cometí un error. No agregué la ubicación de los jugadores de punts. Eso es lo básico como esta gama en comparación con dónde. Sólo voy a añadir. Agregar y esto x esto. Sé cuando tienes un punto, necesitas decirle en qué parte del mundo. Hemos estado sobre esto. Por supuesto, el siguiente lugar sería nuestro también hicimos algo. Bala BP AI. Estoy preguntando si el componente tiene remolcador E, que es si el actor ha cavado porque lo tenemos en el actor y no en el tubo de colisión, la cápsula de colisión Creo que me doy cuenta del problema donde no podíamos disparar, además, vamos a nuestro personaje BP de arriba hacia abajo, y cuando nos estamos dañando y nos estamos quedando atónitos, y luego seguimos vivos Ellos son. Encendemos el estado. Y si ya estamos atónitos, entonces vamos si estamos presionando tamizar Si no estamos presionando turno, volvemos al estado para cambiar de estado a la normalidad Si estamos pasando turno, sin embargo, vamos a retrasar y pararnos no enfriarnos, lo que no volvemos a AM. Para lograrlo, iremos a nuestro am mecánico, crearemos un evento personalizado, am Así que cuando presionemos el tamizar izquierdo, no necesitamos hacer esto porque ya está abajo, y vamos a conectar esto aquí porque no queremos pasar por esta prueba Entonces para la animación de muerte de nuestro enemigo que estaba de pie, necesitamos ir a buscar nuestras páginas de montaje animación de animación de montaje, y necesitamos Hay En realidad lo basamos aquí. Esta animación necesita donde tenga esta opción, habilite auto blend out. No queremos esto. Si queremos que se quede ahí. Lo mismo hacemos para algunos otros como lo es la animación knockb Así que vayamos a nuestra animación knock back y seleccionemos el auto blend out para que sea falso. Y a la muerte de nuestro personaje. Entonces vamos a renacido. Encuentra la muerte. Como la muerte aquí, la muerte no se mezcla, y a nuestro fuego primario. No queremos que se difumine. Y ahora podemos ir a jugar a prueba. Bien. ¿Me lo dijo? P la torre. L la torre. Sintonízame. Entonces T poco necesita seguir la rotación. Una cosa más. Nuevamente, en el proyectil de la bala, vamos al movimiento del proyectil, vamos a seguir la rotación sigue Yo como poner un poquito de sonido. Mira lo que está pasando ahí. Hacer ejercicio. Por favor. Es en las porciones. Pecho grande. Ya tengo la llave. I. Siguiente nivel. Veo en la Mara 50 gramos. Tenemos un montón de anuncios abiertos y cerrando. 60 PS, ¿verdad? Creo que esto es causado por la IA y el volumen de navegación. En tiempo de ejecución, sería un poco mejor, tal vez mucho mejor. Enemigos pisando trampas, otra IA. Y molesto que lo que está pasando aquí? Estoy tratando de mudarme aquí. Golpear de pie correctamente. Pero estoy calentando y está tratando de moverme donde estoy calentando. Si hago clic, sigo caminando. Pero me estoy muriendo, estoy consiguiendo una puntuación, ¿verdad? Tenemos un problema en movimiento y calefacción. Pero creo que vamos a necesitar otro terreno. Entonces vamos a dejar eso para entonces. Adiós. Nos vemos entonces. 125. Corrección de errores finales y pulido de juego: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, y motor real cinco Procesal Dungeon acción RPG curso de creación Entonces, finalmente, en nuestra última lección de depuración. En primer lugar, arreglemos el laberinto interminable en realidad no interminable, sino corriendo del motor Entonces lo que pasa es que cuando estamos posponing el primer azulejo, estoy haciendo la pregunta equivocada, la dirección fuera del sitio, y el no ser igual a la Pero porque estamos compensando el laberinto en función de la dirección de desplazamiento Nuestra dirección de desplazamiento se convierte básicamente en lo contrario. Nuestra última salida no debería ser la opuesta a nuestra dirección de desplazamiento porque digamos que ejemplo, nos movemos hacia el norte, entonces O dirección de desplazamiento es norte, pero sur se convierte en la t que no debería ser igual. El sur se convierte en la baldosa de la que venimos, el elevador. Entonces como Sur se convierte en la baldosa del elevador, entonces la última salida no debería ser el elevador. Sea cuando esto sucede, entonces crea un laberinto de tamaño uno y descompone completamente el sistema y hace que el motor se estrelle. Entonces lo que haremos es hacer switch select. Y vamos a la última salida aquí para que podamos conseguir esto. Y luego voy a desconectarlo. Desde el Norte, necesitamos el Sur, F este, necesitamos el Oeste del Sur, necesitamos el Norte y del Oeste, necesitamos Oriente para el sentido opuesto al ofosit La última salida no debería ser igual a lo contrario. Pero cuando estamos exting el estilo, no debería ser el elevador Entonces esto era lo que estaba provocando que el motor se estrellara. Tenía una de cada cuatro oportunidades, es un bicho bastante malo. Pero de todos modos, simplemente lógica, fue solo porque estamos compensando hacia esa dirección. Lejos. Ahora bien, el siguiente error que está ocurriendo es que a veces genera un laberinto que el siguiente laberinto, el continuar, no se puede dejar la primera cuadra Y eso es porque estamos fijando la última salida, pero no estamos fijando las direcciones. No estoy fijando las indicaciones. Entonces básicamente, en la primera salida, estamos fijando la dirección para que sea verdad. Pero no estamos haciendo esto tuve la depuración aquí. Comentario de depuración. No estamos haciendo esto aquí. Voy a poner esto aquí. Voy a mover esto un poco más allá. Pero ahora tenemos que informar al estilo que tu dirección está abierta hacia la última salida, y vamos a conseguir la última salida, aquí. Entonces eso estaba causando este error. Ahora, nos quedamos con algunos temas de movimiento tiroteos y problemas de movimiento. Entonces vayamos primero al controlador del reproductor. Por error que he cometido. Bueno, hay mucho que no he detectado, pero en un tamaño de proyecto, por supuesto, obtener ubicación bajo Kursor Entonces en nuestra función, obtener ubicación bajo Kursor, estoy comprobando la visibilidad para obtenerla debajo de la ubicación de Kursor Entonces cuando no está golpeando nada y cuando no está tomando en cuenta los colisionadores de esfera, esto devuelve valores equivocados basados en otras colisiones que existen en nuestro mapa Entonces voy a convertir esto a cámara, y esto arreglará eso. Y luego vienen los temas de tiroteo. Entonces, cuando estamos filmando, debemos cambiar, de pinchar. Entonces, cuando estamos filmando, cuando estamos en mejorar la detección de entrada haga clic, y se activa. Y estamos rondando sobre un objetivo, estamos en un estado normal, y estamos flotando sobre un objetivo, y estamos disparando Deberíamos estar parando el movimiento. Porque si no estamos deteniendo el movimiento, entonces esto se enciende antes y como está en ti, sigue moviéndose. Entonces deberíamos estar parando el movimiento. Y otra cosa que fastidia es por aquí cuando estamos haciendo el punto de mira Entonces, En la cruz, estamos comprobando cuándo ahora mismo, este es el cambio que hay que hacer. Entonces lo que estamos haciendo es verificar si estamos bajo enemigo, nuestro Hursor está bajo un enemigo, y luego cambia Pero si estamos aguantando si estamos en am estado, no estamos cambiando el objetivo. Sólo lo estamos poniendo en cruz, blanco rojo. Ese no debería ser el caso para ser honestos porque en la posibilidad de que nos miren, una de las cosas que pueden pasar es que cuando conseguimos stan, AM cambia temporalmente a stan Entonces esto sería bg entonces lo que voy a hacer es eliminar esto e ir a la primera pregunta y simplemente obtener la referencia del jugador, estoy abajo y hacer una. Entonces si estamos pegando enemigo o am está abajo, entonces estamos teniendo maldición cruzada. Si no lo estamos, entonces estamos teniendo el cursor normal. Entonces, este debería ser el cambio, y este debería ser un punto de control central, es mejor que tenerlo como opción aquí, como la primera pregunta es la que cambia las cosas. Así que avancemos a nuestro personaje de arriba hacia abajo. Y cuando estamos apuntando, también debemos detener el movimiento. En el turno a la izquierda, apunte , etcétera, etcétera, etcétera. Por aquí, antes de tocar nuestro montaje, detengamos el movimiento en realidad, incluso antes de Estas dos cosas Vamos a conseguir nuestra referencia de controlador de jugador, voy a dejar de moverme. Ahora, hay un movimiento de parada para la navegación, que no es el nuestro, si acaso te pierdes click y usa esto en lugar de esto. Es dejar de moverse, no detener el movimiento. Deja de moverte. Si llamo al otro. Detener el movimiento. Verás, es una función diferente. objetivo es controlador cuando este es el objetivo es BP controlador de arriba hacia abajo. La lógica detrás de esto es para la IA, y para ser honestos, generalmente, creamos nuestro personaje para que sea una IA, eso solo cambia de estado, pero eso es un poco más avanzado. Ahora bien, lo siguiente que debemos hacer y bichos fuera del juego está por aquí, cuando estamos reiniciando ataque, cuando estamos reiniciando ataque, estamos bajando el arma Entonces cuando estamos bajando el arma, pase lo que pase, significa que cambiará de estado a la normalidad, aunque estemos bajando el arma porque nos interrumpieron o porque disparamos y necesita reiniciar el ataque. Entonces aquí necesita una pregunta ¿Baje mi arma o no? Y este es nuestro objetivo hacia abajo. Si estamos apuntando hacia abajo y es verdad, no baje el arma. Si no es cierto, entonces baje el arma. Se trata de hablar de esta rama de aquí, sí la usamos en otro lugar, que es nuestro daño. Entonces, cuando estamos recibiendo daños, estamos volteando para aturdir, y existe la posibilidad de que no volvamos para aturdir Siguiendo esto, si no estamos muertos. Si estamos muertos, solo hacemos las cosas de la muerte. Pero si no estamos muertos, estamos tocando el montaje de calor y con base en el estado del jugador estamos cambiando Si nos estamos quedando atónitos y vamos y el objetivo está abajo, solo estamos configurando el retraso y la estadística en enfriarse y no cambiar nada Esto significa que nos estamos quedando en el aturdimiento estatal. No queremos esto. Lo que queremos hacer es estar en la puntería estatal. Si no estamos invirtiendo estado, entonces nos quedamos stan, y es por eso que no podemos movernos en algunos puntos luchando contra la IA. Solo nos quedamos Stan mientras presionamos turno, y no pasa nada. Simplemente nos quedamos Stan para siempre hasta que realmente cambiemos, y esto corre hacia la otra rama. Entonces, básicamente, esto estaba bloqueando nuestros estados siempre y cuando estuviéramos presionando turno, y esto ojalá lo arregle. 126. Parches de errores importantes en el juego: Hola, y bienvenidos de nuevo al Taller de Diseño de Juegos, L motor cinco procedimientos Dungeon acción ApS creación cours Ahora, lo siguiente es que nuestro elevador tiene un problema con nuestra cámara. Tienen otros problemas, pero el más claro es una cámara porque copiamos el proceso de post pegado, pero sí lo configuró en uno y uno, pero no lo habilitó Por lo que deberíamos permitir que la exposición en 11 en Min Max sea 11, y eso arregle la iluminación que se vuelve demasiado intensa. Ahora, lo último que debemos hacer es agregar nuestra niebla. Vamos a ir a sumar cosas, niebla ocho exponencial. Esto es lo que queremos. Vamos a leer. Si empezamos aquí, queremos que la niebla sea un poco más baja. Juguemos por un segundo. Ahora, no he puesto las cosas. Vamos a establecer los detalles de la gente. Vamos a establecerlo en -700. Voy a aumentar esto, ser más visible porque esto es muy molesto. Déjame cerrarlo para esto. Bien. Aquí no hay más cosas. Entonces, ubicación, -700, pongamos fk densidad dos. Sé que el valor va en 2.5, pero veamos. Le pegué a Alo, digamos 22. Y y eso sería todo. Vamos a establecer también. Me acostaré con algo rojizo Entonces tenemos un color rojizo a la niebla. Y creo que eso sería todo. Sí. Yo, por favor, juego ahora. Es un poco der y es un poquito y esto va sd. Ah, y déjame alternar las flechas otra vez porque podemos ver las flechas. Lo dejé de depurar en realidad. Ve a las flechas de alternar donde estas Toggle flechas. Yo depuro, aquí estamos. ¿Bien? Está conectado esto porque quería ver qué está pasando mientras estaba depurando Es un poco más oscuro de lo que esperaba, pero esto hará que las luces también sean un poco más amigables. Pero para ver un poco mejor al personaje, vayamos al personaje en la viewport, porque el personaje no debería ser tan oscuro Pongamos una luz puntual aquí. Llamemos a esta luz de personaje el radio radio del carácter. Y cambiemos esto a lumen en realidad. 100 es mucho, digamos 50 el radio 50. Podríamos tener artículos, por ejemplo, que incrementen este blo hace Como radio 70, tal vez 100 no hace sombras de nuestro personaje, 100 tal vez fuera de fuente 50 o longitud 70 un poco demasiado lejos de los personajes de 100. Si tienes tu punto de vista equivocado, podrías perderte un poco los valores. E. El zapato creará algunas sombras. Está bien. Está bien. No. Es un poco raro, aún así. Quiero decir, realmente enfocado en el centro. Cambiemos el color att bit a algo más carnoso. Aquí. Ocho. A lo mejor ponemos un poco encendido hacia arriba. Usa este 70. ¿Sabes qué?, No iluminemos al personaje con esto sino iluminemos el piso alrededor del personaje. Lo que vamos a hacer es ir al canal de la luz. Que encienda el Canal dos, no nuestro personaje. Y rápido, vayamos a nuestros azulejos. P azulejo e ir a nuestro piso. El canal también estará iluminado por el canal uno, básicamente no por dos, porque está basado en cero, el canal uno. Veamos cómo se ve esto. Sí, tenemos un radio de luz, y podemos aumentar un poco el relámpago de nuestro mapa. Vamos a los detalles 1-4. Yo nos fos ale poco mucho, pero todo es mucho más visible. Y cuando vayamos a las próximas sombras, podremos ver nuestra luz. Todo bien. Ahora, No, se honesto es demasiado ligero. Pongamos este 23. Luz en tres. Yo a ser un poco demasiado ih. T dos que parece hacer el truco. Mucho mucho mejor. Ahora bien, si voy y me mudo a otro piso el elevador. Aquí al otro lado, sí tenemos la llave Pops. El personaje se cayó, pero en realidad no importa. Sólo voy a elevar o ubicación. P abajo carácter, aquí estamos y pega. También activamos el elevador. Voy abajo, se vuelve un poco más brillante porque la niebla realmente no sigue. Pero lo que hacemos. Volvamos al elevador y comencemos el juego del elevador, donde esta esto Siempre bien con. Ahí estamos. Ps. Aquí estamos. Vamos a conseguir todas las puertas traseras de clase. Vamos a conseguir la niebla niebla, vamos a conseguir la primera copia que encontremos porque solo tenemos una, vamos a promoverla a una variable llamada esta variable fog. En nuestro tickvn, cuando estamos fijando la ubicación del actor. Vamos a establecer la ubicación de las nieblas ubicación del actor. Vamos a necesitar más espacio. Vamos a inter con constante, vamos a mantener la misma velocidad. Vamos a conseguir la ubicación del actor. Ese padre Delta T, vamos a usar Delta. Desde el objetivo, estamos en realidad vamos a usar esto exactamente esto”. va a necesitar un nuevo original y un nuevo objetivo. Entonces voy a promover esta supervivencia a original. El último en conseguir. Vamos a poner esto cuando las vallas estén subiendo. Para estar seguro ahora. Creo que esta animación de inicio, estas son las vallas subiendo. Entonces vamos a conseguir nuestra niebla, voy a conseguir una ubicación. Voy a establecer la ubicación original de la niebla a esto. Y agreguemos a esto lo que es la altura del laberinto. Agregamos 2900. No. 2500. Ese es el ascensor, ¿no? Sí, ese es el lugar del ascensor, debería ir, y el laberinto está subiendo cuando respondemos al laberinto. Esto podría ser una variable a 2500. Esa es la ubicación de la niebla, 22500. Voy a copiar este plus por aquí hasta aquí. Esto, voy a establecer la ubicación objetivo a esto. Me conecto este año, conecto este año. Y esto era jugada para ser jugada. Todo bien. Y la niebla viene con nosotros. No se ve realmente como una niebla, pero sí le da esta coloración y sombra O ahí había unas enormes patas de marco. Ocurrió. ¿Ves? Esto viene el problema con s. No arreglamos esto. Arreglemos esto por un segundo. Ailes. De veras no me gusta verlo. ¿Dónde está aquí? Voy a conseguir este piso solo muévelo un poco. En palabras, no aparece de ningún otro lado. Está arreglado. Lo que hace nuestra niebla, básicamente, no es visible aquí, pero es visible hacia aquí, así que no podemos ver el final de estas baldosas. Y lo mismo será si vamos al siguiente piso, vamos al siguiente piso. Ver lo mismo va a pasar en la próxima. En primer lugar, se desvanece un poco esto. Ahora podemos ver el borde del corte, pero vamos aquí. Mira que no hay corte de borde. Aquí hay un problema, podemos mover las cosas, y supongo que hay otros problemas que se pueden arreglar ¿Este cofre? No estoy en el rango. En fin, como puedes ver, hay de bichos. Listo para estar en el rango. Creo que hemos dado las herramientas para corregir todos estos errores. Ahora. Otra cosa aumenté un poco mi FPS, como pueden ver, la forma en que hice esto es, reduje el volumen del laberinto, el volumen de navegación a 1,000 ahora. Esto no solo no es óptimo, sino que crea muchos problemas, una enorme malla de navegación. No usaría un lío de navegación por esta cantidad de IA. A lo mejor habría escrito algún movimiento personalizado para que ellos se muevan y los bloqueen en eje, y no moviéndose sobre el eje Z o incluso si se mueven sobre el eje Z, solo un simple movimiento a sin navegación, como algunas trazas de líneas, puedes ir ahí, luego ir allí, algo así , un sistema como ese. Ahora bien, otra forma en que podríamos hacer esto, no he probado realmente, pero podríamos haber creado un nivel, un nivel de streaming que estamos cargando, que tiene un volumen de navegación, y cambiamos el montón de técnicas para hacer, básicamente, tal vez escribir un volumen de navegación personalizado en spl plus, tal vez una clase personalizada para ello, como usarlo en una clase diferente que puedes mover porque planos no dan la opción de mover este volumen También podrías volúmenes de nación de esta manera porque si vamos a spone un volumen de navegación, vayamos aquí Acto telefónico plus, Hay una reversión Nav me, hay otras cosas, pero no podemos generar un volumen de navegación Entonces esto está bien escribiendo en Seps más alguna clase que puedes engendrar con un volumen de navegación, tal vez o de nuevo, hay diferentes formas de hacer las cosas básicamente, pero la parte interminable, tener algo sin fin no es realmente posible con las herramientas que tenemos Como que hicimos trampa y creamos este volumen de navegación, y eso fue básicamente Gracias por acompañarnos en esta aventura de Blueprint real engine five donde construimos un generador completo de ungine para un juego de arriba hacia abajo, con enemigos, recoger objetos y Esperamos que disfrutes del curso y aprendas mucho en el camino. Tus comentarios significan el mundo para nosotros. Entonces, si pudieras dejar una reseña y compartir tus pensamientos, realmente nos ayudaría a mejorar y seguir entregando el mejor contenido posible. Gracias de nuevo por tu apoyo, y estamos ansiosos por ver qué creas.