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