Transcripciones
1. Introducción (vista previa del curso): Oigan a todos, y bienvenidos
al Unreal Engine cinco, Curso de
Getting started with
blueprints. Me llamo James, también
conocido como los pocos estudios. Y he sido
creativo del mercado durante los últimos seis años. Y durante ese tiempo
he brindado
apoyo a cientos de principiantes de Unreal
Engine. Y por eso,
he aprendido algunas
de las cosas comunes con las que la gente tiende a luchar a la hora tratar de aprender el desarrollo de
juegos. Estoy arruinado. Jing es uno de los motores de juegos
más populares del mundo
y los planos es su potente lenguaje de
programación visual
incorporado. Los planos nos dan
la capacidad de codificar sistemas
simples o increíblemente
complejos desde dentro del motor sin
tener que escribir ningún código basado en texto. Y es una gran manera de
empezar en el mundo del desarrollo
de juegos. Al inicio de este curso, comenzaremos con
las variables básicas. Estos se utilizan para
almacenar información como la
ubicación del jugador, la salud o la resistencia aprenderán sobre
los diferentes tipos de variables y también cómo manipularlas durante el juego. Después pasaremos a
funciones, macros y eventos. Estos se utilizan para
mantener su proyecto ordenado y eficiente y hacer que sea más fácil de modificar más adelante en el desarrollo de su
proyecto. Después pasaremos a
diferentes tipos de planos de Blueprint, probablemente Actor, Peón, personaje y Game Mode. Cada uno de estos
planos vienen con diferentes
funcionalidades incorporadas que vienen con el motor que luego podemos
usar para crear nuestros juegos. También cubriremos
cosas como proyectiles, que a menudo se usan
para balas de armas, rastros que a menudo se usan para sistemas de
interacción y
a veces incluso sistemas Meli. Y cubriremos las entradas de Player incluyendo el nuevo sistema de entrada
mejorado. Y esto es lo que nos
permite tomar un teclado o
botón del ratón presionar y ejecutar código dependiendo de qué
tecla pulsamos realmente. También estaremos
cubriendo widgets ahora, que es cómo creamos
elementos de UI dentro de ellos. El motor de reglas
aprenderá cómo crear nuevos widgets y cómo
agregarlos a la pantalla de los jugadores, así
como cómo
cambiar el diseño
y adjuntar el comportamiento de los widgets, dos variables diferentes,
funciones o eventos, para que podamos controlar nuestros
widgets realmente lo hacen. Luego, por último, usaremos todo el conocimiento que
hemos adquirido durante el curso para crear algunos sistemas de juego
comunes. Esto incluye un sistema de
interacción que permite a nuestro jugador
interactuar con otros objetos. Un sistema dañado que permitirá nuestros personajes
recibir y enviar daños. Un HUD que podemos usar para mostrar información en la pantalla de
nuestros jugadores. Establecemos un sistema de respuesta y un sistema de agachamiento también. El objetivo de este curso
es brindarle información
detallada sobre
las diferentes características que se incluyen
con los planos. Para que al final
de este curso, seas capaz de planificar y crear
tus propios sistemas de juego. Gracias por escuchar, y
realmente espero que
disfruten el curso.
2. Intro (descripción general): Oigan chicos, y bienvenidos a la
primera lección de este curso. En esta lección, que
va a ser hacer un resumen rápido de
qué son los planos, para
qué se pueden usar, y algunas frases comunes que estaremos usando a
lo largo del curso. Entonces, para empezar,
¿qué son los planos? blueprints son un lenguaje de
programación visual integrado en Unreal Engine. A menudo se usan para definir
cosas como carácter, arma o incluso un MPC. Los blueprints permiten codificar
en el motor conectando diferentes tipos de nodos que juntos crean
nuevas funcionalidades. El resultado de esto podría ser
una puerta que se abre y se cierra, o podría ser un complejo sistema de
inventario
o sistema de combate. El motor incluye algunos planos de
plantilla que comienzan con código existente
útil, como por ejemplo, nuestro blueprint de
caracteres, que si traigo
al nivel aquí, puedes ver a la
derecha de la pantalla, incluye
componentes integrados, como por ejemplo, el componente de
movimiento de personajes, que controla el movimiento del
personaje. Un componente de malla que permite que nuestro modelo de personaje
sea visible en el juego. Un componente de cámara,
que cuando un jugador toma el control de este
personaje, le permite ver. Al comenzar
con los planos. Algunos términos comunes que
escucharás son Blueprint Classes. Objetos Blueprint,
o blueprint actúa como un ejemplo de una Clase Blueprint es nuestro ThirdPersonCharacter aquí
abajo. Ahora si pasamos el cursor sobre él,
en realidad se puede ver que dice clase
Blueprint. Pero si lo
arrastramos a nuestro nivel, se
puede ver que crea
un nuevo objeto blueprint y realidad
podemos arrastrar múltiples de la misma clase a nuestro nivel. Ahora estos son dos objetos
Blueprint independientes. Si tuviéramos varios jugadores, cada jugador podría estar controlando un plano de personaje diferente y haciendo cosas diferentes. Pero todos estos
planos siguen usando la misma Clase Blueprint,
que es nuestra Clase ThirdPersonCharacter. Si se realizan cambios nuestra clase ThirdPersonCharacter
Blueprint que
afectará a todos nuestros
objetos Blueprint usando nuestra clase. Entonces por ejemplo, si abro
mi ThirdPersonCharacter
Blueprint, ir a Viewport y
simplemente roto nuestra malla, digamos 90 grados de esta manera. Golpea Compile, vuelve a nuestro mapa. Se puede ver que nuestros
personajes ahora están enfrentando una dirección diferente. Y si vuelvo atrás
y solo lo giro nuevo a la
dirección correcta, presiona Compile. Se puede ver como de nuevo, actualizado, algunos objetos Blueprint no
existen en el nivel de juego, sino que se ejecutan en
segundo plano, almacenando información y ejecutando funcionalidades
importantes. Por ejemplo, el blueprint de
instancia de juego, que se utiliza para almacenar
información entre niveles de un blueprints como el Game Mode, sí
existe en el nivel, pero son completamente
invisibles para el jugador. El modo de juego controla
cosas como qué clase de blueprint de
personaje se crea cuando un nuevo
jugador se une al juego. Y qué pasa cuando un
jugador abandona el juego. blueprints son una herramienta
increíblemente poderosa que permite un desarrollo
más rápido, depuración y una
muy fácil de usar. En las próximas lecciones
estaré cubriendo algunos de los conceptos básicos
para que comiences. Por lo tanto, puedes crear algunas
de tus propias funcionalidades, así
como poder leer los planos de
otras personas, lo que realmente puede ayudar a
acelerar tu aprendizaje.
3. Introducción (creación de planos): Oigan a todos. En esta lección voy a
estar mostrándote cómo crear nuevas clases de blueprint. También vamos a
estar echando un
vistazo al editor de Blueprint. Antes de empezar,
sólo voy a mostrarte cómo acoplar el
navegador de contenido a nuestra pantalla. Por defecto, tenemos que hacer clic en este sorteo de contenido para abrirlo. personal, prefiero
tenerlo bloqueado a la pantalla. Así que sólo voy
a hacer clic en este documento en el botón de diseño aquí. Y ahora tenemos nuestro
navegador de contenido bloqueado a nuestra pantalla. Esta es la preferencia personal. Puedes tener tu configuración como
quieras, pero así es como la mía va a ser para el resto
del curso. Hay algunas formas en que podemos crear planos y nuestro navegador de
contenido, podemos hacer clic derecho y seleccionar Clase de
plano aquí. También puede bajar
a los planos, salir
y seleccionar la opción
Clase de plano aquí abajo. Esas increíbles
clases adicionales aquí, pero no
las estaremos cubriendo en esta lección. Esos estarán en
una futura lección. Otra forma de crear
planos es ir a nuestro botón Agregar aquí en el
lado izquierdo de la pantalla. Y ya pueden ver que
tenemos nuestro mismo menú. Podemos seleccionar Blueprint Class, o podemos ir a blueprints y seleccionar Blueprint
Class aquí también. Entonces solo voy a hacer clic en Clase
Blueprint para
abrir nuestra ventana de pick class. Aquí podemos seleccionar qué tipo de blueprint queremos crear. Nos da algunos de la selección
más común. Entonces arriba aquí arriba. Entonces, para
empezar, tenemos actor. Un actor es
básicamente cualquier plano que
exista en un nivel. Entonces tenemos **** que ha
promulgado que el jugador
realmente puede tomar el control
de un personaje, que también es un ****. Pero tenía alguna
funcionalidad extendida por lo que puede caminar y podemos
establecer un modelo de personaje. Tenemos el controlador del jugador. Este es el blueprint
que le dice a nuestro personaje o a un **** lo que nuestro
jugador quiere que hagan. Modo de juego, que es cómo
establecemos con qué tipo de controlador de jugador o personaje queremos que comiencen nuestros jugadores
. Y luego tenemos algunos
componentes aquí abajo, que estaré cubriendo
en una futura lección. Pero esencialmente los componentes se
pueden agregar a otros blueprints para darles funcionalidad
adicional. Y luego aquí abajo
tenemos todas nuestras clases. Y esto básicamente nos
permite seleccionar cualquier otro blueprint
o
clase C plus y que nuestro nuevo blueprint los
use como plantilla. Así que para empezar, solo
vamos a crear un actor simple que pueda llevarte a través de
alguna de la interfaz de usuario del blueprint. Comenzará con solo cambiar el
nombre de este plano. Voy a llamar a mis planos de
video. Y haremos doble clic en
esto para abrirlo. Y comenzaremos en el Viewport. Aquí es donde podemos establecer nuestras ubicaciones para nuevos
componentes en nuestro plan. Entonces por ejemplo, si voy a nuestra pestaña de componentes
aquí y hago clic en Agregar, solo voy a buscar cubo
y agregaremos en un cubo. Ahora, podemos establecer la posición de nuestros
cubos. Si presiono W, eso
nos da controles de movimiento. Si presiono E, podemos rotarlo, o si presiono R,
podemos redimensionarlo. Esas opciones también están
disponibles aquí arriba. Entonces si quieres usar estos
botones en su lugar, puedes. Y si
quisiéramos, podríamos agregar componentes
adicionales y configurar su ubicación en
nuestro plan también. Ahora si solo compilo este plano y lo
arrasto al mundo, se
puede ver que el centro de mis planos en
este punto de aquí, pero mi cubo está por aquí. Ahora eso es porque lo
posicionamos en esa ubicación del
centro más lejos. Se puede ver que se actualiza
en el mundo también. Así que eso solo
te da una idea básica de cómo usar la ventana gráfica. Para qué se utiliza, solo
voy a borrar mi cubo por ahora porque
vamos a pasar
a la siguiente parte de la IU, que es el panel Mi Blueprint. Ahora vamos a estar usando
esto mucho donde mi codificación. Entonces partiendo de arriba, tenemos nuestras gráficas.
Creográfica. Si hago doble clic en
esto, nos llevará a
nuestro gráfico principal de eventos. Aquí es donde vamos a
estar haciendo mucha codificación, al
menos para empezar
, antes de
empezar a meternos en funciones
y cosas así. Pero te familiarizarás mucho con esto a medida que avanza el tiempo. Se inicia con algunos nodos básicos. Estaré entrando en estos
en una futura lección que no tengas que preocuparte
demasiado por esos ahora mismo. Pero también se puede ver
que bajo nuestra gráfica nos
dice qué eventos
hay en esa gráfica. Se puede ver que aquí tenemos
estos cuatro eventos. También están listados
bajo nuestro gráfico de eventos. Entonces si yo fuera a decir doble clic
active begin overlap, en realidad
nos llevará a ese evento, lo cual puede ser útil si
estás tratando de encontrar cosas. A continuación, tenemos
nuestras funciones,
macros, variables y despachadores de
eventos. Ahora, cada uno de estos
va a tener sus propias lecciones
porque son va a tener sus propias lecciones sistemas
bastante grandes y los estaremos usando mucho. Pero aquí es donde
habrá listado. Cualquier función que exista en este blueprint se
enumerará bajo funciones. Lo mismo con macros y
despachadores de eventos y variables. Si alguna vez deseas
crear otras nuevas, podemos hacer clic en el botón
pequeño más aquí
podemos hacer clic en el botón
pequeño más
junto a las funciones. Podemos hacer lo mismo con macros, variables y
despachadores de eventos
también pueden hacer clic en este pequeño botón
Agregar aquí arriba. Podemos seleccionar si desea
crear una nueva variable, una función de macro y así sucesivamente, podemos crear nuevas gráficas. Y esto es útil sólo
para organizar las cosas. Digamos que tenías un personaje y querías
tener una gráfica para el movimiento, y una gráfica para tus armas, y una gráfica para
la salud, por ejemplo. Podrías hacer eso y
eso solo te da gráficas
adicionales en las que
puedes organizar las cosas. Funciones anuladoras. Estaremos cubriendo eso
en el video de funciones. Entonces no te preocupes
demasiado por eso. Pero si quieres
anular una función, puedes encontrar esas
opciones aquí. A continuación está la barra de búsqueda. Podemos usar esto para
buscar las funciones, variables y macros
para una palabra en particular. Siempre es una buena
idea incluir palabras
clave en tus nombres de variables
y funciones. De esa manera, si, por ejemplo, estuviéramos creando
un sistema de salud, podríamos simplemente buscar salud. Y eso mostrará todas
nuestras funciones, variables que tienen la
palabra salud en su nombre. A continuación vamos a estar
cubriendo la barra superior. Entonces para empezar,
tenemos compile. Esto básicamente solo nos dice, ¿está listo nuestro juego de blueprint? Entonces ahora mismo
tiene un poco de garrapata, que significa que todo está bien. Todos estamos bien. Pero si yo
fuera a decir arrastrar hacia fuera y agregar una cadena de impresión aquí y ver que ahora necesitamos compilarlo. Y esto simplemente básicamente permite que los motores
revisen el código, asegúrese de que no haya problemas. Si hubo un
tema y nos dan un pequeño signo de exclamación rojo. También probablemente nos dé algunos errores del compilador
diciéndonos cuál es el problema. Entonces tenemos nuestra reserva que
solo guarda un plano. Si hacemos clic en Guardar y
vemos que el puntito se fue junto al
nombre del blueprint porque está guardado. Tenemos navegador.
Sihacemos clic en esto, nos llevará al lugar en el que se encuentra el blueprint
y a nuestro navegador de contenido. Entonces tenemos diff, esto es para control de fuente. No voy a estar
entrando en eso porque control de
fuentes es un tema
bastante grande. Entonces sólo vamos
a saltarnos eso
por ahora. Tenemos hallazgo. Esto nos da la ventana de búsqueda
donde podemos buscar, digamos, por ejemplo, un nodo. Entonces si busco cadena de
impresión aquí, en realidad nos dirá, oye, hay un
nodo de cadena de impresión en el gráfico. Entonces si hago doble clic en
eso, en realidad nos llevará a ello. Esto es realmente útil. Si tus planos se
hacen bastante grandes, puedes olvidarte de dónde
has puesto las cosas. Por lo que solo puedes buscar palabras clave
para encontrar dónde están las cosas. Hola, sin relación solo esconde conexiones que no son importantes
en ese momento en el tiempo. Por lo general solo recomiendo
dejar esto apagado, pero puedes tener una obra
de teatro con ella si quieres. A continuación, tenemos Configuración de clase. Estos son algo así como los ajustes
básicos de nuestro blueprint. Probablemente no estarás
haciendo demasiado aquí. La mayoría de los planos tendrán configuraciones de clase
muy similares. También puedes ajustar
el ángulo de la miniatura. Por lo que puede cambiar
el ángulo de la cámara para la miniatura cuando
el Navegador de contenido, si la suya tenía un teléfono. Ahora, también podemos agregar interfaces que serán todo
un video separado
que entrará. Pero si quieres encontrar las interfaces que están en
la configuración de
clase debajo de aquí. A continuación tenemos los valores predeterminados de clase. Ahora aquí es donde están todos los ajustes de nuestros
planos. Entonces debido a que
empezamos con un actor, los actores tienen un montón de configuraciones
extra con las que
vienen. Cuatro
replicaciones multijugador para nuestra tecnología, que es nuestro techno aquí abajo, que corre cada cuadro, podemos hacer algunos
ajustes a eso. Tenemos configuraciones de colisión, configuraciones de
renderizado, etc. Estaremos
adentrándonos un poco más en futuros videos. Si alguna vez quieres saber
si un poco más de detalle, qué hacen las cosas, siempre
puedes pasar el
cursor sobre el nombre y nos
da un lo tenso. Si fuéramos a crear
una nueva variable, digamos que voy a agregar y
simplemente no hice nueva variable. Llamemos a esta prueba. Si ahora vamos a los valores predeterminados de clase, encontramos el, oh, necesitamos compilar primero porque no
aparecerá hasta que
podamos sacar sus valores predeterminados de clase. Nos desplazaremos hacia arriba hacia arriba. Se puede ver en el
valor por defecto que ahora tenemos nuestra variable de prueba. Y ahí es donde podemos ver todos nuestros valores
predeterminados de variables. Y esos son los valores
con
los que comenzará el blueprint cuando se cree. Para que pueda encender
y apagar eso aquí también. También tenemos una barra de
búsqueda en la parte superior, lo cual es
realmente útil, especialmente si tienes
muchas variables En tu blueprint o estás usando el blueprint de otra
persona, estás tratando de encontrar un ajuste. Puedes buscar
palabras clave aquí para encontrar la opción que necesitas. Entonces tenemos los botones
de simulación y reproducción. Estos básicamente solo inician
la reproducción un modo editor. Si presiono el
botón de reproducción, se puede ver que está abierta la ventana del
editor de planos. A continuación tenemos el
debug caído. Ahora, esta es una
característica realmente genial de los planos. Tendré todo un
video que entra en depuración y algunas de las
características con las que viene el motor. Pero sólo para darles un
ejemplo de lo que hace esto, si conecto mi
cadena de impresión aquí a la tecnología. Ahora esto corre cada
cuadro único que corre el juego. Entonces si voy a nuestro mapa, sólo
voy a arrastrar
el plano de video M. Golpeé play. Se puede ver que el
halo está corriendo una y
otra vez por cada
fotograma que se dibuja. Y si voy a video blueprint, porque tengo los
planos de video seleccionados aquí. Se ve que
me está mostrando el código que se está ejecutando. Está todo resaltado. Eso me dice que la nota técnica se está ejecutando y está ejecutando
la cadena de impresión. Y esto puede ser
realmente útil cuando tienes planos grandes, puedes ver exactamente
qué código se está ejecutando. Por ahora sólo
vamos a hacer una pausa que borrará nuestra
imprimir una cadena aquí. Y también eliminará nuestros planos de video
de nuestro nivel. Sólo para que tengamos un comienzo limpio y regresaremos
a nuestro plan. Otra cosa que quería
mencionar sobre los resultados del hallazgo, en realidad, si volvemos a buscar, se
puede ver que todavía
tenemos nuestra ventana abierta aquí. Si hacemos clic en este
botoncito aquí, en realidad
buscaremos en todos los planos y nuestro proyecto
nuestra frase de búsqueda. Entonces, si hago clic en esto, se
puede ver
que en realidad está encontrando
muchas pantallas de impresión. Lo siento, Print String
nodos alrededor de nuestros proyectos. Y estos son en realidad
planos que vienen incorporados en el motor. Así que puedes ver que ha buscado todos los planos
y nos está diciendo exactamente dónde se
usan las cadenas de impresión a
lo largo de nuestro proyecto. Esto puede ser realmente
útil si
vuelves a intentar
localizar algo. Puedes buscar todos tus
planos a la vez. A continuación, vamos
a echar un vistazo
al guión de construcción. Si cierro mi ventana de búsqueda de
planos y podemos ir a funciones, posible que hayas notado
el guión de construcción que está ahí por defecto, está integrado en el actor. Entonces hacemos doble clic que nos
llevará a nuestro guión
de construcción. Y aquí podemos agregar
código que se ejecutará cuando arrastremos por primera vez nuestro
blueprint al nivel. Así que esto es genial para si
estás construyendo una especie de herramientas de diseño de nivel
y cosas por el estilo,
tal vez quieras
aleatorizar el color de algo para cada vez
que lo arrastres al nivel. El guión de construcción es
realmente útil para eso. Ahora bien, si alguna vez desaparece alguna vez alguna de estas
ventanas o dices que las cierras por
accidente, no es problema. Siempre puedes subir al desplegable
de ventanas por aquí. Y aquí
puedes asumir cualquiera de estos paneles que hemos
estado viendo hoy. Para que puedas apagar. Entonces, por ejemplo, si
cierro mis componentes, puedo ir y simplemente puedo volver a abrir el panel Componentes y simplemente
volveré a hacer estallar de nuevo. Ahora, lo último que
quería señalar es la barra de direcciones que está aquí
arriba en la parte superior. Esto siempre dirá
qué plano orina, estoy usando ese
plano que eres. Esto es realmente útil si
estás siguiendo junto con tutoriales o capturas de pantalla
o algo por el estilo, siempre
vale la pena echarle un vistazo, asegurándote de estar en
el plano correcto y también decir el
oel nombre de la gráfica de eventos. Entonces si voy a Event
Graph, digamos gráfico de eventos, que te dirá exactamente
dónde estás o si estás siguiendo junto
con un video o una imagen, puedes ver exactamente dónde
están en esos videos. Entonces eso va a ser
todo por esta lección. Ojalá tengas una comprensión
básica ahora de dónde pensadores y
el editor de Blueprint.
4. Introducción (flujo de eventos): Oigan a todos, En esta lección les voy a estar
guiando por cómo corren los nodos de Blueprint y
el orden en que corren. Para empezar. He configurado algunos ejemplos aquí en nuestro
Blueprint ThirdPersonCharacter. Y yo sólo voy a
estar hablándote a través estos y explicando
lo que hace cada uno. Entonces para empezar, tenemos que
el evento comience a jugar. Ahora bien, este es un evento
que está integrado en el motor y
se ejecutará cada vez que comience
nuestro juego o cuando se cree
el blueprint. Lo que va a pasar aquí es que
tengamos nuestro evento comience a jugar que le dirá a
nuestro jugador una jugada, reproduzca un sonido ahora para correr. Ahora bien, este es un evento personalizado
que yo mismo he creado. Y si bajamos
aquí, en realidad se puede ver que tenemos el sonido del
play player. Entonces empezaré a jugar o x al cubicado. Ejecutará nuestra
reproducción, tocará un nodo de sonido, y eso ejecutará nuestro sonido de
reproducción en la ubicación. Y el sonido que, que
tocará va a ser donde sea que esté aquí nuestra entrada de
sonido. Entonces ese va a ser
el sonido de inicio. Después reproducirá ese sonido en la
ubicación que estamos proporcionando. Entonces esa es la ubicación get
actor, que va a ser la
ubicación de nuestro personaje. Entonces una vez que se toca el sonido, nuestra salida de nuestro
juego, toca un sonido. Fresco. Vamos a correr. Eso sucederá siempre que la cadena de ejecución aquí abajo no
tenga más nodos para ejecutar. Entonces, lo que esto hará es establecer nuestro valor de salud a
cualquiera que sea nuestro valor inicial ya que el código se ejecuta de izquierda
a derecha típicamente. Y si golpeamos un evento, genial, ejecutaremos el código que está
conectado a ese evento. Y luego reanudaremos la
ejecución del código con
nuestro evento original. A continuación, tenemos la nota tecnológica del
evento. Ahora bien, este es un nodo muy comúnmente
utilizado por los principiantes. Y la razón es porque corre cada
fotograma de tu juego. Por lo que cada vez que tu tarjeta
gráfica dibuje un marco, este evento se ejecutará. Ahora, el problema con
eso es que la gente tiende a adjuntar mucho
código a este nodo. Y eso puede comenzar a
ralentizar tu proyecto muy rápidamente, porque generalmente, la
mayoría del código
en realidad no necesita hacerse
cada fotograma. Queremos usar cosas
como entradas de Player, temporizadores y varias otras
formas de ejecutar ese código. En lugar de
solo cada frame lo ejecutamos
porque así es como obtienes un
pobre rendimiento en tu juego. Pero para este ejemplo, acabo de tomar algún código
muy simple. Tengo un valor de número. Y luego estamos trazando uno a ese valor de número y luego estamos estableciendo ese valor numérico. Cada vez que
se dibuja un marco de nuestro juego, estamos aumentando nuestro valor
numérico en uno. Y luego solo tengo que
imprimir string node aquí. Así que eso tomará
el valor del número, lo convierte en una cadena, que es texto básicamente. Y luego imprimimos
ese valor a la, a la pantalla del jugador. Estaré entrando en
más detalles sobre estos eventos cuando lleguemos
a crear algunos ejemplos. Pero por ahora solo
quiero explicar los diferentes tipos de eventos
y cómo ejecutan código. Por lo que a continuación tenemos el salto
de acción de entrada. Ahora bien, este es un nodo
que se ejecutará cada vez que nuestro jugador presione
la entrada de salto. Entonces por defecto esa es
la clave de espacio. Y la razón que
es porque si nos
dirigimos a editar y
vamos a Ajustes del Proyecto, entonces voy a ir
a Input aquí abajo. Iremos a Action Mappings. Se puede ver que
aquí tenemos un mapeo de acción que dice saltar. Si hago clic en la flecha hacia abajo, se
puede ver que
tiene la barra espaciadora establecida aquí. Entonces esta es una entrada predeterminada para el
proyecto ThirdPersonCharacter. Entonces por eso eso
ya está aquí para nosotros. Así que cuando vuelvo a nuestro
ThirdPersonCharacter Blueprint, Es por eso
que dice salto de
acción de entrada es porque esas entradas ya se han configurado
en nuestros mapeos de acción. Y lo que esto básicamente
hace es cuando presiono Espacio,
presioné voluntad, voluntad, correrá, y eso hará que
nuestro personaje salte. Y luego cuando suelte,
eso enfría el stop jumping. Ahora, las acciones de entrada es
esencialmente la forma en que
tomas la
entrada de un jugador y podemos ejecutar código usando esa entrada irá más en
impactaciones en una lección futura. También hay un nuevo sistema de entrada
mejorado que viene con
Unreal Engine five. Entonces también estaremos indagando
en eso también. Otra forma de ejecutar código a través las entradas
del Reproductor es usar
los nodos de eventos de entrada. Entonces si hago clic derecho
y busqué un nombre de teclado, diga Enter. Y podemos desplazarnos
por estos y bajo eventos de
teclado
podemos encontrar el Enter. Ahora, esto es similar a
nuestra acción de entrada Jump. Tenemos Oprimido, que
ejecutará el código que está
conectado a él cuando se presione
la tecla Enter
y se suelte cuando se ejecute el
código, cuando se libere la tecla. Ahora, estos son más para
depuración y prototipado rápido. Estaremos usando estos
bastante más adelante en el curso solo porque son rápidos en sí mismos
que la configuración de nuestro proyecto. Pero normalmente no
usarías estos nodos. Al configurar los binds clave finales de un
juego, usarías las acciones de entrada
que te mostré antes. A continuación, tenemos el, cualquier
nodo de daño, que está aquí arriba. Y este evento está
integrado en el motor. Y nos permite decirle a
nuestro TercerPersonaje
Personaque ha recibido daños
de otros planos. Y esos otros
planos también pueden suministrar un valor dañado, similar a cómo llamamos nuestro play play un evento de
sonido aquí, y proporcionamos un sonido de inicio. Entonces nuestra obra, toca un evento
sonoro aquí abajo, usa ese sonido de inicio y
reproduce un sonido en un lugar. Esto es similar en que
el otro plano puede llamar al enemigo
cualquier daño de m, puede proporcionar un valor dañado. Y ahora en nuestro
Plan de PersonaTerceros Personajes, podemos usar ese valor de daño para restar de nuestra salud
actual. Ahora son cualquier evento de daño está llamando a una función
llamada disminución de la salud. Ahora, yo mismo he creado
esta función. Y no te preocupes si no
sabes qué es una función, estaremos entrando en
eso en una futura lección. Pero esencialmente una
función es un nodo que contiene otros nodos y
que un nodo es reutilizable. Para que podamos reutilizar ese código en múltiples
lugares y nuestro proyecto. Entonces si hago doble clic en
esta función realmente nos llevará a
la propia función. Y se puede ver que la función
contiene todos estos nodos. Ahora, esto se ejecutará de
manera similar a nuestra gráfica de eventos. Por lo que ejecutará de
izquierda a derecha. Y luego una vez que
llegue al final, el nodo estará terminado. Entonces, para empezar, tomaremos nuestro
valor actual de Salud y restará el valor de daño que
obtuvimos ingresado de cualquier
daño de ellos. Entonces establecerá nuestro nuevo valle de salud
actual. Y entonces estamos configurando, o lo siento, estamos comprobando, ¿nuestra salud actual es
menor o igual a 0? Si es menor que
0 o igual a 0, entonces ejecutamos el nodo
Play play sound y le estamos diciendo
que ejecute el sonido sordo. Por lo que como puedes ver, estamos reutilizando nuestra obra,
toca un nodo de sonido. Y esta vez lo estamos
diciendo
queremos tocar el sonido sordo. Entonces después de
que nuestro sonido
haya sido tocado, le decimos al
actor que se destruya a sí mismo, lo que básicamente
le dice al actor se quite
por completo del nivel. O si espero que sea
mayor que 0, lo estamos diciendo, estamos girando nuestra obra,
tocamos un nodo de sonido para reproducir el sonido hertz en lugar
del sonido sordo. Ahora bien, si se ejecuta nuestro
nodo Destroy Actor o si nuestro
play, reproduce un sonido con las carreras de sonido
hertz, puedes ver que no
tienen más salidas. Entonces lo que sucederá entonces es que
nuestra función ya está terminada. Entonces si tuviéramos
código adicional conectado
hasta la salida de nuestra función, entonces
se ejecutaría. Nosotros no. Por lo que esta cadena de
ejecución acaba de terminar ahora con
disminución de la función de salud. Eso va a ser todo
por esta lección. Esperemos que ahora entiendas qué causa que se
ejecute el código de blueprint y el orden en que
las cosas generalmente ejecutan. No te preocupes demasiado
si aún no
entiendes completamente funciones
o eventos, estaremos cubriendo esos en lecciones
separadas en el futuro. Esto solo estaba recibiendo el
cuelgue de cómo
se ejecuta realmente el código y qué causa que se ejecute.
5. Variables (descripción general): Oigan a todos, En esta
lección sólo voy a estar explicando qué son las variables
y para qué se utilizan. Las variables son básicamente solo una forma de
almacenar información. Y hay una gran cantidad de diferentes
tipos de información, por lo que hay bastantes tipos
diferentes de variables. En las próximas lecciones, sólo
voy a estar
llevándote a través de algunas de las variables más
utilizadas. Aprenderemos a
cambiar sus valores. Y también cubriremos algunos ejemplos básicos de cosas
comunes para las que
se van a utilizar. Entonces, para empezar,
crearemos una nueva variable. Y para ello, nos dirigiremos
a nuestro nuevo panel Blueprint. Y hay un par de
maneras en que podemos hacer esto. Podemos dar clic en el pequeño botón
más al lado la pestaña de variables y crear
nueva variable de esa manera. O podemos subir
al botón Agregar aquí y seleccionar el botón de
variable aquí, lo que creará una
nueva variable también. Ahora, una vez que hayamos creado
una nueva variable, podremos renombrarla. Así que para esta variable, sólo
voy a
llamarla nueva variable. Aquí. También podemos establecer nuestros tipos de
variables. Entonces el valor por defecto es un booleano. Un booleano es solo una variable
verdadera o falsa, por lo que almacena un valor
verdadero o falso. Ahora, con nuestra variable seleccionada, podemos agregar más
al panel Detalles. Si no tienes
el panel de detalles, siempre
puedes
sacarlo yendo a Windows y seleccionando
la cadera del panel Detalles. Así que durante la noche Detalles panel, tenemos nuestros
nombres de variables para que podamos cambiar el nombre de nuestra variable
siempre que queramos. Podemos establecer el tipo de variable. Ahora bien, si selecciono la flecha
hacia abajo aquí, verás algunos de los tipos de variables más
comúnmente usados que estaremos
pasando en futuras lecciones. Hay algunos adicionales
y menús descendentes. No vamos a estar cubriendo
esos en el curso porque hay montones
y montones de ellos. Pero estaré explicando
qué son y para qué están acostumbrados en
una futura lección. Ahora, tenemos un
valor por defecto aquí abajo. Este es básicamente el
valor inicial de nuestra variable. Ahora por el momento en
realidad no tiene ninguna opción aquí. Sólo dice por favor
compile el plano. Eso es porque es
una nueva variable para esa configuración show
up, tenemos que compilar. Entonces yo sólo voy
a compilar aquí. Se puede ver que ahora tenemos esta casilla de garrapata que
podemos encender y apagar. Y eso es porque un booleano
es un valor verdadero o falso. Por lo que podemos establecer donde
para esta variable comienza con un
valor verdadero o un valor falso. Ahora también había algunos ajustes
adicionales aquí arriba. No te preocupes demasiado por
estos en este momento, estaremos cubriendo algunos de
estos en una futura lección. Ahora una gran parte de las variables
es que en realidad podemos obtener la información
almacenada en ellas cuando estamos escribiendo código y
podemos cambiarlas. Por lo que hay algunas maneras
diferentes de
obtener los datos de sus variables. Así que podemos simplemente
arrastrarlo directamente a nuestro gráfico de eventos desde mi panel de blueprint
drop y obtenemos una opción para obtener nueva
variable o establecer nueva variable. Para que podamos hacer brecha que nos
dará este nodo get aquí. Usando este nodo, podemos obtener el valor actual en el que nuestra
nueva variable está establecida. Ahora también podemos arrastrar
hacia fuera y hacer set, y eso nos permite cambiar el valor actual
de nuestra variable. Ahora bien, estas notas
a veces se verán diferentes
dependiendo del tipo de variable. Entonces porque esto es un booleano, tiene casita de garrapata aquí. Podemos encender y apagar. Pero digamos que si esta fuera una variable que estamos
almacenando un número, no
tendríamos
la casilla de garrapata allí. Ahora otra forma
que puedes hacer esto es cuando arrastramos nuestra
nueva variable en, si presiono Control
en mi teclado
y solto el botón
izquierdo del ratón, simplemente crea instantáneamente
un nodo para nosotros. Y también podemos
arrastrar hacia fuera y mantener
pulsado el botón Alt y soltarlo. Y eso
nos dará un conjunto de nodos. Así que en lugar de tener que
usar este pequeño menú, puedes usar algunos
atajos de teclado allí también. Otra forma de crear las variables en nuestro Event Graph es que simplemente podemos hacer clic derecho y buscar una nueva
variable y simplemente presionar enter. Y tenemos nuestro nodo get y podemos hacer lo
mismo con SAP. Así que sólo puedo
buscar un conjunto nueva variable. Y se puede ver que ha
surgido ahí arriba y nosotros podemos simplemente crear eso también. Por lo que en realidad no
importa de qué manera
uses para crear tus variables
en el Event Graph, lo que sea más
cómodo para
ti, solo puedes usar eso. Ahora dependiendo de cuánto tiempo hayas pasado ya
en el motor, es posible que sepas o no qué variables se pueden conectar
a otras variables. Entonces, por ejemplo, si creo
una nueva variable aquí, sólo
voy a llamar a
esta una de las variables. Y voy a dejar
esto como booleano, pelea, arrastra eso a nuestra gráfica de eventos
y lo voy a conseguir. En realidad puedo conectar
esa otra variable en mi nuevo nodo conjunto de variables. Y sólo voy a mover este
fuera del camino. Y lo que esto va a hacer
es que tomará lo que sean de un valor variable es, y le dirá a nuestra nueva
variable que sea ese valor. Entonces si tuviéramos este nodo funcionando,
digamos, en Beginning play, así que sólo voy a
empezar a jugar Notre. Enchufa esto. Ahora, cuando comience el juego, nuestra nueva variable
se establecerá en cualquier otro valor que se establezca en otra
variable. Entonces si
selecciono mi otra variable, puedes ver que
necesito compilar mi blueprint, así que lo haré. Entonces si pongo las otras variables, por defecto a true, y si
voy a mi nueva variable, su defecto es false. Ahora bien, lo que esto hará es que le
dirá a nuestra nueva
variable que ahora sea verdad. Y podemos comprobar esto si
agrego una cadena de impresión rápidamente, conecte la salida de
mi nuevo
nodo conjunto de variables en la entrada de cadena. Y esta salida es básicamente
la misma que un nodo. Entonces solo para mantener tu código
limpio o puedes usar eso en lugar de tener que
crear un nuevo nodo. Así que ahora cuando comience el juego, esperaríamos que nuestra cadena de
impresión imprima verdadera porque eso es
lo que nuestra otra vocal, otra variable está establecida en. Entonces si puedo jalar y le pego a Play, se
puede ver
que está imprimiendo verdad. Y si yo fuera a cambiar mi
otra variable a falsa, verás que cuando
golpeemos play, se lee false. Entonces eso va a ser
todo por este video. En nuestras próximas lecciones, vamos a estar aprendiendo sobre tipos de variables
específicas y algunos nodos que se
usan comúnmente con esas variables.
6. Variables (booleanos): Oigan a todos. En esta lección
vamos a estar echando un vistazo más de cerca a los booleanos. Las variables booleanas se utilizan para almacenar un valor verdadero o falso, pero también
se pueden usar para controlar qué código se está
ejecutando en su proyecto. Y también pueden ser
resultado de ciertas pruebas. Entonces, por ejemplo, si estuviéramos
comprobando es un mayor que b, el resultado de esa prueba sería un booleano porque
sería verdadero o falso. Entonces, para empezar, voy
a estar creando algunos ejemplos de cómo los booleanos pueden controlar
qué código se está ejecutando. Y vamos a hacer esto y necesitamos plano del
personaje de tercera persona.- Entonces sólo voy
a abrir eso. Y aquí vamos
a crear nuevas variables. Entonces en mi panel de planos, haga clic en el botón de nueva variable, y voy a llamar al
mío ejemplo booleano. Y el mío ya está configurado en
booleano, pero si el tuyo no lo es, puedes simplemente hacer clic en el desplegable aquí y seleccionar
el tipo booleano. Y vamos a
compilar para que consigamos que nuestros valores por defecto aparezcan
en el panel Detalles aquí. Si alguna vez te falta
alguno de estos paneles, siempre
puedes encenderlos y las ventanas desplegables aquí. Vamos a dejar que el valor por defecto es
falso porque
en realidad vamos a estar
cambiando eso usando código. Por lo que vamos a empezar por
crear un nodo tick. Por lo tanto, haremos clic derecho en el
Event Graph y buscaremos tecnología y crearemos
el evento tick. Ahora, si recuerdas de
nuestra lección anterior, corre cada vez que un
frame es sacado de nuestro juego. A continuación, vamos a sacar
nuestro ejemplo booleanos. Y vamos a
arrastrarnos de ella y vamos a
buscar grunge. Si lo deletreamos
bien, ahí vamos, podemos buscar
marcas y crear ese nodo conectado
hasta nuestra tecnología de eventos. Por lo que ahora cada fotograma, este nodo de rama se ejecutará. Lo que
hace un nodo de rama es básicamente simplemente verificar la
variable booleana que está conectada a ella y se ejecuta ya sea
true o false
dependiendo de si la variable booleana
es verdadera o falsa. Entonces empieza con, solo
crearemos algunas cadenas de estampados. Entonces nos arrastraremos de lo verdadero. Buscaremos la cadena de impresión. Y esto es sólo un nodo
que imprimirá algún texto en la
pantalla de nuestros jugadores cada vez que se ejecute. Entonces voy a decir, voy a poner esto en realidad. Y copiaré y pegaré esto y conectaré esto
hasta lo falso. Y yo sólo voy a
poner esto en falso. Y eso sólo significará
que cuando nuestro verdadero pin se ejecute para correr en la pantalla y
cuando nuestro falso bolígrafo haya corrido, gente correrá en la pantalla. Entonces te mostraré ahora, el
valor predeterminado sigue siendo falso. Por lo que deberíamos esperar que
la gente corra cuando planeemos, el editor golpeará Play y se puede ver que
false se está ejecutando. Si aceptamos, cambiamos nuestro
booleano a true y le pegamos a Play. Se puede ver que la
verdad está corriendo. Lo bueno de los
planos es que
en realidad podemos ver este código
ejecutándose en tiempo real. Entonces, si vuelvo a mi
ThirdPersonCharacter mientras el juego sigue en ejecución, puedes ver el
desplegable de depuración aquí. Y si selecciono el
ThirdPersonCharacter, solo
tenemos una
opción porque
solo hay un
plano de carácter ThirdPersonCharacter en el nivel. Por lo que sólo vamos a cobrar eso.
Sepuede ver que podemos ver nodo
Arctic está ejecutando cada frame que está
ejecutando nuestra rama, lo que comprueba nuestro
ejemplo booleano. Y si ahora lo guardamos,
en realidad se puede ver que dice verdad. Así que true es correr en nuestra cadena de impresión se está ejecutando
y se está imprimiendo verdadero. Así que ahora queremos
poder cambiar realmente nuestro valor booleano durante el juego para que podamos cambiar
qué código se va a ejecutar. Entonces saldremos
de nuestro modo de juego. Y vamos a
crear un nuevo nodo de entrada. Y voy a
buscarlo botón izquierdo del ratón. Y esto se ejecutará cada vez que se
presione el botón izquierdo del ratón. Y luego se ejecutará el release cada vez que se suelte el
botón izquierdo del ratón, se arrastrará hacia fuera y
vamos a usar un nodo de rama. Ahora, en realidad hay algunas formas en las que puedes crear nodos de rama. Uno de ellos es mantener pulsado B en su teclado y luego hacer clic
izquierdo del ratón y se
puede ver que
crea un nodo de rama o puede hacer clic derecho
y buscar si. Eso también trae a colación
el nodo de sucursal. O puedes buscar brunch. Y eso también trae a
colación los nodos de sucursal
, con el que te
encuentres más cómodo. Vamos a conectar
esto hasta el prensado. Vamos a obtener nuestro ejemplo booleano y enchufar eso
a la condición. puede ver que
lo estoy arrastrando directamente y en
realidad lo
conectará automáticamente a nosotros, al nodo de sucursal para nosotros. Y lo que queremos que suceda aquí es cuando se presiona
el botón izquierdo del ratón, si nuestra
variable booleana actual es verdadera, queremos configurarla en false. Entonces solo voy
a enchufar eso en falso y ver si lo
arrasto a true, simplemente
se conectará
automáticamente. Entonces queremos que se establezca en
falso si ya es cierto. Y copiaremos y pegaremos
este sub conectado a false. Y si nuestro
valor actual es falso, queremos establecerlo en verdadero. Por lo que debería verse
algo como esto. Compilará esto. Y ahora podemos probarlo. Y otra vez, le pegaré a Play. puede ver actualmente que es cierto porque ese es nuestro valor
por defecto. Si presiono el
botón izquierdo del ratón, se vuelve falso. Y si sigo presionándolo, se puede ver que está
cambiando la cadena de impresión. Ahora hay algunos otros nodos de
uso común con Boolean. Por lo que quiero
mostrarles, si nos dirigimos de nuevo a nuestro ThirdPersonCharacter
Blueprint, tomamos nuestro ejemplo booleano y arrastramos fuera de él
y buscamos todos. Se puede ver que tenemos unos
cuantos diferentes o nodos. Así que sólo voy a estar usando
el nodo booleano OR. Y se puede ver que
nos da dos entradas para Boolean. Y entonces una salida que quiero saber hace es básicamente comprobar, alguna de sus entradas
es verdadera? Si lo es, entonces
volverá verdadero. Si todos son falsos, entonces volverá falso. Y podemos agregar múltiples entradas. Por lo que podríamos agregar
entradas adicionales si quisiéramos. Entonces, por ejemplo, nuestro
booleano de ejemplo está marcado en true, pero todos los demás son falsos. Por lo que esto todavía se ejecutará o, o, o Nodo o aún salida como verdadero. Para que podamos probar esto. Se puede ver que está funcionando cierto. Pero si cambio mi ejemplo,
booleano verdadero, falso. Todas sus entradas son ahora falsas. Por lo que ahora volveremos falso. Ya se puede ver ahora que está
regresando falso. Una nota similar es
el anti-nodos. Así que si eliminamos nuestro off ahora, vamos a arrastrar hacia fuera de nuestro ejemplo booleano de nuevo y buscar y podemos seleccionar
el nodo booleano. Y esto funciona de manera similar. Toma múltiples entradas booleanas y devuelve una salida booleana. Y lo que esto hace
es básicamente que todos
los insumos deben ser verdaderos
para que salga verdadero. Así que ahora mismo nuestro ejemplo
booleano es falso y este adicional también es
sin tipo, por lo que es falso. Pero si cambio mi
ejemplo booleano a true, ahora tenemos una entrada verdadera
y una falsa. Ahora, la salida será falsa
porque eso no es cierto. Para que podamos probar esto,
dale a Play. Se puede
ver que es falso. Pero si aceptamos y
marco esta opción, ahora que ambos son verdaderos, saldrá true C. Ahora, estas son notas
que estarás usando muy a menudo con nodos de
rama y pueden le ahorrará tener que tener múltiples nodos de sucursal si está probando más de una variable. Entonces, por ejemplo, si necesitas que las variables
libres sean verdaderas antes de querer que se ejecute un nodo de
rama, usarías un ánodo. Otro
nodo de uso común es el nodo. Entonces si arrastramos hacia fuera y
buscamos nada, podemos usar, A
ver, NO booleano. Y esto básicamente convierte o cambia o booleano a lo contrario de
lo que es actualmente. Entonces si conecto esto, actualmente nuestro booleano
está marcado para árbol, pero esto revertirá
eso y lo hará zorro. Por lo que podemos ver está
definitivamente establecido en verdad, pero va a correr amigos. ver, si nos dirigimos hacia atrás y
establecemos esto en falso ahora no son nodo
en realidad convertiremos eso y lo convertiremos en un verdadero
mientras que se ejecutará el código verdadero. Ahora, hay otra nota
que quiero mostrarles chicos, y ese es el nodo igual. Por lo que va a borrar no son
nodo ahora y voy a arrastrar hacia fuera, y voy a buscar iguales. Hacer uno o dos iguales. A mí también me gusta hacerlo,
porque normalmente solo trae a colación la forma
exacta que queremos. Y eso es r igual a nota aquí, se
puede ver que tiene
dos entradas booleanas y una salida booleana. Si conecto esto hasta
nuestra nota de brunch aquí, esto básicamente dice que ambos insumos tienen que
ser exactamente los mismos. Por lo que actualmente ambos son falsos. lo que nuestro booleano de ejemplo
se establece en falso y su segunda entrada
se establece en falso. Entonces esto en realidad será uno cierto porque ambos son
exactamente el mismo valor. Para que podamos probar esto en juego. En C. Se está ejecutando cierto pesar de que nuestros valores
son en realidad falsos. Y si fuera a poner nuestro
ejemplo booleano a true, pero dejar este valor es falso. Se ejecutará false
porque ya
no son el mismo
valor. Y podemos comprobar esto de nuevo. Hit Play. Se puede ver que la gente está corriendo. Ahora como nota al margen, de ti E5, si fueras a crear
estos nodos que te he mostrado sin arrastrar
desde un booleano, en realidad no tendrían
estas entradas y salidas rojas. Así que por ejemplo, si
busco r igual nota aquí, se
puede ver que
tiene una salida booleana porque un nodo igual
siempre va a
devolver verdadero o falso. Pero estas entradas
en realidad están en gris. Y el comodín,
lo que significa que en realidad
pueden ser de
cualquier tipo de variable. Algunas formas de
convertirlas en nuestro tipo booleano. Por lo que podemos o bien simplemente arrastrar
fuera de nuestro ejemplo booleano, conectar eso hacia arriba y automáticamente lo convertirá para nosotros. O podemos hacer clic derecho en
estos penta gris, ir a convertir pin. Se puede ver que podemos
cambiarlo a un montón de diferentes tipos de variables. Pero puedes ver que
tenemos nuestra opción booleana ahí, así que podemos seleccionar eso. Y ahora convierte nuestro nodo
en ese tipo booleano. Entonces eso va a ser todo por
nuestra lección sobre los booleanos. Los estaremos usando mucho más en
futuras lecciones ya que
los booleanos son parte bastante cool de la codificación. No te preocupes
demasiado si no recuerdas todos los nodos que
hemos usado de nuevo, los
estaremos usando mucho
más en futuras lecciones.
7. Variables (entrantes y flotantes): Oigan a todos. En esta lección
vamos a estar cubriendo los tipos de
variables float y integer. Ahora tanto las
variables float como integer se utilizan para
almacenar valores de números. La diferencia
entre los dos es los enteros solo pueden
almacenar números enteros, lo que
significa que no puede tener
un valor decimal, mientras que un flotador
puede almacenar números que sí tienen un valor de punto
decimal. Ambos pueden almacenar números de valores positivos y
negativos. Por lo que comenzaremos creando
dos nuevos tipos de variables. Voy a crear
dos nuevas variables. El primero solo llamaré ejemplo float, y
el segundo, lo
llamaré ejemplo
en entero, cambiará los tipos
por lo que queremos entero. Entonces para nuestro ejemplo float, seleccionaremos float
en qué compilador. Ahora con nuestros
enteros de ejemplo seleccionados, se
puede ver más en
el valor por defecto podemos establecer un valor numérico. Así que puedo establecer esto para
decir 99, por ejemplo, pero puedo agregar un punto
decimal y agregar un valor de punto decimal. Digamos que si traté de hacer eso, cuando presiono Enter, se elimina
porque un entero solo
podía almacenar números enteros. Mientras que si selecciono mi variable
float y
voy al valor por defecto aquí puedes ver que realmente
realmente tiene un 0 decimal. Y puedo configurar esto
a 99.99 mano, y se puede ver que el valor
realmente ahorra correctamente. A continuación, te mostraré cómo
podemos establecer y obtener nuestras variables float y integer es muy similar a cómo estábamos
trabajando con nuestro booleano. Entonces pasaré rápidamente
por ese proceso. Sólo voy a
hacer clic derecho y crear una entrada de botón izquierdo del ratón, como hicimos con nuestro booleano. Y obtendremos nuestra estrella flotante de
ejemplo con, y solo
vamos a seleccionar Get Float de nuestro prensado. Sólo voy a elegir
el nodo de cadena de impresión. Y eso nos permitirá sólo
imprimir cadena nuestro valor actual. Cuando lo conectamos a la cadena, nos
da este nodo
adicional. Todo lo que está haciendo es convertir nuestro valor de flauta en
un valor de cadena. Y un valor de cadena es sólo texto. Y eso permite que nuestros nodos
Print String impriman
realmente
el valor float. Así que ahora cuando golpeamos
play y hago click izquierdo, puedes ver que está
imprimiendo nuestro valor por defecto. Y el proceso es el
mismo para nuestro entero. Simplemente podemos conseguir eso. Voy a arrastrarlo directamente a nuestra
entrada de cadena. Y se puede ver que
nos ha dado un nodo diferente, se ve similar al primero, pero esto convierte un
entero en una cadena. Por lo que voy a imprimir cadena
puede exhibirlo. Entonces cuando golpeamos play
y me fui del mouse, se
puede ver que se está
imprimiendo son ahora valor entero. A continuación comenzaremos a
cambiar nuestros valores. Entonces lo que podemos hacer es hacer clic derecho y usar un nodo tick. A partir de esto, vamos a
aumentar nuestro valor entero. Así que obtendremos un valor
entero actual. Nos vamos a arrastrar,
vamos a usar el plus. Y este es un nodo add. Y funciona
más o menos como te imaginas. Toma el valor actual de nuestro entero y le agrega
algún valor. Entonces voy a poner esto a uno. Por lo que la salida será nuestro valor
entero de ejemplo actual más uno. Entonces necesitamos establecer
nuestro ejemplo entero. Así que sólo voy a
arrastrar hacia fuera, hacer SAP, conectar esto en nuestro nodo tick y conectar la entrada en
nuestro nodo de adición. Entonces ahora cada fotograma, nuestro número entero de ejemplo
aumentará y cuando
dejamos el botón del ratón, imprimirá
el valor actual. Por lo que compilará y golpeará play. Entonces si
le pego a Plus, se puede ver que
ya es hasta 249. Y eso es porque nuestro
nodo tick está ejecutando cada frame. Por lo que va a
aumentar muy rápidamente. Y ver como hago clic ese
valor va subiendo mucho. A continuación, haremos lo
mismo con nuestro valor de flotación. Entonces volveremos a nuestro blueprint de
personajes, y eliminaremos este código aquí. Y haremos lo
mismo pero con flote. Entonces nos arrastraremos, hazlo. Conecta esto
a nuestro nodo tick. Entonces queremos obtener el ejemplo
actual float plus. Por lo que vamos a utilizar un
nodo add y podemos agregar un número decimal. Por lo que podríamos agregar digamos, 1.25 y conectar la salida
a nuestro ejemplo float. Por lo que cada cuadro tomamos el valor de flotación
actual más 1.25. Y luego el resultado que ponemos
ahora a nuestro ejemplo flotar. Y luego volveremos a enchufar aquí
abajo en nuestro botón
izquierdo del ratón, tendremos nuestra pantalla de
cadena de impresión, nuestro valor float en lugar
de nuestro valor entero. Entonces ahora cuando golpeamos play, podemos hacer clic y se puede
ver que está subiendo en números decimales ahora porque estamos
usando nuestro flotador. A continuación,
te voy a llevar a través de algunos de los nodos más utilizados
con flotadores y enteros. Ahora la razón por la que estamos
haciendo estas dos variables juntas es porque
ambas son número de
variables y
ambas usan nodos muy similares. Y
en realidad se pueden combinar junto con algunos
nodos también. Entonces si volvemos a nuestro
ThirdPersonCharacter, desharemos de este código
aquí arriba para darnos un
poco de espacio. Y comenzaremos con los nodos básicos que
ya hemos estado usando. Así que sólo voy a conseguir
tanto flotar y entero. Ahora el primero es R
plus node, add node. Podemos crear que nos permita
sumar los insumos juntos. Y salida el resultado. Podemos agregar nuevos pines
si queremos,
para sumar múltiples
variables juntas. También podemos crear un
nuevo flujo variables como llamar a esto un flotador. Configura esto en un flotador. Podemos enchufar el de
una variable de flotación. Entonces podemos agregar múltiples variables
de flujo juntas. Ahora, ya que tenía cinco años, en realidad
podemos cambiar estas entradas dos tipos de variables
diferentes. Así que digamos que quería agregar mi ejemplo float y mi
ejemplo entero juntos. Podríamos hacer eso. Ahora si tenemos varios pines y queremos eliminarlos, solo
podemos hacer clic derecho en
ellos y eliminarlos. Entonces sólo voy a quitar
estos dos extras. Entonces quiero combinar estos
dos valores juntos. Eso ya lo podemos hacer. Por lo que podemos hacer clic derecho
o pin extra, ir a convertir pin
y seleccionar entero. Ahora podemos enchufar nuestro entero m. y ahora esto dará
salida al resultado de ejemplo float más
integer como float. Por lo que podríamos poner nuestro ejemplo
flotar a ese valor. Ahora, podemos probar esto
en juego si queremos. Podemos bajar esto aquí. Conecte esto hasta nuestro botón
izquierdo del ratón, conectará el resultado
en nuestra cadena de impresión. Entonces ahora vamos a
decir sumar 1.25, 1.25. Y vamos a sumar a eso. Cuando golpeamos play,
esperamos que sea de 3.25. Y en realidad está
aumentando porque estamos estableciendo ese valor de flotación. Por lo que cada vez que
hacemos clic, ahora estamos aumentando
el valor porque nuestro ejemplo de flotación se
ha incrementado. Ahora este proceso con
convertir uno de los pines a un entero se puede usar con la mayoría de los nodos que te
voy a estar mostrando. Entonces si continuamos, voy a conseguir otro
ejemplo, flotar el pelo. Si arrastramos hacia fuera y
sí buscamos multiplicar, puedes usar este símbolo aquí, o puedes buscar multiplicar. Eso nos da un nodo multiplicado. Esto funciona como
probablemente te imaginas. Toma las entradas, las multiplica juntas
y devuelve una salida. Podemos hacer clic derecho en una de las entradas y
convertirla en un entero también. Ahora bien, te habrás dado cuenta que lo estoy haciendo para que la
salida sea un flotador. El motivo por el
que estoy haciendo eso es porque si lo hicimos al
revés, así que si copio y pego
mi entero aquí, y creamos un nodo de anuncio. Si convierto esto a un flotador, se
puede ver que la
salida en realidad ahora se cambia a un flotador a
pesar de que era un entero. La razón por la que esto está
sucediendo es porque nuestro, si esto fuera una salida entera, perderíamos cualquier valor, cualquier valor de punto decimal o variable
flotante podría tener. Por lo que automáticamente cambia
eso ahora a un flotador. Entonces continuando,
tenemos nodo multiplicar. También podemos hacer esto
con nuestro entero. Así que si elimino esta nota de anuncio
aquí siendo arrastrado hacia fuera, podemos buscar multiplicar, multiplicar nodo, y
eso nos dará un entero multiplicar nodo. También tenemos los nodos
restar. Entonces si solo elimino
estas notas, podemos usar un nodo restar. Y puedes buscar
el símbolo de línea aquí, o puedes buscar restar. Depende de ti. Y eso nos da
lo mismo que nuestro nodo de suma, pero hay resta las
entradas y devuelve las salidas. Nuevamente, podemos convertir
estas entradas a un entero, o si quisiéramos
en un nodo entero, podríamos convertirlo en un float. Y al igual que antes, vuelve a convertir la
salida a un flotador, porque hemos agregado
una entrada de flotación. Entonces esas son las formas
básicas en que podemos manipular nuestros valores de variables. Podemos establecer esos nuevos valores. Pero también hay formas en que
podemos comprobar nuestras variables. Así que si nos deshacemos de estos nodos
menos por ahora, También
hay nodos
como el mayor que nodo. Entonces si me arrasto
de mi entero, busco mayor que. Se puede ver, podemos o bien
buscar mayor. Entonces si busco mayor,
puedes ver que sube, o puedes usar el
símbolo mayor que y crear este nodo. Y esto nos da
dos entradas que son enteros y una
salida que es booleana. Entonces esto básicamente comprobará, es el valor a, el valor superior mayor que el valor b o el valor inferior. Si lo es, entonces
devolverá un verdadero booleano. Y si es falso,
devolverá un booleano falso. Nuevamente, al igual que nuestros nodos anteriores, podemos convertir los pines de entrada. Entonces si me convierto, podemos
cambiar esto a un flotador. Así que en realidad podemos comprobar para ver es nuestro entero
mayor que nuestro valor de flotación. Y eso volverá a salir
todavía un valor booleano porque esto siempre
será verdadero o falso. Podemos hacer lo
mismo con menos de. Entonces podemos arrastrar hacia fuera
de nuestro entero y hacer el símbolo menos que o
podemos buscar menos. Y eso nos da el
mismo nodo pero al revés. Entonces si a es menor que b, entonces volverá verdadero. Si a es mayor que b, devolverá falso. También hay nodos
mayores o iguales. Entonces si hago el
símbolo mayor que en C que
tenemos mayor igual. Y esto sólo comprueba, es una mayor que B o es? Lo mismo que B. Si es mayor que b,
volverá verdadero. Si es lo mismo que B, también
volverá verdadero. Y si es menor que b, volverá falso. Y entonces tenemos el mismo nodo, pero con menos sol también. Entonces podemos hacer menos que igual. Y eso hace
lo mismo pero al revés. Entonces a debe ser el
mismo que nuestro valor inferior o
menor que nuestro valor inferior. Y eso volverá cierto. Ahora, debido a que estos nodos
generan una variable booleana, en realidad
podemos usar estos para decir variable
booleana como
estábamos haciendo en nuestra lección
anterior. Entonces si creo una nueva variable
y la llamo booleana, podemos usar estos mayores
que nodos o
menos que nodos para establecer una
variable booleana si quisiéramos. También podemos usar estos nodos para
controlar un nodo de rama. Entonces si busco rama
y creo un nodo Branch, como hicimos en nuestra última lección, podemos controlar qué código
se está corriendo
dependiendo del resultado de nuestro
mayor que o menor que. Nota. Otra nota que
quería
mostrarles chicos es el nodo igual. Ahora, esto funciona de manera similar a cómo funciona
nuestro nodo booleano igual. Si arrastro hacia fuera de
mi entero y hago los dos símbolos iguales y veo que
nos crea un nodo igual. Y esto básicamente comprueba, son estos dos
enteros iguales y da salida a un booleano
que luego podemos usar en cosas como lo antes posible nodo
booleano o un nodo de rama. A diferencia de los nodos anteriores, también
podemos convertir la entrada
a un float si queremos. Podemos elegir flotar de
doble precisión porque eso es lo que era
nuestra variable. Podemos conectar nuestro
ejemplo de flotación en eso. Y esto comprobará, ¿
es nuestro entero exactamente lo mismo que
nuestra variable de flotación? Si lo es, devolvemos true, si son diferentes
a lo que devuelve false. Los enteros también tienen
otra forma controlar qué
código se está ejecutando. Así que si elimino este
código aquí por ahora, y arrastro hacia arriba nuestro
ejemplo entero. Si arrasto hacia fuera y
busco switch, puedes encontrar switch on int. Y esto nos da una
nota que nos permite controlar qué salida se ejecuta dependiendo de
nuestro valor entero. Por lo que actualmente nuestros valores
enteros son dos. Tenemos un bolígrafo por defecto. Entonces, ¿qué pasará si me hubiera dejado el botón del mouse en este momento es que nuestro bolígrafo predeterminado se ejecutaría y
no pasaría nada más. Pero si agregamos un bolígrafo nuevo, se
puede ver que se le agrega
un pin que dice 0. Si agrego un par de alfileres más, ves que tenemos 012. Ahora si yo fuera a presionar
el botón izquierdo del ratón, los dos lapiceros harían ron, porque nuestro entero
se establece en dos. Si tuviera que cambiar esto a 0, entonces nuestro bolígrafo 0
correría en testículo o mediante el
uso de una cadena de impresión. Simplemente establecemos esto en 0. Voy a copiar y pegar esto
y vamos a establecer este a
uno y este a dos. Ahora, dependiendo de lo que se ejecute nuestro entero de
ejemplo, se ejecutarán
las diferentes salidas si presionamos Play. Y me fui del ratón, se
puede ver 0 se está ejecutando porque
puse el valor a 0. Si lo configuro en uno, entonces nuestro se ejecutará y eso ejecutará nuestra cadena de impresión única. Se puede ver uno ahora corriendo. Esto puede ser útil
si desea ejecutar código
diferente
dependiendo de qué valor sea. Y si yo fuera a decir establecer
este valor para decir 99, ahora no hay una salida de 99 pines. Entonces, lo que en su lugar sucederá es que nuestro lápiz predeterminado se ejecutará en su lugar porque no hay salida
coincidente para 99. Entonces si en algún momento
quisimos eliminar algunas
de estas salidas, solo
podemos hacer clic derecho en
el pin y podemos hacer quitar la
pluma de ejecución para quitarlas. Por último, quiero
mostrarte cómo podemos usar un flotador para establecer un entero. Ahora, esto es un poco
diferente de lo normal, ya que nuestro flotador podría tener un ganador de valor
decimal, y nuestro entero no puede
almacenar ese valor. Entonces tenemos que redondear hacia
arriba o hacia abajo o flotar. Entonces si obtenemos nuestro
ejemplo float aquí, establecemos nuestro ejemplo entero. Conectamos esto hasta nuestro botón
izquierdo del ratón aquí. Podemos arrastrar y conectar
directamente a nuestro entero. Pero eso
nos va a dar este nodo y esto redondeará hacia arriba, redondea hacia abajo o valor flotante. Entonces si esto es decir, 1.25, redondeará ese
valor a uno, y luego dirá
entero a uno. Entonces si agregué una
cadena de impresión aquí para que podamos ver cual es el resultado en juego. Esperamos que este resultado sea uno cuando salí del mouse, que es, y aunque establezca
este valor en 1.99,
seguirá redondeando
el valor a la baja. Entonces si vuelvo a golpear play, se
puede ver que sigue redondeando
ese valor a la baja a uno. Pero hay otros nodos
que nos permiten
redondear la flotación a un número entero
diferente. Entonces si volvemos a la cabeza del blueprint de nuestro
personaje y eliminamos el nodo. Eso es sólo el
nodo por defecto para cuando arrastramos de un flotador a un entero. Pero también podemos arrastrarnos de nuestra flotación y buscar ronda. Y podemos usar el nodo redondo, que simplemente redondearía nuestro valor de flotación al número entero
más cercano. Entonces si conecto esto aquí arriba, actualmente nuestra variable es 1.2. Entonces cuando dejamos el botón del ratón, habíamos esperado
redondear hacia abajo a uno. Entonces si le damos a Play,
se puede ver que está
imprimiendo uno. Y si yo fuera a aumentar
esto para decir 1.8, esperaríamos que redondee a dos. Ya ves que eso está
funcionando correctamente. Ahora, no necesitamos este mismo proceso de conversión si queremos establecer un
float en un entero, porque los flotadores pueden mostrar números
enteros muy bien. Entonces si fuera a borrar este código, pondríamos nuestro flotador. Y tenemos nuestro
ejemplo entero aquí. Sólo voy a
reutilizar esta variable. Si conectamos eso, puedes
ver que solo nos da esta pequeña nota que la
convierte de entero a fluir. Y no hay redondeo pasando porque nuestro
entero es un número entero. Y nuestra flotación puede almacenar números
enteros muy bien. Para que puedas ver nuestro
entero, es 99. Cuando dejamos el botón del ratón, cambiará nuestra
flotación a esta noche. Entonces solo conectaré esto
a nuestra cadena de impresión. Así que cuando golpeemos play, verás
que está imprimiendo 99 porque es float
como valor de punto, pero se está configurando en el valor
correcto de nuestro entero. Ahora, hay muchos
otros nodos matemáticos integrados en el motor que
no estaremos cubriendo en esta lección porque
hay muchos. Pero si arrastramos hacia fuera
de nuestro entero, puedes desplazarte hacia abajo
y encontrar la masa. puedes encontrar todo
tipo de nodos Aquípuedes encontrar todo
tipo de nodoscon los que puedes jugar
si quieres. La mayoría de ellos son
bastante específicos, por lo que probablemente no los
uses con demasiada frecuencia. Pero lo que he mostrado aquí son los nodos más utilizados. Y puedes hacer exactamente lo
mismo con las carrozas. Si me arrastro de ahí
y simplemente nos desplazamos hacia abajo, podemos encontrar las matemáticas. Se puede ver que hay
aún más para los flotadores porque son un poco más versátiles ya que
tienen un punto decimal. Entonces eso va a ser
todo por esta lección. Al igual que el booleano, estaremos usando
flotadores y enteros
mucho más en futuras lecciones solo porque son una especie
de la parte central de hacer cualquier matemática en el motor. Por lo que te estarás
familiarizando bastante con ellos
en el futuro.
8. Variables (nombres, texto y cuerdas): Oigan a todos. En esta lección vamos a
estar repasando los tipos de variables name, string y text. Todas estas variables se
utilizan para almacenar texto y cada tipo de variable tiene algunas limitaciones y
beneficios al usarlas. En primer lugar, tenemos el tipo de variable de
nombre. Ahora bien, esto se usa para almacenar textos en el reproductor normalmente
no ve. Es más por hacer referencia a
ciertas cosas en código. Entonces, por ejemplo,
cuando queremos obtener una ubicación de hueso o zócalos, usaríamos una
variable de nombre para decirle al motor para
qué hueso o zócalo queremos
obtener información. Entonces debido a eso, la variable de nombre
es bastante limitada. No necesita todos los nodos a
los que las
variables de cadenas y textos tienen acceso. Entonces comenzaremos
creando nuestra variable de nombre. Así que sólo voy a crear
una nueva variable y voy a
llamar a este nombre de ejemplo. Vamos a establecer nuestro
tipo de variable a la variable nombre. Y compilaremos. Una vez compilado,
puedes ver que tenemos nuestro valor
predeterminado aquí, y esto es solo un libro de texto
estándar que podemos ingresar texto. Por lo que puedo poner hola. Esta es una variable de texto que
almacena esa información. Ahora como es de esperar, igual que nuestras variables anteriores, podemos obtener y establecer
esta variable también. Así que podemos arrastrarlo
y obtener un nodo get, o podemos arrastrar y
obtener un nodo conjunto. Ahora la única
serie diferente que se establecen nodo tiene un cuadro de texto en el que también podemos introducir texto
manualmente si así lo desea. Para que podamos establecer hola. Y si este nodo se ejecutará, sería amargo
ejemplo nombre2 hola. Por supuesto, si tuviéramos
otro tipo de variable de nombre, podríamos enchufar esto directamente
a nuestro nodo set para establecer nuestro ejemplo llamado variable
a un valor diferente. Ahora, porque todos
nuestros tipos de variables que estamos viendo hoy son variables de
textos. Todos almacenan texto. Todos se pueden convertir el uno
al otro. Así que si yo fuera a crear
una nueva variable de cadena, así que voy a llamar a esta cadena de
ejemplo. El autoguardado salió de mi tiempo. Ahí vamos. Cadena de ejemplo. Podemos elegir el tipo de cuerda. Y si me sale mi variable de cadena, se
puede ver si arrasto hacia fuera
y me conecto hasta mi texto, sólo nos da este nodo de
conversión y que tomará lo que sea
nuestra cadena de ejemplo es,
es texto valor y
configurarlo a nuestro nombre de ejemplo. Y podemos hacer eso y
lo contrario también. Así que si quisiéramos, podríamos establecer nuestra cadena usando
el nombre de ejemplo. Y nos da ese
nodo de conversión al revés. Las variables de cadena son los tipos de
variables más flexibles de los textos, tienen muchos más
nodos disponibles para ellos que los textos o la estancia de tipo
variable de nombre. Debido a eso, puede
ser útil convertir digamos, un nombre o una
variable de texto a cadena,
editar esa cadena, y luego convertirla nuevo a nuestro nombre o tipo de variable de
texto. Como podemos hacer mucho más editando codificar con nuestro tipo de cadena. Por último, tenemos los tipos de variables de
texto. Entonces voy a crear
una nueva variable. Voy a llamar a
este texto de ejemplo. Y vamos a establecer el tipo a texto y vamos a compilar para que
obtengamos nuestro valor por defecto aquí. Puedes ver como nuestras variables
anteriores, obtenemos un cuadro de texto para que
podamos agregarte texto. Esta es una variable de texto, por ejemplo, podemos compilar y ese es ahora nuestro
valor inicial para nuestro texto. Ahora, las variables de textos se utilizan para los textos que
los jugadores tienden a ver. Entonces si tuvieras un sistema de diálogos o un sistema de menús o
algo así,
que el jugador realmente
vea los valores del texto. Tendemos a usar
variables de texto para eso. Y la razón es
porque puede ser localizada, que se utiliza para convertir
texto a diferentes idiomas, lo cual irreal tiene un sistema
incorporado para. No estaremos cubriendo
eso en esta lección. Pero es importante que
cuando estés construyendo sistemas de
menús o cualquier texto
que el reproductor vea, utilices un tipo de variables de texto para que
puedas tener acceso a ese sistema de localización que te
permite tener
múltiplesidiomas. Por lo que los textos pueden ser get y
set de la misma manera que
hemos hecho con nuestra cadena
y nuestras variables de nombre. Para que podamos arrastrar esto
y obtener un nodo get. Y ese nodo, se puede ver que es similar a nuestro
nombre en cadena. Tenemos una entrada de texto y podemos establecer nuestro nodo a
otra variable de texto. O podemos usar digamos, una cadena. Podemos obtener nuestra variable string. Podemos enchufar eso directamente en nuestros textos y
se puede ver que nos
da un
tipo de nodo de conversión de aspecto diferente, pero hace esencialmente
lo mismo, lo que sea cadena de ejemplo es, convertirá eso en texto, y luego podremos poner
nuestro texto de ejemplo. Y lo mismo para nuestro nombre. Entonces si obtengo la variable de nombre, podemos enchufar eso
directamente a nuestro texto. Se puede ver que obtenemos este nodo de conversión
aparece automáticamente que convierte nuestro
texto de nombre en un texto de texto. Y eso nos permite establecer
nuestros textos de ejemplo variables. A continuación, quiero llevarte a través algunos nodos de uso común con estos diferentes tipos de
variables. Y empezaremos con
la cadena porque esa tiene la mayor cantidad de
nodos que se pueden usar con ella y generalmente es el tipo de textos más flexibles
que puedes usar codificación. Si arrastramos hacia fuera uno de los más
utilizados es anexar. Entonces si buscamos append, podemos sacar este nodo aquí. Ahora el nodo append nos
permite tomar múltiples entradas de cadena y combinarlas
para una salida. Esto puede ser útil si
quieres decir agregar texto
adicional a una cadena sin cambiar la variable
original. O si tenías múltiples variables de
cadena, puedes conectarlas a
append y luego
generará esos valores de textos
combinados juntos. Entonces por ejemplo, si pongo mi cadena de
ejemplo a hello, y configuro el espacio B2B, esto es una prueba. La salida de este
nodo sería hola. Esta es una prueba todo
en un valor de cadena. Y podríamos usar esto para tal vez establecer otra cadena si quisiéramos o
establecer
cadena de ejemplo también. Podemos agregar
entradas adicionales también. Entonces, si
quisiéramos, podríamos tener otras variables
enchufadas a estas entradas, y todas se combinarían
juntas en una sola salida. Otro nodo que se
puede usar con cadenas es el nodo contiene. Entonces si arrastramos hacia fuera y
buscamos contiene, podemos obtener la cadena, podemos obtener contiene. Y esto buscará
nuestra subcadena. Por lo que comprobará es la
subcadena en este texto. Entonces si yo fuera a decir hola, buscaría esta cadena
para ver si la palabra hola está contenida en ella y luego
devolver un valor verdadero o falso. Entonces debido a que nuestra
cadena de ejemplo está establecida en hello, esto devolvería true. Entonces tenemos un
par de opciones. Entonces tenemos caso de uso. Esto significa que ¿es sensible a mayúsculas y minúsculas? Entonces por ejemplo, si yo fuera a cambiar nuestra edad a una h minúscula, El hola en nuestra cadena
tiene una mayúscula. Así que esto en realidad devolvería
false porque no coincide
exactamente con nuestro hola en
minúsculas. Tenemos búsqueda de n, lo que básicamente solo significa
que buscará desde el final de la cadena hasta el principio en lugar de
principio a fin. Otro nodo que podemos usar
es la nota reemplazada. Así que si arrasto fuera de mi búsqueda de
cadena para reemplazar, podemos crear el nodo de reemplazo. Y esto nos
permite establecer textos que queremos reemplazar y con qué
queremos reemplazarlo. Entonces si selecciono mi
cadena de ejemplo aquí y agrego, digo la palabra test, pongo el Fromm a probar
y los dos a irreal. Sustituirá todas las palabras de
prueba por Unreal. Y entonces aquí solo podemos
establecer si es o no sensible a
mayúsculas y minúsculas y eso dará
salida a la nueva variable. Así que en realidad podemos establecer que
a nuestra cadena de ejemplo. Vale, tomo nodo solo
para que podamos sentarnos y ganar. Conecta eso en nuestro nodo set, creará una cadena de impresión y conectará eso
hasta la salida. Así que ahora cuando
lleguemos a play, veremos nuestra
cadena de ejemplo decir hola y rail en lugar de hello test, que es lo que
actualmente está configurado. Ahora el último nodo que vamos a mirar es la nota igual. Así que si eliminamos nuestro
reemplazado señaló arrastre hacia fuera de la cadena y
podemos buscar iguales. Y queremos, bueno, aquí
tenemos algunas opciones
diferentes. Tenemos exactamente igual. Así que este es un nodo
igual a mayúsculas y minúsculas. Entonces si creamos eso y vemos que tiene tres signos iguales. Y esto comprobará, ¿ambas
entradas son exactamente iguales, incluyendo letras mayúsculas y
minúsculas? Si lo es, devolverá
verdadero si no falso. O podemos usar el igual a
mayúsculas y minúsculas. Por lo que esto devolverá true si
los valores de texto son los mismos, incluso si tienen diferentes valores en
mayúsculas y minúsculas. Entonces por último,
tenemos el no igual. Entonces esto hará lo contrario. Esto devolverá true
si las entradas de texto son diferentes y devuelve false si las entradas de texto son las mismas. Así que vamos a pasar
a nuestra variable de nombre ahora, si quieres encontrar alguna de
las otras
funciones de cadena están disponibles, sólo tienes que arrastrar fuera de una
variable de cadena, buscar cadena. Y podrás encontrar
todas las funciones de cadena
bajo la categoría de cadena
que puedes ver aquí. Así que sólo vamos a eliminar
este código ahora y traer en un ejemplo nombre
get nodo como ese. Ahora, nuestra variable de nombre es mucho más restringida que
las notas de cadena. Sólo hay unas pocas
notas que
en realidad se pueden utilizar para eso. Si nos arrastramos, podemos
buscar a los iguales. Esto nos da el nodo igual
original. Usted puede notar esto
de nuestro video entero, pero no podemos cambiar las entradas. Entonces si hago clic derecho, se puede ver que no hay opciones de conversión. Este nodo, estamos
básicamente sólo tomar en variables con
nombre y
comprobar si son iguales y devolver un valor
verdadero o falso. También podemos crear un
switch en NameNode. Entonces si eliminamos este nodo y
arrastramos hacia fuera y buscamos switch, podemos crear un
switch en namenode. Ahora esto funciona de manera similar
al switch entero que
creamos en nuestras lecciones anteriores. Podemos agregar nuevos pines de salida. Y dependiendo de lo que nuestra variable de
entrada esté establecida, podemos ejecutar un pin de salida
diferente. Para que puedas ver más
en el panel Detalles tenemos nombres de pin. Para que pueda cambiar estos
nombres para saludar. Y cambiaremos el
segundo a prueba. Ahora, si nuestro
nombre de ejemplo se establece en, si sólo lo cambiamos a hello, cuando este nodo se ejecute, nuestro hello new pen se ejecutaría. Y si estuviera configurado para probar, nuestro pin de prueba funcionaría. Y luego si se configurara en
algo completamente diferente, solo se
ejecutarían letras aleatorias que nuestro bolígrafo predeterminado. Así que usted puede controlar
qué código se está ejecutando por una variable de nombre
usando uno de estos, este nodo en realidad también funciona
con nuestra cadena, así. Así que si sólo
arrastro rápidamente una cadena, podemos hacer un interruptor
en la cadena también. Eso funciona exactamente de la misma manera. Podemos crear nuevas entradas,
cambiar sus nombres, y se ejecutarán
dependiendo de lo que nuestra entrada de cadena esté establecida. Por último, pasaremos
a nuestra variable de texto. Así que sólo voy a eliminar
estos y vamos a arrastrar en un hueco para nuestro ejemplo de texto, igual que nuestro nodo cadena, los textos pueden utilizar
un igual nodos. Entonces si buscamos iguales en C, tenemos los mismos nodos
que teníamos para nuestra cadena. Tenemos exactamente igual, que significa que si ambas entradas
tienen que ser exactamente iguales, los valores de los
textos para
que devuelva true. Tenemos el caso insensible a mayúsculas y minúsculas, por lo que sólo tiene que ser
los mismos valores de texto. No importa
si son mayúsculas o minúsculas y luego regresan true. Y luego tenemos
los no iguales, lo que significa que ambas entradas tienen que ser diferentes para que la
nieve vuelva verdadera. Ahora, nuestro nodo de texto
no puede hacer conmutadores. Entonces si arrasto hacia fuera y
busco interruptor, se
puede ver que
no hay interruptor en el texto, así que eso es una limitación. Tampoco puede hacer
cosas como anexar. Se puede ver que esas opciones no están ahí como lo están
nuestras cuerdas. Pero podemos usar
formato, formato texto, que es un poco más de una versión avanzada
del nodo append. Ahora, el nodo de formato de texto es realmente útil para
cosas como crear descripciones de
elementos o en cualquier lugar donde vayas
a tener diferentes entradas en tu texto. Así que lo que quiero decir con eso
es si agregamos un formato, por lo que el nombre de este artículo es ahora podríamos ser capaces de
pasar el ratón sobre diferentes elementos y queremos que este nombre del elemento cambie, pero no queremos que estos textos
originales cambien. Lo que podemos hacer es agregar
estos dos corchetes aquí, y voy a hacer zoom para que
puedas ver el tipo de corchete. Ahora, sea cual sea el nombre que
coloquemos entre estos paréntesis, nos agregaremos una nueva pluma. Voy a llamar nombre a este
artículo. Pulse Enter. Se puede ver que ahora
tenemos una entrada de nombre de elemento, y este es un comodín para
que podamos agregar, podemos enchufar un texto
si queremos hacer todo, podemos agregar un entero o una cadena o un nombre,
lo que prefieras. Y lo que sea que
introduzcamos, saldrá el
nombre de este ítem es y luego la entrada. Entonces como ejemplo, si agrego un tick arrastrará
hacia fuera y haré cadena de impresión. Simplemente podemos conectar el
resultado a nuestra cadena de impresión. Y conectaré mis
textos de ejemplo al nombre del elemento, y cambiaremos el
texto de ejemplo a Apple así. Por lo que ahora cuando
lleguemos a play, veremos que el nombre de este
artículo es Apple. Ver el nombre de este artículo es apple. Y podemos extender
esto aún más. Por lo que podríamos poner este artículo hace, y volveremos a hacer los soportes, tipo de
daño y golpear Enter y
ahora crear otra entrada. Y podríamos decir que usa nuestra cuerda. Podemos arrastrar eso en, conectar hasta el tipo de daño. Y podemos poner fuego. Y agregaremos
daños después de aquí. Entonces ahora diré que el nombre de este
artículo es Apple y el artículo hace daño de fuego, golpea play, y verás que se está
imprimiendo correctamente. Si quisiéramos, podríamos establecer estas variables
usando otros códigos para
que cada vez que pasemos cursor sobre un
elemento diferente, por ejemplo, el nombre del elemento cambie
al nombre correcto y
el tipo de daño cambia a decir las grietas tipos de daños. Entonces si cambio esto dos veces, se
puede ver ahora
cuando golpeamos play, dice daño de hielo
en lugar de daño phi. Eso va a ser todo
por esta lección. Esperemos que ahora
tengas una idea de lo que sería útil
cada una de estas variables. Sólo para repasarlo de nuevo, las variables de
textos son
las que usamos para mostrar realmente
textos al jugador. Ahí es donde
vamos a almacenar cosas como el nombre de un artículo, descripciones, cosas así. Entonces tenemos cadenas
que son útiles para editar en nuestro código. Pero no tendemos a mostrar eso al jugador porque no se
pueden usar para la localización. Y luego tenemos la
variable de nombre que es más utilizada puramente codificar para
hacer referencia a cosas como nombres de huesos, zócalos,
filas DataTable, cosas por el estilo.
9. Variables (vectores, rotadores y transformaciones): Oigan a todos. En esta lección vamos a
estar repasando vectores, rotadores y transformar tipos de
variables. Vectores o una variable utilizada para
definir objetos, ubicaciones. Se compone de
flotadores libres llamados x, y, y z Si selecciono uno de mis
cubos aquí en el nivel, se
puede ver en el panel
Detalles
tenemos una ubicación
y que tiene una ubicación X, Y, y Z. Y a medida que muevo el cubo, se
puede ver que
esos valores cambian dependiendo del
eje que mueva el cubo M. Los rotadores son similares a los vectores en que están
formados por flotadores libres. Tienen X, Y, y Z. También
tienen nombres secundarios. Entonces si tenemos nuestro cubo seleccionado, puedes ver x es rho, y es pitch, y z es tu. Si presiono E con
mi cubo seleccionado, se
puede ver que podemos rotar nuestro cubo y esos
valores comienzan a cambiar dependiendo del eje en el que estemos girando nuestro cubo. Entonces, por último, nos
hemos transformado. Ahora bien, estas
variables de ubicación y
rotación y escala son en realidad parte de una variable
llamada transformada. Transformar se utiliza para definir la ubicación,
rotación y escala de
un objeto en el mundo. Ahora, la escala es en realidad solo otro vector que se
compone de tres flotadores con
los mismos nombres que
nuestro vector de ubicación. Tenemos x, y, y z
Y uno significa que el AXA
es su tamaño estándar normal. Si aumentamos esto para decir dos, será el doble de su tamaño
estándar, como puedes ver aquí
con nuestro cubo. Entonces ahora vamos a
echar un vistazo a cómo podemos usar y cambiar estos
valores dentro de un blueprint. Entonces abriremos aquí a nuestro personaje en
tercera persona. Y sólo para empezar, vamos a crear
una nueva variable y vamos a
llamarla vector. Y vamos a cambiar nuestro tipo de
variable a un vector. Y vamos a arrastrar que en y obtener la variable también
arrastrando un conjunto también. Para que puedas ver cómo
es eso. Ahora. Nuestro nodo get
se ve más igualquenuestras variables anteriores, pero nuestro conjunto ahora
tiene tres entradas ,
y esto nos permite establecer
un valor para x, y y z. que o menos
igualquenuestras variables anteriores,
pero nuestro conjunto ahora
tiene tres entradas,
y esto nos permite establecer
un valor para x, y y z.
número de punto decimal porque estos son solo
flotadores individuales que podemos establecer. Podemos establecer estos de
algunas maneras diferentes. Podemos conectar otro
vector hasta esta entrada, y eso solo
establecerá nuestro vector a cualquier variable que
conectemos a él. Podemos configurarlos
individualmente manualmente. Para que pudiera establecer estos para decir 123. O podemos realmente arrastrar
hacia fuera y buscar el vector de
carne, el nodo vector. Y eso en realidad nos
da este nodo, que nos permite enchufar una
tarifa variable flotante cualquiera de estos valores x, y, y z. Otra forma en que podemos establecer esta
variable es si eliminamos nuestra nota de make aquí y hacemos
clic derecho en el lápiz vectorial, podemos dividir struct pen, y eso en realidad
nos permite establecer los flotadores directamente en el nodo set. Entonces no tenemos que tener
que hacer nodo vectorial. Y si queremos recombinar estos de nuevo en
el lápiz original, solo
podemos hacer clic derecho en
seleccionar Struct Pin recombinado. Y eso restablecerá
nuestro nodo SAT. Ahora con nuestro vector,
si lo seleccionamos, puedes ver que necesitamos
recompilar nuestros blueprints, así que lo haremos
rápidamente y de nuevo, en nuestros valores predeterminados, podemos establecer un valor x,
y y z, y estos serán nuestros valores iniciales
para esta variable. A continuación, sólo te voy
a llevar por algunos nodos comunes que
se usan con vectores. Entonces el primero es R igual. Si arrastramos y
buscamos iguales, entonces tenemos igual exactamente. Este es un nodo que básicamente comprueba ambos vectores que se ingresan en este nodo
exactamente igual que los valores x, y y z son los mismos. Si lo es, lo intentará y tratará. También tenemos un casi igual. Entonces si usamos la nota
igual aquí, se
puede ver que eso nos da dos entradas vectoriales y
luego una entrada de flotación. Y lo que hace esto es que
podemos enchufar dos vectores, n. y podemos decir, podemos
darle una tolerancia al error. Entonces podemos configurar esto para decir uno. Y esto volverá
verdadero si los valores x, y, y z están dentro de
uno de cada uno de los otros. También podemos usar todos
los nodos matemáticos estándar con nuestros vectores para que podamos arrastrar hacia fuera, podemos usar el Add
Node que nos da la capacidad de agregar dos vectores juntos y devolver el resultado. Podemos usar el nodo menos
o el nodo resta. Eso hace exactamente lo mismo, pero resta los dos vectores el uno
del otro y
devuelve la salida. Tenemos el nodo Multiplicar, por lo que podemos buscar multiplicar, y eso nos dará
el nodo más ply. Esto multiplicará la x
por dx del valor superior. El valor y es y y el z por el valor superior C.
Y pondré la respuesta. Por supuesto que también tenemos divide, por lo que podemos buscar divide. Y eso opera de la misma manera. Divide el valor superior pero el inferior y
nos da la respuesta. Ahora, al igual que nuestros nodos de mapas
anteriores, podemos cambiar algunas
de estas entradas. Entonces, por ejemplo,
puedo hacer clic derecho en la entrada inferior aquí
y convertir el pin. Podemos cambiar esto a otras variables matemáticas para
que los enteros floten. Por ejemplo, si quisiéramos decir menos un cierto flotador
de todos nuestros valores x, y, y z y nuestro vector, podríamos cambiarlo a
un flotador y hacer eso. Podemos hacer exactamente lo mismo
de nuestro Add Node también. Así que tal vez tenemos un entero
esta vez queríamos agregar un valor entero a todos
nuestros valores x, y, y z. Eso también lo podemos hacer. La siguiente etapa que
vamos a ver se llama los nodos de vuelta. Por lo que sólo vamos a
eliminar estas notas aquí. Arrastraremos fuera de mi
vector y buscaremos vuelta y crearemos ese nodo. Y esto nos permite tomar dos vectores y dar
una salida vectorial. Y este valor alfa es un flotador. Y este es esencialmente el valor entre
estos que queremos. Entonces, por ejemplo, si
tuviéramos un valor y y un valor y B,
y establecimos esto en 0.5. La ubicación de salida
sería exactamente entre estas dos ubicaciones
de entrada. A continuación, vamos a echar
un vistazo al nodo break. Ahora si te acuerdas
de nuestro nodo set, podemos arrastrar hacia fuera y
buscar make factor. También podemos hacer lo mismo con un vector get node podemos arrastrar hacia fuera y podemos buscar break. Y podemos romper ese
vector ahora en sus valores de flotación x, y y z. También podemos hacer clic derecho en
nuestro vector, obtener nodo y seleccionar
Split Struct Pin. Y eso nos da acceso directo
a esos valores también. Y si queremos recombinarlo, simplemente
hacemos clic derecho de nuevo y seleccionamos recombinar estructuras pluma. Ahora vamos a utilizar
realmente el vector para empezar a efectuar un
objeto en el mundo. Para que puedas acostumbrarte
a hacer eso. Para empezar, vamos
a crear un nuevo acceso. Por lo que iremos al navegador de
contenido, clic derecho y crearemos
una clase de blueprint. A continuación, seleccione axón. Y llamaremos a este cubo, abriremos nuestro blueprint de colas, y añadiremos un nuevo
componente llamado cubo. Eso solo
nos va a dar un componente de cubo, compilará y guardará esto, y luego volverá al Blueprint
Third PersonCharacter. Y haremos clic derecho y
buscaremos el botón izquierdo del ratón. Entonces de prensa
arrastrará hacia fuera y
buscará el actor de spawn de la clase. Y esto va a
crear un nuevo actor en nuestro nivel cada vez que
dejamos el botón del ratón. Y vamos a
configurar la clase cubo porque
queremos desovar nuestro cubo. Y vamos a arrastrar fuera
de spawn transform y buscar make transform. Esto funciona de manera similar
al nodo make vector. Simplemente nos permite en su lugar
hacer una variable de transformación. Así que puedes ver que tenemos
nuestro vector para ubicación o rotador para rotación y luego nuestro segundo vector para escala. Y vamos a estar
usando la ubicación para elegir dónde queremos
nuestro engendro en cubos. Quiero que mi cubo desove justo
encima de la cabeza de mi personaje. Entonces voy a usar la
carga de ubicación del actor get va a crear eso. Se puede ver que la salida es un vector y la entrada
es un objeto actor. Y actualmente sólo dice sur porque nada está
enchufado a él. Entonces vamos a estar haciendo que nuestros personajes en tercera persona
actúen a la ubicación. Si arrastramos hacia fuera y
queremos usar un add notas. Entonces voy a hacer agregar. Sólo estamos borrando nuestra
variable vectorial aquí por ahora. Ahora quiero que desove
un poco por encima de mi personaje, porque si enchufo esto
directamente a la ubicación que un cubo va a desovar
justo dentro de nuestro personaje, lo que
estropeará la colisión. Entonces vamos a
tomar la salida, enchufar eso a la ubicación, y vamos a aumentar
esto por decir, 150. Entonces está muy bien por encima de
nuestro personaje. Por lo que ahora podemos compilar
y golpear play. Cuando dejé el botón del ratón, se
puede ver un cubo como
desovar justo encima de mi cabeza. Si me muevo sobre otro
cubo o desove, seguirán haciendo eso a medida que
me muevo por el nivel. Ahora si quería que el cubo me
siguiera, eso también lo
podemos hacer. Entonces si salgo y vuelvo a nuestro
Plano de PersonaTerceros. Entonces para que nuestro cubo nos siga, necesitamos hacer algunos cambios
a nuestro código para empezar,
vamos a arrastrar hacia fuera
desde el valor de retorno aquí, y vamos a seleccionar
Promocionar a Variable. Lo que esto hará es crear
una nueva variable que sea
del mismo tipo que nuestro pin desde el
que estamos arrastrando. Por lo que promoverá la variable. Esto creará un tipo de variable de
cubo que llamaremos cubo. Y esta es una
variable acto de referencia que estaremos
cubriendo en una lección posterior. Pero esencialmente, esto
sólo nos permite
decirle a nuestro nuevo cubo lo que
queremos hacer con él. Entonces vamos a conseguir
nuestra nueva variable en cubos. Vamos a arrastrar hacia fuera
y vamos a hacer es válido y crear
un nodo es válido. El de abajo aquí, vamos a hacer un poco más de espacio
y vamos a conectar esto hasta el prensado. Y entonces el no es válido
hasta nuestro spawn out al cubo. Y lo que esto hace
es básicamente comprobar, tiene r cubo Admin creado antes. Si no se ha creado antes, entonces no es válido, se ejecutará, y eso nos
permitirá crear un cubo. Y si nuestro cubo
ha sido creado, entonces es válido, correrá, que no hará nada. De manera que eso solo nos impide
crear más de un cubo. Después crearemos un nodo tick. Entonces haremos evento tick. Y en realidad copiaremos
estos dos nodos también. Y conectaremos el
ejecuto a lo auténtico. Y luego arrastraremos fuera
de nuestro cubo y
vamos a usar al actor de set. Nodo de ubicación. Esto nos permite cambiar la ubicación de
nuestros cubos
dependiendo de nuestra nueva entrada. Estamos usando. Esto es válido solo para
asegurarnos de que no obtenemos ningún error. Porque si tratamos de
establecer la ubicación de nuestros cubos sin que nuestro cubo haya sido engendrado todavía,
obtendremos algunos errores. Entonces usamos el es válido,
detén esos errores. Y vamos a
establecer su nueva ubicación a la misma que nuestras ubicaciones de
desove. Entonces sólo voy a mover esto
un poco más alto. Y copiaremos y
pegaremos estos nodos. Y conectaremos esto
a nuestra nueva ubicación. Así que ahora, solo para correr a
través de este código, cada cubo de fotogramas
establecerá su ubicación a nuestra
ubicación actual de caracteres más 150 y altura. Y podemos jugar a esto ahora. Si le pego play y
luego
click izquierdo del mouse y vemos que tenemos nuestro
cubo como siguiéndome alrededor. Si hago spam con el botón izquierdo del mouse, en realidad no está creando
más cubos también. A continuación, vamos a
estar echando un
vistazo a la variable rotadora. Por lo que saldremos fuera
de juego y volveremos a nuestro
Third Personcharacter. Guardaremos este código aquí
por ahora porque podemos
usarlo para hacer algunas cosas
con el rotador. Una vez te he mostrado algunos de los nodos de uso común
con la variable rotadora. Así que crearemos una variable
rotadora la
misma manera que
lo hemos hecho antes. Crear una nueva variable. Llamaremos a esta herramienta Rotar. Y establecemos su tipo
al tipo de rotador. Entonces compilaremos,
apuntalaremos nuestro valor por defecto. Se puede ver aquí es muy
similar a nuestro vector. Tenemos una X, Y, y Z, y estos
son valores de flotación. Podemos obtener nuestro rotador
arrastrando y seleccionando get. Y podemos sembrar rotador
haciendo lo mismo con la opción set en C. Nuevamente, igual que nuestro vector, nos
da una x, y, y z Podemos arrastrar hacia fuera y
buscar, hacer rotador. Y podemos seleccionar la opción de
rotar aquí. Y eso nos da
esas variables que podemos usar para
luego configurar nuestro rotador. O si queremos, podemos hacer clic derecho y seleccionar Dividir Struct Pin para obtener
acceso a esos directamente. Por lo que podemos usar un flotador para configurar cualquiera de
estos individualmente. Al igual que nuestro vector, también podemos
arrastrar hacia fuera de nuestro rotor, obtener nodo y
buscar rotador de rotura. Y eso nos da nuestros valores x,
y, y z como flotadores si necesitábamos acceder
solo a uno de esos. Ahora, a diferencia del vector, no
podemos usar mapas normales ahora. Así que si nuestra variable rotador, hay nodos personalizados que
se utilizan sólo para esto. Así que si
arrastramos hacia fuera y buscamos combinado, se
puede ver que tenemos un nodo de rotadores
combinados, y esto esencialmente sólo
combina a con los valores B. Por lo que podría usar esto
para
valores menos o más a su rotador y luego le
dará una salida. También tenemos acceso
al laboratorio para nuestro rotador. Entonces si arrastramos hacia fuera
y buscamos LAP, vemos que tenemos rotador de labios
y esto funciona igual que nuestro amor
por nuestro vector lo hizo. No podemos tener dos entradas
para rotar o entradas. Y podemos establecer un alfa, y este es un valor
entre 011 sería el valor de salida solo sería el valor b y 0
sería el valor a, y luego 0.5 sería el valor
entre estos dos valores. A continuación tenemos el nodo vector
de rotación de gap x. Entonces eliminaremos ese nodo
aquí y
buscaremos rotación x vector. Y esto es importante
porque nos permite obtener la dirección hacia adelante en una variable
vectorial de un actor. Entonces x es el
vector hacia adelante para la mayoría de los actores. Entonces si vamos a nuestro nivel aquí, sólo arrastra en una plantilla de tercera
persona. Se puede ver esa
x, que es roja. Se puede ver rojo es
x es nuestro delantero. Entonces esto nos permite obtener la dirección hacia adelante para
nuestro personaje en cualquier momento, para que lo rotemos así, voy a seguir dirección ahora
estaría por aquí. Pero se puede ver el mundo
x-dirección sigue así. Podemos usar este nodo
para obtener la dirección a que se enfrenta algo
dependiendo de su rotación. Podemos mostrarte
esto en un ejemplo. Si vamos a nuestra plantilla de tercera
persona y vamos a editar
parte de este código para que nuestro cubo realmente genere hacia adelante en una dirección de nuestros
personajes de cara. Entonces para hacer eso, vamos a
conseguir la rotación de nuestros personajes. Entonces sí conseguiremos rotación, encontraremos la rotación. Ahí vamos, consigue rotación
activa. Esto nos da la
rotación actual de nuestro carácter. Voy a arrastrar hacia
fuera y vamos a hacer conseguir rotación x vector. Y ahora vamos a
multiplicar esto. Entonces arrastraremos hacia fuera
del vector y haremos el nodo Multiplicar. Y vamos a
cambiar la entrada aquí a un flotador porque queremos
multiplicarlo por un valor de flotación. Y aquí vamos
a establecer qué tan por delante de nuestro personaje
queremos r desove en cubos, y esto es en centímetros. Entonces si pongo esto a 500, entonces vamos a más estos dos son actores ubicación
actual. Entonces básicamente estamos diciendo 500 centímetros frente ubicación
actual
de nuestros personajes. Queremos desovar este cubo. Así que vamos a arrastrar hacia fuera de nuestra nota
más aquí y vamos a
hacer otro nodo más. Y agregaremos valor a nuestros
tiempos aquí. Establezca esto en la ubicación. Simplemente voy a reutilizar
esto y enchufar esto nuestra nueva ubicación aquí arriba para
que cuando engendremos nuestra cola, pero nos siga, esa ubicación,
compile y guarde esto. Y eso jugará y jugará. Entonces si le pego play,
se puede ver que puedo correr por ahí y si hago clic dentro el cubo
se genera por ahí. Y si roto el personaje, se
puede ver que el
cubo en realidad está actualizando su ubicación
delante de mí. Ahora no lo he configurado para
usar la rotación de la cámara. Entonces por eso cuando miro a mi alrededor, no cambia el cubo. Pero en cambio cuando
roto el personaje, se
puede ver que el
cubo ahora se está actualizando, está cinco metros por delante de nosotros, pero sigue manteniendo
la ubicación de los personajes, por lo que sigue siguiendo
junto con nosotros . Si yo fuera a cambiar ese valor
500 para decir 200, que el cubo estaría más cerca nosotros porque es
sólo doscientos, doscientos centímetros
frente a nosotros. Por lo que ahora puedes ver que está dos metros por delante de
nosotros y sigue siendo actualizaciones en la
dirección hacia adelante de nuestro personaje. Así que ahora si volvemos a nuestro
blueprint Third PersonCharacter, hay un par de
otras notas que podemos usar con nuestra variable rotadora. Así que al igual que tenemos la nota de ubicación del actor de
set, también
tenemos la rotación del actor
set, rotación de
nodos, que
hace lo mismo, pero en su lugar los conjuntos son rotación. Y en realidad podemos hacer algo de rotación si
queremos con nuestro cubo. Entonces, si arrastramos fuera de
nuestro cubo y establecemos rotación del
factor en eso, y decimos cada fotograma, cada cuadro que queremos rotar un poco
nuestro cubo. Por lo que necesitamos conseguir como
rotación actual y luego agregarle. Entonces vamos a arrastrar hacia fuera y
sí llegar a la rotación. Haremos rotadores de combinación. Simplemente enchufaría esto aquí y diremos,
vamos a aumentar esto
en vamos a aumentar esto uno y a ver cómo
se ve esto. Así que golpeó Play. Si me fui del ratón,
verán que ahora está girando en esa dirección. Si tuviéramos que cambiar los valores en nuestro nodo rotador
combinado, podemos agregar uno
en la y también, y veremos que haga una rotación
diferente. A continuación, vamos a cubrir
el tipo de variable de transformación. Ahora, ya hemos cubierto un
poco en esta lección, pero esencialmente una transformación es solo una variable que se
compone de un vector para la ubicación, un rotador para la rotación, y luego otro vector
para nuestra escala de actores. Y podemos acceder a esa
variable de la misma manera
que hemos sido nuestra ubicación
y rotación. Así que si nos dirigimos de nuevo
al ThirdPersonCharacter
Blueprint ahora, podemos crear una nueva variable. Llamaremos a este formulario trans. Y vamos a establecer su
tipo para transformar. Ahora, de manera similar a
las otras variables, podemos obtenerlo y podemos centrarnos. Ahora puedes ver que no tiene las opciones x y porque hay múltiples entradas que son necesidades
de
transformación desde nuestro nodo set. Si nos arrastramos, podemos
hacer transformar. Y esto nos da acceso
para establecer su ubicación, rotación y su escala. Y este es un vector, un vector y nuestro rotador
aquí en el medio. Y podemos establecer estos
manualmente si lo desea, en este nodo. O podemos enchufar vectores y rotadores como lo
hemos hecho antes. También podemos dividir este nodo tan bien como
lo hemos hecho con los otros. Entonces si hacemos clic derecho en
el pin aquí, podemos hacer Split Struct
Pin que nos da acceso a la ubicación,
escala y rotación. Y en realidad podemos dividir esto
aún más si queremos decir, solo
quería
establecer esta transformación X1 y tenía una variable de
flotación. En realidad podría volver a
dividir esta pluma. Y se puede ver que ahora puedo establecer el valor x float para nuestra
ubicación todo en este único nodo. Y luego si quiero
recombinarlo, recombine y luego
vuelva a combinar, y vuelve a la normalidad. Podemos hacer lo contrario con nuestro
nodo transform get, podemos arrastrar hacia fuera, puedes buscar una transformación
break break y podemos acceder a nuestra ubicación
y rotación y escala. También podemos dividir
esto también para que
podamos hacer clic derecho y
hacer Split Struct Pin. Y eso nos da acceso
a esos también. Ahora podemos configurar las transformaciones de un
actor. Así que si volvemos a
nuestro código de antes, puede ver que hemos estado diciendo la ubicación del actor y la rotación
activa por separado, pero en realidad podríamos
arrastrar hacia fuera y utilizar el conjunto actor transform node. Y eso nos daría
acceso a su transformada, que por supuesto está conformada por
su ubicación y rotación. Para que pudiéramos hacer
nueva transformación. En realidad podemos estar configurando
estos sin estos dos nodos. Así que si elimino estos dos, en realidad
podríamos estar
haciendo eso con un nodo. Entonces voy a enchufar esto
a nuestro es válido. Usando un nodo make, podemos simplemente tomar nuestra ubicación desde donde lo estamos
obteniendo antes. Así que aquí abajo. Entonces nuestra rotación,
ponemos eso en rotación y
dejaremos escala como una sola. Pero si quisiéramos,
podríamos ajustar eso también. Ahora bien, si
golpeamos play, en realidad podemos
ver que sigue funcionando exactamente
igual que antes. Solo estamos usando
ese nodo ahora en lugar de los dos
separados. Ahora, lo último que
quería cubrir en esta lección es la
diferencia entre las transformaciones
locales y mundiales exhalarán juego por ahora y nos dirigiremos
al plano de personajes de tercera persona e inherente. Iremos a la ventanilla. Ahora en la ventana gráfica
podemos agregar un componente, así que solo voy a agregar un cubo. Así que ese es el cubo del sábado ahora
en nuestra ventana gráfica de planos. Y podemos ver que
tenemos una ubicación aquí y actualmente
esta leyendo los ceros son 0. Eso se debe a que nuestros cubos ubicación local
actual. Es 0, el centro
de nuestro carácter. Si fuera a moverlo hacia adelante, se
puede ver que está
aumentando en la x Y ahora si puedo tirar de
esto y colocar esto en,
colocar a nuestro personaje
en el nivel, se
puede ver a nuestros personajes
ahora en este ubicación. Pero si selecciono mi componente de
cubo, se
puede ver que nos está dando un valor diferente al
de nuestro actor. Ahora, eso es porque este
valor es una ubicación local. Por lo que actualmente
se encuentra a 170 centímetros del centro
de nuestro personaje. Pero cuando seleccionamos a
nuestro personaje, así que cuando
seleccionamos al actor completo, nos
da nuestra ubicación mundial, y esa es la
ubicación de nuestros actores en todo el mundo. Ahora podemos cambiar
ambos componentes j, ubicación
del mundo y la
ubicación local en los planos. Entonces para hacer eso, voy a abrir el
carácter de tercera persona aquí, que puede borrar
mucho de este código. Por lo que eliminaremos todos
los códigos conectados a la tecnología y eliminaremos
todo este código también. Entonces solo nos quedamos con nuestro botón
izquierdo del ratón de ellos. Entonces ahora vamos a ir
a nuestra ventanilla y vamos a seleccionar nuestro
cubo que creamos. Voy a restablecerlo a 0, así que está justo en el centro
de nuestro personaje aquí. Y luego la
gráfica de eventos, vamos a arrastrarla hacia fuera de los componentes. Y le vamos a decir que
establezca su ubicación relativa. Y vamos a establecer esto
a 0 en la x 0 y la y,
y luego 150 en la z. ahora cuando pulsemos el botón
izquierdo del ratón, lo moverá a
esta nueva ubicación. Entonces si le pegamos a Play y vemos actualmente está justo en el
centro de mi personaje. Pero si hago clic izquierdo, va
por encima de la cabeza de mi personaje. El motivo por el que
se hace eso es porque estos ceros, ceros 0 ubicación para mi cubo está justo en el
centro de mi personaje. Entonces todo lo que he hecho es
decirle que aumente eso en un 150 en la z.
y ahora está por encima de la cabeza de
mi personaje. Ahora bien, si cambiamos este
código a lugar de ubicación
relativa o
establecemos ubicación mundial, y usaremos los mismos valores. Entonces x es 0, y es 0, y luego z es 150. Y si le pegamos a Play, no
me voy a mover. Acabo de hacer clic
y ver mi cubo. Si presiono F1 está por
allá detrás de la pared. Ahora la razón por la que está haciendo
eso es porque eso es 0 en el mundo, pero más 150 centímetros arriba. Ahora si me muevo, en realidad
se puede ver el cubo se mueve con
mi estilo de personaje. Y eso es porque el cubo
está apegado a mi personaje. Pero le hemos dicho que se mueva
a 00150 en el mundo. Así que esa es la diferencia
entre establecer una ubicación local y
una ubicación mundial. Ahora, si presiono F
libre para volver a nuestro modo de iluminación normal allí y para acceder al wireframe. Puedes presionar F1. Si no sabías eso. Presione a tope F3 y salga. Podemos obtener el mismo resultado con nuestra ubicación en el mundo conjunto que
obtuvimos con nuestra ubicación
relativa del conjunto, solo
tenemos que hacer
obtener la ubicación del actor. Así obtenemos la ubicación mundial de nuestro
personaje actual. Nos arrastramos hacia fuera y haremos más más 1 quinto a su ubicación mundial
actual. Y vamos a poner nuestro cubo a eso. En cambio, estamos tomando la
ubicación actual de
nuestros actores en el mundo, colocando 150 y luego configurando
R al cubo a eso en su lugar. Para que podamos probar esto. Ahora bien, si
le pego a Play,
si hago clic con el botón izquierdo, se puede ver que ahora
tenemos ese
mismo resultado que hicimos cuando usamos
la ubicación relativa, porque ahora estamos agregando en
nuestros personajes ubicación comodín. Por lo que nuestro cubo ahora se queda por encima de la cabeza de
nuestro personaje. Entonces eso es todo por esta lección. En nuestra siguiente lección, vamos a
echar un vistazo a ACTA, un tipo de variable de objeto. Los hemos usado un
poco en esta lección, pero estaremos aprendiendo
mucho más sobre ésos en nuestra próxima lección.
10. Variables (Actores y objetos): Oigan a todos. En esta lección
vamos a estar echando un vistazo las variables de referencia de
objetos y cómo se usan en el motor. Entonces he puesto un ejemplo muy
básico aquí. Tenemos un gatillo y
tenemos algunos cubos. Y cuando nuestro jugador
entra en el gatillo, uno de nuestros cubos todos se mueven hacia arriba. Y luego cuando el jugador
abandone el gatillo, uno de ellos se mueve hacia abajo. Si le pego a Play y me he
topado con un gatillo, puede ver que el cubo correcto se mueve hacia arriba y si
dejo el gatillo, se mueve de nuevo hacia abajo. Ahora bien, esto está pasando
porque nuestro pelo gatillo tiene una referencia a
ese cubo que puedes ver aquí abajo. Se trata de un objeto o una variable activa
que se establece en nuestro cubo. Y en realidad puedo
cambiar esto eligiendo el actor pick
del botón de Escena. Puedo hacer clic en uno de nuestros cubos para poder recoger el cubo
de la izquierda aquí. Y ahora cuando golpeamos
play y atropello el gatillo ahora está
cambiando nuestro cubo izquierdo. Y esencialmente lo que
las referencias a objetos nos permiten hacer es decirle al motor qué
objetos específicos queremos efectuar. Porque todos estos cubos
son exactamente iguales. Utilizan nuestra clase cubo
desde nuestro navegador de contenido, pero cada uno es un objeto
individual. Es posible que queramos afectar a uno de ellos sin
afectar a los demás. Y las referencias a objetos nos
permiten hacer eso. Echará un vistazo a
nuestro plano de gatillo y verá cómo funciona esto. Entonces sólo voy a abrir eso. Se puede ver que tenemos
nuestra variable de objeto seleccionada, que es lo que estamos usando para controlar qué cubo
queremos efectuar. Así que puedes ver esto se llama objeto
seleccionado y
está configurado en nuestro cubo. Y tenemos esa variable
arriba aquí. Está configurado para escribir Actor. También tenemos un
código aquí que controla lo que hacemos con
nuestro objeto seleccionado. Por lo que tenemos activa
inicio solapamiento, un actor de eventos y solapamiento. Estos son algunos de esos eventos que
están integrados en el motor. Por lo que estos correrán
siempre que algo se superponga o se active o deje de
superponerse a nuestro gatillo. Ahora, puedes ver que ambos
nodos tienen
estos pines hiperactivos y
estos son referencias a objetos. Nos están diciendo exactamente qué objeto se superpuso o gatillo. Ahora bien, este es un nodo de costos. Tendremos una
lección por separado sobre costos porque son bastante importantes y les falta mucho. Pero esencialmente lo que esto
está haciendo es tomar un acto de referencia
y está comprobando, ¿es este actor un
Third PersonCharacter? Y si lo es, entonces permitirá que nuestro código ejecute una F nada. Se devolverá costo fieltro. Por lo que estamos esencialmente usando
este nodo de costo como un cheque. Básicamente estamos diciendo, si un acto para parar comienza a
abrirse lamiéndonos, ¿es un personaje en tercera persona? Si es así, entonces podemos ejecutar
el resto de nuestro código. Si no lo es, entonces
no ejecutamos nuestro código. Y luego el resto de nuestro código
es básicamente sólo tomar nuestro objeto seleccionado que estamos configurando en las opciones aquí. Y le estamos diciendo
que establezca una nueva ubicación. Así que solo estamos tomando su ubicación
actual y estamos trazando 150 y
configurándola en esa ubicación. De nuevo, estamos haciendo
exactamente lo
mismo en la superposición final, pero en su lugar estamos
minusing un 150 de su ubicación actual y luego configurarlo a esa nueva ubicación. A continuación, quiero explicar
¿qué es un actor? Un actor es cualquier tipo de objeto
que exista en un nivel. Entonces todo lo que puedes ver
aquí es un tipo de actor. Hay muchos tipos
diferentes de actores, como por ejemplo, el plano del
personaje aquí. Si arrasto eso adentro,
ese es un actor, pero es un tipo diferente de
actor, digamos tipo de personaje. Puede hacer todo lo que
puede el actor puede hacer, pero también tiene funcionalidad
adicional porque está destinado a
ser utilizado como personaje. Al igual que por ejemplo, puede
ser controlado por un jugador. Tiene una cápsula y un
personaje modelo como cámara. Estas son todas las cosas
que están incorporadas a nuestro plano de personajes. Estas son todas cosas que los actores por sí mismos no tienen, pero nuestro personaje sí
porque nuestro personaje es un tipo de actor especializado. Ahora, esto se hace a través de un
proceso llamado herencia, que puede ser un poco
complicado de entender. Entonces he creado una imagen aquí para tratar de mostrarles a
ustedes lo que quiero decir. Si traigo esto
, se puede ver que tenemos un nuevo
objeto en la parte superior. Ahora, esencialmente,
cada objeto en Unreal es un objeto U. Hay tipo de
objeto muy básico y todo
hereda de ellos. Bajando por la cadena,
tenemos actores. Ahora bien, los actores son de lo que
veníamos hablando. Ellos heredan de tus objetos, que
significa que tienen todo lo
que tú objetas puede hacer. Pero entonces también tienen su propia
funcionalidad adicional que les permite
existir en un nivel, tener componentes y ser visibles. Y pueden ver que he
añadido el cubo y nuestros planos de gatillo que hemos estado usando
para el ejemplo. Se puede ver que esos
heredan entonces de nuestro actor. Entonces estos son actores que pueden hacer todo lo que un actor
normal puede hacer. Pero debido a que hemos agregado un
código a nuestro gatillo y una caja de colisión ahora es su propio tipo con su propia funcionalidad
especial. Y luego lo mismo para nuestro cubo. Le hemos agregado un
componente de cubo. Por lo que ahora es su propio tipo
con sus propios componentes. ¿ Los personajes son iguales? Simplemente tiene algunos pasos
adicionales. Por lo que se puede ver que desde
el actor se crea un ****. Ahora, un **** es una versión
más básica de nuestro blueprint de personajes. Puede ser controlado
por el jugador, pero en realidad no tiene
nada del movimiento o. Para que nuestro
modelo de personajes sea visible, entonces tenemos un blueprint de
caracteres que hereda del ****. Por lo que consigue que algunas de
sus habilidades sean controladas por el jugador y algunas de sus habilidades de
movimiento. Y luego se extiende sobre
eso y nos permite
tener un componente cápsula
y un modelo de personaje. Ahora nuestro personaje
sigue siendo actor. Todavía se puede hacer todo lo que un actor puede hacer de la misma manera. A **** sigue siendo actor y puede hacer todo lo
conectado puede hacer. Pero cada uno de
estos pasos solo agrega alguna funcionalidad adicional
a sus blueprints. Ahora todo ThirdPersonCharacter
Blueprint sería en realidad el
siguiente paso hacia abajo de nuestro personaje porque
nuestro ThirdPersonCharacter hereda del blueprint del
personaje, acabamos de agregar algunos
más funcionalidad a la misma. Hemos establecido un modelo y hemos
cambiado algunos de sus ajustes. Entonces ahora es su propio plano. Ese es un hijo del plano del
personaje. Ahora, volviendo a nuestro ejemplo, si seleccionamos nuestro trigger, puedes ver que cuando selecciono el desplegable para
nuestro objeto seleccionado, puedes ver que puedo seleccionar
cualquier objeto en el nivel. Ahora la razón que
es, es porque se trata de un acto o de tipo variable. Y eso se debe a que todo
en nuestro nivel es actor. Si quisiéramos,
podríamos cambiar esto de cubo a incluso nuestro cielo. Y si seleccionamos la esfera del cielo, se
puede ver que puedo establecer esto a un cielo porque nuestro
cielo es un actor es sólo un tipo especial de vector con sus propios ajustes
y componentes. Ahora bien, si quisiera que esto fuera más especializado y
sólo me diera cubos, por
ejemplo,
tendríamos que cambiar el tipo de variable de actor
a nuestro tipo de cubo en su lugar. Lo que haremos es volver a
poner esto en un cubo, así que solo cambiaré de cubo. Y seleccionaremos nuestro plano de
cubo aquí. Y luego abriremos
nuestro plano de gatillo. Y aquí, podemos seleccionar
nuestro objeto seleccionado. puede ver que actualmente está
configurado en un tipo de objeto actor. Pero si cambiamos esto, podemos buscar cubo. Por ejemplo, tenemos
nuestro plano de cubo. Podemos seleccionar referencia de objeto. Y cuando cambiemos
un tipo de variable, nos dará esta
advertencia solo diciéndonos que estamos cambiando un tipo. Puede causar algunos problemas. Vamos a seleccionar Cambiar tipo de
variable de todos modos. Cerraremos esta
ventana de búsqueda y compilaremos. Así que ahora cuando seleccionamos nuestro gatillo en el nivel
y hacemos clic en el desplegable, puedes ver que solo me está
mostrando cubos ahora, eso es porque hemos establecido nuestro tipo de variable de objeto seleccionado al
tipo de cubo. Tal vez te preguntes,
¿por qué
usaríamos alguna vez el tipo de cubo cuando
solo podemos usar el tipo de actor y
seleccionar cualquier actor que queramos. Bueno, podrías tener un
código especial o variables en nuestro cubo a las que queremos tener acceso en otros planos. Entonces vamos a abrir el cubo y yo sólo voy a
crear una nueva variable. Y va a ser un booleano. Y yo sólo voy
a llamarlo ejemplo. Ahora hemos creado esta
variable en nuestro cubo. Es una variable única para nuestro blueprint de cola y solo los planos de cubo
tienen esta variable. Entonces volveremos a
nuestro plano de gatillo. Ahora, debido a que nuestra variable de
objeto seleccionado es un cubo, si lo arrasto hacia fuera y busqué, por ejemplo, se puede ver que ahora
puedo acceder a esa variable
usando nuestro objeto seleccionado. Y esto
nos daría si nuestra variable de ejemplo es verdadera o falsa en el cubo que
hemos seleccionado en el nivel. Ahora si volvimos a
nuestro trigger y cambiamos el tipo de variable para un objeto seleccionado
de cubo a actor. Ahora si compilamos, se puede
ver que las conexiones se han puesto rojas. Ahora, eso es porque
si arrastramos hacia fuera de nuestro objeto seleccionado y
buscamos, por ejemplo, de nuevo, ya no
podemos
encontrar esa variable porque esa variable solo
existe en nuestro blueprint Coupa, no en el actor. Y como esto es
un acto de referencia, no encontrará variables que sólo
existen en nuestro cubo. Sólo encontrará código y variables que
existen en el actor. Ahora hay formas en las que
podemos acceder a nuestros cubos, variables y funciones desde
un acto de tipo variable. Pero eso requeriría casting, que vamos a
entrar en una lección futura. Por ahora, solo quiero cubrir algunos nodos más comúnmente usados
con tipos de variables de objeto. Ya hemos estado
usando bastantes de estos nodos en
lecciones anteriores, en esta lección. Por lo que tenemos cosas como
el SAT ACT o la ubicación, SAT ACT o rotación que y
establecer nodos de transformación de actor. Hemos estado obteniendo
nuestra ubicación de actor con el gran nodo de
ubicación de actores. También está la rotación del actor de
get, que hace lo mismo,
pero consigue la rotación de nuestros
actores en el mundo y devuelve un tipo variable
rotador. A continuación tenemos el nodo
Destruye Actor. Entonces si eliminamos nuestro rotar
aquí y arrastramos hacia fuera y buscamos Destroy Actor. Ahora, cuando este nodo se ejecute, nuestro actor será destruido. Y podemos usar esto con cualquier
app o tipo en nuestro nivel, y eliminará a ese
actor del nivel. Ahora otro
nodo de uso común es el nodo es válido. Entonces si tomamos nuestro, si borramos nuestro get
actor, nótalo. Y me voy a arrastrar
y buscar es válido. En C, tenemos dos opciones. ahora vamos a usar la de
abajo. Esto nos da una
nota de que los cheques es nuestro objeto seleccionado para establecer
realmente a cualquier cosa. Entonces si vamos al nivel de
escaparate aquí actualmente se seleccionan
objetos, sector o cubo. Pero si aclaro esto ahora
se establece en ninguno. Ninguno de los cubos se
verá afectado cuando nuestro personaje y encima. Y si le pegamos a Play
y me topo al cubo y luego me agoto y
salgo de Play. Se puede ver que
tengo algunos errores ahora. Ahora eso se debe a que nuestro
código de activación básicamente le dice nuestro objeto seleccionado
que no está configurado en
nada para cambiar su ubicación. Y eso es lo que nos está
dando estas flechas. Entonces lo que el
nodo es válido nos permite hacer es
comprobar es que el objeto seleccionado
realmente se establece en algo? Si lo es, entonces
correremos es válido. Y si no,
correremos no es válido. Entonces si tomamos estos nodos ahora, sólo los
copiaré y los pegaré. Conéctelos hasta
la parte inferior aquí. Y le pegaremos a play. Ahora cuando nos topamos con la caja, pesar de que
no
tenemos nada seleccionado, no obtendremos ningún error. Ahora, como se puede ver,
porque eso es válido, node ahora está impidiendo que
el código se ejecute y nos da flechas. El otro nodo es válido
funciona de la misma manera. Entonces si
lo buscamos, es válido. Se puede ver que esta
es una función y básicamente hace
exactamente lo mismo. Simplemente nos da un valor booleano, tan verdadero o falso en lugar de este nodo
con las salidas. Entonces podríamos usar esto con
un nodo de rama por ejemplo. Por último, solo quiero
cubrir cómo
podemos establecer variables de objeto. Para que podamos simplemente
arrastrarlos a nuestro gráfico de eventos, seleccione la opción aquí. Y usando el nodo set podemos arrastrar hacia fuera desde nuestra entrada de objeto. Y debido a que estamos
usando un nodo actor, podemos conectar esto hasta cualquier
otra pluma variable actor. Por lo que se puede ver que podemos conectar
esto en el otro pin actor aquí o el pin de salida en
nuestro coche nieve muy bien. Pero si creamos otro tipo de objetos,
digamos un personaje. Así que simplemente llamaré a
este personaje, y estableceré su tipo
en carácter también. Así carácter y luego referencia de
objeto. Y luego
compilaremos. Si arrastramos en nuestro personaje y
creamos un nodo conjunto. Se puede ver si me
arrasto de la entrada, no
puedo conectarlo a
la salida de nuestro
actor comenzar solapamiento. Y eso es porque esta
es una salida de actor. Ahora todos los actores
no son personajes. Por lo que nuestro actor no puede conectarse a la entrada de un nodo de conjunto de
caracteres. Pero si nos arrastramos
de nuestra entrada, pueden
ver que puedo enchufar esto a nuestro nodo de costos en tercera persona. Nuevamente, estaremos haciendo lección
por separado sobre costos. Pero esencialmente, este nodo está tomando una entrada de actor
y está comprobando, es esto un personaje? Si lo es, entonces podemos dar salida a
un tipo de variable de carácter. Y podemos usar esto entonces
para establecer nuestra
variable de carácter porque
ambos pines son ahora
un tipo de carácter. Ahora eso es todo por esta lección. Esperemos que ahora tenga una comprensión
ligeramente mejor de cómo
funcionan las variables de objeto en el motor.
11. Variables (Arrays y bucles): Oigan a todos. En esta lección vamos
a estar echando un vistazo las variables de
matriz y los bucles. Entonces, para empezar, vamos
a crear una nueva variable. Por lo que sólo haremos eso haciendo clic en el botón de nueva
variable. Y voy a llamar a
este ejemplo nombre de matriz. Vamos a establecer el tipo para nombrar
encima en el panel Detalles, en el tipo de variable, se
puede ver que tenemos este
pequeño botón por aquí. Y aquí es donde podemos establecer
qué tipo de variable es. Por lo que actualmente es
una sola variable. Eso es con lo que hemos estado
trabajando hasta ahora. Pero a continuación vamos a
seleccionar la opción de matriz. Entonces haz eso y le
pegaremos a Compile. Y se puede ver que
tiene un icono diferente ahora en el tipo que
indica que es una matriz, puede ver que mi valor
por defecto como ahora esta opción de
aspecto diferente aquí. Ahora una matriz es básicamente una forma de tener
una variable que puede almacenar múltiples valores
de ese mismo tipo de variable. Nuestra
matriz de variables de nombre aquí puede almacenar múltiples valores con nombre solo en una variable en nuestros valores
predeterminados. Si hago clic en este pequeño
plus unas cuantas veces en C, Eso me ha dado entradas
gratis aquí. Ahora, en el
lado derecho tenemos nuestra variable. Entonces, debido a que esto tiene
una variable de nombre, este es un valor de nombre. Para que pueda introducir
nombres aquí para que
pueda ponerlo diga James, bill. Y bueno, por ejemplo, ahora estos actores normales
con nombre variables. Si tuviera que crear rápidamente otra variable que
voy a hacer ahora, voy a llamar a este
ejemplo float array. Voy a cambiar el
tipo aquí para flotar. Y ya está
configurado como una matriz. Pero si el tuyo no lo es, puedes simplemente hacer clic en la opción de matriz aquí. Ya lo ves ahora tengo
un flotador y tiene ese mismo icono para
indicar que es una matriz. Y cuando compilo en C, que se ve igual aquí
y mi valor por defecto, pero si hago clic en el Plus, se
puede ver que ahora en
el lado derecho, en lugar de los nombres, tenemos valores flotantes en su lugar. Porque se trata de una matriz de carrozas en lugar de
una matriz de nombres. Y en el
lado izquierdo se puede ver que tenemos
estos valores de índice. Ahora bien, esta es esencialmente la forma en que
podemos acceder a estas variables, las cuales estaremos usando más adelante. Pero básicamente estas son la fila en la que se almacena esta
variable. Entonces, por ejemplo, o James, valor
del nombre se almacena en el índice 0 o el valor de Bill se
almacena en el índice uno, y el valor se
almacena en el índice dos. Ahora podemos movernos por
estos valores usando este pequeño indicador
del lado aquí que
nos permite reorganizar estos. Para que me pueda mover, decir
bien al número dos. Número uno, puedes hacer eso con otros
tipos de variables también. Entonces si acabo de poner esto a 12
y ver si arrasto esos, puedo reordenarlos. Quiero eliminar cualquiera de estos. Puedo dar clic en la pequeña flecha
hacia abajo, seleccionar Eliminar. También puedo duplicarlas. O si hago clic en el pequeño
bote de basura aquí puedes verlo solo borra
todas tus entradas. Y eso son solo
los controles básicos para establecer sus
valores predeterminados para una matriz. A continuación, quiero
mostrarles cómo en realidad podemos acceder a estas variables
en nuestro código. Así que si arrastro en mi matriz de
nombre de ejemplo y
sólo puedo seleccionar el nodo como solemos hacer con
nuestras variables. Se puede ver que tengo una variable de aspecto
diferente. Ahora, no puedo arrastrar
hacia fuera y usar esto como una variable de nombre normal porque en este
momento esta salida, cualquiera de nuestros valores. Para conseguir uno de esos valores
que vamos a arrastrar hacia fuera, voy a buscar GET. Vamos a usar consigue una copia. Y eso nos da
este nodo de aquí. Ahora como puedes ver,
tenemos una entrada para un entero y
una salida
para una variable de nombre normal. Y si me arrasto de esto, podría usar cualquiera de mis nodos variables de nombre
normal. Así que podría hacer por
ejemplo, el nodo igual. Se puede ver que me da la nota igual que
hemos mirado antes. Al igual que una variable de
nombre normal. El motivo que es es porque
esto esencialmente lo hace. Toma nuestra matriz, obtiene el índice 0 y
luego genera su valor. Entonces por ejemplo, si yo
fuera a ejecutar estos nodos, la salida de nuestro nodo
get sería, bueno, porque
ese es nuestro índice 0. Si yo fuera a cambiar
esto para decir también, la salida de este nodo ahora
sería campana. Lo mismo funciona
con nuestra matriz flotante. Así que si me sale mi
ejemplo float array, y me arrastro fuera de eso
y busco o meto en C, obtiene una copia. Y ya pueden ver que tenemos
esta versión verde ahora. Tenemos una entrada para nuestro índice y tenemos una salida que
es solo un valor de
flotación normal que
podemos usar un valor de flotación normal. Así que si digo Add Node, ves que puedo usar un add
saber muy bien con eso, porque esto es ahora una sola variable en lugar de una matriz. Y esto es lo mismo para
todo tipo de arrays. Así podríamos crear una
matriz de transformadas, rotadores, vectores, enteros, y el proceso
sería exactamente el mismo. Podríamos establecer nuestros valores por defecto. Podríamos usar el nodo get
y luego simplemente añadimos un índice al que queremos acceder, y saldrá una sola versión
normal del tipo arrays. Se. Ahora sólo voy a
pasar por algunos de
los
nodos de uso común de nuestra matriz. Entonces hemos usado la nota de brecha aquí, pero también hay eliminar nodos. Entonces si me arrastro de mi nombre ejemplo donde
y busco eliminar, podemos usar remove index. Y esencialmente
cuando esto se ejecute, eliminará cualquier
índice que ingresemos aquí. Por lo que actualmente este es 0. Entonces si fuéramos a ejecutar este nodo, nuestro índice en 0, que actualmente está
bien se eliminaría. Ahora, algo a
tener en cuenta con gomas de borrar cuando
elimines un índice. Entonces si fuéramos a quitar el
índice 0, puedo hacer esto. Ahora. Se puede ver que todos los demás índices suben uno. Entonces ahora James está en 0
y Bill está en uno, mientras que antes lo estaban. James era uno y Bill dos. Por lo que este nodo es
útil cuando sabemos qué índice queremos eliminar, pero también es otra nota
remove que podemos usar si arrastramos hacia fuera y
buscamos remove, podemos hacer remove item. Ahora esto nos permite contarlo, darnos un valor de nombre y tenerlo eliminado ese valor si
existe en nuestro array. Entonces por ejemplo, si quería
eliminar factura de nuestra matriz, pero tal vez no sabía
qué factura de índice era app. Podría hacer que
Bill fuera el insumo. Entonces este nodo
comprobaría nuestra matriz, comprobaría el valor de la factura. Y si ese valor de factura
está en la matriz, entonces eliminaría ese valor. Y la salida
simplemente
sería básicamente verdadera si se
eliminara el valor y false si no pudiera encontrar ese valor en la matriz. Y esas son exactamente las
mismas para nuestras notas flotantes. Si te muestro rápidamente, podemos hacer eliminar índice y se puede ver que
funciona exactamente igual, nos
permite eliminar una entrada
de nuestro índice de salida de matriz. O podríamos hacer quitar artículo. Y eso nos da
una entrada de flotación para buscar nuestra matriz
y luego eliminar. Ahora vamos a
ver cómo podemos agregar valores a nuestros arrays
usando nuestro código. Por lo que vamos a eliminar
este nodo por ahora. Vamos a arrastrar hacia fuera de
nuestro nombre de ejemplo, matriz buscará Add. Ahora, aquí hay un par
de opciones. Elegiremos primero el top 1. Ahora, el Add Node
esencialmente solo agrega el valor que establecemos
aquí a nuestra matriz. Ahora porque
se trata de una matriz de nombre, este valor como un nombre. Pero si fuera a arrastrar fuera de mi matriz flotante aquí
y buscar anuncio, se
puede ver que ese valor
es ahora un flotador porque estamos agregando un valor float
a una matriz flotante. Esta nota publicitaria
esencialmente agregará nuestro valor en el primer índice
disponible. Entonces en nuestra matriz de nombres, eso sería índice dos
porque se toman 01. Entonces si dijéramos que
le pusiéramos esto a Bob, le agregaría un
valor de pantano al índice dos. Y emitiría ese índice usando este
plumilla entera en la salida. Ahora tenemos la otra nota del
anuncio, la única ADD. Y esto funciona de manera similar, pero lo que esto
hará es que primero compruebe nuestra matriz para ver si tiene o si ya tiene una
entrada para el valor que establecemos. Entonces si agregamos Bob de nuevo, cuando se ejecuta este nodo, primero
comprobaría nuestra matriz. Vería que el bulbo no es un valor que tiene actualmente. Lo agregaría en el
primer Windex disponible, igual que nuestro nodo de adición normal, entonces emitiría ese índice usando el hit de lápiz entero. Si Bob ya estuviera en nuestra matriz, no
agregaría un
nuevo valor de bombilla, mientras que el nodo Agregar
solo agregaría un segundo valor de bombilla. Ahora, a continuación podríamos
querer poder
cambiar un valor en lugar de
agregar o eliminar uno. Digamos que queríamos
cambiar el índice uno de Bill a Bob por ejemplo. Bueno para hacer eso
usaríamos un nodo conjunto M. Así que si arrastramos hacia fuera
y vamos a establecer L, Se
puede ver conjunto de matriz. Y eso nos
permite especificar un índice que queremos cambiar y al valor
al que queremos cambiarlo. Entonces si yo estuviera queriendo
cambiar, digamos Bill, podría poner este índice en uno
porque las facturas en el índice uno. Y puedo establecer el nuevo valor. Entonces Bob por ejemplo. Entonces ahora cuando se ejecuta este nodo, cambiaría el valor del
índice uno. Por lo que el indexador de facturas a Bob. Y puedes ver que aquí tenemos
una opción de talla para encajar. Ahora esto básicamente
crea nuevas entradas si estamos tratando de establecer un índice que aún no existe actualmente. Entonces por ejemplo, si yo fuera
a configurar esto para decir cuatro, sólo
tenemos 01, así que sólo tenemos dos entradas. Lo que esto haría si
se ejecutara crearía un índice 23 y luego un cuatro. Y le pondría el
índice cuatro a Bob. Pero los dos índices que creó para llegar al número cuatro serían
simplemente valores vacíos. Ahora, hay un par de otras notas importantes que
podemos usar con arrays. Así que podemos arrastrar hacia fuera de
nuestra matriz y
buscar contiene y utilizar
el elemento contiene. Y esto nos permite simplemente
comprobar si nuestra matriz contiene un valor particular si devuelve verdadero y si
no devuelve falso. Entonces si tuviéramos que configurar
esto para decir Bob, comprobaría nuestra matriz. ¿
Contiene actualmente el valor Bob? No lo hace. Por lo que R contiene nodo
volvería falso. Pero si
contuviera ese valor, si lo añadiéramos,
cuando se ejecutara este nodo, volvería true. Podemos usar el nodo de búsqueda. Entonces si arrastramos hacia fuera y
buscamos encontrar, encontrar elemento Nodo, puedes ver aquí
podemos ingresar un valor y luego buscará
nuestra matriz por nosotros. Y si lo hace, si ese valor sí
existe en nuestro array, nos
dará el índice que ese valor está actualmente arriba. Por ejemplo, si yo fuera
a establecer esto en factura, buscaría nuestra matriz para
nosotros cuando se ejecute este nodo, y devolvería
que la factura está en índice uno y ese valor aquí, el valor entero sería uno. Otro nodo útil que se puede utilizar con matrices
es el nodo claro. Entonces si nos arrastramos y
buscamos claro. Esto cuando se ejecute, lo
matará por completo o matriz. Por lo que será esencialmente vaciar nuestra matriz de
todas sus entradas. Por lo que esos son algunos de los nodos más comúnmente utilizados con matrices. Pero si quieres encontrar
alguno de los otros nodos, puedes arrastrar hacia fuera y
buscar array. puedes encontrar muchos Aquípuedes encontrar muchosnodos
diferentes
que te permitirán cambiar y obtener valores de
tus variables de matriz. Otra nota que puede ser útil como la
longitud para el nodo. Así que si arrastramos hacia fuera y
buscar longitud, se
puede ver que tenemos
un nodo llamado longitud, y esto sólo contará
el número de entradas que tenemos en nuestra matriz y salida
cuántos tenemos. Así que si yo fuera a añadir, digamos, nodo de
tres longitud sería libre porque tenemos tres
entradas en nuestra matriz. Ahora vamos a
pasar a bucles. Así que sólo voy a eliminar
estos nodos por ahora, y sólo vamos a empezar
con nuestra matriz nombre. Así que si arrastro hacia fuera y busco bucle en C que
tenemos para cada bucle que, eso es lo que vamos a estar echando un vistazo
por el momento. Entonces vamos a crear eso. Ahora, esencialmente, cómo funciona
este nodo es que toma y ejecuta. Y vamos a ejecutar el cuerpo del bucle, sin embargo muchas entradas que
tenemos en nuestra matriz. Por lo que actualmente tenemos libres. Entonces nuestro cuerpo de bucle
correría tres veces. Y la forma en que te puedo
mostrar esto como si arrastráramos hacia fuera y
busquemos cadena de impresión. Y agregaré una gran
jugada aquí. Ahora tenemos tres entradas en nuestra matriz de nombres en este momento. Por lo que cuando
lleguemos a play, veremos Hello
print tres veces. Así que golpeó Play, se puede ver
una carrera más baja tres veces. Si nos dirigimos de nuevo a
nuestro código y
ves que también
tenemos un bolígrafo completo. Así que una vez que este cuerpo de bucle
ha terminado de ejecutar el número de veces que
tenemos valores en nuestra matriz. A continuación se ejecutará
la pluma completa para que pueda agregar otra cadena de
impresión aquí. Permítanme establecer
esto para decir Hecho. Y ahora lo que veríamos
Hello imprimir tres veces y luego arrojado
correría así. Ahora, si x fuera de juego
y nos dirigimos de nuevo a nuestro plano de
personaje, también
tenemos un
elemento de matriz y un índice de matriz. Ahora, estos serán
los valores de de nuestra matriz por los que nuestro
cuerpo de bucle estará corriendo. Entonces, por ejemplo, la
primera vez que esto se ejecuta, la primera vez que bucle
body unos, lo siento, el índice será 0 y el elemento array
será cualquiera que sea nuestro valor. Por lo que actualmente estos
están todos configurados en ninguno. Pero si tuviera que reemplazar
rápidamente estos, sólo
diré que este
es Bill Bob james. Ahora, la primera vez que el
cuerpo del bucle ejecutaría el valor, el valor del elemento array sería bill y el
índice de la matriz sería 0. Y luego la segunda vez
que ese elemento raro sería Bob y el índice de matriz
sería uno, y así sucesivamente. Ahora bien, lo que básicamente
decide cuándo
se ejecuta el cuerpo del bucle es cuando golpea un nodo que no
tiene una salida. Así que para nosotros eso es
sólo va a imprimir cadena sea cual sea
el valor que ponemos aquí. Y luego
se hace ese cuerpo de bucle y pasará
al siguiente. Ahora si está en el
último cuerpo del bucle, así que si estuviera en bucle, digamos para el índice al elemento
array era James, tocaría el final de este C. No hay más nodos para ejecutar. Y debido
a que estamos en el último índice, entonces
se ejecutará completado, que ahora se
hacen pantalla de impresión. Así que si enchufar
el elemento de matriz aquí en nuestra cadena de impresión, y voy a mover estos nodos. Si compilamos y
golpeamos play, deberíamos ver nuestros nombres que tenemos de animador
impresos en la pantalla. Entonces si hacemos eso en C que esos están
imprimiendo y luego tenemos el valor W1 que se imprime
una vez que se completen las matrices. Entonces esos son los fundamentos de
cómo funciona un nodo de bucle, pero sí tenemos
algunos otros tipos. Así que si nos dirigimos de nuevo a
nuestro personaje ahora y vamos a eliminar esto para cada bucle. Vamos a arrastrar hacia fuera y vamos a
buscar bucle de nuevo. Ahora vamos a probar el bucle
for-each con break. Ahora esto funciona muy
similar al último nodo, pero nos da una entrada extra que podemos ver
aquí llamada break. Y eso nos permite detener nuestro cuerpo de bucle corriendo
en un punto en particular. Entonces por ejemplo, si
queríamos ejecutar nuestro cuerpo de bucle hasta que llegamos al nombre bob y luego queríamos
cancelar nuestro cuerpo de bucle. Podríamos hacer eso. Así que si hacemos un
poco más de espacio aquí, podemos arrastrar hacia fuera de nuestro
elemento de matriz a un igual nevado. Podríamos decir si nuestro elemento
array es igual a, creo que fue Bob. Bob dirá Bob. Queremos revisar un nodo de sucursal. Y queremos cancelar while
loop si el valor es Bob. Para que podamos hacer eso. Podemos arrastrar desde
True y conectar eso hasta la entrada de break aquí. Y si hacemos doble
clic en la línea blanca, podemos crear estos
pequeños nodos que nos
ayudan a organizar
un poco mejor nuestro código. Entonces solo haré eso así. Así que ahora lo que va a pasar
es cuando nuestro bucle se ejecuta, comprobará es el elemento de
matriz Bob. Si lo es, entonces queremos
dejar de correr nuestro bucle. Entonces, lo que esto nos hará hacer es ejecutar a Bill y Bob
imprimirá en una cuerda. Pero James no lo hará, porque
detuvimos nuestro bucle y completado
habremos corrido en su lugar. Podemos probar esto. Puedo pegarle a Play. Se puede ver que Bill y Bob están
corriendo y luego corre hecho porque nuestro valor james ya
no se está ejecutando. Si tuviéramos que cambiar este
nombre para decir Bill, ahora, esperaríamos que
solo ejecutara el nombre de la factura
porque una vez que llegue a facturar, cancelaría nuestro bucle. Para que podamos probar esto ahora. Y ves a Bill,
y luego solo está cancelando nuestro bucle
y hecho se está
ejecutando en lugar de completar el resto
de nuestro bucle. También podríamos hacer esto
con nuestro índice si
arrastramos hacia fuera de nuestro índice
y hacemos iguales, en lugar de usar los valores, podemos simplemente usar
el índice en su lugar. Entonces digamos que quería detener nuestro índice de bucle
uno, puedo hacer eso. Podría simplemente configurar
esto en uno, enchufar
esto a nuestro brunch y
compilar y golpear Play. Se puede ver
que obtenemos ese mismo resultado Bill y Bob están imprimiendo. Y luego los bucles
terminando porque hemos cancelado el bucle y luego lo
completamos como estar equivocados. Ahora, hay
otro tipo de bucle que podemos echar un vistazo. Entonces sólo voy a
borrar estos textos. Ya no los necesitamos. Pero si nos arrastramos hacia fuera, podemos
buscar bucle de nuevo. Y ahí está el
reverso para cada bucle. Y esto funciona igual que
el primer nodo de bucle
que elaboramos. Pero en lugar de hacer un bucle desde
el principio hasta el final, se bucle del final
al principio y todo lo demás es igual con este nodo. También hay nodos de bucle
que no usan una matriz. Así que si eliminamos esto por ahora y acabo de
buscar bucle, voy a desplazarse hacia abajo y
verás que tenemos cuatro bucle. Ahora si hago clic en esto, se ve que en lugar
de una entrada de matriz, tenemos un primer índice
y el último índice. Esto básicamente solo
le dice a un bucle ¿ cuántas veces se va a ejecutar? Entonces si yo fuera a dejar
nuestro primer índice en 0, pero establecer el último índice a decir para este bucle se ejecutaría cinco veces porque se
ejecutaría una vez para 0 y luego otra vez hasta que
se pone hasta cuatro. Y a medida que corría a través de
cada cuerpo de bucle, el índice aumentaría en uno. También tenemos ese mismo nodo pero con un break
si quisiéramos eso, podríamos hacer un
for-loop con break. Y eso vuelve a funcionar de
manera similar a nuestro nodo break. Es sólo que en lugar
de una entrada de matriz, podemos establecer de nuevo un índice y el último índice en
cuanto a establecer esto a 04, se ejecutaría cinco veces. Pero durante nuestro cuerpo de bucle, podríamos cancelar este
bucle ejecutando la entrada break como
acabamos de hacer con el
bucle con nuestra matriz. Por último, solo quería
mostrarles cómo podemos establecer una carrera para que podamos
establecerlas como valores normales. Así que si arrastramos en, podemos elegir la matriz de nombre de
ejemplo conjunto. Se puede ver que sólo nos da un nodo conjunto normal y
podemos establecer esto para ser un número arrays valores hasta el punto de crear rápidamente
otra matriz de nombre. Y establecemos esto para nombrar y
cambiamos su tipo a array. Podríamos tomar eso y
podemos enchufar eso en nuestra matriz de nombre de ejemplo igual que podemos con variables
normales. Y esto solo tomaría
nuestra corriente, o
lo siento, Tomaría nuestros valores de
matrices de nombre y los
pondría a la matriz de nombre de
ejemplo. Por lo tanto, borraría completamente
nuestra matriz de nombres y luego establecería los valores a exactamente lo
mismo que nuestra matriz de nombres. Esto es lo mismo para nuestra matriz de
flotación también. Y luego cualquier otro tipo
de matriz que cree, podemos establecer los bien. Y podemos tomar
otro valor de matriz. Podríamos establecer eso a eso,
así como siempre y cuando
sean del mismo tipo, como si tuviéramos nuestro flotador
enchufado a nuestra matriz flotante, nombre conectado a
nuestra matriz de nombres. Lo mismo ocurre con todos los
nodos que he estado usando. Así que nuestras matrices de bucle, si te muestro rápidamente, podemos tomar nuestra matriz flotante
ejemplo, puedo arrastrar hacia fuera y
puedo buscar bucle. Y ya ves que
tenemos esos mismos nodos para crear un nuevo nodo de bucle. Tenemos ese elemento de matriz,
pero en lugar de un nombre, es solo un valor flotante porque se
trata de una matriz
de valores flotantes. Pero nuestro índice se mantiene
igual porque siempre
va a tener un índice para
cada entrada en nuestro array. También podemos hacer una carrera por nuestro actor u objetos referencias. Entonces si hago eso rápidamente, solo llama a esto la matriz de actores. Se puede ver que si
cambio el tipo a actor, vamos a nuestra referencia
objeto actor. Se puede ver que ahora
tenemos una serie de actores. Y esto vuelve a funcionar, igual que hemos estado usando
nuestro nombre y matrices flotantes. Podríamos recorrer
una serie de actores. Y eso nos dará
una salida de actor y un índice de que ese actor
es app en nuestro array. Ahora el motor tiene algunos nodos incorporados que en realidad
generan matrices. lo que un ejemplo de ello
serían los actores superpuestos. Y esto esencialmente consigue a los actores que se están superponiendo
nuestros planos actuales. Entonces estoy en el
Third Personacter. Esto obtendría o cualquier aplicación a como superposición de nuestro personaje, las
salidas como una matriz. Podríamos usar esto al
igual que hemos
estado usando nuestras variables de matriz. Así podría, por ejemplo, recorrer todos
los actores que actualmente se
superponen a mi personaje. Y podríamos hacer cualquier tipo
de cheque que
quisiéramos, podríamos decir, quizá
destruirlos. Si quisiéramos,
podríamos destruir a esos actores que se están
superponiendo a nuestro personaje. Y podemos usar
este elemento de matriz igual que una variable normal, como hicimos en nuestra
lección anterior con el tipo de actor, podemos usar esto para decir
obtener sus ubicaciones. O podríamos usarlo para
establecer sus ubicaciones. Al igual que un
acto normal de variable. Por supuesto, tampoco tenemos que usar un nodo de bucle para hacer eso. Podríamos usar el nodo get
y esto solo nos dará el primer índice en la matriz de actores que se
superponen a nuestro personaje. Si quisiéramos pasar, conseguir decir el segundo o el tercero, podríamos cambiar
este valor de entrada. Y entonces podríamos usar nuestro nodo
get para conectarnos a cualquiera de estos nodos que podamos
usar con variables activas. Entonces eso es todo para esta lección, y eso es todo para la
sección de variables del curso. En nuestra siguiente lección,
vamos a estar echando un vistazo a las funciones y cómo
funcionan y cómo podemos
crear otras nuevas.
12. Fundamentos (Funciones): Oigan a todos. En esta lección vamos a
estar aprendiendo sobre las funciones, cómo se usan y para
qué se usan. Las funciones son
piezas de código autónomas que podemos modificar y
reutilizar muy fácilmente. Entonces, para empezar, en mi personaje en
tercera persona aquí, sólo
voy a
crear una nueva función. Y eso lo podemos hacer haciendo clic en el botón de nueva función aquí. O podemos ir al botón
Agregar y seleccionar nueva función que nos va a crear una nueva función. Voy a llamar al mío ejemplo. Se puede ver que también ha abierto un nuevo gráfico de eventos para
nosotros con una entrada. Y tiene el nombre
de nuestra función aquí. Ahora aquí es donde
estaremos codificando nuestra función si alguna vez necesitas llegar
al código de una función. Entonces estás en el
Event Graph y
deseas obtener el código de tu
función, siempre
puedes simplemente
hacer doble clic en el nombre de la función y te llevará
directamente a tu función. Ahora como puedes ver,
tenemos un nodo de entrada y este se ejecutará cada vez que se ejecute
nuestra función. Si vamos al
Event Graph y
arrastramos hacia fuera nuestra función de ejemplo, se
puede ver que
nos ha dado un nuevo nodo llamado ejemplo. Ahora, siempre que este pin de
ejecución de entrada se haya ejecutado, se ejecutará
el código dentro de nuestra
función. Entonces como ejemplo rápido, si agrego una cadena de impresión a
mi función de ejemplo aquí, en nuestro gráfico de eventos, solo
voy a crear
un nodo de inicio de reproducción. Y conecto esto
hasta mi función de ejemplo. Ahora cuando comience el juego, nuestra función de ejemplo se ejecutará, y eso ejecutará el
código dentro de nuestro ejemplo, que es esta cadena de impresión. Por lo que sólo voy a
compilar hit Play. Se puede ver que nuestra cadena de
impresión se está ejecutando. Entonces, para mostrarte cómo
esto podría ser útil, saldremos de la reproducción, volveremos a ThirdPersonCharacter
y crearemos una nueva función y
llamaremos a esto aumentar la salud. Y también crearemos
una nueva variable, y llamaremos a esto salud
actual. Si el tuyo es un entero,
puedes simplemente hacer clic en esto y
cambiarlo a un entero
y lo compilaremos. Ahora, pensarías que si
quisiéramos aumentar la salud, íbamos a nuestro Event Graph, arrastraban de nuestra salud
actual para conseguir salud. Y usaríamos un nodo add, añadimos la montaña que
queremos agregar para decir uno. Y entonces entonces
pondríamos la salud actual. Pero el problema con esto es cada vez que quieres cambiar
nuestra salud y nuestro código, tendríamos que escribir
todas estas notas. Lo que funciones
nos permiten hacer es básicamente tomar este código y
ponerlo dentro de una función. Y en lugar de
tener que escribir este código, solo
podemos arrastrar
una función
al Event Graph u otra función y
tener ese código ejecutado. Entonces, si tomamos este código, simplemente lo
cortaremos y volveremos a nuestra
mayor función de salud. Pegará esto adentro
y conectado para arriba. Ahora en la actualidad, si ejecutamos
el aumento cómo funciona, lo
único que va a hacer es agregar una salud a nuestra salud
actual, lo cual no es particularmente útil. Queremos poder
elegir cuánta salud se agrega a nuestra salud actual,
y no podemos hacer eso. Por lo que si seleccionamos nuestro nodo de
entrada aquí, se
puede ver encima en
el panel Detalles que
tenemos entradas y salidas. Ahora podemos agregar nuevas entradas haciendo clic en este pequeño
botón de aquí. Y eso agregará una
nueva entrada de variable. Se puede ver que aquí
tenemos una entrada. Y si vamos al Event Graph y arrastrando nuestra
función increase
how, puedes ver que
esa variable
también está disponible aquí también. Ahora, podemos renombrar esto
volviendo a nuestra función, seleccionando la entrada y la
cambiaremos para montarla. También podemos cambiar el tipo de
variable por aquí. Así menos ido a
entero por defecto. Pero puedes cambiarlo a
cualquier variable que te guste. Usaremos entero
por ahora porque eso es lo que es nuestra variable de
salud. Y podemos arrastrar hacia fuera
de nuestra cantidad y enchufar eso en el nodo
plus aquí. Entonces ahora lo que sucederá es cuando se ejecute
nuestra
función de aumento de salud, tomará
lo que sea
la cantidad más eso a nuestra salud actual
y establezca la salud actual. Ahora, arrastraré
desde aquí y agregaré una cadena de impresión solo para que
podamos decir si esto está funcionando, arrastramos desde el nodo set y lo conectaré al nodo de cadena de
impresión aquí. Ahora, en nuestro Event Graph, queremos ejecutar nuestro
aumento de salud, digamos cuando presiono un botón, así que haré clic derecho y
buscaré el evento de entrada. Decir por qué. Nos desplazaremos y encontraremos la entrada
y de ellos. Esto simplemente se ejecutará cada vez
que presione Y en mi teclado. Si conecto esto en aumento lo rápido que puedo establecer la cantidad. Entonces me voy a poner a decir cinco. Entonces ahora cuando compilamos
y golpeamos play, cada vez que presiono Y, puedes ver que mi
salud actual aumenta
porque la está aumentando en cinco
cada vez que presiono Y. Ahora también podemos agregar
salidas a nuestra función. Entonces si retrocedemos
y salimos de la obra, aquí
podemos volver a nuestra función de aumentar la
salud. Si seleccionamos el nodo de entrada, podemos agregar nueva salida. Entonces voy a hacer clic en
el botón de salida nuevo aquí y ves que ya está creado
un nuevo nodo para nosotros. Y esto es lo que
corremos cuando queremos sacar algo
de nuestra función. Entonces si enchufo esto a
la anterior después imprimir cadena en C que le
puedo dar un nombre. Por lo que sólo voy a poner la salud actual. Y vamos a tomar lo que sea nuestro valor actual de Salud
es y la salida que. Si compilamos y
volvemos a nuestro gráfico de eventos, se
puede ver que ahora nuestro nodo en el gráfico de eventos tiene una salida
llamada estado actual. Y esta salida, cualesquiera que sean los valores que conectemos en ella
desde nuestra función. Entonces por el momento, solo
estoy sacando mi valor actual de salud. Para que podamos acceder a eso
en la gráfica de eventos. Ahora también podemos usar funciones
dentro de una funciones. Así que si vamos a nuestra función de aumento de la
salud aquí,
y aquí, nosotros, tal vez queríamos tocar un sonido cada vez que nuestra salud aumentara, podríamos crear una
nueva función que reproduzca un sonido en nuestra ubicación de personajes que también podríamos utilizar otros lugares
si queremos que lo haga. Entonces, por ejemplo,
crearemos una nueva función. Simplemente llamaremos a esto sonido de reproducción. Reproducir reproductor de sonido. Ubicación. Aquí, podemos arrastrar hacia fuera de nuestra
entrada y utilizar el
sonido de las placas en el nodo de ubicación se arrastrará hacia fuera de la ubicación y no
obtener la ubicación del actor. Esto reproducirá un sonido que
establecemos en la ubicación del
jugador actual. Ahora, podemos agregar una nueva entrada para nuestros sonidos para que podamos elegir
qué sonido se reproducirán. Una forma más rápida. Podemos hacer
esto como si arrastramos fuera de nuestra entrada de sonido aquí y
arrastramos esto al nodo de entrada, si
lo dejo ir, se puede ver que en realidad solo agrega una nueva entrada de sonido para nosotros
y nombres que suenan. Si queremos cambiarle el nombre,
podemos, sólo lo hacemos en
las entradas aquí. Y ahora, cuando compilamos, si volvemos a qué aumento, cómo funciona, ahora podemos arrastrar esa nueva función que
acabamos de crear a nuestra función aumentada. Podemos usar esto como
podemos en el Event Graph. Entonces si conecto esto, ahora podemos decir sonido
porque agregamos la entrada de sonido a nuestra función. Y cada vez que nuestro
aumento cómo
funciona la función y ejecutar el mismo código aumentando nuestra salud
por la cantidad. Imprimirá cadena
la cantidad actual, y luego ejecutará el
código dentro de nuestro
sonido de reproducción en la ubicación utilizando
el sonido que establecemos. Actualmente, no he
puesto un sonido. Y luego una vez que eso
suena y esta
función esté terminada, entonces continuará y devolverá nuestro valor actual de Salud
en nuestro Gráfico de Eventos. Y por supuesto, el sonido de reproducción en ubicación de
reproducción es sólo una función como nuestro
aumento de la salud. Entonces si quisiéramos, podríamos
usarlo
también en el gráfico de eventos y en otros lugares o
dentro de unas funciones. Ahora una de las mejores cosas funciones es que son reutilizables. Entonces tengo mi función de aumento de
salud siendo ejecutada aquí en la entrada y. Pero también podría usar
el aumento de cómo funcionan en otras partes de
mi código si quisiera, puedo tener tantas como quiera. Y cuando todo el mundo se ejecute, ejecutará el código como es de
esperar. Siempre que modificamos algo dentro de nuestra función
celular aumentada. Entonces digamos que queríamos
hacer un cambio aquí o si había un bug
o algo así, podríamos hacer un
cambio en un lugar dentro o aumentar cómo funciona. Y eso afectará a todos
los lugares que hemos utilizado se incrementan la función de
salud del nodo. Las funciones también tienen
otra característica llamada variables locales. Entonces si abrimos el
aumento del corazón cómo funciona aquí
se puede ver abajo en la parte inferior
del panel Mi Blueprint, tenemos las variables locales. Ahora una variable local
opera más o menos igual que una
variable normal, es sólo eso. Sólo existe
dentro de nuestra función. Por lo que no podemos acceder a
una variable local en el gráfico de eventos desde nuestra función de salud
aumentada, solo
podemos acceder a ellas dentro de
nuestra función aumentada. Otra cosa de
las variables locales es que una vez que esta ejecución o una vez terminada
nuestra función, variable se restablecerá
a su valor predeterminado. Entonces como ejemplo, si
creo una nueva variable, hip y cool este ejemplo. Y esto es sólo un booleano. Así que si hacemos un nodo get aquí, y también vamos a crear
una cadena de impresión. Ahora, cuando ejecutemos este nodo de cadena de
impresión, voy a enchufar mi
ejemplo a la cadena. Se imprimirá verdadero
o falso dependiendo de cuál sea nuestro valor de ejemplo
actual. Por defecto, está establecido en false. Ahora, después de eso, si
lo configuro en true, esperarías que la próxima vez
que ejecutemos este código vuelva true porque lo estamos configurando a true
después de imprimir cadena. Pero siempre volverá
falso como se puede ver aquí. Porque cada vez que nuestra
función haya terminado, esa variable se restablecerá a su valor predeterminado,
que es falso. Las variables locales son
una excelente manera almacenar
temporalmente
información dentro tu función sin
tener que crear nuevas variables que pueden
sumar rápidamente si tienes muchas
funciones en marcha. También fueron bastante buenos
para organizar su función. Entonces digamos que tenías un poco más de código
pasando y querías almacenar variables solo
para mantener las cosas ordenadas. Podrías hacer eso también. Otra cosa útil
que puedes usar para mantener tus funciones ordenadas ya que
tenemos nuestras entradas, digamos, por ejemplo,
nuestra entrada MT aquí. Y ese cable va a
entrar en nuestra nota publicitaria. Ahora, tal vez en el
futuro tengas una función que tiene un
montón de entradas. Tendrías cables apagándose
por todo el lugar y no se
vería muy ordenado. Entonces lo que puedes hacer
en su lugar es que puedes hacer clic derecho y
tal cantidad olvidar. Se puede ver que tengo acceso
a la variable de cantidad, pero no tengo una
variable local llamada cantidad. No hay una
variable normal llamada cantidad. Esto es básicamente
sólo un atajo a esta cantidad de salida aquí. Entonces en lugar de tener
el cable enchufado desde nuestra entrada de ellos, podemos simplemente arrastrar esto aquí
y podemos obtener ese valor. Y todo lo que está haciendo es
esencialmente simplemente cortar el cable y acceder a
esa variable de cantidad, una
especie de atajo. Ahora bien, las funciones sí tienen
algunas limitaciones. Entonces, por ejemplo, no podemos usar nodos
latentes dentro de una función. Ahora aún no hemos cubierto notas
latentes, pero lo haremos en una lección futura. Pero así como un rápido desglose, si hacemos clic derecho y el
gráfico de eventos aquí y
buscamos hoy, podemos crear un nodo de retardo. Ahora, un nodo latente tendrá un pequeño icono de reloj en la esquina
superior derecha. Y básicamente lo que hace un nodo de
retardo
es que obtiene una entrada y luego
cualquiera que sea nuestra duración, espera esa cantidad de tiempo
antes de ejecutar la salida. Por lo que sólo
nos permite sostener código. Entonces, por ejemplo, si yo estuviera
enchufando mi nota de reproducción aquí, y sólo voy a poner
esto para decir tres. Y luego enchufé mi
aumento de salud aquí. Empezaría a jugar, se ejecutaría, entonces se ejecutaría
un nodo de retardo, y esperaría tres segundos, y luego ejecutaría
la salida completada. Ahora bien, debido a que este
es un nodo latente, no
podemos usarlo
dentro de la función. Entonces si voy a mi
aumento de salud, justo, y me arrastro y
busqué retraso. Se puede ver que ese nodo de
retardo no está subiendo porque está latente y
no podemos usar los que están
dentro de la función. A continuación, vamos a ver funciones
puras e impuras. Entonces si volvemos a
nuestra gráfica de eventos aquí, y creo un nuevo
aumento de cómo funcionan. Y encima en el
panel Detalles se puede ver que podemos cambiarlo a
una función pura. Entonces si me llevo esto,
se puede ver que esto también
afectará a todos los demás
aumentar cómo funciona, lo cambia en
esta función. Ahora, la forma en que estos funcionan es para cada salida conectada
a nuestros pines de salida, esta función se ejecutará. Entonces como ejemplo, si tomo mi
punta Plano inicial y sólo
voy a usar un conjunto de salud
actual. Y nos conectaremos hasta aquí, aumentaremos la
salud por decir uno. Y conectaremos esto
hasta la salud actual. Por eso digo espero que con 0
lo incremente en uno y luego salga una
nueva salud actual. Entonces este sería uno. Y si fuera a copiar y
pegar este nodo conjunto de nuevo, y vamos a conectar esto a aquí. Este nodo sería uno, pero entonces este nodo se ejecutaría de
nuevo para este nodo conjunto, y este nodo
realmente lo establecería en dos, y luego así sucesivamente y así sucesivamente. Por cada conexión, volveríamos a ejecutar este nodo y
aumentar el valor espero. Mientras que una función impura, si seleccionamos nuestra función
nuevamente y hacemos clic en tech P0, si conectamos esta copia de seguridad
para comenzar a reproducirse, esta siempre devolverá la
misma salida que tenía cuando se ejecutó. Por lo que cuando empiece el juego aumentaremos nuestra
salud de 0 a uno. Pondremos ese valor aquí. Este valor se establecerá en uno. Y entonces éste
también se establecerá en uno porque sólo se ejecutará
una vez cuando se ejecute. Y luego almacena los valores de su salida en estos pines. Y entonces cada conexión que
tengamos para eso será la misma hasta que volvamos a
ejecutar esta función. Eso es sólo algo
para recordar cuando estás trabajando
con funciones puras, es sin embargo muchas conexiones que
tienes conectado a esa función es
cuántas veces se ejecutará. Si tienes algún tipo
de matemáticas pasando o algo así como
aumentar la salud, cada vez que arrastres
y pones algo, volverá a correr. Por lo tanto,
su valor, sus valores de salida pueden ser diferentes
cada vez que se ejecuta. A continuación, vamos a echar un
vistazo a las funciones anuladoras. Ahora, si no lo has
visto ya, te
recomiendo ir
y echar un vistazo. Tenemos una lección de variable
sobre actores y objetos. En esa lección, entro en herencia y explico
un poco sobre eso. Pero esencialmente, cualquier
objeto que exista en el mundo es un actor,
incluido nuestro personaje. Pero entonces tenemos
diferentes tipos de actores como nuestro personaje aquí. Y podemos acceder
al acto de funciones
o a las funciones que existen dentro del actor a través esta opción de anulación aquí
en la pestaña de funciones. Entonces si pinchamos en eso, se
puede ver que
tenemos del
lado derecho dice actor. Ahora estas son funciones a las que podemos acceder que existen en el actor. Y los tenemos porque
somos un personaje, pero también somos actor. Si bajas un
poco más, puedes ver que tenemos
algunos que dicen carácter. Ahora tenemos acceso
a estas funciones porque nuestro
personaje en tercera persona es un personaje. Y si bajamos aún más, se
puede ver que también
tenemos **** unos. Y tenemos estos porque nuestro
carácter también es un ****. Y cada vez que seleccionamos una
de estas funciones aquí, básicamente le decimos al motor, no queremos que ejecutes
el código que existe en, digamos, el blueprint de caracteres. Queremos tomar esta función
y ejecutar nuestro propio código. Entonces por ejemplo,
podríamos hacer clic, podemos saltar. Y ves que ahora
nos hemos hecho cargo esa función de
la clase de caracteres. Podemos escribir nuestro
propio código y tener ahora no todas las funciones
se verán así, donde tenemos un editor
separado si
creamos o si anulamos
otra función, digamos la destruida,
que se crean lo que parece un
evento dentro de nuestro gráfico de eventos. Y la razón por la
que hace eso es sólo porque nuestra función destruida
no tiene ninguna salida, pero puede saltar hace por
lo que tiene una salida aquí. Y lo que sea que
regresemos aquí
básicamente se revisará cada vez que intentemos saltar. Así que actualmente si
tratara de saltar
ahora, no sería
capaz de hacerlo porque nos hemos hecho cargo de la función y sólo
estamos diciendo que no podemos saltar con set this a false. Entonces podríamos tener nuestro propio
código aquí que controle si podemos
saltar o no, por ejemplo. Ahora, tal vez te estés preguntando si podemos anular
estas funciones. ¿ Podemos realmente ir y encontrar dónde están estas
funciones y mirar dentro y ver qué está sucediendo como podemos con las
funciones que hemos creado. Desafortunadamente, estas son clases de
C plus plus. Actor, personaje
importante en realidad se crean en C plus plus y
eso incorporado en el motor. No hay plano al
que podamos ir. Podemos personaje en primera persona, por ejemplo, y
mirar estas funciones. Puedes hacerlo en C plus
plus si quieres, pero eso es un
poco más avanzado. Por último, solo quiero
mostrarte cómo puedes llamar a funciones desde un
blueprint dentro de otro. Entonces, si vamos a nuestro mapa en
tercera persona aquí, simplemente
crearé una nueva clase de
blueprint rápidamente. Habrá un actor,
llámelo gatillo, lo
arrastrará
al nivel aquí. Y abriré ese plano. Agregaremos un nuevo componente
y llamaremos a esta casilla. Queremos la colisión de la caja y sólo la voy
a mover hacia arriba. Y también estamos en
la búsqueda
de detalles escondidos en juego de Nin. Voy a desmarcar esto
solo para poder verlo. Y luego nos desharemos de esa búsqueda y nos
desplazaremos hacia abajo hasta el fondo. Vamos a decir en realidad, podemos ir a Event Graph, que crean nueva función. Lo siento, el evento
serviría, empezaría a solaparse. Ahora ya hemos usado este nodo antes, si te acuerdas en
nuestras lecciones anteriores. Pero esencialmente este evento
correrá cada vez que algo se superponga nuestro gatillo y nos
dará una referencia
al actor que nos solapó. Para que podamos arrastrarnos fuera de esto. Y sólo le voy a hacer un costo
a TerceraPersonaPersonaje. Ahora bien, si recuerdas
esencialmente qué costo tiene es verifica, es este
objeto de entrada un carácter? Si es así, ejecutaremos aquí el cubo x
superior y nos
dará acceso a
ese carácter es variable. Ahora de nuevo, en el futuro
habrá una lección de casting, pero esto es sólo
un ejemplo rápido. Si lo recuerdas, podemos
acceder a variables usando esto. Entonces hicimos esto con nuestros cubos. También podemos acceder a funciones. Entonces si me arrastro
porque estoy lanzando al plano de
los personajes de ThirdPersonCharacter y eso es en lo que hemos
estado trabajando. Si lo arrastro hacia fuera y
busco aumentar la salud, ya ves que puedo conseguir ese
aumento de cómo funcionan. Y si recuerdan, lo
configuramos a, si nos dirigimos de nuevo a
nuestra característica, establecemos nuestro aumento de
nuestra función a PO. Entonces si desmarco esto
y lo hago impuro, necesito desconectar éste
porque
nos va a dar querer lo contrario. Se puede ver que
en realidad está actualizado aquí. Y usando eso podemos
acceder a las funciones que existen en nuestro
personaje en tercera persona en otro blueprint. Esta función correrá como si acabáramos de ejecutarla en nuestro personaje en
tercera persona. Pero en cambio en realidad
ahora podemos ejecutar que cada vez que nuestro, digamos que nuestro carácter se superponen. Entonces dispararé, para que podamos aumentar su salud en digamos cinco. Ahora, cuando golpeamos play
y atropello esa caja, se
puede ver que ahora está
imprimiendo ese mayor valor para la salud. Eso va a ser todo
por esta lección. Esperemos que entiendas
un poco más sobre las funciones de
vez en cuando nuestra siguiente lección, vamos a echar
un vistazo a las macros.
13. Aspectos básicos (Macros): Oigan a todos, En esta
lección vamos a estar mirando macros. Estas son similares a
las funciones en que son piezas
autónomas de código que podemos reutilizar
alrededor de nuestro blueprint. También vamos a estar aprendiendo acerca de
cuándo es posible que desee utilizar una macro en lugar de usar
una función también. Entonces comencemos.
Crearemosuna nueva macro. Eso lo podemos hacer en el panel de mis
planos aquí. Puede hacer clic en el botón de
nueva macro aquí o ir al menú desplegable
y seleccionar macro. Si hacemos clic en eso, podemos
llamar a nuestro nuevo ejemplo macro. Se puede ver que también nos
ha abierto un nuevo editor, como lo hace con una función. Y tenemos una entrada
y una salida nevadas. Ahora, a diferencia de una función, se
puede ver que en realidad
no tenemos ninguna entrada y nuestra macro, y eso es porque necesitamos
agregarlos nosotros mismos. Por lo que encima en el
panel Detalles aquí podemos hacer clic en el símbolo más y podemos
crear algunas entradas nuevas. Ahora, en realidad podemos crear entradas y salidas de pin de
ejecución. Entonces si hacemos clic en la opción Crear nueva salida
aquí para las salidas, puedes ver ahora tengo una entrada de ejecución y
una salida de ejecución. Y si podemos tirar de esto,
ir al Event Graph, realidad
podría arrastrar esta macro
ahora a nuestro gráfico de eventos. Y puedes ver que
tenemos tanto nuestras entradas como nuestras
salidas y podemos renombrar estos también,
algo un poco mejor. Entonces renombra esto para
decir en este 12 out, solo para que sea un poco más claro. Ahora lo bueno con las macros
es que en realidad puedes tener múltiples
entradas y salidas de ejecución. Entonces si quisiera, podría
agregar otra salida de ejecución. Podría llamar a esto un out to. Y podríamos correr
algún código y pelo. Y luego dependiendo de
lo que haga ese código, podríamos ejecutar
cualquiera de estas salidas. Al igual que nuestras funciones, también
podemos tener
entradas y salidas variables. Entonces, por ejemplo, podría agregar una nueva entrada entera y podría cambiar el
nombre para decir cantidad, como hicimos con nuestra función
en nuestra lección anterior. Se puede ver que ahora
tenemos una entrada de cantidad. Si vuelvo
al Event Graph, se
puede ver que tenemos
eso en la pluma de ejecución, y también tenemos
una entrada también, y luego ambas salidas. Ahora la forma en que usamos
las macros es muy similar a la forma en que
usamos las funciones en que podemos tener múltiples de la misma macro
en cualquier lugar de nuestro blueprint, podemos usar macros dentro de
otras macros si quisiéramos a y si hacemos algún
cambio dentro de la macro. Entonces, por ejemplo, si
agregamos algún código aquí, afectaría a todas
las macros que hemos creado a partir de
ese tipo de macro. Por lo que todas estas macros se
actualizarían con los cambios que
hacemos dentro de nuestra macro. Así que ahora hemos configurado nuestra macro de unas cuantas
entradas y salidas diferentes. Podemos codificar aquí al
igual que podemos en el Event Graph
o en nuestra función. Por lo que en nuestro último video, configuré una función de salud para
aumentar la salud. Yo puedo hacer
lo mismo con macro, así que crearemos una nueva variable, lo
llamaremos salud actual. Y lo pondremos en entero
si el tuyo no lo es ya. Y arrastraremos eso
en un nodo add. Y le sumaremos la cantidad. Y vamos a arrastrar hacia fuera de la salida de nuestro Add
Node y vamos a hacer establecer la salud actual como este. Ahora bien, debido a que se trata de una macro, podemos tener múltiples plumas
de ejecución de salida. Entonces podríamos hacer un chequeo, digamos, nuestra salud actual
es
igual a decir 100? Si está ahí, a lo mejor queremos
ejecutar una pluma de ejecución diferente. Yo uso un nodo de sucursal aquí. Si está en un 100, ejecutaremos la salida superior, y si no,
ejecutaremos la de abajo. Puedes renombrar estos, digamos salud máxima para la superior y no salud máxima
para la inferior. Porque tal vez queremos que tenga un código
diferente corriendo
dependiendo de si somos Max Health o no. Entonces si luego volvemos a
nuestro gráfico de eventos aquí, se
puede ver que tanto de nuestra nota de ejemplo
aquí he actualizado, por lo que han actualizado las salidas. Y eso es porque hemos
cambiado su macro. Y podríamos ejecutar esto ahora y
aumentar nuestro valor para la salud. Entonces si digo poner esto a 50 y agregaremos un
nuevo evento de entradas. Y qué usarías, digamos x, que encuentran la entrada x de m Así que cuando presiono X en
juego sumaré 50 de salud. Y luego podemos
ejecutar código diferente dependiendo de si somos
Mac self o no. Entonces solo usaré
la cadena de impresión porque son
fáciles de ver en juego. Entonces llamaremos a max health
y copiaremos y pegaremos. Esto correrá max así. Por lo que vamos a componente. Por lo que ahora podemos golpear play
y ver si esto funciona. Si presiono X, se puede ver
actualmente no max out. Si lo presiono de nuevo, ahora
estamos girando max health. Así que eso es solo un ejemplo de
cómo podemos usar macros para ejecutar código
diferente en nuestros blueprints
dependiendo de un valor, por
ejemplo, ahora el motor realidad incluye una gran cantidad
de macros incorporadas. Entonces por ejemplo, r es nodo válido si hacemos clic derecho
y tal lo que es válido, y nos desplazamos hacia abajo hasta
el nodo es válido. Es posible que reconozcas
esto
de una de nuestras lecciones anteriores. Esto es sólo una macro y
está integrada en el motor. Entonces, si hacemos doble clic en
él, en realidad
nos lleva a un blueprint llamado macros estándar. Y esto viene con
el motor y se puede ver que esto es sólo una macro, igual que nuestra macro de ejemplo. Tiene el mismo tipo
de layout y
podemos ver las entradas también. Así que si vamos a macros estándar, ver por aquí las entradas. Entonces solo tiene
un pin de ejecución. Entrada y un pin de objeto y
luego a salidas de ejecución. Y todo esto está haciendo es usar la función válida que está
incorporada en el motor. Cheques. Es el
objeto de entrada válido y luego usa una rama para ejecutar
es válido o no es válido. Hay otras macros que vienen con el motor
que puedes revisar. Todos están en estas
categorías aquí. Entonces si quieres, puedes
mirar a través de esos y
ver cómo funcionan. Pero esencialmente las macros son
realmente útiles para piezas de código más pequeñas e
independientes que puedes reutilizar
mucho en tu proyecto. Entonces por ejemplo, tal vez
querías comprobar, está muerto el personaje? Entonces, en lugar de recibir
el chequeo de salud, ¿esto
es menor que o, es menor o igual a 0? Y luego ejecutando un nodo F, en realidad
podrías simplemente
tomar todo este código, cortarlo, y ponerlo en tus propias macros para que pudieras tener está muerto. Podríamos tirar esto aquí. Y si en realidad arrastramos de nuestra pluma de ejecución a la entrada, y podemos hacer lo mismo
con las salidas. Para que podamos hacer así. Simplemente lo hace un poco
más rápido que tener que
agregarlos todos aquí. Entonces ahora tenemos un
poco de macro aquí que podemos usar para comprobar es
nuestro personaje muerto. Por lo que sólo podemos arrastrar eso. Y en lugar de
tener que sumar todos esos nodos. Y cada vez que queremos
comprobar es el personaje muerto, sólo
podemos
arrastrarlo en una pequeña macro y
lo hace todo por nosotros. Aquí es realmente donde está
su fuerza con las macros,
puedes usarlas mucho. Pueden controlar qué
código se está ejecutando. Y son solo pequeñas herramientas
útiles, especialmente para cosas como revisar valores, como lo
estamos haciendo aquí. Otro beneficio de la
macro dice que se pueden usar nodos
latentes en ellos. Entonces, si recuerdas de
nuestra lección anterior, no
puedes usar un
nodo de retardo dentro de una función, pero puedes
usarlos dentro de macros. Entonces si
quisiera, podría agregar un
nodo de retardo y aquí, así que todo un retraso. Ya ves que puedo
agregar eso en
muy bien . Yo lo puedo compilar. Y si vamos a nuestra gráfica de eventos, se
puede ver ahora es que macro está latente porque tiene el
pequeño reloj ahí. Y eso es porque dentro de él, hemos agregado este nodo de retardo. Y la razón de
esto es que las macros se ejecutan como si fueran código
en el Event Graph. Pero en su lugar simplemente
compactaron hacia abajo en OneNote que podemos reutilizar
y editar muy fácilmente. Tampoco restablecen funciones lo hacen cada vez que las ejecutamos. Por lo que son mucho más similares
al código que tenemos en el Event Graph en
lugar de al código que
tienes en una función. Ahora, algunas cosas que no
puedes hacer con las macros es que no puedes llamarlas
desde otros planos. Entonces si recuerdas en
nuestra lección anterior, creo un gatillo y
podemos hacerlo de nuevo. Si creamos una nueva clase de
blueprint, venderemos a un
acento y lo llamaré gatillo, lo abriremos. Y crearé un nuevo componente
de colisión de caja. Y sólo movemos esto un
poco hacia arriba y lo configuraremos
para que se oculte en juego se quitará esto para que solo lo
podamos ver. Y aquí vamos a crear
un nodo de inicio solapamiento. Si te acuerdas, esto simplemente se ejecuta cada vez que algo se superpone nuestro gatillo y luego
nos dará el actor que lo solapó. Así que arrastra desde aquí y usa el Cast to
Third PersonCharacter. Y esto tomará nuestra salida de actor que
se solapó o gatillo. Y comprobará, es un
ThirdPersonCharacter para es, entonces nos da
acceso a ese fuego una variable y ejecutaremos el pin acertado
aquí en la parte superior. Por lo que si recuerdas, podemos llamar a funciones vía esto. Pero vuelve a mi personaje aquí y sólo voy a
crear una función. Llamaremos a esto decir
aumentar la salud. Y sólo vamos a compilar. No agregaré ningún código y
volvemos a nuestro gatillo. Si me arrasto, puedo o puedo acceder a esa función para
poder ir a aumentar la salud. Se ve que puedo llamar a esa
función desde mi personaje. Pero si te acuerdas, tenemos r está muerto macro. Si me arrasto y
busco está muerto, no
puedo encontrar esa
macro porque no es accesible desde mi
Character Blueprint. Solo puedo usarlo dentro de
mi Character Blueprint. Por último, si recuerda
de nuestra lección anterior, podemos anular funciones
de nuestros planos principales. Por ejemplo, debido a que este es un plano de
personaje en tercera persona, ese es un hijo del personaje. Puedo anular funciones que existen en el
Character Blueprint. Pero no se puede hacer
esto con macros. Las macros existen sólo en
nuestro cabello blueprint. No puedo anular y tomar control de ninguna de
las macros de digamos, el blueprint de caracteres o el blueprint activo
por ejemplo. Así que solo para resumir, las macros son
herramientas realmente útiles que puedes construir que solo pueden hacerte
la vida un poco más fácil. Para que no tengas que
recodificar cosas todo el tiempo. Y puedes modificarlos
solo en un solo lugar y afectará a todos los
lugares que se use macro. También pueden controlar qué código se está ejecutando muy
fácilmente porque podemos tener múltiples entradas y salidas de
ejecución.
14. Fundamentos (Estructuras y Enums): Oigan a todos. En esta lección
vamos a estar echando un vistazo a estructuras y enumeraciones. Entonces comencemos. Las estructuras, o a veces
referidas como estructuras, son una forma de almacenar
múltiples tipos diferentes de variables
dentro de una variable. Entonces, para darles un ejemplo, sólo
voy a
crear una nueva variable. Voy a
llamarlo ejemplo paja. Y vamos a establecer
el tipo de variable a una estructura que en realidad viene
incorporada con el motor. Si quieres encontrar las otras estructuras de motor
que vienen con él, solo
puedes bajar a
la categoría de estructura. Y aquí puedes ver todas
las estructuras que usaste a
lo largo del motor. Lo más probable es que no
vayas a entrar aquí muy seguido. Porque estos
solo se usan principalmente para funciones
del motor y
cosas por el estilo. Pero vamos a usar
uno como ejemplo. Así que voy a crear, o voy a establecer nuestra
variable tipo dos llamado float. Y vamos a establecer nuestra
variable dos nombres flotar, y luego vamos a compilar. Ahora que hemos compilado, se
puede ver que nuestro valor por defecto incluye una variable float y una variable de nombre que podemos ambos individualmente
si quisiéramos. Y operan de la misma manera que uno esperaría que funcionara un nombre o una variable de
flotación. Ahora bien, esta estructura solo incluye dos variables, un
flotador y un nombre, pero puedes ser golpeado con muchas más variables y diferentes tipos de
variables también. Ahora, podemos obtener y establecer trazo sostenido de manera que podamos con
cualquier otro tipo de variable. Entonces si arrastramos en nuestro ejemplo struct aquí puedes
ver que podemos conseguirlo todo. Podemos crear un
nodo set y nos da estos nodos que hemos visto antes con
otros tipos de variables. Ahora, lo genial de
las estructuras a las que podemos acceder estas variables
se almacenan en él muy fácilmente. Podemos simplemente arrastrar hacia fuera de nuestro nodo get y podemos
crear un nodo break. Ahora porque estoy
usando float named, dice break named float. Pero si estuviéramos usando una estructura
diferente
con un nombre diferente, diría break y luego el
nombre de esa estructura en su lugar. Por lo que creará el
salto Blake llamado nodo flotador. Y se puede ver aquí
que ahora podemos acceder o flotar variable así
como nuestra variable de nombre. Y estos son solo pines variables
ordinarios. Ahora si quisiéramos,
podríamos arrastrar hacia fuera de nuestro flotador y podríamos
crear un nodo add, por
ejemplo, o cualquier otro nodo
flotante Related. Y podríamos hacer lo
mismo de nuestro nombre, salida
variable también. Si hubiéramos dicho, una variable de flotación, podríamos establecer esa variable de flotación
usando esta pluma también. También podemos conseguir el pelo de las horquillas una
manera diferente
si obtenemos suficiente, nuevamente, obtenlo, y hacemos
clic derecho en el pin de salida, podemos seleccionar la opción Dividir
Struct Pin aquí. Se puede ver que ahora
podemos obtener directamente el valor float y nuestro valor name de la variable struct de
ejemplo. Y si queremos
recombinarlos, para que vuelva a nuestro nodo get
predeterminado normal aquí, podemos hacer clic derecho en
los pines de salida y seleccionar recombinar Struct Pin. Se puede ver que ahora
vuelve a la normalidad. Diré sin embargo, con mi experiencia
en el motor usando esta opción Split Struct Pin, en lugar de usar el nodo break, esto es un poco
más propenso a romperse con actualizaciones del motor
y cosas por el estilo. Por lo que en lo personal prefiero
usar los nodos break, pero es una preferencia personal. Puedes usar las
clavijas divididas si quieres. Por lo que ahora sabemos cómo obtener información de nuestro nodo get
strokes. Queremos poder establecer
información a nuestros
trazos, lo cual podemos hacer. Entonces si tomamos nuestra nota de
set aquí y arrastramos hacia fuera desde el pin de entrada, buscaremos hacer. Se puede ver que tenemos una
opción para make named flow. Ahora de nuevo, si estuviéramos usando
un tipo diferente de struct, diría Make y
luego ese nombre de trazos. Por lo que vamos a crear esta nota aquí. Se puede ver que ahora tenemos una entrada flotante y una entrada de nombre. Y esto nos permite poner en
marcha el flujo o se
denominan variables
en nuestra estructura. Ahora el único problema con esto
es decir que solo queremos que cambie nuestro valor de flotación y no
queríamos cambiar
nuestro valor de nombre, solo
queríamos
dejar eso igual. Esto en realidad
sobrescribiría nuestro valor de nombre. Entonces, lo que podemos hacer en su lugar, si queremos simplemente cambiar una de las variables dentro de nuestra estructura, podemos hacer es crear un nodo, arrastrar hacia fuera, y
buscar miembros de conjunto. Y ya ves que tenemos
miembros set en el nombre non struct. Por lo que de nuevo, a la nuestra se
le llama flotador. Entonces diremos que los miembros establecidos en el flujo
nombrado
crearán ese nodo. Y aquí tenemos esta nota de
aspecto extraño. En el panel Detalles. Podemos bajar a
este desplegable. ¿ Puedes ver que tenemos
una casilla de verificación para cada tipo de variable que está
dentro de nuestra estructura. Entonces si quería simplemente
cambiar la variable de flotación, podemos asumir eso aquí. Y ya ves que a eso ahora
se le agrega un insumo para nuestra flotación. Ahora, cuando este nodo se ejecuta, podríamos establecer una nueva variable de
flotación dentro de nuestra estructura sin
afectar nuestra variable de nombre. Mientras que con el nodo set, tendríamos que establecer tanto nuestra variable
float como nuestra variable de nombre. Y por supuesto, si tuvieras una
struct con más variables, esas estarían listadas aquí. Puede asumir
múltiples variables
usando las notas de los miembros del conjunto. Entonces si quisiera, podría tener ambos pines aquí
como entrada también. Y podríamos cambiar
ambos
valores al mismo tiempo. Este nodo
actúa automáticamente como lo hace un nodo conjunto. Por lo que no necesitamos usar un nodo set para que estos
cambios se apliquen. Justo cuando este nodo se ejecute, cambiará esos valores
para nosotros dentro de nuestra estructura. Entonces, hasta ahora hemos estado usando este llamado flotador golpeado que
viene incorporado en el motor. Pero en realidad podemos crear
nuestros propios trazos y
podemos elegir qué variables se
van a almacenar dentro de él. Entonces para ello, iremos al navegador
de contenidos aquí. Sólo voy a hacer clic derecho
y un espacio vacío. Después queremos ir
al
pop out de los planos y
seleccionaremos la estructura. Ahora lo que si nombras
tu estructura es cómo se llamará
la estructura y la opción de tipos de variables. Entonces yo sólo voy a llamar a
mi video struct así. Y haremos doble clic en
él para abrirlo. Yo sólo voy a poner el
mío en la parte de arriba aquí. Se puede ver que ahora tenemos una opción donde podemos
establecer nuestras variables. Así que por defecto acabamos obtener una variable booleana que
se llama miembro subrayado 0. Podemos agregar nuevas variables
aquí haciendo clic en el botón
agregar variable. Y si queremos,
podemos eliminar variables haciendo clic en el pequeño bote de
basura de aquí para eliminarlas. Por lo que añadiremos algunas variables. Y se pueden imaginar si
quisiéramos almacenar información
sobre digamos, un elemento, podríamos usar una estructura
para hacer eso y mantener toda esa información
almacenada en una variable, lugar de tener que tener cientos de variables
que describen un ítem. Entonces por ejemplo, tal vez queríamos que
nuestro artículo tuviera un nombre. Por lo que pondríamos el nombre del artículo. Podríamos llamar a este
nombre tal vez un peso. Por lo que usaremos flotador. Llamamos a este peso variable
tal vez un valor dañado. Entonces podríamos decir un
entero a dañar, y luego tal vez un
texto que podemos decir es la descripción. Y podemos salvar esto. Ahora cuando volvamos a
nuestro ThirdPersonCharacter, podemos crear una nueva estructura. Y a esto lo llamaremos nuestro video. Y cuando pasamos
al tipo variable, podemos buscar un video. Y verás el video struct. Ese es el nombre
de nuestra estructura. Si llamaste a mandíbulas
algo
diferente a lo que tendrás que buscar eso. Entonces crearemos esto
y compilaremos. Así que ahora cuando pasamos
al valor predeterminado, se
puede ver que tenemos las cuatro de nuestras variables
que hemos creado dentro de nuestra estructura con los nombres correctos y ver
si podemos establecer nombre, un flotador, un entero y una descripción
para nuestra estructura. Y al igual que antes, podemos acceder a estos con
la nota de freno. Entonces, si creamos un nodo, arrastramos hacia fuera y creamos
una estructura de video break, se
puede ver que el motor simplemente se configura automáticamente para
nosotros para que podamos simplemente
crear ese nodo. Y así como así, tenemos
acceso a nuestro nombre, peso, daño y descripción
usando nuestro nodo de rotura. Nuevamente, si quisiéramos
establecer esas variables usando
el nodo set members, podemos arrastrar hacia fuera, usar
los miembros del conjunto. Y se ven miembros de set
en video struct. Y podemos asumir cualquier
variable que queramos, como hicimos antes
con nuestro flotador llamado. Pero esta es ahora nuestra
propia estructura personalizada. Ahora, también podemos establecer los valores
predeterminados para nuestra
estructura también. Entonces, si volvemos a
nuestros trazos de video, puedes ver que aquí tenemos una opción de valores
por defecto. Entonces aquí podríamos simplemente sentarnos cuáles los valores predeterminados estándar sonlos valores predeterminados estándarpara el video tipo Struck. Entonces tal vez solo quiero
decir, diga nombre del artículo. Queríamos que el
peso por defecto fuera decir uno y descripción ¿qué parte? Información del artículo aquí. Y el daño será de diez. Entonces estos son ahora los valores
por defecto si guardamos ahora y volvemos a
ThirdPersonCharacter. Y selecciono mi
estructura de video o compilo porque hemos hecho algunos cambios a la estructura,
habrá que compilar. Se puede ver que ahora está usando esos valores predeterminados que
establecemos dentro de nuestra struct. Si queremos volver a
poder cambiar variables, solo
podemos hacer clic en
la pestaña Estructura aquí y podemos acceder a
esas variables. Ahora, otra cosa que puedes hacer aquí dentro
es que si quisiéramos, podríamos reordenar
estos para que pudiera agarrar este pequeño icono
al final aquí. Podemos cambiar el
orden, así que tal vez quiero que el nombre sea tercero
ahora en lugar de la parte superior, lo
hacemos y podemos golpear Guardar. Vuelve a nuestro personaje
y lo compilaremos. Observa que ahora con nuestro trazo de
video seleccionado, que ahora están en
un orden diferente. Ahora es algo que
hace que las estructuras sean realmente poderosas es que las podemos
usar en matrices. Así que si recuerdas de nuestra matriz de video para establecer una
variable para ser una matriz, podemos hacer clic en este pequeño
desplegable aquí y seleccionar matriz. Ahora vamos a romper un poco algunas
de nuestras conexiones allí porque no podemos conectar una matriz en
ninguno de estos nodos. Por lo que sólo voy a
borrar esos por ahora. Pero si recuerdas,
podemos arrastrar hacia fuera desde una variable de matriz
y buscar bucle. Podemos seleccionar para cada bucle. Usando esto, ahora podemos
recorrer nuestras entradas
en nuestra matriz. Así que sólo voy
a compilar aquí, así que tenemos nuestros valores por defecto. Entonces, por ejemplo,
podríamos usar una struct para almacenar mucha información
sobre diferentes artículos, tal vez para un inventario,
por ejemplo. Entonces, por ejemplo, si
creo algunas entradas aquí, se
puede ver que ahora
tenemos múltiples versiones de esa estructura
almacenada en la matriz. Y luego podemos recorrer
esas versiones de nuestra struct usando el nodo loop y luego acceder a su información
usando el elemento array. Y entonces sólo podemos usar el video break atado
como lo han sido antes. Y podemos acceder a esa
información desde nuestro array. Entonces eso es más
o menos lo básico de las estructuras. Son realmente útiles
para mantener las cosas organizadas y almacenar
grandes cantidades de datos. Al igual que si tuvieras un
inventario lleno de artículos. Puedes usar estos para almacenar mucha información
sobre cada artículo. Y después podemos ponerlos dentro un rayo o podemos usar trazos solo para mantener
las cosas organizadas también. A lo mejor tienes un conjunto de variables que
siempre has usado juntas. Por lo que podría almacenar
los en una estructura
y simplemente acceder a ellos a
través de una variable. A continuación, vamos
a mirar a los sindicatos. Ahora. Nuevamente, al igual que la estructura, el motor en realidad
tiene indio incorporado. Entonces, si bajas
al fondo, puedes ver la categoría de modismo aquí. Y hay muchos
que vienen con el motor. Nuevamente,
realmente no usarás estos. Simplemente están
integrados en el motor
y los usan los nodos
dentro del motor. Pero también puedes crear tus propias enumeraciones al igual
que hicimos con nuestra struct. Ahora, te mostraré
cómo hacer eso. Por lo que compilará este
blueprint por ahora. Y haremos clic derecho
y nuestro navegador de contenido volverá a los planos. Y aquí vamos
a seleccionar enumeración. Y a esto lo llamaremos un video. Nuevamente, lo que
llames a este blueprint es lo que se llamará en
la opción de tipo variable. Entonces eso es sólo
algo a tener en cuenta. Podemos abrir esto. Se puede ver que
se ve un poco similar a nuestra
estructura en la parte superior, pero aquí hay algunas
diferencias, por lo que en realidad no
tenemos ningún
valor predeterminado para empezar. Daremos clic en Agregar en numerador. Ya ves que esto
nos da un nuevo insumo aquí. Ahora todos podemos establecer un nombre, por lo que podríamos decir la opción uno. Y agregaremos un par
más solo para que
podamos verlo en el editor. Entonces llamaremos a esta opción dos, y guardaremos esto. Ahora, en realidad no hay mucho
más que puedas hacer aquí. Por lo que volveremos a nuestro
ThirdPersonCharacter. Y voy a
crear una nueva variable. Llamaremos a esto un video. En ella. Voy a cambiar el tipo de
variable aquí. Yo sólo voy a
cambiarlo a una sola. Y haremos clic en el
desplegable y vamos a buscar nuestro video en ti. Así como así. Y vamos a compilar. Ahora puedes ver en
el valor por defecto aquí tenemos este desplegable. ¿ Ves eso? Porque tengo la opción
uno y la opción dos que me senté en mi video union, que son las opciones que
tengo para mi valor predeterminado. Ahora, las enumeraciones funcionan igual que la mayoría de las variables que podemos
obtener y establecerlas. Así que si arrasto hacia fuera y
hago un nodo get, se
puede ver que sólo podemos
conseguirlo como una variable normal. Y también podemos configurarlo. Así que si arrasto hacia fuera y no establecer, se
puede ver que tengo un nodo conjunto, pero en realidad
podemos
establecer manualmente cualquier opción que queremos par
utilizando el nodo conjunto, así, o podemos tomar una
entrada si queríamos. Ahora, las enumeraciones son
realmente útiles para controlar qué código
se ejecuta en tu proyecto. Y la forma en que pueden hacer eso es si arrastramos fuera
de nuestro nodo get, podemos hacer un switch. Se vería interruptor en video. Nuevamente. Si estás en humanos llamado
algo diferente, diría encender
y luego ese nombre enumeraciones. Pero el nuestro es video indio. Entonces
vamos a crear esto. Se puede ver que ha creado un nodo switch para nosotros y por cada ajuste que tenemos
dentro de nuestro indio, nos
dará un pin de salida. Entonces si volvimos a
nuestro video en num aquí, agregué un par de opciones más, así que agregaremos un par más. Voy a configurar esto
para decir prueba 123 y prueba 456. Nos ahorramos esto. Ahora cuando volvamos a
nuestro Third PersonCharacter, probablemente
querrás
compilar solo para asegurarte se vean esas opciones
Update. Ahora, tenemos nuestras
dos opciones originales y en realidad se han añadido
algunas adicionales. Y usando esto,
en realidad podemos controlar qué código se va a ejecutar
dependiendo de lo que nuestras enums se establecen a. Un buen ejemplo de cómo se
puede usar esto ya que tal vez tengas artículos en tu juego y diferentes artículos hacen
cosas diferentes cuando los usan. Entonces tal vez tenías consumibles, medicinas, cosas así. Podrías tener una
opción para cada uno de esos diferentes tipos de
artículos y luego tener un código diferente que se ejecute dependiendo
del tipo de artículo que sea. Ahora, también podemos usar una nota
selecta de ellos. Entonces si arrastramos hacia fuera,
buscamos seleccionar. En realidad podemos seleccionar una variable
dependiendo de nuestro valor de enumeraciones. En este momento solo está en
gris porque no
hemos introducido
ningún tipo de variable. Pero si yo fuera a crear una nueva variable y
vamos a llamar a este flotador, sólo
voy a
configurarlo a un flotador. Si conectamos este flotador ahora
a la nota de selección, se
puede ver que
todos se convierten en flotadores. Y esto
nos puede permitir seleccionar y
generar salida a partir de este valor de retorno. Podemos seleccionar
cualquiera de estos insumos dependiendo de nuestro valor indio. Entonces, por ejemplo, si tuviéramos que
configurarlo en la opción dos, entonces lo que esté
conectado a la opción dos sería devuelto a través
del valor de retorno. Ahora, también podemos hacer cosas como controlar un
nodo de rama usando enumeraciones. Así que si acabo de borrar
estos nodos por ahora, podemos arrastrar hacia fuera y
hacer un nodo igual. Podemos comprobar. crear este nodo igual a
Ethereum aquí. Y podemos comprobar, ¿es nuestro inmune igual a uno si
es opciones afiladas? Y si lo es, podemos dar salida a un valor verdadero, y si no,
pondrá un valor falso. Por lo que podríamos crear un
nodo Branch él y controlar si esto se
va a ejecutar o no verdadero o falso dependiendo del valor de
nuestros sindicatos. Ahora también podemos usar nuestro
indio dentro de nuestra struct, así que podemos hacer eso
ahora si quisiéramos, podríamos volver a
nuestra estructura de video aquí, agregar una nueva variable, y llamaremos a este tipo
say item. Podemos configurar esto para que
sea nuestro video inmune. Así como así. Ahórrate esto y tal vez
queríamos cambiar cuáles eran
nuestras opciones. Entonces tal vez esto era comida, bebida, conocido, y arma. Por lo que ahora podríamos usar este video indio dentro nuestra estructura para establecer cuál es el ID de tipo de
un artículo. Así que si volvemos aquí y
obtenemos nuestra estructura de video, podemos decir bucle
a través de nuestra matriz. Podemos acceder a todos
los valores en nuestras estructuras
para poder arrastrar hacia fuera, romper nuestra estructura de video. Se puede ver que
ahora hemos pasado un cierto número de variables. Por lo que obtenemos esta pequeña
opción desplegable que podemos usar. Y en realidad se puede
organizar esto más. Entonces tal vez solo necesitas
el valor del peso. Por lo que podrías entrar
aquí y desmarcar ciertas variables que solo muestra
la opción Peso. Ahora, solo para mantener las cosas
ordenadas porque podrías tener una struct con
muchas variables. Para que puedas desmarcar cuáles simplemente no necesitas en
ese momento en particular. Esto no afecta
tu golpe de ninguna manera. Simplemente arregla el nodo. Pero también podemos acceder a
ese tipo de ítem en él que agregamos a nuestra struct. Así que si arrastramos hacia fuera, podemos
usar decir, el nodo igual. Podemos comprobar es este artículo, esta
entrada en particular en nuestra matriz? ¿ Es un artículo de comida, por ejemplo, si lo es, entonces tal vez queremos ejecutar
una pieza específica de código. O si se decía, un arma por ejemplo, podríamos tener que
ejecutar código diferente. Como dije antes, podríamos
usar ese nodo switch. Para que pudiéramos ejecutar un
interruptor en video. Y ahora podemos cambiar
dependiendo de qué tipo de elemento pasa a ser esta entrada en nuestra
matriz. Ahora Eso es todo por esta lección. Al igual que un resumen, las estructuras
son una muy buena manera de almacenar múltiples
tipos de variables dentro de una variable. Y luego con las matrices
podemos almacenar mucha información a la que
luego podemos acceder realmente fácilmente. Y las enumeraciones son una gran manera de controlar qué código en tus
proyectos se está llevando a cabo. O podemos usarlos para seleccionar variables
dependiendo de los nums, fantasía.
15. Fundamentos (Eventos): Oigan a todos. En esta lección
vamos a estar echando un vistazo a los nodos de eventos. Ahora ya hemos estado usando nodos de
eventos bastante
en nuestras lecciones anteriores. Si recuerdas la nota de
reproducción inicial por ejemplo, que es un evento o eventos destruidos nodo también
es un evento. Estos eventos se llaman desde el
código dentro del motor. código que está
integrado en el motor ejecuta estos eventos cuando se
inicia el juego o cuando los
actores se destruyen. Ahora, también podemos crear nuestros propios eventos personalizados que podemos ejecutar cuando queramos. Haz eso, podemos hacer clic derecho. Podemos buscar evento personalizado. Y podemos usar la opción de agregar evento
personalizado aquí para crear un nuevo nodo de evento. Yo sólo voy a
llamar evento de ejemplo mío ,
evento como ese. Y se puede ver que ahora
se parece a nuestros otros eventos, pero este evento en realidad
nunca va a ser llamado en este momento porque no lo
hemos llamado a ninguna parte. Entonces si quisiera que mi
ejemplo vent
se ejecutara y viera el código
que conecto a él, como cadena de impresión para ejecutar, necesitaríamos llamar a
nuestro evento de ejemplo. Entonces para hacer eso podemos
usar un evento existente como la nota de
plano inicial para llamarlo. Para que pudiéramos arrastrar y
buscar, por ejemplo, evento. Y eso
llamaría ahora nuestro evento de ejemplo
cuando comience el juego. Ahora podemos llamar a eventos en
múltiples lugares en nuestro código. Entonces, por ejemplo, si quisiéramos que
este código de evento de ejemplo se
ejecutara cuando
comience el juego y también cuando nuestros
personajes se destruyan. Podríamos hacer eso
también. Podríamos simplemente arrastrarnos hacia fuera en otro evento de ejemplo. Fresco aquí. Y ahora
cuando empiece nuestro juego, llamaremos a este evento,
estoy ejecutando su código. Y también cuando este
actor es destruido, llamamos al evento
y ejecutamos este código. También podemos agregar
insumos a nuestros eventos. Por lo que si seleccionamos nuestra nota de
evento aquí, se
puede ver que hay
una opción de entradas. Entonces si hago clic en el botón de añadir
entrada aquí, podemos ver que tienes
una nueva entrada booleana. Y eso agrega una salida a nuestro nodo de eventos y también entradas
a nuestros nodos cool de eventos. Por lo que ahora podemos controlar una
variable usando los nodos del núcleo. Entonces por ejemplo, tal vez
queríamos que nuestro booleano cierto Cuando se ejecuta la jugada
inicial, pero falsa cuando corre la
destruida. Y entonces podríamos tener
tal vez ejecución de código diferente, dependiendo de si ese valor de salida
era verdadero o falso. Los eventos también se usan bastante ampliamente en la codificación
para multijugador. Si seleccionamos el evento aquí, se
puede ver que tiene
algunos ajustes de replicación. Estos son para multijugador. Ahora no voy a
estar cubriendo esto en
esta lección porque el
multiplicador es un tema enorme y realmente
necesitas conocer los fundamentos de planos antes de
entrar en la codificación para multipolar, sigue adelante, otra cosa que puedes hacer con los eventos
es llamarlos desde otros planos como
podemos con nuestras funciones. Entonces, si puedo sacar
mi plano aquí, voy a crear
un nuevo plano. Yo sólo voy a usar a un actor y lo vamos a
vender para detonar. Y eso lo abriré. Yo sólo voy a agregar una caja. Colisión irá
al Event Graph y vamos a crear
una superposición de inicio. Actor de eventos comienza solapamiento. Nuevamente. Esto es sólo un evento. Se puede ver que
dice evento en el nodo. Pero a esto se le llama cuando algo se superpone
son actor gatillo, eso nos da una
salida de cualquier actor solapamiento que Todd disparador
arrastre hacia fuera de esto. Usaremos un nodo Cast to
ThirdPersonCharacter. Y si recuerdas de
nuestras lecciones anteriores, este chequea es el
otro actor que está superponiendo nuestro gatillo,
un personaje en tercera persona. Si lo es, entonces nos
da acceso a sus variables,
funciones y eventos. Entonces si arrastro desde aquí
y busqué por ejemplo, se
puede ver que puedo
llamar a mi evento de ejemplo. Y también tenemos acceso a
esa variable que agregamos. Y cuando un actor
se superpone son gatillo, comprobaría, ¿es un
Third PersonCharacter? Y si lo es, entonces llamaremos a este evento de ejemplo en ese ThirdPersonCharacter
Blueprint. Y si hacemos doble clic en
este evento, en realidad nos llevará al plano de
nuestro personaje. Y eso solo nos lleva
directo a nuestro código que podamos encontrar fácilmente
lo que estamos ejecutando. También podemos usar
eventos con temporizadores. Entonces si nos desconectamos, empiezo a tocar nota
aquí y sólo la
moveré aquí arriba para
un poco más de espacio. Si arrastramos fuera de mi Begin
Play y buscamos establecer un temporizador por evento. Se puede ver que
tenemos una opción llamada set timer por ellos. Y eso nos da este nodo. Ahora, si puedes sondear,
obtendrás un error. No te preocupes por
eso porque aún
no tenemos un evento
conectado. Entonces hay un par de
formas en que podemos hacer esto. Podemos arrastrar desde
nuestro pin de evento aquí, luego buscar personalizado. Y podemos agregar un
evento personalizado como lo hicimos antes. Y eso nos da
un nuevo nodo de eventos. O simplemente podemos hacer clic derecho
y buscar personalizado y agregar un
evento personalizado como lo hicimos antes. Y podemos conectarlo
hasta la entrada del evento aquí. Ahora, una cosa a
tener en cuenta es que si tu evento tiene alguna entrada, no
podrás
conectarlo hasta este nodo. Entonces por ejemplo, si
agregué un booleano aquí
y podemos tirar, se
puede ver si me arrastro
desde la ventilación de mi cliente aquí, no
puedo conectarlo
hasta la entrada. Y eso es porque tenemos una variable de entrada para nuestro
mover esto y compilar de nuevo, voy a poder
conectar esa copia de seguridad. Por lo que ahora el
evento timer nos permite ejecutar un evento
dependiendo de su configuración. Así que actualmente en Begin Play, queremos que nuestro cronómetro se ejecute, digamos, cada 1 segundo, que podamos establecer el tiempo a uno y podamos activar el looping si
queremos que este evento se ejecute cada una segundo. Para
que pudiéramos asumir eso. Si dejáramos esto fuera, la jugada inicial no funcionaría. Corría el
tiempo establecido que los compro. Esto esperaría 1 segundo, y correría nuestro evento una vez, y entonces eso sería todo. Pero si tenemos ticks de looping encendido, lo correrá cada segundo. Ahora, los temporizadores son una
muy buena alternativa al uso del evento tick. Entonces, si recuerdas, si
creamos el evento tick, esto ejecutará cada fotograma único que nuestro juego se renderice. Y muchos principiantes tienden
a adjuntar una gran cantidad de código a esto solo porque
funciona continuamente. El problema con eso es que mayoría del código no
necesita ejecutarse cada fotograma y puedes arruinar
muy fácilmente el rendimiento de tu proyecto haciendo eso. Por lo que una gran alternativa
es usar temporizadores. Digamos que si necesitabas código
para ejecutarse cada 1 segundo, puedes conectarlo así, en lugar de usar una
técnica, por ejemplo. Ahora podemos usar un
controlador de temporizador para controlar nuestro temporizador. Así que si arrastramos hacia fuera de
este valor de retorno aquí, podemos crear nueva variable utilizando la opción promueve
Variable, y que acaba de
crear alguna nueva variable es tipo es temporizador manejar, y sólo voy
a llamarlo temporizador. Ahora esta vez una variable
nos permite controlar nuestro temporizador. Así que digamos por ejemplo, queríamos ejecutar a
este cliente luego varias
veces y luego
detener el temporizador funcionando. Podemos hacer eso. Entonces podríamos agregar,
digamos una nueva variable. Sólo llamaré a este número. Lo pondré en un entero. Obtendremos nuestro entero
y sólo comprobará, ¿es igual a
decir, cinco a cinco? Y haremos un nodo F. Entonces si no es igual a cinco, queremos agregarle uno. Eso lo haremos, lo conseguiremos. Agregaremos uno y luego haremos sexo el valor del número está en cinco. Queremos detener nuestro cronómetro. Entonces lo que podemos hacer es
que podemos arrastrar hacia fuera de R o podemos conseguir nuestro
tiempo una variable aquí, arrastrar hacia fuera de ella
y buscar clip y usar el tiempo claro e
invalidar que compro manejar. Entonces ahora, la forma en que funcionaría este
código es cuando empieza el juego o cuando el personaje
ha engendrado. Nuestro temporizador ejecutará a nuestro
cliente luego cada 1 segundo, configuraremos su referencia de temporizador a la variable de mango del temporizador. Así que ahora cuando se ejecuta nuestro evento
personalizado, comprobamos que es número
igual a cinco. Si no lo es, le agregamos
uno y lo configuramos. Y entonces la próxima
vez que esto corra, después de un segundo, volvemos a comprobar. Y luego una vez que están a las cinco, entonces le decimos a este temporizador que se detenga. Ahora, usar el clear e
invalida el timer por nodo manejado se detendrá por
completo esta vez. Tendrás que
ejecutarlo de nuevo para poner en marcha. Pero si quieres poder
reanudar este temporizador, realidad
podemos usar
un nodo diferente. Para que podamos alargar y
podemos buscar decir, pausa. Y podemos pausar
el mango del temporizador. Para que podamos ejecutar esto en su lugar. Ahora, esto nos permite decir tal vez
queríamos retomar el
tiempo de espera de nuevo más adelante. Podríamos entonces usar
el nodo un-pause que reanudaría el funcionamiento de
nuestro temporizador. Ahora podemos probar
esto out and game. Por lo que sólo voy a
eliminar la un-pausa anotada. Y agregaré en un par
de cadenas de impresiones solo para que podamos ver qué se está ejecutando. Conectaremos nuestro número
dos, imprimo una cadena aquí, y agregaré una cadena de impresión
hasta mi tiempo de pausa del código. Y pondré esto en tiempo de espera. Entonces ahora cuando le peguemos al play, todo
esto debería correr
cuando iniciemos el juego. que podamos comprobar que nuestro
tiempo corre cada segundo. Está aumentando el valor de
nuestro número. Una vez que son cinco, el puerto, el tiempo de espera se pausa. Ahora si alguna vez quieres encontrar los eventos que vienen
incorporados en el motor, puedes hacerlo si vamos a nuestro ThirdPersonCharacter
Blueprint aquí, haz clic en Buscar evento. Puedes ver una lista de todos
los diferentes eventos que vienen
incorporados a nuestro personaje. Ahora bien, debido a
que este
es un personaje, tiene algunos eventos personalizados
que otros actores no tienen. Al igual que por ejemplo, el aterrizado, esto correrá siempre que nuestro
personaje aterrice de un salto. También puedes hacer esto en actores
normales como por
ejemplo, nuestro gatillo. Si hago clic derecho en
buscar evento, puedes ver que no tiene tantos eventos
como lo hizo
el personaje, pero sí tiene algunos eventos
construidos y que puedes usar para ejecutar tu código. Eso es todo por nuestra lección de eventos. usaremos eventos en
nuestras futuras lecciones, simplemente porque son parte
bastante central de la
codificación y los planos.
16. Aspectos básicos (herencia de un plano): Oigan a todos. En esta lección
vamos a estar hablando un
poco sobre la herencia de Blueprint. Ahora, ya hemos hablado de
esto un poco antes en los actores y los objetos
varían hasta el video. Si no has
visto esa, te
recomendaría echarle un ojo a eso. Pero esencialmente, la herencia de
blueprint nos
permite crear un blueprint a partir de un
blueprint existente que luego usa ese
blueprint existente como padre. Y lo que eso significa
es nuestro nuevo blueprint, que tiene el hijo hereda
todas las funciones, variables y código
del blueprint padre. Entonces primero
pondré un ejemplo aquí. Si solo creamos cualquier Blueprint, solo
voy a hacer clic derecho
y seleccionar Clase de plano. Se puede ver que
cuando en realidad
seleccionamos una de estas
opciones aquí, en realidad
estamos escogiendo
una clase padre. Ahora, hemos estado usando al actor en
su mayor parte porque ese es solo el objeto
más básico que puede existir en el mundo. Entonces sólo vamos a
seleccionar actor de nuevo ahora. Y al hacer eso, heredamos
nuestro nuevo plan aquí, hereda todas las funciones, variables y habilidades
que tiene un actor. Ahora, si abrimos
nuestro nuevo plano, puedo mostrarles a qué me refiero. Si solo tenemos esto
en el PEP superior, si vamos a nuestra
opción de variables aquí abajo, parece que solo tenemos
nuestra ruta vista por defecto, que viene con nuestro actor. Director en realidad viene con
un montón de otras variables. Simplemente no los podemos ver
porque son heredados. De la forma en que podemos
encender eso en esto, si vamos a este
pequeño cog aquí, podemos dar clic en Mostrar variables
heredadas. Y ya ves que
ahora tengo un montón de categorías que
acaban de aparecer. Ahora. Estas son todas variables
que mi nuevo plano o heredando porque
es hijo del actor. Todas estas variables
fueron creadas en el actor. Ahora podemos usar estas
variables al igual que
podemos con las variables
que creamos nosotros mismos. Entonces si voy al
Event Graph aquí, puedo arrastrar estos
, puedo conseguirlos. No puedo establecer ciertas. Entonces, por ejemplo, solo relevante para el propietario está en realidad deshabilitado. No puedo establecer eso usando código, pero otros que
puedo, por ejemplo, si nos desplazamos hacia abajo, puedo tener
pueden dañarse si lo arrastro y se puede ver que puedo obtener esa variable al igual que
nuestras variables normales. Y también puedo configurar. Y esto es
lo mismo para las funciones. Hablamos un poco sobre
esto en la lección de funciones, pero cuando hacemos clic derecho
y buscamos decir, set to transform, este set actor transform node es solo una función
que existe en la clase de actor a la que
tenemos acceso porque nuestro nuevo plan es
un hijo de la clase actor. Ahora, no podemos ir al Navegador de
Contenido y encontrar el acto de blueprint
porque no está aquí. En realidad está integrado en
el motor y todas sus variables y funciones
están codificadas en C plus plus. Entonces ahora les voy a
mostrar cómo podemos configurar nuestro propio sistema de
herencia, como heredamos del actor. Podríamos tener nuestro nuevo blueprint, tener algún código en él, algunas
funciones, variables. Entonces podríamos tener otro
nuevo blueprint heredar de nuestro nuevo blueprint
y tener acceso a esas variables
y funciones. Entonces iremos al navegador de
contenidos aquí, y solo voy a
cambiar el nombre de mi blueprint. Yo sólo voy a
llamarlo el maestro, lo
llamaré BP
Underscore Master. Ahora, para crear un plano
infantil, hay algunas maneras en
que puedes hacer esto. Simplemente podemos hacer clic derecho en
nuestro blueprint master bp. Se puede ver que
aquí
hay una opción llamada Create
Child Blueprint class. Si hacemos clic en eso,
puedes ver que nos ha creado cualquier nuevo blueprint. Le está dando el nombre BP
master underscore child, y esto ahora es un
modelo infantil de nuestro maestro. Si lo abrimos,
verás que
en lugar de que la clase padre
sea el actor como está en el blueprint maestro o master child es la
clase padre es BP master. Ahora solo voy a ir
al Navegador de Contenido y renombrar esto a niño solo para, así no nos confundamos
aquí así. Ahora, otra forma de
crear blueprints secundarios es en la opción Crear blueprint. Entonces si vamos a clase Blueprint, puedes ver aquí abajo
que tiene todas las clases. Y si buscamos
BP Underscore Master, verás que en realidad lo encontramos. Es un poco difícil de ver
porque ahí está resaltado. Pero eso dice BP master. Si damos clic en esto,
podemos hacer clic en Seleccionar. Y eso también
nos creará un hijo de la máscara. Para que puedan ver que ha
creado un nuevo blueprint. Si abro eso,
verás que la clase de padres también
es maestra de BP. Ahora voy a volver a mi navegador de
contenido y simplemente eliminar este nuevo blueprint
porque ya
tenemos un hijo con el que
podemos trabajar. Así que ahora si volvemos a nuestro bp master y solo voy a borrar estos nodos por ahora. Voy a ocultar mostrar variables
heredadas. Por lo que ahora estamos de vuelta a
nuestra vista por defecto. Voy a crear cualquier variable y sólo voy a llamar
a este decir, variable de
ejemplo creará
una nueva función también. Llamaré a esta función de ejemplo. Ahora bien, esta variable y función son únicas
de nuestro maestro bp. Entonces otros hijos del
acceso, dicen por ejemplo, nuestro personaje, que en realidad
es hijo del actor también. No tendrá acceso
a estas variables porque nuestro personaje no
es hijo de nuestro maestro bp, pero nuestro hijo lo siento. Bp Child Blueprint es un
hijo del maestro BP. Entonces si vamos al
o si volvemos a nuestro maestro aquí y compilamos la
mayoría guarda eso también. Después volvemos a nuestro hijo bp. Entramos en Event Graph. Podemos encender eso, mostrar variables
heredadas. De acuerdo, Entonces el desplegable,
ves que
tenemos todas las variables activas
porque a pesar de que el maestro de
BP es nuestro padre, el padre del
maestro BP es el actor. Entonces nuestro hijo todavía tiene todas
las cosas que hacen los actores, todavía tiene todas sus variables
son otras funciones. Pero luego añadimos en lo que
nuestros padres consiguieron también. Para que puedas ver nuestras variables de
ejemplo que podemos usar eso como
si lo hubiéramos creado. Podemos configurarlo
bien en nuestro hijo BP. También podemos usar esa función que
creamos en el maestro. Así que si solo hago clic derecho y busqué por ejemplo función, se
puede ver que puedo
crear la
función de ejemplo y cualquier código
que teníamos dentro nuestra función aquí se
ejecutaría igual que si
lohabíamos llamado en nuestro plan maestro de Event Graph para que podamos acceder a eso
en nuestro blueprint. Y si recuerdas de
nuestro video de funciones, podemos anular funciones
de nuestros planos padre. Así que si vamos a anular en
la pestaña de funciones aquí, se
puede ver que tenemos
todas estas funciones que podemos anular desde nuestro actor. Pero también tenemos
al maestro de BP. Y se puede ver que tenemos
nuestra función de ejemplo aquí. Si hago clic en esto,
podemos tomar el control y cambiar qué código se va a ejecutar
cada vez que se ejecute nuestra
función de ejemplo, también
tenemos esta nota
extra aquí, y esto básicamente hace que el código que está en la ejecución del plan de los
padres. Y entonces podríamos tener código
adicional si quisiéramos. También podríamos simplemente eliminar
este nodo y
ejecutar completamente nuestro propio código personalizado para siempre que
funcione el ejemplo como RAM. Ahora, el código que se está corriendo en el plano maestro
también se va a ejecutar para
nuestro Child Blueprint. Entonces te está dando un ejemplo. Voy a ir al
Event Graph it y sólo
voy a
borrar estos nodos. Voy a borrar estos también. Acaban de venir con nuevos
actores que se crean. Por lo que se puede ver nuestro hijo
ahora no tiene código en él. Podemos eliminar eso, anular algunos sólo
va a seleccionar la función de
ejemplo
aquí, eliminar eso. Eso en realidad no
elimina la función. Si ves, todavía puedo acceder a la función que acaba de
borrar son Override of it. Así que cualquier código personalizado que podríamos haber añadido
a la anulación
ahora se ha ido y sólo vamos a utilizar lo que nuestro blueprint maestro, um, tiene en esa función. Entonces si borro eso, pueden
ver que no tenemos ningún
código en absoluto en nuestro hijo. Bp compilará y guardará esto. Ahora si voy a mi maestro de BP y voy a crear
una nota de reproducción inicial. Y agregaré una
cadena de impresión a esto. Entonces sólo algo sencillo
que nos deja hola. Entonces ahora el único código
que tenemos en
ambos planos es este comenzar a jugar y
luego una cadena de impresión. Ahora, si voy al mapa de
tercera persona y arrastro en mi hijo BP, y simplemente colocaré
eso ahí dentro. Ahora recuerden, nuestro hijo no tiene ningún código en él en absoluto. Pero cuando le pegue a Play,
verás que está imprimiendo hola, pesar de que
no tiene código ahí. Ahora eso es porque
el niño
seguirá corriendo el código que
existe en el padre. Por lo que nuestros padres dicen que
comiencen a jugar cadena de impresión. Por lo que voy niño va a hacer lo mismo. Ahora, al igual que nuestras funciones, también
podemos anular eventos. Entonces en mi hijo ahora, si creo un nuevo start
play de m, no
me conectaré a
nada a la altura de esto. Yo simplemente lo dejaría así. Voy a compilar. Y ahora cuando golpeo play y veo que No Print
String sucede. Y eso es porque hemos, le
estamos diciendo al
motor que nuestro hijo anula a sus padres
comienzan a jugar nodo. Entonces ya no correrá esto
para nuestro hijo. Ejecutaremos nuestro propio código
personalizado para que
podamos agregar otra cadena de impresión
y podríamos decir esto, esto, esto es una prueba. Y ahora esto se ejecutará
en lugar de que esto se ejecute. Entonces si le pegamos a Play,
ves que esto es una prueba. Y otra vez, si me quito eso, empiezo a jugar fuera de mi hijo, ya
verás que empezará a
imprimir el hola otra vez. Ahora, tal vez te estés preguntando cuál es
el punto de la
herencia de Blueprint. ¿ Por qué no
tendrías todo este código y cada uno
de los planos? Bueno, la razón principal
es porque es más difícil de
mantener si tenías todo este código y dices 20 planos diferentes y hubo un bug con ese código. Tendrías que pasar
y cambiar 20 planos. O si quisieras agregar
una nueva característica, de nuevo, tendrías que revisar todos estos 20 planos
y cambiar el código. Ahora con la herencia de blueprint, puedes tener un blueprint
maestro que tenga todo el
código que necesitas en él. Y luego los planos de los niños
que luego heredan ese código. Y si tal vez uno de
los planos infantiles necesitara hacer algo especial, pero la mayor parte del código tendría que
seguir siendo el mismo. Podrías ir al plano de ese
niño. Podría anular, digamos, una función o un evento y
tener código personalizado que se ejecute solo en ese niño sin
afectar a todos
los demás hijos o afectar
el blueprint maestro. Un buen ejemplo de ello
serían cosas como armas. Si tuvieras 20
armas diferentes en tu juego, no
querrías tener todo el código para disparar, apuntar, recargar en cada plano de
arma porque si
quisieras cambiar
cualquiera de ese código o arreglar un error o agregar una característica, tendrías que pasar por 20 o 30 planos haciendo lo mismo una y
otra vez. Mientras que si
solo tuvieras un plano maestro que tuviera todo tu
puntería, recargando código. Todas las armas son hijos
de ese modelo maestro. Puedes cambiarlo todo en un
solo lugar y eso
afectará a todos los planos del
niño. Ahora, la herencia también cubre los
componentes de los planos maestros. Entonces, si agregamos un nuevo componente a nuestro blueprint maestro aquí, solo
voy a usar un componente de malla
estática. Verás que tenemos
un componente de malla estática. Ahora podemos establecer una malla. Voy a poner el mío
a un cubo por ejemplo. Y solo pondré un
cubo y compilaré. Entonces ahora tenemos un cubo en
nuestro plan maestro. Vamos al Plano del Niño. Se puede ver que también
tenemos un cubo en la ventana gráfica. Ahora, también puede encontrar la malla de estado en
el panel Componentes. Si seleccionamos eso,
en realidad podemos cambiar
nuestro cubo destrozado. Para que pueda cambiar esto
para decir, un peine. Entonces si busco cono, puedo configurar esto a un cono. Ahora, nuestro hijo tiene una malla
de pila
diferente de nuestro modelo maestro. Podríamos hacer lo mismo con múltiples planos infantiles
de nuestro modelo más grande. Di si tenías armas Meli, por
ejemplo, y agregas un arma cuerpo a cuerpo maestra
con todo el código. Y entonces podrías tener
planos infantiles de la misma por ejemplo, un cuchillo y actúa una
lanza y así sucesivamente. Y podrías cambiar la malla de
pila para cada uno de esos y hacer que todos sigan
teniendo el código
del blueprint maestro. Eso va a ser todo
por esta lección. Esperemos que tengas una mejor
comprensión de la herencia en el motor y también de
lo que realmente es útil.
17. Fundamentos (fundición): Oigan a todos, En esta
lección vamos a estar echando un vistazo al nodo de costos. Así que antes de empezar, recomiendo encarecidamente si
aún no has visto la lección
variable de actores y objetos. Y también nuestra lección anterior sobre la herencia de
planos
como tipo
de fundición se conecta con ambos
sistemas. Entonces, para empezar,
solo vamos a crear un nuevo plan como lo
hemos hecho antes. Sólo Blueprint Class, se lo
venderemos a un actor. Y yo sólo voy a
llamar a este gatillo, que va a
configurar una caja básica que nuestro personaje puede superponerse. Y usaremos esos eventos
superpuestos para ejecutar algunas notas de casting. Entonces abriremos nuestro gatillo. Y sólo voy a
agregar un nuevo componente, y este será un componente de
colisión de caja. Yo sólo voy a
mover esto hacia arriba para que cuando esté en el mundo
sean corregibles, sean capaces de solaparlo. Y también estoy con
nuestra caja seleccionada. Voy a buscar escondidos. Y voy a desmarcar juego final
oculto aquí, sólo para que podamos ver nuestra caja mientras estamos
jugando en el juego. Entonces en el gráfico de eventos, sólo
voy a
eliminar estos nodos son clic derecho y
buscar comenzar solapamiento. Voy a usar el
evento empieza a solaparse. Y si no recuerdas
de nuestras lecciones anteriores, este nodo correrá siempre que
algún actor se superponga a nuestro actor. Por lo que los solapamientos son gatillo. Esto correrá y nos
dará una referencia a cualquier actor por encima de la lactosa. Por lo que la salida de nuestro nodo de inicio solapamiento
es un acto de referencia. Y si recuerdas de eso, podemos usar esto para acceder a cualquiera de nuestras funciones o
variables o eventos de actor. Pero a lo mejor queríamos
acceder a información que estaba en nuestro personaje cuando se
superpone son gatillo. Ahora para hacer esto, podemos usar costo. Entonces si me arrasto de mi
otro actor aquí y
busco costo a tercera persona. Se puede ver que podemos causar a la BP Third PersonCharacter. Entonces voy a dar click en eso y eso nos
crea un auto nuevo nevado. Y esencialmente lo que hace
un coche nieve
es que toma en un objeto
y comprueba, ¿es el objeto que
estamos tratando de disfrazar? Entonces tomando nuestra referencia actor, que podría ser cualquier cosa
que exista en el mundo, este nodo de costos lo comprobará, es un personaje en tercera persona? Si es así, entonces nuestro pin de
ejecución de salida superior se ejecutará. Y podemos ejecutar código o el
costo fallido se ejecutaría, y también podemos ejecutar código
diferente. También nos da acceso a un tipo de
variable de carácter en tercera persona. Ahora, esto sólo será
válido si el Elenco tiene éxito. Y lo que quiero decir con válido es
que sólo podemos obtener información a través de esta variable
si el Elenco tiene éxito. Entonces si por ejemplo, tal vez tuvieras un vehículo cuando se ejecutara el nivel que atropelló nuestro gatillo, si no fuera un personaje en
tercera persona nivel que atropelló nuestro gatillo,
si no fuera un personaje en
tercera persona
que el costo falló. Y si tratamos de obtener alguna información de nuestra salida
variable aquí, usando código que se está
ejecutando desde el costo fallido, en realidad
obtendríamos errores
porque el costo había fallado. Por lo que en realidad no podemos
recuperar ninguna información de esta salida
Third PersonCharacter. Entonces, un ejemplo de
cómo podemos acceder a información de nuestro carácter en
tercera persona usando esta salida variable es que podemos ir a nuestro
Third PersonCharacter. Y sólo voy a
crear una nueva historia que fue un accidente,
una nueva variable. Y a esto lo llamaremos salud
actual. Y lo establecemos en un entero. Sólo voy a
eliminar esta nueva macro. Y vamos a guardar esto ahora y volver a
nuestro plano de gatillo. Y si nos arrastramos, ahora podemos buscar obtener salud actual. Puede ver que ahora
podemos acceder a nuestra
variable de estado actual a través del pin de salida en nuestro nodo de costo. Y si añadimos en
digamos, una cadena de impresión tal que en una cadena de
impresión aquí. Y fíjate que
lo estoy conectando al PIM superior porque solo queremos que se ejecute esta cadena de
impresión. Si nuestro costo tiene éxito, nos arrastraremos de la salud
actual y solo conectaremos eso a
nuestra cadena de impresión aquí. Y volveré a mi
TercerPersonaPersonaje, selecciona mi salud actual. Yo sólo voy a fijar la salud
actual para decir 50. Entonces ahora cuando juguemos y
atropelle mi gatillo, imprimirá cadena el valor de nuestra salud. Así que golpeó Play. Estamos repasando mi
gatillo y se puede ver que está imprimiendo valor 50. Ahora si recuerdas de
nuestras lecciones anteriores sobre eventos y funciones, también
podemos llamar a aquellos que
usan nuestro nodo de costos. Entonces, si salimos del editor de planos, volvamos a nuestro personaje. Sólo voy a crear
una nueva función o enfriar esta función de ejemplo. Y agregaremos algo
así como qué ensillarlos, imprimir cuerda y pelo
porque es fácil de ver y función de ejemplo de juego. Entonces esta es una función dentro nuestro
plano de ThirdPersonCharacter, y podemos llamarla
desde nuestro disparador. Así que sólo voy a compilar, volver a mi gatillo aquí, borrará este código por ahora. Arrastraremos desde el pin
Third PersonCharacter aquí y buscaremos, por ejemplo, la función. Ya ves que ahora podemos acceder a nuestra función que a
pesar de que está en el
Third PersonCharacter. Y cuando golpeamos play,
pasamos por encima de nuestro gatillo. Verás que
el código interior en realidad
se está ejecutando como si esa función se ejecutara dentro
del ThirdPersonCharacter. Lo mismo se puede
hacer con los eventos también. Entonces, si volvemos a nuestro
Third PersonCharacter, entonces vamos al Event Graph
y creamos un nuevo cliente. Entonces solo acercaré aquí
y llamaré a este ejemplo. Y sólo añadiremos otra cadena de
impresión aquí. Y vamos a poner la cadena de
dos ejemplo de evento. Ahora cuando volvamos
a nuestro gatillo. Podemos eliminar la
función de ejemplo y
arrastraremos hacia fuera y podremos
buscar, por ejemplo. Ya ven que ahora puedo
acceder a ese ejemplo de ellos. Y luego cuando golpeemos play,
atropelle nuestro gatillo, verá que ahora está
imprimiendo
la cadena de impresión de eventos de ejemplo. Ahora también quiero
darles un ejemplo de cuando falla un elenco. Entonces para hacer eso,
saldremos del juego. Y sólo voy a crear
una nueva clase de blueprint, que se la envía al actor. Y yo sólo voy a
llamarlo EP ejemplo de subrayado. Y eso lo abriremos y
solo lo compilaremos y lo guardaremos. Voy a arrastrarlo. Entonces está en la pestaña superior aquí con el resto
de nuestros planos. Y voy a
crear una nueva variable. Y yo sólo voy
a llamar a esta Prueba. Y vamos a compilar. Siguiente. Vamos a ir a
nuestro gatillo aquí, y vamos a
quitar estas notas. El costo del
personaje en tercera persona lo arrastramos de nuestra
salida de otro actor y costará a nuestro blueprint de ejemplo bp. Y vamos a arrastrar hacia fuera de
la variable de ejemplo BP. Y sí nos hacen la prueba. Yo sólo voy a
correr una cadena de impresión. Y vamos a imprimir cadena si ese valor es
o no cierto. Entonces ahora cuando compilemos
y atropellemos nuestra caja, verás que
no está pasando nada. Y la razón de eso
es nuestro personaje es lo que se está superponiendo a nuestra caja
y no es un ejemplo de BP. Por lo que nuestro costo está fallando. Si tenemos que salir ahora,
vuelve a nuestro gatillo y agregamos nueva cadena de impresión
al costo fallido. Verás que se imprime el
Print String. Entonces si lo atropellamos ahora, se
puede ver que está
imprimiendo hola, y eso es porque el
cartílago está fallando. El objeto de entrada a nuestro
nodo de costo no es un ejemplo de BP. Por lo que el costo ha fracasado. Ahora, si fuera a tratar de
obtener información de nuestro bp variable pin hair
cuando falla el yeso. Así que en realidad estamos obtener un error y te voy a mostrar
cómo se
ve eso si tratamos de acceder a
nuestra variable de prueba aquí, cuando el costo falla, enganchamos compilar y
vamos a ejecutar sobre la caja. Y gay, puedes ver que el nodo print string
todavía se está ejecutando y se está ejecutando false porque ese es solo el
valor predeterminado para las variables. Pero si salimos ahora se puede ver que ahora estoy
recibiendo un error. Y esencialmente esto solo
nos
está diciendo que nuestro costo fracasó. Seguimos tratando de acceder a información desde ella a
pesar de que falló. Entonces sabemos que estamos accediendo a nuestra variable de
ejemplo bp aquí, pero el costo está fallado. Entonces eso es
algo que hay que tener en cuenta al trabajar
con notas de costos. Simplemente voy a
cambiar esto de nuevo a nuestro Third PersonCharacter para que
podamos hacer algunas cosas más. Entonces el costo a tercera persona, y lo conectaremos
así y lo compilaremos. Ahora, es posible que queramos almacenar una
referencia al acto que se superpone que gatillo para
usarlo más adelante con código. Entonces hay algunas maneras en
que podríamos hacer esto. Podríamos arrastrarnos
de nuestro otro actor aquí y sí promover una variable. Y eso
nos creará una nueva variable. Y sólo lo dejaré llamado
otro actor y está configurado un acto para escribir porque ese es el tipo de
pin que es este. Podríamos poner esto aquí. Y luego más adelante tal vez
teníamos algún otro código
que estábamos ejecutando. Posteriormente, podríamos acceder a nuestro Third PersonCharacter simplemente
obteniendo nuestra otra variable de
actor, arrastrando el costo
a la tercera persona, de
nuevo, para costar al personaje de
tercera persona. Y de nuevo, podríamos acceder a esas variables y funciones
y cosas que lo necesitamos. Pero también podríamos simplemente almacenar la referencia a nuestra tercera
persona en lugar del actor. Y la razón de
esto es que
realmente no queremos echar a nuestro plan cada vez que necesitamos
información de él. Está bien una o dos veces, pero pueden empezar a sumar
y afectar el rendimiento. Entonces lo que podríamos
hacer en su lugar es que podríamos deshacernos de nuestra otra variable
actor aquí. Porque sólo quiero que
mi código lo ejecute
si es un
personaje en tercera persona de todos modos. Por lo que no hay razón real para
almacenar la referencia real. Solo podemos almacenar la referencia del
personaje. Entonces, para hacer eso, podemos eliminar
nuestra variable anterior. Voy a arrastrar hacia fuera de
mi Third PersonCharacter, do promueve variable. Y lo dejaremos llamado ThirdPersonCharacter
y veremos que
también lo establece el tipo de variable de
caracteres de tercera persona BP. Por lo que sólo vamos a guardar
eso y compilar. Así que ahora podemos acceder a todas
las variables y funciones
usando esta variable. Ahora, no tenemos que costar otro tiempo para acceder a
esa información. Entonces podría arrastrarme
y podría obtener mi salud actual por ejemplo, o podría acceder a esos
ejemplos función o evento. Ahora, hasta ahora
acabamos de costar directamente
al Third PersonCharacter
Blueprint porque eso es lo que es nuestro personaje. Pero debido a nuestro plano de
personaje, también
hay un hijo de
los tipos de personaje, por lo que su clase padre
tiene carácter. También podríamos costar
a carácter. Entonces si borro estas
notas aquí por ahora, vamos a arrastrar hacia fuera de
nuestro actor general y costo para el personaje. Utilizará una nota de carácter de costo. Y sólo voy a
agregar otra cadena de impresión aquí a la pluma superior. Y esto será si nuestro
costo tiene éxito, así que ya termino. Entonces imprimiré pantalla dm
correrá si nuestro costo tiene éxito, y fallará, correrá
si nuestros autos fallan, y si atropellamos nuestra caja ahora en el mundo tiene carácter. Se puede ver que Don está corriendo porque nuestro personaje o nuestro terceroPersonaPersonaje también
es un personaje y sus paredes y nuestro
personaje también es importante. Por lo que podríamos volver a nuestro
gatillo otra vez y reemplazar esto con un costo a ****. Y al igual que antes,
conectaré el exitoso hasta W1 y el fallido hasta
el File Print String. Y verás cuando volvamos a
atropellar la caja, que sigue teniendo éxito, porque nuestro personaje
es hijo del ****. Ahora si volvemos a nuestro
gatillo y tratamos de acceder,
digamos, a nuestra variable
de salud desde el **** costo aquí. Entonces si me arrasto y no conseguí. Salud actual, se puede ver que no podemos
acceder a esa variable porque esa variable no
existe en la clase ****. Sólo existe en nuestro personaje en
tercera persona. Entonces no podemos acceder a nada de eso, ninguna de esas funciones
o eventos o variables que creamos
ahí a través del ****. Y eso es lo mismo para
nuestros costos de carácter. Por lo que si arrastro hacia fuera y
costo carácter de
nuevo, de nuevo, sólo podremos
acceder a variables y
funciones y eventos. Existen en la clase de
caracteres, no nada que exista en
nuestro Third PersonCharacter. Y esto es útil
porque tal vez tenías cinco personajes diferentes
en tu juego y todos
tenían sus propios planos
individuales. Querías tu
gatillo solo para comprobar, es el personaje superponiéndome, en lugar de
tener que tener un costo por cada único
blueprint de caracteres posible que se superpone, solo
puedes hacer un nodo de costo, decir
¿es un personaje o el plano
que nos está superponiendo? ¿ Hereda
de un personaje? Si lo hace, pues genial, podemos pasarlo triunfar. Podemos establecer variable, y si necesitamos más adelante, incluso
podemos usar esta salida. Podríamos establecerlo en una variable de
carácter. Y luego más adelante en nuestro
código, si necesitábamos, podríamos lanzar a un blueprint más específico para
que pudiéramos causar hasta el ThirdPersonCharacter
y podríamos acceder a toda su información
como hizo antes. Entonces podríamos hacer ponernos al y podemos conectar esto
hasta nuestra cadena de impresión. Entonces ahora cuando solapamos una casilla, se comprobará, ¿es el
objeto un personaje? Si es así, vamos a establecer
que como una variable. Entonces comprobaremos es el
carácter que hemos solapado. ¿ Es un Tercero PersonaPersonaje? Y si es genial, entonces
imprimiremos cadena en su estado de salud
actual. Entonces, cuando solapemos la caja, se esperaría que su estado
actual se imprima. Por lo que el casting nos permite
costar o tener hijos Los planos cuestan a
su plan padre y el costo aún tendrá éxito. Por lo que les puedo dar
un ejemplo de esto. Podríamos hacer clic con el botón derecho en
nuestro Third PersonCharacter y hacer Create Child Blueprint Class. Yo sólo voy a llamar a
esta tercera persona, en realidad sólo quédate con ese nombre. Voy a abrir ese
show Clase Blueprint arriba. Seleccionaré el
personaje lo malla y sólo lo
voy a
cambiar para decir, el dinero simple aquí. Por lo que podemos decir la
diferencia entre los dos
personajes diferentes o compilar. Y también podemos cambiar el valor
actual de la salud también. Entonces si busco actual, cambiará el valor actual de
salud a 25. Y entraremos a
nuestro nivel aquí, y yo iré a las ventanas. Y queremos los escenarios del mundo. Y esto sólo me
permitirá cambiar qué personaje estamos
usando en el juego. Así que sólo voy
a cambiarlo de
Third PersonCharacter a
Third PersonCharacter child. Es ahora cuando
golpeamos play, puedes ver que ahora estamos usando el personaje infantil en lugar
del personaje original. Y si atropello esa caja, se
puede ver que la salud aún
se está imprimiendo a pesar de que no estamos usando
el ThirdPersonCharacter. Y eso es porque nuestro
TerceroPersonaPersonaje niño es un hijo del
TerceroPersonaPersonaje. Así que en nuestro disparador, cuando llegue a nuestro costo
Third PersonCharacter, tendrá éxito porque nuestro
hijo Third PersonCharacter sigue siendo un Third PersonCharacter es solo un hijo de ese
TerceraPersonaPersonaje. Por lo que todos sus costos
seguirán teniendo éxito. Y si quisiéramos, incluso
podríamos agregar código
personalizado y variables
a nuestro Child Blueprint. Entonces queríamos acceder a esos. Entonces tendríamos que lanzar. O podríamos costar de
nuestro otro actor aquí, podríamos costar
al plano infantil acceder
a esas variables. A modo de ejemplo, si voy a
mi hijo en tercera persona aquí, agregaré una nueva variable,
variable, no una macro. Y vamos a poner esto en, lo
ponemos en un flotador, y
vamos a llamar a esto daño. Ahora cuando compilamos y
volvemos a nuestro trigger, si solo desconecto
este código por ahora, si me arrastro de
mi otro actor y
hago Cast to Third PersonCharacter. Aquí tenemos nuestra nota original de
Third PersonCharacter. Si me arrastro
y trato de obtener ese rally de daños, se
puede ver que no
puedo acceder a ella porque esa variable no existe
en el Third PersonCharacter, sólo existe en el niño
Third PersonCharacter. Entonces, si hemos necesitado
acceder a esa variable, necesitaríamos costar a nuestro hijo
Third PersonCharacter. Por lo que costará a
TerceraPersonaPersonaje niño. Y a partir de eso, podemos
dañarnos valle así. También podemos acceder a ese valor de salud
actual porque nuestro hijo heredó ese valor del modelo de
personaje en tercera persona. Ahora, otra característica de los costos. Note que podemos
cambiarlos para que sean puros. Entonces si recuerdas de
nuestra lección de funciones, tenemos funciones
impuras y puras. Y esencialmente si se ejecuta una función
pura, entonces esta, lo siento, una función
impura. Esta es una función impura. El cálculo sólo
se hará cuando se ejecute, y luego almacena este
tipo de referencia en el lápiz para que podamos acceder a
él varias veces, y este nodo sólo se ejecutará una vez cuando
realmente ejecutemos lo. Ahora si desconecto este nodo de aquí y hago clic derecho, y sí convierto a puro costo. Y ves que se convierte en
un nodo que no
tiene pines de ejecución estando en, plug-in u otro actor aquí. Por lo que ahora, siempre que alguna información haya llegado a través de
este costo, este costo se volverá a ejecutar. Si yo fuera a hacer cadena de impresión, imprimimos cadena la salud
actual, e imprimimos encadenado
el daño actual. Este nodo de costo
funcionaría dos veces por cada pin de salida
que esté conectado a él. tanto que si
convertimos esto de nuevo un costo impuro, así. Ahora nuestra nota de costos solo
se ejecutará una vez. Se ejecutará una vez cuando lo
ejecutemos a través de
los pines de ejecución. Y luego almacena
esa referencia a nuestro
niño Third PersonCharacter en este bolígrafo. Y a pesar de que estamos usando
una cadena de impresión dos veces, este nodo de costo
solo se ejecutará una vez. Entonces esa es la diferencia
entre costos puros e impuros. La mayoría de las veces
estarás usando NPR solo porque son un
poco más óptimos. Y realmente no
quieres que se
ejecute un costo por cada bolígrafo que tengas conectado a él. No olvides que siempre
puedes simplemente promocionar tu pin de salida a una variable. Eso significa que sólo se
va a ejecutar una vez. Y entonces se puede
acceder a ese blueprints variables en el futuro
sin tener que costar. Entonces eso es todo por
nuestra lección de casting. Estaremos usando causas un poco más en futuras lecciones solo porque
hay una parte bastante genial de la codificación y el motor. En nuestra siguiente lección,
vamos a estar echando un vistazo a los despachadores de eventos.
18. Aspectos básicos (despachadores de eventos): Oigan a todos, En esta
lección vamos a estar echando un vistazo a los despachadores de
eventos. Entonces si estabas siguiendo
junto con nuestra última lección, tenía bastantes planos
extra y estaba cambiando algunas
cosas en los ajustes. Entonces todo lo que he hecho
para esta lección es crear una nueva plantilla de tercera
persona. Entonces tenemos un nuevo
comienzo para esta lección. Entonces, para empezar, Event
Dispatcher permite enfriar código en Blueprints sin tener que
conocer
realmente el blueprint específico en el
que estamos llamando al evento. Voy a poner un ejemplo aquí para que podamos probar esto. Entonces empezaré creando
una clase de blueprint. Voy a poner esto a un actor y voy a llamar
a este gatillo. Y también vamos a crear
otra clase de Blueprint, y yo sólo voy a llamar a esto. Entonces abriremos nuestro gatillo. Y como lo hemos hecho antes, sólo
voy a
agregar un componente de
caja de colisión y vamos a compilar. Entonces voy a mover
un poco
mi caja de colisiones para que podamos
atropellarla y el juego. Y voy a buscar oculto y desmarcar
oculto en juego. Entonces vamos a ir
al Event Graph. Y yo sólo voy a
eliminar estos nodos, haga clic derecho y buscar
evento comienzan a superponerse. Como antes. Este evento se ejecuta cuando
algo se superpone. Entonces dispararé y nos
da acceso al actor que nos solapó. Ahora, vamos a ir a nuestro
cubo que acabamos de crear. Así que abre el plano de la cola. Y aquí
sólo voy a agregar un nuevo componente y sólo
voy a buscar cubo. Agregaremos un cubo. Yo sólo voy a
subirlo un poco así. E iremos a nuestra
gráfica de eventos y solo compilaremos. A continuación, vamos a
crear una nueva variable. Sólo voy a dar clic en
el botón de nueva variable. Voy a llamar a este gatillo. Y vamos a establecer
el tipo de variable
al blueprint trigger
que acabamos de crear. Entonces para mí esa es la opción
gatillo aquí. Seleccionaré eso
y los compilaré. Vamos a
seleccionar nuestra
variable trigger y vamos a
tomar en instancia editable. Y si lo recuerdas, eso nos
permitirá cambiar este valor cuando seleccionemos
nuestro cubo en el nivel. Entonces volveremos a compilar, ve a nuestro mapa en tercera persona aquí. Yo sólo voy a
agregar en tres cubos, así que los dibujaré así. Y voy a agregar
un gatillo también. Entonces voy a poner esto aquí. Ahora voy a seleccionar cada
uno de mis cubos y
pueden ver que aquí tenemos
nuestra opción Trigger. Ahora. Eso se debe a que cuando
seleccionamos nuestro disparador, marcamos en instancia editable. Así que si el tuyo no es que
necesitas asegurarte de
que eso está marcado y
luego compilas. Por lo que ahora podemos seleccionar un gatillo. Sólo voy a
hacer clic en el menú desplegable y seleccionar nuestro gatillo aquí. Entonces ese es el
plano del gatillo aquí. Haré esto por cada uno
de nuestros planos de cubo. Y todo lo que estamos haciendo es
simplemente configurar esa
variable de disparo en nuestros cubos a
este disparador específico. Ahora vamos a volver
a nuestro gatillo y realmente crear un nuevo despachador de
eventos. Así que si bajamos aquí y
podrían panel de planos, puedes ver que tenemos despachadores de
eventos y
podemos hacer clic en el
botón New Event Dispatcher aquí o podemos ir a agregar y
seleccionar Evento Despachador. Entonces sólo voy a dar clic en eso. Voy a nombrar a este
ejemplo despachador así. Y vamos a compilar. Ahora, vamos a llamar a
nuestro Despachador de Eventos siempre que un personaje
se superponga o se active. Entonces me voy a arrastrar
fuera de otro actor. Sólo le voy a
costar al personaje. Y eso nos permitirá
comprobar es el
objeto o carácter de entrada. Si es así, entonces podemos ejecutar
el resto de nuestro código. Y me voy a arrastrar desde
mi Despachador de Eventos aquí. Se puede ver que obtenemos
algunas opciones diferentes. Voy a estar
revisando, Pinchando cool. Y si hacemos clic en eso, se
puede ver que obtenemos este nodo y esto causa
nuestro Despachador de Eventos. Ahora, compilaré e
iré a nuestro cubo aquí. Yo sólo voy a
borrar estos dos,
obtenlo y solo quiero mantener el nodo de reproducción inicial
porque vamos a usar eso. Voy a conseguir la variable
gatillo aquí. Voy a alargar. Voy a hacer una señal. Nos desplazaremos hacia abajo
y queremos encontrar el despachador de ejemplo seno. Voy a dar clic en eso. Se puede ver que esto crea
un par de nodos para nosotros. Por lo que crea primero
y luego asigna nodo. Y en realidad
nos crea un nuevo evento personalizado. Y conectaré esto
hasta la jugada inicial. Entonces lo que esto
esencialmente hace es en Begin Play, asignamos, bueno, usamos nuestra
referencia de trigger aquí para asignar nuestro evento para que se ejecute cada vez que se llame al
despacho de ejemplo. Y si recuerdas
en nuestro gatillo, cada vez que un personaje
se superpone o gatillo, llamamos a ese Despachador de Eventos. Y lo que esto
hará es ahora nuestros cubos, los tres ejecutarán
este evento cuando el evento, se llame
al despachador de ejemplo dentro del gatillo
que seleccionamos. Para que pueda ejecutar algún código aquí. Digamos que podríamos hacer establecer
ubicación, ubicación. Queremos ubicación Sac hará que
se mapeen a la ubicación L
más algún valor a la misma. Entonces haremos un add. Ahora diría un 100 en la altura y conectar
hasta la ubicación de noticias. Es ahora cuando entramos en
nuestro gatillo porque hemos ligado este evento. Dos ejemplo, despachador
o gatillo se enfriará y divertido ejemplo con despachador y nuestros cubos se moverán hacia
arriba, así que vamos a golpear play. Ahora, cuando atropello mi gatillo, se
puede ver que
los tres cubos se han movido hacia arriba. Ahora, esto es útil porque
nuestro gatillo en realidad no tiene que decirle a cada uno de
estos cubos que hagan algo. Todo lo que nuestro gatillo está haciendo es
llamar al despachador de ejemplo. Y entonces nuestros cubos están realmente
configurados para hacer algo cuando ese disparador específico
ejecuta el despachador de ejemplo. Entonces esos son los conceptos básicos de cómo funcionan los despachadores de
eventos. Ahora bien, si recuerdan cuando
estábamos en nuestro gatillo aquí y
arrastré en mi despachador de
ejemplo, tenemos algunas opciones
diferentes. Por lo que hemos probado el nodo cool. Eso es lo que ejecuta el
Event Dispatcher y ejecuta cualquier evento que se asigne
al despachador de ejemplo. También tenemos ataduras. Entonces
si creamos eso en C, este es en realidad el mismo
nodo que teníamos en nuestro cubo. Es simplemente que no ha creado
el evento para nosotros. Entonces tal vez ya tuvimos un evento de cliente que
solo queremos enchufar a él. Podemos usar un nodo Bind. Si lo arrastro de nuevo, pueden
ver que tenemos desatar. Esto nos permite conectarnos a un evento y realmente
decirle que ya no
queremos que ese evento se ejecute más para nuestro despachador de
ejemplo. Entonces por ejemplo, si compilamos nuevo y le pego a Play cuando me encuentro con este cubicaje
y los veo subir. Y si vuelvo a encontrarme con ellos, se
puede ver que está
sumando la altura. Ahora, tal vez sólo quería
que eso funcionara una vez. Y después de eso, si el jugador
se encuentra con la pupa, ya no
se moverán hacia arriba. Y yo puedo hacer eso. Para que
pueda ir a mi cubo y puedo arrastrar fuera de mi
gatillo y hacer desatar. Queremos encontrar unbind todos los
eventos de Event Dispatcher, o podemos usar unbind events. Entonces usaremos desvinculación de ellos. Y podemos decir que
queremos que este evento
sea desvinculado de nuestro despachador de
ejemplo. Entonces ahora esto sólo se ejecutará una vez y luego ya
no se ejecutará. Entonces si me topo ahora y
vuelvo y vuelvo corriendo, se
puede ver que
ahora nuestro evento
ya no está ligado a nuestro despachador de
ejemplo. Entonces a pesar de que
aún se está ejecutando, ese evento ya no se está ejecutando. Ahora volviendo a nuestro gatillo, podemos arrastrarnos otra vez. Y también hay una opción de
desvincular todo. Ahora que prácticamente
hace lo mismo. La única diferencia es
que no especificamos evento. Entonces si arrastro hacia fuera y lo
hago desvincular todo, podemos desvincular todos de nuestro despachador de
ejemplo aquí. Se puede ver que no
hay entrada de eventos. Esto simplemente
desvinculará todos los eventos en todos los blueprints que están vinculados
a este despachador de ejemplo. Ahora, los despachadores de eventos también
pueden tener entradas
variables similares
a funciones y eventos. Entonces, si volvemos a nuestro plano de
gatillo aquí, y seleccionamos nuestro despachador de
ejemplo en el panel Detalles. Simplemente me voy a deshacer
de esta búsqueda oculta. Ya verás que
tenemos entradas. Y si hacemos clic en el botón Nuevo
parámetro aquí, podemos agregar nuevas variables. Por lo que podríamos agregar flotadores, booleanos, cualquier
tipo de variable que quieras. Yo sólo voy a agregar
un flotador y voy a configurar esto para que se llame, digamos flotar. Vamos a compilar. Se puede ver que
me está dando un error aquí y no
ha actualizado el nombre de la
variable. A veces esto puede suceder con los despachadores de
eventos.
Note preocupes demasiado. Simplemente puedes hacer clic derecho
en el nodo y nosotros
haremos los nodos de actualización. Y ves
que ahora ha cambiado el nombre a lo que debería
ser y solo podemos compilar. Y ahora no tenemos errores. Ahora eso se agrega
esta entrada variable a nuestro despachador cool. Si vamos a nuestro cubo
ahora y compilamos, se
puede ver que
en realidad se agrega automáticamente esa variable flotante
a nuestro evento aquí. Ahora, lo que sea que establecimos en nuestro Despachador de Eventos
es lo que se
generará aquí en nuestro evento. Entonces si yo, por ejemplo, quería que esto fuera cinco, y fui a nuestro cubo, sólo
voy a hacer,
tenía una cuerda de impresión. Entonces solo agregaré una cadena de
impresión aquí. Y conectaremos la
cadena de impresión al valor float, que mueve estos
a lo largo un poco. Entonces tenemos un poco
más de espacio así. Ahora, cuando este evento se ejecute, imprimirá cualquier
valor que sea nuestro valor flotante,
y eso es establecido por nuestro Despachador de
Eventos. Entonces si lo compilo play
y me encuentro con mi cubo, se
puede ver que los tres de estos cubos están
ejecutando el código, por lo que imprime cadenas 53 veces. Ahora, lo bueno de los despachadores de
eventos es que
podríamos tener muchos otros planos
que también están usando este Despachador de Eventos
que acabamos de configurar. Para que tal vez cuando un
personaje entra a una habitación, tienes un gatillo por el que
caminan. Y tal vez querías que esa
habitación cambiara de alguna manera. Querías que desaparecieran algunos
objetos. Querías que algunos objetos se movieran, tal vez, tal vez un sonido para tocar. Podrías tener todas
esas cosas sucediendo usando solo un despachador de eventos que se ejecuta cuando tu personaje se
superpone a una caja. Ahora regresamos a
nuestro plano de activación, si recuerdas cuando seleccionamos
nuestro Despachador de Eventos aquí, también
tenemos una opción llamada
copia firma de. Y si hago clic en eso, pueden ver que
tenemos algunas opciones
diferentes. Ahora, esencialmente esto
solo le permite copiar
las variables de entrada de
otro despachador de eventos. Entonces hay una gran lista de
ellos aquí porque el motor en realidad viene con un montón de despachadores de eventos incorporados. Entonces esto solo es útil
si lo deseas, en lugar de tener que
agregar manualmente entradas variables. Digamos que
ya tenía un despachador de eventos con las mismas entradas
que desea utilizar. Podrías usar Copiar firma de y simplemente
agregarlas de inmediato. Ahora, para darles un
ejemplo de algunos de los despachadores de eventos en
realidad están integrados en el motor. Podemos hacer clic derecho
y buscar enlazar. Y si nos desplazamos a través de él, se
puede ver que tenemos
algunos eventos de bind incorporados. Entonces, por ejemplo, tenemos
algunos para entradas de mouse, tenemos algunos por daños, y también tenemos
algunos por colisión. En realidad se puede
ver que hay un evento Bind to on
actor comienza a superponerse. Eso es lo mismo que
nuestro evento aquí. Así que en realidad podríamos configurar
esto de manera diferente. Entonces si hago clic en Bind event también. En actos o comenzar solapamiento
obtendrá un nodo de juego de juego. Conecta esto hasta aquí. Ahora podemos eliminar
este evento y crear
nuestro propio evento personalizado que se
ejecutará cada vez que un actor se superponga, lo activaré usando
este Despachador de eventos. Así que puedo hacer clic derecho
o realmente puedo arrastrar hacia fuera del evento
aquí, buscar personalizado. Ya verás que acaba de hacer un evento para nosotros
y en realidad se suman esos actores superpuestos
y otros actores aquí. Por lo que puedo llamar a esto, digamos. Y ahora podemos conectar esto. Podemos tomar el otro pin de actor, enchufa esto a nuestra verificación de
personajes. Entonces ahora esencialmente lo que este código está haciendo
es en Begin Play, vinculamos un evento, que es nuestro evento de superposición aquí, a cuando un actor comienza a
superponerse nuestro gatillo. Y luego cuando un
actor sí se superpone, voy a desencadenar o se ejecutará el
evento de solapamiento. Nos dará el otro actor. Podemos comprobar es que otro
actor que se superpone, yo disparo un personaje. Si lo es, entonces lo llamamos
nuestro ejemplo despacho arriba. Podemos probar si esto está funcionando, así que solo compilaremos
y guardaremos, dale a Play. Y ahora cuando estamos
repasando nuestro gatillo, se
puede ver que ese código
en realidad sigue funcionando como antes. Pero en cambio ahora estamos usando un Event Dispatcher
que en realidad está integrado en el motor. Ahora, hasta ahora solo he estado
usando el Event Dispatcher para enfriar
eventos en otro Blueprint. Entonces, por ejemplo, un cubo aquí ejecuta este evento Cuando el
despachador de ejemplo es ron, pero también podemos usar nuestro Despachador de Eventos
dentro del mismo blueprint. Entonces tal vez quería que se
ejecutara un evento cuando llamo a mi Despachador de
Eventos, en realidad dentro de mi gatillo,
podría hacer eso también. Para poder arrastrar a
mi Despachador de Eventos. Podría hacer, si hacemos
clic en Asignar aquí, hace
lo
mismo que el evento Bind, pero también crea
nuestros eventos personalizados. Entonces si hago clic en asignar,
ves que se ha creado nuestro evento Bind y
el respiradero del cliente. Mientras que si arrastro
hacia fuera y hago enlace, se
puede ver que
simplemente crea el enlace. Entonces eso está a solo un clic de distancia, básicamente creando los dos nodos juntos. Para que podamos hacer eso. Puedo conectar esto aquí arriba. Y voy a mover mi este evento
aquí arriba en c que
nos da una salida de flotación. Porque si recuerdas,
tenemos una entrada de flotación en nuestro despachador de ejemplo. Fresco. Y podríamos ejecutar algún
código dentro de nuestro trigger, y eso se ejecutará cada vez se llame a
nuestro
despachador de ejemplo. Por lo que podría agregar una
pantalla de impresión aquí, decir hola. Ahora, cuando nos topamos con nuestro cubo, verás que imprime
los cinco valores para R en cubos. Y entonces sólo corre una vez. Hola, porque solo
tenemos un gatillo y ese código se está ejecutando
dentro de nuestro trigger. Ahora, algo a
tener en cuenta con estos eventos, despachos es, si ya tengo un
evento personalizado, digamos que crearé una
costumbre de ellos, y tal vez tenga
diferentes entradas. Por lo que sólo voy a
agregar una entrada de flotación. Si traté de conectar esto
al Event Dispatcher para on actor comience a superponerse y vea que en realidad no
puedo conectarlo. Si desconecto esto, se
puede ver que
todavía no lo puedo enchufar. Y eso es porque este evento
personalizado no tiene las entradas ni las salidas. Este nodo se une requiere. Por lo que cualquier evento de cliente al que
conectemos tiene que tener
estas dos variables. Entonces no puedo conectar esto a esto. Puedo conectarlo a nuestro despachador de
ejemplo así, porque tiene un
valor float y eso es lo que se requiere,
por ejemplo, despachador. Por lo que normalmente la forma más fácil si solo tienes un evento Bind, digamos así, es
simplemente arrastrarte, buscar Cliente ellos. Y creará un evento
personalizado para ti. Y agregará cualquiera de las
variables que necesite que tenga
para poder
conectarse a ese despachador. Ahora, como
probablemente te puedas imaginar, si tuvieras muchos de estos, conseguirías estos cables largos yendo por todas partes y
podría ser un poco desordenado. Lo que puedes hacer
en lugar de tener que correr el cable al evento aquí, ella puede alargar y puedes
buscar Crear evento. Y se obtiene
aquí esta pequeña nota que nos permite
seleccionar otro evento. Por lo que podemos dar clic en esto y
se puede ver que sólo me está
dando la opción para cliente vent guión bajo 0 y ejemplo despachador evento
subrayado. Y sólo me está dando esas
opciones porque son los únicos eventos que
tienen nuestro valor float. Y puedo decir select
seleccionará nuestro ejemplo
despachador de ellos así. Ahora puedes ver
que nuestro cable rojo ya
no está conectado hasta
este evento. Pero voy hola reloj de cuerda, todavía
se ejecutan porque esta nota
Crear Evento aquí básicamente conecta el Despachador de Eventos
al evento aquí arriba sin
realmente conectar un cable. Entonces si lo compilamos play, me estoy topando con
nuestro gatillo aquí. Se puede ver que nuestra cadena de
impresión Hello todavía se está
ejecutando a pesar que no está conectada directamente
a ese nodo Bind. Ahora que crear un
nodo de evento en realidad nos permite usar funciones con
despachadores de eventos también. Por lo que si hacemos clic en la opción
desplegable aquí, se
puede ver que
podemos configurarlo a ninguno. También podemos crear una función o evento de
coincidencia. Si haces clic en evento coincidente, solo creará un nuevo evento
personalizado aquí abajo. Y agregará las salidas variables
apropiadas que necesita el Event Dispatcher, y luego también simplemente lo
configurará automáticamente a ese nuevo evento. Por lo que ahora cuando el
lote de eventos corre se acostumbra
a evento se ejecutará. Pero también podemos crear
funciones que se enfríe. En su lugar, podemos hacer clic en Crear una función coincidente y eso nos
crea una nueva función. Esta es solo una función normal
como la que hemos usado antes, es solo que esta
ahora se ejecutará
cada vez que se ejecute nuestro
despachador de ejemplo. Por lo que puedes ver que automáticamente se agrega
un flotador para nosotros. Esto funcionará como una función
normal. Entonces podríamos agregar algún código
a esto si
quisiéramos . Tenía una pantalla de impresión. Ahora para poner esto a funcionar, sabemos que es esta cadena de
impresión la que se está ejecutando. Y ahora cuando golpeamos play, atropello mi gatillo aquí. Se puede ver que los mantiene movimiento como la impresión de
esos cinco valores. Y también es
función de impresión porque esa función dentro de nuestro
gatillo ahora se está ejecutando porque está configurado para estar vinculado al despachador de ejemplo. Entonces eso es todo para nuestra lección de despachadores de
eventos. Hay una gran herramienta
para poder
llamar a un evento y un
blueprint y efectuar muchos otros blueprints y diferentes formas sin
tener que especificar cada blueprint
que desea efectuar.
19. Fundamentos (interfaces): Oigan a todos. En esta
lección vamos a estar hablando de las Interfaces de
Blueprint. Las Interfaces de Blueprint nos permiten llamar
a funciones y eventos en otros Blueprints
sin tener costar
a ese tipo de blueprint. Ahora puede que hayas notado
que todavía tengo el cubo
y los planos
del gatillo de mi lección anterior. Simplemente me las voy a quedar porque
las voy a reutilizar para un ejemplo
un poco más adelante. Entonces, para empezar,
vamos a crear una nueva Interfaz de
Blueprint. Si hago clic derecho aquí y
voy a los planos
, salgo y bajaremos
a Blueprint Interface. Yo sólo voy a
llamar a la mina BP on score ejemplo
interfaz así. Y haremos doble clic en
él para abrirlo. Y yo sólo voy a arrastrar el mío y agregarlo a la pestaña aquí arriba. Por lo que como pueden ver,
tenemos una nueva interfaz de usuario. Tenemos esta gran gráfica de eventos que en realidad no la
vamos a usar realmente. No podemos hacer ninguna
edición aquí ni agregar ningún código es solo una vista previa de
las funciones que agregamos. Y puedes ver que tenemos
nuestra pestaña de funciones por aquí donde podemos crear
y eliminar funciones. Y si tenemos una
función seleccionada, podemos agregar entradas y salidas. Por lo que comenzaremos renombrando la función predeterminada que viene con nuestra interfaz de ejemplo. Entonces sólo voy
a renombrar la mía para disminuir la salud así. Y compilaremos y
volveremos aquí en un momento. Pero quiero mostrarles cómo se la función de disminución de la salud ve
la función de disminución de la saluden nuestro plano de
personajes. Entonces iremos al
ThirdPersonCharacter. Haré clic derecho y
buscaré disminución de la salud. Y se puede ver que
esto sube o disminuye el nodo de mensaje de salud. Ahora, debido a que hemos creado
esto en nuestra interfaz de ejemplo, esto aparecerá
en cada blueprint si hacemos clic derecho
y lo buscamos. Entonces si creo esto, se
puede ver que se
parece mucho al nodo cool que
usamos con los eventos. Con un par de diferencias. Tenemos este ícono en la esquina
superior derecha, y también tenemos
la entrada objetivo, pero no dice
auto al lado. En realidad tenemos que
proporcionar un objetivo. Y esto es sólo
el, el plano o
la referencia al plano que queremos
llamar nuestra disminución.
Cómofuncionan. Ahora, si yo fuera a
ejecutar este nodo ahora, así que si consigo el Plano y conecto esto hasta
una disminución nuestra función, no pasaría nada porque no
hemos proporcionado un target. Pero si nos arrastramos y nos
hacemos uno mismo como objetivo, nada pasaría todavía, porque en
realidad no hemos implementado esta función en nuestro personaje en
tercera persona. Entonces para hacer eso, necesitamos simplemente
compilar primero, iremos a la configuración de clase. Y bajo
Interfaces implementadas, dice
que
actualmente no hay interfaces , pero
podemos agregar una nueva. Entonces haremos clic en Agregar y
buscaremos por ejemplo. Y seleccionaremos
allí la interfaz de
ejemplo . Y luego compilaremos. Ahora si bajamos a la
interfaz es la opción a, se
puede ver que
tenemos disminución de la salud. Ahora, si hacemos doble clic en
esto, en realidad creará
un evento de disminución de salud. Ahora, cuando corremos, cuando nuestro Begin Play
se ejecuta y ejecuta este nodo de disminución de salud cool
con nuestro yo como objetivo. Este evento de aquí abajo correrá. Yo sólo voy a
moverlo hacia arriba más cerca nuestro nodo de juego inicial aquí, que se mueven aquí arriba así. Para que podamos probar esto rápidamente. Simplemente correré una
cadena de impresión y le
pegaremos a play y veremos que
esa pantalla de impresión y que
acabamos de agregar se está ejecutando. Ahora también podemos agregar
entradas y salidas a nuestras funciones de interfaz. Entonces si volvemos a
la interfaz de ejemplo, seleccione nuestra disminución de salud. Voy a agregar una entrada primero, así que agregaré una nueva entrada. Lo dejaré como booleano. Y yo sólo diré que esto es, sólo lo
llamaremos
una prueba por ahora. Se puede ver que la
vista previa está actualizada. Dice que test
compilará y volverá a
nuestro ThirdPersonCharacter. Y puedes ver ahora que
nuestra nota genial aquí, el nodo de recuperación de la
función de interfaz de salud de disminución ahora
tiene una entrada de prueba y nuestro
evento tiene una salida de prueba. Entonces sea cual sea nuestra entrada de prueba, esa será la salida
para nuestro nodo de eventos. Si me pongo esto y lo
enchufo a nuestra cuerda de aquí, cuando lleguemos a play,
verás que imprimirá cadena true, true. Ahora, también podemos agregar salidas a nuestra función
Interface de ejemplo. Entonces si vamos a eso, sólo
voy a presionar escape para aceptar el editor del plan
seleccionará disminuir la salud. Y aquí abajo, podemos
agregar una nueva salida. Entonces agregaré una salida. Hay un bicho en este momento donde ahora mismo se
ha ido todo, grisáceo. Tengo que compilar, luego seleccionar la disminución
nuestra función de nuevo, se
puede ver que ahora
puedo renombrarla y acceder a esta información. A lo mejor para cuando
estés siguiendo esta lección, eso se arreglará. Pero por ahora eso es lo
que hay que hacer. Cuatro salidas. Yo sólo voy a nombrar así a esta salud
actual. Y lo vamos a establecer en un entero
y vamos a compilar esto. Ahora agregar salidas a una función de interfaz en realidad
causará algunos cambios en nuestro blueprint de
caracteres. Así que si volvemos
a nuestro personaje, se
puede ver que nuestro nodo de
eventos ahora tiene una advertencia en él
y en realidad se
convierte a sí mismo en un cliente, entonces ya no es una interfaz eventos
hasta el momento de golpear play ahora. Y se puede ver que
nuestra cadena de impresión
ya no se está ejecutando
porque ese evento en realidad
no se está enfriando. Y si vamos a nuestra disminución la atención médica y hacemos doble clic en ella, se
puede ver que
en realidad
nos ha llevado a lo que
parece una función. Ahora, no ha agregado
nuestro nodo de salida. Podemos agregar eso con solo
hacer clic derecho y hacer retorno. Queremos agregar nodo de retorno. Y ves que ahora nos
está dando una pluma de ejecución de salida con
nuestra salud de corriente de salida. Variable. Es posible que no tengas que hacer eso. Podría simplemente
agregar automáticamente el nodo devuelto por ti, pero a veces no lo hace. Entonces si no lo hace, entonces
puedes iniciarlo tú mismo. Así que ahora esta función en
realidad se ejecutará en lugar Begin porque todavía estamos llamando a la función de
interfaz de disminución de salud. Entonces si conectamos esto
a nuestra salida, ahora, tal vez quiero que emita
un valor de salud actual. Por lo que crearemos un
nuevo valor para la salud. Salud. Cambiamos
esto a un entero. Voy a compilar, voy a
poner esto a un 100. Ahora porque esto es una
disminución cómo la función que he llamado hará que
disminuya en alguna cantidad. Haremos restar y
haremos Set Health. Ahora. Le restaremos cinco a nuestra salud y luego daremos salida al valor de salud actual. Como puedes ver, solo
puedes escribir código aquí como
una función normal. Se comporta igual
que las funciones que hemos usado antes. Entonces ahora si vamos a
nuestro gráfico de eventos, si recuerdas en Begin
Play o disminuimos la salud, la función de
interfaz
se va a enfriar. Tenemos pruebas marcadas, pero no estamos haciendo
nada con eso y disminuimos cómo funcionan, como puedes ver,
no los está enchufado. Y entonces queremos que devuelva
un valor de salud actual. Y puedo agregar una
restricción a esto, que comenzó cadena de impresión aquí. Ahora se disminuyen la
función de salud que teníamos antes. Esto ya no es hacer
nada. Simplemente se ha convertido
en un cliente normal, entonces en realidad podemos
simplemente borrar eso ahora. Y si puedo jalar
y
le pego a Play, se puede ver que
nuestra salud actual ha bajado en cinco. Empezó en un 100
y eso ahora son 95. Por lo que podría estar preguntándose cuál es
el punto de la interfaz. Solo estamos usando estos eventos y funciones
normales. Ahora, lo genial de
ellos es que podemos usarlos en otros Blueprints
sin tener que
lanzar para decir personaje en
primera persona. Entonces lo que voy a hacer es ir
a mi gatillo aquí. Y ahora iré al
Event Graph, este código es de
la lección anterior, así que solo voy a
resaltar y borrar eso. También va a eliminar
esta función también. Y sólo vamos a compilar. Ahora normalmente si
quisiera decir disminuir mi valor de salud y mi
ThirdPersonCharacter,
crearíamos un evento, comenzaríamos solapamiento o
comenzaríamos solapamiento de actor. Y eso corre cada vez que
algo se superpone, dispararé y nos
da acceso
al actor
solapó nuestro gatillo y le costaríamos
al ThirdPersonCharacter como
hicimos en nuestro video de casting. Entonces o
obtendríamos nuestras funciones, digamos que disminuyo la función de salud, o obtendríamos nuestra variable de
salud. Entonces lo
disminuiríamos y estableceríamos el nuevo valor usando
nuestro auto nevado. Pero lo que Blueprint
Interfaces
nos permiten hacer es que en lugar
de tener que lanzar, en realidad
podemos
simplemente arrastrar hacia fuera de otro actor y
podemos buscar una función de
interfaz de salud disminución y crea eso y
ese será nuestro objetivo, cualquiera que sea el solapamiento que dispararé, llamaremos la función de disminución de
salud en
ese plano. Y esto solo se
ejecutará realmente en ese blueprint si hemos implementado la
interfaz como
lo hicimos en nuestro ThirdPersonCharacter. Te acuerdas, configuramos
la interfaz y aquí, si un objeto que no usa RPP ejemplo de
interfaz se superpone, así que dispararé, este
código seguirá ejecutándose, pero simplemente no pasará nada. No obtendremos ningún error,
no tendremos ningún problema. Esto sólo será ignorado y luego se ejecutará
el resto del código. Ahora debido a que nuestro
ThirdPersonCharacter sí usa una
función de disminución de cómo cuando solapamos
nuestro disparador, se ejecutará. Así que si vamos a nuestro personaje en
tercera persona aquí, yo sólo voy a
abrir la función de
celda disminuida y voy a añadir en, o en realidad vamos
a volver a nuestro gatillo aquí. Agregaremos una cadena de impresión
y aquí en su lugar, así que tuve que imprimir una cuerda e imprimiremos
nuestra salud actual. Y porque nuestros personajes, lo que
se va a superponer o desencadenar será
disminuyendo su salud en nuestro personaje y luego conseguiremos nuestros personajes tengan salud actual
para poder compilarlo play. Ahora cuando
atropellamos nuestro gatillo, se
puede ver que nuestra
salud disminuye. Ahora lo bueno de
esto es que no estamos limitados a solo hacer esto en nuestro
ThirdPersonCharacter. Si queríamos otros planos, digamos un vehículo por ejemplo, cuando golpea este gatillo, queremos reducir también
su salud. Podemos hacer eso. Entonces si abrimos nuestro plano de
cubo aquí, por ejemplo,
solo voy a eliminar este código de nuestra lección
anterior. Añadimos una variable de salud. Se lo diremos a un
entero también. Y vamos a establecer el
valor para decir 50. Ahora, ahora mismo, si
nuestro cubo se
solapara nuestro pelo gatillo, no pasaría nada porque
nuestro cubo no tiene implementada
la interfaz de ejemplo.
Entonceseso lo haremos ahora. Agregaremos la
interfaz de ejemplo y compilaremos. Ahora, como puedes ver, la función de
salud disminuida está ahora en
la pestaña Interfaces aquí. Pero si yo fuera un cubo fuera
superponer nuestro gatillo, ahora, todavía no haría nada porque
en realidad no hemos agregado ningún código a la
función de disminución de salud dentro de nuestro cubo. Si abrimos eso, con solo
hacer doble clic arriba, se
puede ver que
tenemos nuestro nodo de retorno y r nota aquí. Y podemos ejecutar código. Entonces si
quisiera, podría hacer salud. Haremos menos. Y decimos, bien menos cinco. Y luego nos pondremos y devolveremos la salud
actual aquí. Así que ahora cuando nuestro cubo
se superpone son trigger, esta función se ejecutará. Tomará el valor de
salud actual menos cinco, establecerá el
valor de salud actual y luego lo devolverá. Entonces si le pegamos a Play, si lo atropello
con mi personaje, se
puede ver que sigue
disminuyendo nuestro valor para la salud. Pero si presiono F8,
que básicamente
me detiene el control de mi personaje y me
permite moverme libremente. Pero el juego sigue en marcha. Puedo seleccionar mi cubo si lo
muevo al gatillo, puede ver
que cuando entra en el gatillo, realidad está
imprimiendo su valor de salud y también
lo está disminuyendo. Así que ojalá eso te dé una idea de cómo funcionan
las Interfaces de Blueprint. Esencialmente nos permiten
crear funciones que se pueden ejecutar en diferentes
planos sin tener que costar a
esos blueprints. Y eso es útil en casos de uso como nuestro gatillo aquí
donde si quieres una caja de Trigger dañe cualquier cosa que entre
en ella que tenga salud, entonces puedes configurarlo
usando Interfaces de Blueprint.
20. Fundamentos (componentes): Oigan a todos. En esta lección
vamos a estar
mirando los planos de los componentes. Ahora si estás siguiendo junto
con la lección anterior, todo lo que he hecho aquí
es simplemente crear una nueva plantilla de tercera persona. Entonces tenemos un nuevo
comienzo para esta lección. Por lo tanto, para comenzar,
usamos componentes para agregar nuevas funcionalidades a los blueprints de
actores. Entonces por ejemplo, en
nuestro nivel aquí, si selecciono el
suelo, por ejemplo, y encima en el panel Detalles, tenemos la pestaña de componentes que nos muestra qué
componentes tiene este actor. Por lo que podemos ver que tiene
un componente de malla estática. Y eso es lo que
nos permite en realidad establecer una malla estática para exhibir en
el mundo para este actor. Ahora, hay una gran cantidad de
diferentes tipos de componentes. Entonces si voy a mi Character
Blueprint por ejemplo, y vamos a la ventana gráfica. Puede ver más en el panel
Componentes que
tenemos algunos tipos diferentes de
componentes aquí también. Entonces, para empezar, nuestro personaje
tiene un componente de cápsula, que es esta área de colisión
en forma de cápsula. Y eso es lo que impide que
nuestro personaje simplemente caiga por el suelo o pueda caminar a
través de paredes. Entonces tenemos un componente de
flecha, que básicamente
está configurado para apuntar en la
dirección hacia adelante para nuestro personaje. Tenemos el componente de malla, que es un componente de
malla esquelética. Y eso nos permite
establecer una malla esquelética. Y la Malla Esquelética es sólo una malla que
puede ser animada. Entonces tenemos nuestro boom de la cámara, y la cámara que está conectada
al boom de la cámara. Y la forma en que funciona es si entre el final del boom de la cámara y el
inicio del ala común, hay un bloqueo de objetos
que se acortará. Y porque nuestra cámara está unida al
extremo de la cámara, boom, eso acercará nuestra
cámara al personaje. Si hay un objeto
bloqueando nuestra cámara, boom. Entonces tenemos nuestra cámara. Y nuestra cámara es justo
lo que nos permite elegir la perspectiva que
ve nuestro jugador cuando está
controlando a este personaje. Ahora, todos los componentes de explicado hasta el momento están
viendo componentes. Estos son componentes que
pueden existir en el mundo. Tienen una ubicación
y a veces
tienen unos objetos visibles para ellos. Pero también tenemos un tipo
diferente de componente que es
puramente código. No tienen ubicación. Entonces ejemplo, si este es nuestro
componente de movimiento de personajes aquí, que viene
incorporado en el motor y incorporado en nuestro plano de
personaje. Y si
quisiéramos, podríamos agregar este componente
a otros planos también. Y esto es lo que maneja el movimiento de
nuestro personaje. La diferencia importante entre un componente de sumidero y
un componente estándar es que un componente estándar
no existe en el mundo, no tiene una ubicación y no
puede ser visible para el jugador. Mientras que ver componentes
puede existir en el mundo. Tienen una ubicación
en una rotación. Y algunos de ellos como nuestro componente
de malla, por ejemplo, sí tienen un
objeto físico en el mundo. Ahora, la razón por la
que usamos componentes en lugar de simplemente poner
todo este código y funcionalidad directamente en
un blueprint actors blueprint es porque podemos
reutilizar componentes en múltiples blueprints que pueden nos ahorra mucho tiempo tener que escribir código una y
otra vez o copiarlo y pegarlo cuando podríamos
hacerlo una vez en un componente, luego reutilizar ese componente
en varios blueprints. De manera similar a cómo
las funciones son útiles, porque podemos cambiar el
código en un solo lugar y éste lo
afecta en todos los lugares en los que se está utilizando
la
función. Si cambiamos el código dentro de
nuestro blueprint de componentes, el blueprint que está
usando ese componente
también se actualizará y
obtendrá esos cambios. Podemos crear nuestros propios Componentes
Blueprint. Todas las que hemos mirado hasta
ahora están
integradas en el motor. Si haces clic hacia fuera,
puedes ir a través y ver todos los componentes
que realmente vienen con el motor. Pero si queremos
crear el nuestro propio, necesitamos ir al Navegador de
Contenido. Haremos clic derecho e
iremos a clase Blueprint. Y luego aquí se puede ver
en la parte inferior tenemos componente
activo
y componente de sumidero. Ahora si recuerdas desde
escena completa los componentes pueden
existir en el mundo. Tienen una ubicación, mientras que los componentes activos no. Son puramente código. Empezaremos creando
un componente activo. Yo sólo voy a llamar a
este VP para subrayar componente
actor así. Y haremos doble clic en
él para abrir. Entonces sólo arrastraré
la pestaña hasta aquí
hasta la barra superior con
los planos. Ahora, es posible que hayas notado que
esta interfaz de usuario se ve un poco diferente a nuestro editor de blueprint
normal. Y como puedes ver, no
tenemos un
panel Componentes porque los componentes pueden tener sus propios
componentes. Sólo los actores pueden. Tampoco tenemos una ventana gráfica porque este es un componente
activo. No tiene componentes
de partes visibles a la misma. Entonces es puramente código. Por lo que sólo tenemos acceso
al código IU relevante. Pasa esas diferencias. No hay mucho
diferente a la codificación y un componente que luego computa
y codifica en un blueprint. Tenemos nuestro nodo o nodo de
juego inicial, por ejemplo, estos están
aquí por defecto, pero podemos acceder a la mayoría de los eventos y funciones que
podemos en nuestro
blueprint activo normal dentro de un componente. Ahora bien, debido a que este es
un componente activo, no
puedo hacer algo
como decir get location y no podemos encontrar el
nodo getLocation porque este actor, este lo siento, componente,
no tiene una ubicación. Por lo que les puedo dar un ejemplo de cómo podemos ejecutar código
y yo componente. Ahora, si me arrastro de
mi gran en juego aquí, sólo
voy a
agregar una cadena de impresión. Por lo que he añadido algún
código a mi componente. Y si puedo sondear y golpear a Play, ya verás que no pasa nada. Ahora, eso es porque en realidad no
he agregado mi nuevo componente activo a ningún blueprints que
exista en mi nivel. Para que ese código no se vaya a ejecutar. Pero si voy a mi
Third PersonCharacter aquí y voy a agregar, y busco componente
actor. Se puede ver que tenemos
nuestro BPR, su componente, ahí es cuando acabamos de
crear o agregar eso. Y se puede ver que
en realidad lo ha añadido a esta segunda mitad
del panel junto con
el movimiento del personaje. Eso se debe a que
ambos son solo componentes activos, no viendo componentes. Pero ahora si compilo y
volvemos a la play y editor, se
puede ver que ahora
ese código dentro nuestro componente se está
ejecutando porque
ahora está unido a
ThirdPersonCharacter y su inicio de juego
correrá cuando se genere el personaje
en
tercera persona o cuando comience
el juego. Ahora también podemos acceder a
funciones, eventos y variables desde
nuestro componente activo dentro del blueprint al
que los agregamos. Entonces si salimos fuera
de juego un editor y vuelvo a mi componente
activo aquí. Sólo voy a añadir
, digamos, una nueva variable. Simplemente llamaremos a esta Prueba. Crearé una nueva
función también, y llamaremos a esta función de
ejemplo. Y también crearé un
evento o crearé un evento, solo
llamaré a este ejemplo. Así que ahora tenemos nuestro evento, función y variable,
y estos están todos dentro de nuestro componente actor. Ahora bien, si vuelvo a mi personaje en
tercera persona aquí, puedo acceder a esas variables
y funciones realmente fácilmente simplemente arrastrando mi componente BPS desde
el panel Componentes. Arrastrar hacia fuera. Y sólo puedo
buscar prueba, por ejemplo. Y puedo conseguir todo el conjunto de esa variable de
prueba si quiero. También puedo acceder a
las funciones para
poder arrastrar hacia fuera y
buscar por ejemplo. Y puedes ver que puedo
acceder a mi
función de ejemplo y a mi evento de ejemplo. Justo así. Ahora un buen ejemplo de un
sistema que tal vez quieras poner en un componente es
algo así como un sistema de salud. Y la razón de
eso es que es posible tengas múltiples actores en tu juego que quisieras
tener un sistema de salud. Ahora, en lugar de
tener que agregar una variable y funciones que
afectan su salud a cada uno de esos actores. Podríamos simplemente crear
un componente de salud y agregar ese componente de salud
a los múltiples actores. Entonces, porque solo podemos acceder a las funciones
y variables desde nuestro componente fácilmente dentro de
cualquier blueprint al que lo agreguemos. Entonces podríamos usar ese
sistema de salud sin tener recrear todas las funciones y variables dentro del plano. Ahora, también podemos acceder y actores componentes de
otros planos. Entonces, si armé rápidamente
un plano de gatillo, solo
voy a
crear un nuevo blueprint. Habrá un actor. Yo sólo voy a llamarlo
gatillo va a abrir eso. Agregaré un componente de
colisión de caja. Colisión de caja. Vamos, voy a
subir un poco esto. Y voy a apagar
oculto en juego. Y después iremos
al Event Graph y eliminaremos estos nodos. Y crearé una
vuelta start over. Si recuerdas, este nodo se ejecuta cada vez que
algo se superpone, dispararé y
nos da acceso al actor que nos solapó. Para que podamos acceder a nuestro componente desde nuestro Third PersonCharacter
y de algunas maneras diferentes. Si me arrasto de otro
actor y la búsqueda le
costará a la persona. Ahora tenemos nuestro nodo de costos, que si recuerdas, hemos
hecho una lección por separado sobre. Y si nos arrastramos, podemos acceder a esto. O voy a personajes en tercera persona, variables, y funciones. Pero también podemos acceder a
sus componentes. Así que si busco componente
actor, nos desplazamos hacia abajo que por lo general en la parte inferior aquí
se puede ver que puedo obtener nuestro componente activo que nos
permite acceder a cualquiera de las funciones y variables de nuestro componente x a través de
nuestro ThirdPersonCharacter. Si me arrasto cuando
busco pruebas, por
ejemplo, se pone
prueba, ahí vamos. Puedo acceder a esa variable. También puedo acceder si
busco, por ejemplo, se puede decir
que puedo acceder a mi evento de ejemplo y a
mi función de ejemplo. Ahora, hay otra
forma de poder acceder a los componentes de
nuestros actores
sin casting. Y podemos hacer eso usando un nodo que si arrastramos hacia fuera
de nuestro actor, buscará
componente por chocar. Ver aquí arriba, si
creo ese nodo. Ahora esencialmente lo que
esto hace es que se necesita una entrada de actor y
establecemos una clase de componente para que pueda buscar el componente actor. Y pondré esto
al componente BP act. Ese es el que creamos. Esto comprobará, ¿ nuestra entrada de actor tiene
este componente? Si lo hace, entonces
generará una referencia a
ese componente aquí. Y si me arrasto, puedo buscar nuevo solo desde
mi variable de prueba. También puedo acceder a esos eventos
y funciones que creamos. Ahora bien, si r no tiene
un componente activo, entonces esta referencia
no será válida. Entonces lo que hacemos cada vez que
usamos este nodo es solo
asegurarnos de que usamos y es
válido nodo así. Por lo que ahora, cuando un objeto se superpone son trigger, este
evento se ejecutará. Se comprobará, ¿este actor
tiene nuestro componente bp act? Entonces si lo hace, daremos
salida a una referencia válida. Por lo que R es válido, correría válido. Y si no lo hace, entonces es válido nodo se
ejecutaría, no es válido. Ahora podemos
tener en realidad múltiples del mismo componente
en los mismos planos. Entonces si voy a mi
personaje en tercera persona aquí y agrego la
app de subrayado BP al componente. De nuevo, vas a ver
que ahora tengo dos de ese componente en mi
Third PersonCharacter. Ahora es posible que queramos acceder a
aquellos que usan un nodo como este. que podamos eliminar
este nodo en su lugar, podemos usar el
componente Get por clase. Y ese es un nodo que funciona más o menos exactamente
igual que nuestro nodo anterior, pero en lugar de una sola salida
variable, es una matriz. Ahora bien, si fuéramos a buscar el componente actor no escolarizado de
BP, esto devolvería
cada componente que coincida con nuestra
clase de componente de nuestro personaje. Y lo devuelve en una matriz. Y si recuerdas
de nuestras matrices de video y re solo nos permite almacenar múltiples
del mismo tipo de variable todo en una sola variable. Y si quisiéramos acceder a una de esas variables
de nuestra matriz, necesitaríamos arrastrar hacia
fuera y usuario obtener nodo. Tenemos que suministrar un índice. Así que esta es la variable dentro de nuestra matriz
queremos acceder. Y luego desde nuestro
nodo get solo podemos arrastrar hacia fuera y buscar,
digamos, consigue prueba. Y debido a que este bolígrafo de aquí
es un bolígrafo de componente BP act, podemos obtener nuestra
variable de prueba o podemos obtener esos ejemplos de función y
evento que creamos anteriormente. Así que eso son sólo algunas
formas en las que se puede acceder a los componentes de
un actor
utilizando estos nodos. Ahora otra característica interesante de los componentes es que en realidad
podemos establecer sus variables
para cada blueprint al
que agregamos el componente. Entonces si vamos a nuestro blueprint de
componentes de app aquí, solo
voy a crear una nueva variable y
voy a llamar a esto decir max health. Así. Lo estableceremos en un entero. Ahora si compilamos
este blueprint y
volvemos a nuestro blueprint
Third PersonCharacter. Simplemente voy a eliminar
este componente extra activo y agregué fue
como el primero. Y se puede ver más
en el panel Detalles, tenemos una categoría por defecto. Y luego aquí
tenemos nuestra variable de prueba. Ese es el booleano que
creamos al principio. Y también tenemos nuestra variable de salud
máxima, y podemos usar estos para establecer esos valores iniciales
serán para nuestro componente de aplicación. Para que pudiera establecer
esto para decir un 100. Y tal vez tenía un segundo plano de
personaje. Sólo usaré el
gatillo como ejemplo. Entonces, si agregamos otro guión bajo
BP, BP, componente de acto BP, no es necesario
usar guiones bajos. Y aquí se puede ver
si uso un guión bajo, no
lo encuentra. Entonces si hago BP x componente y nos deshacemos de este buscador, y selecciono ese componente. Se puede ver que nosotros de nuevo,
tenemos nuestras variables test y max health aquí y
la categoría por defecto. Y ves que está por
defecto a 0 por defecto porque
eso es lo que está configurado dentro de nuestro componente x. Entonces aquí adentro, podríamos establecer
esto para decir, mil. Ahora, si nos instalamos en Begin Play, imprimiremos nuestra salud máxima. Por ejemplo. Ponemos nuestro gatillo y el
nivel y le pegamos a Play. Se puede ver que está imprimiendo
mil y ese es nuestro gatillo haciendo hasta un 100, y ese es nuestro componente de
actuar de personajes haciendo eso. A continuación, solo quería
mostrarles cómo podemos crear
rápidamente un componente de sumidero. Así que solo saldremos de los planetas para hacer clic derecho
y crear un nuevo plano. Y en lugar de componente activo, vamos a hacer clic en componente
visto. Simplemente llamaré a este componente BP
subrayado visto. Y haremos doble clic en
eso para abrirlo. Ahora como puedes ver,
es más o menos lo
mismo que nuestro blueprint de
componentes activos. La única diferencia está
en nuestra clase por defecto. Por lo que se puede ver que en realidad
tenemos una ubicación, rotación y escala. Y si vamos a nuestro
Third PersonCharacter aquí, añadimos un nuevo componente
y luego añadiremos nuestro componente bp seen. Ya verías que tenemos
una ubicación en el, en el Viewport aquí. Podemos moverlo. Si seleccionamos el
componente ahí dentro, ven
que puedo moverlo, puedo colocarlo, podemos
rotarlo y escalarlo. Y si volvemos a
nuestro componente de sumidero, porque es el mismo componente, podemos acceder a su
ubicación
para que podamos buscar consigue ubicación salvaje. Puedes ver que tenemos nuestro nodo
Get World Location. También tenemos la rotación mundial de nuestro
get. Si lo deletreo bien,
rotación que vayamos obtenemos rotación mundial. Y estos funcionan igual que nuestros nodos en nuestros planos
activos. Simplemente obtiene la ubicación y rotación de nuestro componente pecado. Ahora, hasta ahora
solo hemos estado agregando componentes usando el panel
Componentes aquí, pero también podemos agregar componentes durante el juego usando código. Entonces si hago clic derecho aquí y mi Third PersonCharacter
Blueprint, busco comenzar a jugar. Si arrastramos hacia fuera de los padres, busque add y luego el
nombre de nuestros componentes. Entonces BP, puedes ver que
tengo opciones para el componente
BP x y nuestro
BPC y componente. Entonces si hago clic en nuestro componente
x aquí, nos metemos en este nodo. Y esto esencialmente
significa que en Begin Play o cuando
nuestro personaje
desove, agregará un nuevo
componente de acto BP a nuestro personaje. Podemos usar el valor de retorno
aquí como podríamos con si arrastramos en una
referencia como esta, podemos simplemente arrastrar hacia fuera y
buscar, digamos, obtener, probar por ejemplo, podemos
acceder a nuestra variable. También podemos acceder a esas funciones de ejemplo y al evento que
creamos anteriormente. Y si quisiéramos, podríamos crear una variable para
almacenar esta referencia. Entonces si quisiéramos acceder a esta nueva variable más adelante en
nuestro código, podríamos hacer eso. Sólo estamos promocionando una
variable que nos crea una nueva variable que establece
un tipo de componente actúa BP. Podemos nombrar esto para
decir nueva computadora. Y eso nos permite ahora acceder a ese nuevo componente que creamos más adelante, entonces podemos usarlo. Por lo que obtiene un valor máximo. Al seleccionar
esta agregar actina BP, HE en realidad puede ver que obtenemos acceso a ella variables de inicio. Para que pudiéramos establecer nuestro yo máximo a lo que quisiéramos decir 99. Y ahora cuando ese acto ha creado su máximo provechoso, benigno. Y por último, también podemos destruir componentes
durante el juego. Entonces si arrastro mi referencia de
componente activo aquí, sólo voy a eliminar este código. Ahora para destruir componente, lo que tenemos que hacer es arrastrar hacia fuera, buscarlo, destruir. Puedes usar el nodo destruir
componente y eso eliminará por completo el componente del blueprint
durante el juego. Por supuesto, en realidad no
afecta el plano aquí. Entonces no es como si lo
hubieras eliminado, solo destruye el componente durante esa sesión de juego. Entonces eso
es más o menos para componentes. Ojalá tengas una mejor
comprensión de cómo funcionan y para qué se
usan por ahora.
21. Aspectos básicos (controlador de jugadores): Oigan a todos. En esta lección
vamos a estar echando un
vistazo al plano del
controlador del jugador. Ahora en el controlador de juego, se
crea el
blueprint cuando golpeamos play
e iniciamos el juego. Y se crea para cada jugador que existe en el nivel. Y el propósito de un
controlador de jugador es tomar el control de unos planos como
personajes o vehículos, y proporcionarles las entradas que el jugador está presionando. Ahora el mando del jugador
permanece igual para cada jugador a menos que se abra un
nuevo nivel, en cuyo caso se destruye el antiguo
mando y se crea uno nuevo para cuando se abra
el nuevo nivel. Ahora en la plantilla de
caracteres en tercera persona que
hemos abierto aquí, en
realidad no incluye
un controlador de blueprint. Y eso es porque por
defecto solo usa el controlador de reproductor incorporado que viene con el motor, cual está codificado en C plus plus. Por lo que no encontrarás el controlador del jugador en
nuestro panel de planos. Si abrimos nuestro modo de juego, podemos ver donde realmente podemos configurar nuestro controlador de jugador. Entonces si bajamos
y las clases, se
puede ver que tenemos la clase de controlador
plaga actualmente que está configurado
para jugar controlador. Y ese es nuestro controlador de
jugador C plus plus que está
integrado en el motor. También puedes ver que tenemos la
Clase de Peón predeterminada aquí abajo, que está establecida en nuestro bp
Third PersonCharacter. Y esencialmente lo que hace
un modo de juego es que le dice al motor que queremos arrancar
a cada jugador en el juego con este controlador de
jugador, que actualmente es el controlador de jugador C
plus plus. Y este personaje, que es nuestro terceroPersonaPersonaje en el
que hemos estado trabajando, en lecciones anteriores. Pero en realidad podemos crear nuestros propios planos de
controlador de jugador. Entonces para hacer eso, voy a
cerrar mi modo de juego por ahora, y haremos clic derecho en el navegador de
contenido e
iremos a planos. Y vamos a seleccionar controlador
de jugador. Y vamos a nombrar este
ejemplo de BP, control así. Y haremos doble clic en
él para abrirlo. Y yo sólo voy a arrastrar la parte superior aquí hasta la cima
con nuestros otros planos. Ahora, tocaré los controladores. Blueprint se
parece más o menos a un acto de Blueprint. Y eso se debe a que en realidad
es un actor es sólo un hijo del
controlador del jugador también. Entonces en el Viewport
aquí se puede ver eso, pero no tenemos
ningún objeto visible. Por lo general, no
estarás agregando cosas como una malla o algo por el estilo a la ventana gráfica de un
controlador de jugador. También tenemos una cámara aquí. Ahora bien, esta cámara sólo se usa cuando no estamos poseyendo
otro Blueprint. Entonces cuando poseemos son carácter en
tercera persona, por ejemplo, en realidad
usamos la cámara que está
incluida con eso. Si queremos poseer
algún plano, entonces se usa esta cámara. También hay algunos ajustes
adicionales en
los valores predeterminados de clase exclusivos
para el controlador del jugador. Por lo que tenemos cosas relacionadas con el cursor del ratón y eventos
táctiles para móviles, así
como algunas
herramientas de administración de cámaras aquí arriba también. Y si nos dirigimos
al Event Graph, puedes ver que prácticamente
tenemos el diseño predeterminado
que esperarías. Ahora lo que te podrías estar preguntando, ¿qué es lo que realmente
usamos nuestro foro de controlador de reproductor, qué codificaríamos aquí
en lugar de simplemente codificar dentro de
nuestro personaje? Ahora bien, porque voy a jugar a los
controladores se mantiene igual sin importar el
personaje que estemos controlando, podemos almacenar información
aquí que queremos mantener la misma para controlar cosas
diferentes. Entonces, por ejemplo, si tuvieras
un sistema de misiones y
quisieras que tus misiones estuvieran
disponibles todo el tiempo, no importa si posees un personaje o un vehículo
o algo de la cosa, probablemente desea almacenar esa información dentro de
su controlador, ya sea directamente
creando el código dentro del controlador o
agregando componentes
a ese controlador. Otra cosa para la que
los controladores son útiles es para agregar entradas que quieres que permanezcan
iguales sin importar el carácter
que estés controlando. Así que un ejemplo de esto
sería si tuvieras, digamos, un menú de escape en tu juego donde todos tus
ajustes y controles, o probablemente
quisieras que ese botón
funcionara sin importar el personaje que
seas controlando. Así que en lugar de hacer
o agregar ese código en cada blueprint de
caracteres, podemos agregar a la vez
y el controlador, y de esa manera la entrada siempre
estará disponible para el jugador sin importar qué personaje
estén controlando. Entonces, para darles un
ejemplo de lo que quiero decir con la
información permanece igual sin importar qué
personaje estemos controlando
creará una nueva variable. Y yo sólo llamaré a
esta misión una hecha. Y lo dejaremos como booleano. Y voy a compilar. Ahora, volveré al navegador
de contenidos y
crearemos un trigger. Este disparador pondrá a esa
misión un booleano en verdadera. Por lo que sólo vamos a crear un actor. Yo lo llamaré gatillo de misión. Así. Eso lo abriremos. Voy a añadir una
caja de colisión sólo para que podamos solapar a nuestra actor ella. Yo lo moveré hacia arriba. Ahora establece que está oculto en juego
a falso para que podamos sentarnos. Y luego en nuestra gráfica de eventos, voy a usar al
actor comenzar solapamiento. Y si recuerdas, esto correrá cuando
algo se superponga nuestro gatillo y
nos dirá qué actor lo solapó. Entonces se arrastrará desde aquí, le voy a hacer un
costo al personaje. Y a partir de eso, podemos arrastrar
hacia fuera y hacer obtener controlador. Y esto nos da
acceso a cualquier
controlador que esté controlando
este personaje. Ahora bien, esto
será válido o no válido. Por lo que si un personaje no
está siendo controlado, este volverá
y no es válido pen. Por lo que queremos crear
un nodo es válido. De esta manera, si un personaje
que no está siendo controlado, los
solapamientos son trigger,
no obtendremos ningún error. Entonces desde nuestro controlador, necesitamos hacer nuestra
misión variable. Entonces, si nos arrastramos
y la investigación
lograría hacer la misión, no funcionará
porque esto es solo una referencia de
objeto controlador, no una referencia a nuestro controlador de ejemplo
real. Entonces lo que podemos hacer es porque
nuestro controlador de ejemplo es un hijo del
tipo de controlador que podemos arrastrar hacia fuera, podemos echar a ejemplo, controlador conectará
esto hasta es válido. Y luego a partir de eso podemos
alargar y podemos hacer misión
puesta, una hecha. Y podemos poner esto en realidad. Entonces sólo para repasar esto, cuando un actor se superpone. Entonces nuestro gatillo, comprobamos es
ese Acto donde un personaje, si lo es, entonces nos metemos como controlador y
comprobamos, ¿es válido? Entonces básicamente comprobamos, ¿este personaje está
siendo realmente controlado por algo? Si lo es, entonces comprobamos, ¿este controlador es un controlador de ejemplo
BP? Si lo es, entonces establecemos que los controladores de ejemplo
BP misión
uno hecho variable a true. Ahora queremos poder acceder a la información para ver si nuestra
misión se ha cumplido. Entonces iremos a nuestro Third PersonCharacter y
luego al Event Graph. Voy a añadir una nueva entradas de ellos que
buscan entrada evento uno. Y esto sólo se ejecutará cada vez
que presione uno en mi teclado. Ahora, podemos conseguir a
nuestro controlador de la misma manera que lo hicimos en
el gatillo de la misión. Entonces lo
buscaré, consigue controlador. Y usando este nodo, se verificará uno mismo
para un controlador. Entonces estamos en el
TerceraPersonaPersonaje, el autónomo como ****
y nuestro personaje es un poema. Por lo que podemos comprobar
nosotros mismos si tenemos un controlador va a hacer costo a la BP guión bajo
ejemplo controlador. Y a partir de eso podemos hacer
nuestra misión una. Y sólo imprimiremos una cadena
esté o no hecha. Usaremos un nodo de cadena de impresión y conectaremos esto
hasta en cadena. Así.
Simplementevoy a compilar esto. Ahora volveremos a
nuestro mapa en tercera persona, y sólo voy a añadir el gatillo de la misión
a nuestro nivel. Lo haré un
poco más grande, así que solo usaré la herramienta de
re-escala aquí vamos. Y hay una última cosa que
tenemos que hacer antes
de probar esto, y eso es cambiar
nuestro controlador. Por lo que actualmente en el modo de juego en tercera
persona, si abro eso, se
puede ver que el controlador del
jugador
todavía está configurado en controlador de jugador. Tenemos que cambiar esto ahora a
nuestro controlador de ejemplo bp. Ahora, debido a que ese controlador es un hijo del controlador del
jugador, hará todo lo que ese controlador de jugador
haga por defecto. Bell también ahora tenemos nuestra nueva
variable que agregamos. Entonces si presiono Play,
si presiono uno, se
puede ver que está
imprimiendo falso. Pero si me topo con
mi gatillo, ahora, cuando presiono uno, se puede
ver que está imprimiendo verdad. Entonces así es como
podemos configurar y obtener información del controlador de
jugadores de OCT. A continuación, te mostraré
cómo en realidad podemos cambiar qué personaje
estamos controlando. Entonces para hacer esto,
voy a crear un segundo plano de gatillo. Entonces haremos clic derecho y haremos clase
Blueprint
haría un actor, voy a llamar a
esto cambio de zanahoria. Carácter. Gatillo. Eso lo
abriremos y haremos lo mismo. Agregaremos una nueva
caja de colisión, moveremos esto hacia arriba. He puesto esto a su
oculto en juego a falso. Y lo compilaremos e
iremos al Event Graph. Voy a usar el actor
principiante solapamiento aquí. Entonces, para empezar, controlaremos a otro personaje que
coloqué en un nivel. Voy a ir al mapa de tercera
persona aquí, y sólo arrastraré en un
Third PersonCharacter. Yo estoy por aquí. Después volveremos a nuestro gatillo de
cambio de personaje aquí. Y nos arrastraremos
de otro actor y volveremos a lanzar al
personaje. A partir de eso queremos
obtener su controlador va a hacer obtener, obtiene controlador. Entonces vamos a arrastrar hacia
fuera desde Get Controller y buscar poseer y
usar el nodo de proceso. Ahora, te das cuenta que no estoy echando a mi controlador de ejemplo BP. Y eso es porque no
necesitamos hacerlo, porque este
evento posee existe en el controlador del jugador que es el padre de nuestro controlador de
ejemplo. Entonces no hay necesidad
de echarle. Ya podemos acceder a ella. Y conectaremos esto
hasta nuestro nodo de costos. Ahora, esto nos permite
tomar el control de una bomba. Entonces lo que haremos es
arrastraremos hacia fuera de entrada y promoveremos variable. Esto creará una nueva variable
**** para nosotros. Y con esa
variable de punto seleccionada, sólo se va a librar
del buscador. Y tomaremos en
instancia editable. De esa manera cuando seleccionamos a
nuestro personaje, lo cambiamos, cambiamos el gatillo de carácter y
luego nivel podremos
seleccionar un control de puntos.
Porlo que sólo hará eso. Ahora, arrastraré en mi
cambio gatillo de zanahorias. Lo pondré por aquí y lo haré un poco
más grande también así. Ahora, en mi panel de detalles
por aquí, por defecto, se
puede ver en ****, puedo seleccionar un
control de puntos y
simplemente elegiría nuestro
Third PersonCharacter. Entonces ese es el personaje de
aquí, así. Y ahora podemos volver a nuestro personaje de cambio y asegurarnos de que eso esté compilado. Ahora podemos probar esto, así que le pegaremos a play. Entonces tenemos nuestro carácter
normal como antes de que podamos correr por ahí. Si me topo con el
gatillo de mi misión y presiono uno, se
puede ver que esto ahora
está volviendo cierto. Pero si me topo con mi personaje de
cambio, verán
que ahora hemos tomado control de este otro
personaje de aquí. Ves a nuestro viejo personaje de allá todavía corriendo por ahí. Si presiono uno,
verán que nuestra
variable de misión sigue siendo cierta pesar de que estamos controlando
un personaje diferente. Eso se debe a que nuestro controlador de
jugador sigue siendo el mismo plano. Lo fue. Cuando estamos controlando
ese personaje sobre eso. Ahora también podemos tomar el control de personajes que han sido
engendrados durante el juego. Y para hacer eso, si vamos a nuestro
gatillo de cambio de personaje aquí, vamos a eliminar esta variable
poema por ahora, porque vamos a
estar creando un recién nacido usando el spawn activo
del nodo de clase. Ahora, vamos a entrar más en detalle sobre el uso de este
nodo en el futuro. Pero esencialmente, te
permite crear nuevos actores y el
nivel durante el juego, llegamos a clase. Entonces este es el plano
que querríamos engendrar. Entonces para nosotros ese va a ser
el Tercero PersonaPersonaje. Y obtenemos, digamos,
una ubicación de desove. Entonces me arrastraré y
buscaré marca. No queremos
esa, perdón, queremos hacer transformar así. Y eso nos permite establecer
una ubicación y rotación. Tenemos que proporcionar una ubicación para que nuestros personajes puedan engendrar. Por lo que sólo voy a hacer
volver a la ubicación ahora. Vamos a arrastrar hacia fuera de eso y
hacer un nodo de adición sólo para agregar poco de distancia entre
nuestro
engendro de caracteres y cambiar el
código para activar. Entonces agregaré decir 200 y la Z y tal vez 400
y la X así. Entonces eso le dice a nuestro personaje dónde queremos que se genere. Y luego tenemos este valor de
retorno y esto
nos da una referencia al nuevo personaje que
acabamos de engendrar. Ahora porque nuestro personaje es
hijo de un tipo de personaje, y los personajes son
hijos del tipo peón. Podemos enchufar esto directamente a
la importante opción aquí. Así que ahora cuando compilo
y presiono Play, podemos encontrarnos con nuestro gatillo de cambio de
personaje y
verías que genera, digo nuevo personaje
en en su ubicación. Dijimos que hemos tomado el
control de ese personaje. Así es como puedes
generar nuevos personajes y tomar
el control de ellos
con el mando de tu jugador. Ahora lo que tal vez quieras destruir ese personaje sobrante que cuando ya no controlo. Entonces lo que podemos hacer es volver al gatillo
del personaje, un inherente. Tenemos que hacer algunas cosas más. Así que primero necesitamos almacenar una referencia de variable de controlador. Y la razón de eso
es que si te acuerdas, esta es una función pura. Las funciones puras ejecutarán
cada conexión que tengan. Ahora bien, si tratamos de destruir nuestro personaje antes de engendrar
uno nuevo y poseerlo, lo que sucederá es cuando
intentemos poseerlo o obtener nodo
controlador se ejecutará y usará el
objetivo de un carácter. Pero si hemos destruido
ese personaje, entonces ya no
tendrá un controlador que
podamos usar para poseer
el nuevo personaje. Ella es un poco difícil de
conseguir su cabeza alrededor, pero vamos, vamos a arrastrar hacia fuera de get controller y lo
promoveremos a una variable. Lo llamaremos controlador de
solapamiento, así, que
se conecta hasta aquí. Entonces ahora solo estamos
almacenando una referencia
al controlador tan pronto
como lo solapemos. Y en realidad podemos desconectar el objetivo ahora de por aquí. Entonces desde nuestro controlador de superposición solo
podemos arrastrar hacia fuera y hacer que se controlen ****. Esta nota solo
nos permite obtener una referencia a cualquier peón que nuestro
controlador esté controlando. Para que podamos arrastrarnos de eso y lo vamos a destruir. Porque esto
sigue siendo una referencia a nuestro viejo personaje que ya no
somos uno. Para que podamos hacer eso. Luego tomamos nuestra
variable de controlador de
superposición y la conectamos
al objetivo de nuestra posesión. Por lo que tu código debería
verse así. Y podemos compilar esto. Entonces ahora cuando saltamos
al nivel y golpeamos Play, si me topo con mi
gatillo ahora puedes ver que he engendrado
un nuevo personaje. Yo tengo el control de ello, pero viejo personaje que nos
topamos con el ancho de la caja se ha ido. Y si lo hacemos de
nuevo, se puede ver que engendramos otro personaje. Ese viejo personaje se
ha ido de nuevo. Así que eso es lo básico
de cómo puedes engendrar en nuevos personajes
y destruir a los viejos. Ahora, hay otra
nota de la que quiero
hablarles y esas son
las notas sin procesar. Así que si vuelves al disparador de caracteres de
cambio aquí, solo
voy a
eliminar este código ahora porque ya no
necesitamos eso. Y en realidad podemos deshacernos de este controlador de solapamiento porque tampoco
necesitamos eso. Ahora cuando arrastramos hacia fuera
desde el controlador, recuerdas esto
El nodo poseen. También está el nodo
sin procesar. Entonces, si creamos un nodo
sin procesar, es esencialmente solo
le dice
al controlador que deje de controlar
cualquier personaje, vehículo, cualquier **** que
esté controlando. Entonces si conectamos esto ahora, cuando golpeemos esa caja de colisión, vamos a perder el
control de nuestro personaje. Entonces cuando me topo con
eso, se puede ver que mis personajes
se quedaron corriendo en el acto. No puedo controlarlo. No
puedo mover mi cámara. Y eso es porque ya no
controlamos a este personaje ni a
ningún personaje de nuestro nivel. Eso va a ser todo para nuestra lección de controlador de
jugador. Ojalá tengas un poco de una mejor comprensión
de cómo funcionan.
22. Aspectos básicos (GameMode): Oigan a todos. En esta lección
vamos a echar un vistazo más de cerca al tipo de blueprint del
modo de juego. Entonces esencialmente el Modo de Juego
es lo
que le dice al motor con qué controlador queremos que comience
cada jugador, así
como
con qué
personaje queremos que comience
cada jugador en nuestro nivel. Entonces si vamos al modo de juego en
tercera persona que tenemos en nuestro
navegador de contenidos hip y lo abrimos. Se puede ver que tenemos
los valores predeterminados de clase abiertos aquí, y nos da algunas
opciones diferentes bajo las clases. Ahora, sólo vamos
a estar enfocándonos en el controlador y la clase Default
Pawn para esta lección, porque esos son
los principales que estarás cambiando. Estaremos repasando los otros escenarios
en una lección futura. Pero para la clase de
controlador de jugador, este es el
blueprint de controlador de jugador que
se generará para cada jugador
que se una al juego. Ahora actualmente está configurado para BP ejemplo controlador
de nuestra última lección. Pero si quisiéramos,
podríamos dar clic en esto y cambiar esto a otro controlador.
Siquisiéramos. Entonces tenemos la Clase de Peón
por Defecto. Ahora, actualmente se
establece en el BP, personaje en
tercera persona porque
ese es el valor predeterminado. Esta es la plantilla de tercera
persona. Pero si quisiéramos, si
añadimos otro personaje, digamos un vehículo, por ejemplo, con el
que queríamos empezar. En su lugar, podríamos seleccionar
eso aquí en el desplegable. Ahora bien, debido a que este plano realidad
no
tiene ningún código en
él, nos ha dado esta vista. Pero si quieres llegar al editor
principal de planos completo, siempre
puedes
hacer clic en esta opción
aquí arriba para abrir el editor de fotos
principal. Y eso nos da acceso a todos los ajustes
que esperarías, los componentes, el
Event Graph y demás. Ahora el modo de juego sí
existe en el nivel, es un hijo de los tipos de actor, por lo que puede tener componentes. También podemos escribir código en él
como cualquier otro blueprint. También podemos crear
nuestro propio modo de juego. Entonces si vamos al
Navegador de Contenido y simplemente hacemos clic derecho, vamos a Blueprint Class. Y tenemos una opción
para Game Mode base aquí, pero eso es un poco más de una versión reducida
del modo de juego. Por lo que si vamos en todas las clases
y buscamos el Modo de Juego, puedes ver que aquí hay
una opción de Modo de Juego. Prefiero usar este
solo porque viene con un poco más de
funcionalidad incorporada. Por lo que haremos clic en Seleccionar para crear un nuevo blueprint
usando el modo de juego. Y yo sólo voy a llamar a
este BP ejemplo Game Mode. Si hacemos doble clic en
eso, podemos abrirnos. Y yo sólo voy a arrastrar
la pestaña hasta arriba aquí. Ahora, aparte de ser el
blueprint donde podemos configurar nuestro controlador de inicio
y clases de peón, en realidad
podemos agregar
código a nuestro modo de juego. Ahora, por lo general,
añadirías código
al modo de juego que mueve
el juego de alguna manera. Entonces, por ejemplo, si
estoy empezando a jugar, querías un temporizador para
contar atrás y luego el juego terminara o que se abriera
un nuevo mapa. Normalmente harías eso dentro de tu blueprint de modo de juego. Ahora algo útil del plano
de camuflaje es que prácticamente puedes
acceder a él en cualquier lugar. Entonces un ejemplo de esto
es si fuéramos a ir
a nuestra cadera Third PersonCharacter. Ahora tengo algún código sobrante de nuestras lecciones anteriores, así que solo borraremos esto. Y si hacemos clic derecho y lo
buscamos consigue el modo de juego. Podemos usar este nodo para obtener una referencia a nuestro modo de juego
actual. Y actualmente es una salida base de modo de
juego. Entonces, lo que podemos hacer es simplemente arrastrar hacia fuera el costo a nuestro modo de juego de ejemplo. Y la razón por la que podemos
hacer eso es porque nuestro ejemplo Game Mode es
un hijo del modo de juego. Y el Modo de Juego es un hijo
de la base de Game Mode. Por lo que podemos usar ese nodo de
costo para acceder a nuestras funciones y variables
desde nuestro modo de juego de ejemplo. Entonces si vuelvo a mi modo de juego aquí y creo
una nueva variable, solo
voy a
llamar a este nombre de juego. Y voy a poner el
mío a un tipo de nombre. Y voy a poner esto para decir
def mucho por ejemplo. Podemos tirar de esto. Si volvemos a nuestro
Third PersonCharacter, podemos arrastrar y
buscar, olvidar el nombre del juego. Podemos acceder a esa variable. Si agrego adentro, digamos cadena de impresión, podemos simplemente imprimir
cadena que hacia fuera cuando presionamos uno en nuestro teclado. Y vamos a compilar. Ahora, si tuviéramos que
golpear play ahora mismo, esto no funcionaría y
hay algunas razones planas. En realidad aún no hemos configurado nuestro juego para usar nuestro modo de juego de
ejemplo. Y además no hemos configurado nuestro modo de juego para usar a nuestro personaje en
tercera persona. Así que si volvemos a nuestro motor de juego de
ejemplo, y luego los valores predeterminados de costo, podemos establecer nuestra clase de
controlador por defecto y nuestra clase **** predeterminada. Así que voy a establecer
el ****
por defecto el BP ThirdPersonCharacter. Y vamos a establecer la clase de
controlador. Podemos cambiar esto a
nuestro controlador desde nuestra última lección o simplemente
dejarlo como controlador de jugador. Voy a dejar el mío como controlador de
jugador por ahora. Simplemente compilaremos. Entonces tenemos que ir a la configuración
del proyecto. Entonces si voy a editar aquí arriba en la parte superior y vamos a Ajustes
del proyecto, simplemente
arrastraré esto a través
de mi otra pantalla. Entonces necesitamos ir
a mapas y modos. Ahora, mapas y modos también, podemos establecer el modo de
juego predeterminado para nuestra pandilla, y este será
el modo de juego para cada mapa que creamos. Por lo que actualmente está configurado en el modo de juego en
tercera persona. Si cambio esto aquí, quiero seleccionar mi modo de juego de ejemplo
BP. Por lo que ahora cuando creamos nuevo nivel o golpeamos Play
y nuestro nivel actual, usará el modo de juego de
ejemplo
en lugar de un modo de juego en tercera
persona. Ahora, desde aquí, también
podemos establecer nuestra clase **** por defecto y nuestro controlador predeterminado
si quisiéramos, personalmente, prefiero simplemente
ir al propio blueprint. Entonces ve a nuestro ejemplo Game
Mode y cámbialo ahí dentro. Pero si quieres, puedes cambiar esos ajustes
y aquí también. Ahora hay otro
lugar en el que podemos configurar el modo de juego y eso está
en nuestros escenarios mundiales. Entonces si cerramos la configuración de nuestro
proyecto y vamos al mapa de tercera persona, voy a ir a
Windows y voy a marcar la configuración del mundo. Puede que el tuyo ya
esté marcado,
pero el mío no. Entonces yo sólo
voy a asumir eso. Y luego aquí hay ajustes
para este nivel específico. Se puede ver que
tenemos una categoría de modo de juego y podemos anular un modo de juego. Y esto básicamente solo dice
que solo para este nivel, queremos usar un modo de juego
diferente predeterminado que acabamos de
establecer en la configuración de nuestro proyecto. Se puede ver que
esto en realidad está
configurado en nuestro modo de juego en tercera
persona. Entonces, si tuviera que golpear play, a pesar de que hemos
puesto nuestro modo de
juego de ejemplo en la configuración del
proyecto, este solo este nivel por sí solo
en
realidad todavía usaría el modo de juego en
tercera persona. Esta configuración es útil
porque es posible que desee ganar modo que
permita el uso de niveles, aparte de un par
que podría tener un modo de juego específico que desea utilizar
para esos niveles. Por lo que usarías esta
configuración para tomar el control
del Modo de Juego y
venderlo a lo que
quieras para este nivel específico. Así que por ahora, sólo voy
a establecer esto a ninguno, o simplemente podemos hacer clic en
él y seleccionar ninguno. Y eso despejará la anulación del modo de
juego. Entonces ahora cuando golpeamos
play y presionamos uno, se
puede ver que está
imprimiendo death match, que es esa variable que
establecemos dentro de nuestro modo de juego de
ejemplo. Pero podemos acceder a ella muy fácilmente simplemente usando
el
nodo get Game Mode casting a nuestro modo de juego y luego podemos
acceder a esa variable. Y esto mostrará trabajo para
eventos y funciones también. Ahora, por último, solo
quiero cubrir algunas de las funciones incorporadas que
vienen con conseguir más. Entonces, si vamos a nuestro modo de juego de
ejemplo, ahora, si recuerdas con funciones, podemos anular funciones
de nuestros blueprints padres. Entonces si hacemos clic en esta opción de
anulación aquí, puedes ver que aquí tenemos bastantes
funciones, mayoría de ellas provenientes de
nuestra base de modos de juego. Ahora bien, si recuerdas de
nuestra lección de funciones, cuando sobrescribes una función, básicamente
le dice al motor que no quieres que se ejecute el código que está dentro de esta función
en la base del modo de juego, quieres usar tu propio código. Ahora como advertencia, quieres
tener cuidado al anular
estas funciones porque más o menos anular cualquiera de ellas puede
romper tu proyecto. Entonces por ejemplo, si
yo fuera a anular, spawn Default, Peón
que transforman, si hago clic en eso,
se puede ver que tenemos esta función que está
integrada en la base del modo de juego. Y esta función
es la responsable de desovar en
realidad
en el personaje. Entonces si compilo esto
y
le pego a play ahora, se puede ver que ya no
tengo personaje y
ya no he controlado nada. Y eso es todo porque
acabo de anularlo. Función que en realidad
engendra nuestro personaje. Entonces no voy a pasar por
todas estas funciones. Hay bastantes. Algunos de ellos son
autoexplicativos, algunos son un
poco más complejos, pero solo ten en cuenta cuando
estés anulando estas funciones. Si optas por
hacer eso, ten cuidado. Pueden romper tu proyecto con
bastante facilidad porque
estas son como funciones
básicas para
asegurarte de que el juego
realmente funcione. Además, si pasas el
cursor sobre estas funciones, así podrás ver que en realidad obtienes consejos de herramientas
razonablemente decentes que te
dicen exactamente
lo que cada una de estas funciones hace y
es responsable. Así que eso va a ser todo para
nuestra lección de modos de juego. Esperemos que ahora
entiendas un poco más sobre qué
hacen realmente los modos de
juego en el motor y cómo puedes usarlos
en tus proyectos.
23. Aspectos básicos (nodos de utilidad): Oigan a todos. En esta lección
vamos a estar echando un vistazo
de cerca a los nodos de servicios públicos. Los nodos de utilidad son útiles
para algunas cosas diferentes. Nos permiten elegir qué
código se va a ejecutar, con
qué frecuencia se ejecuta ese código. Y también nos pueden ayudar simplemente ordenar el código de nuestro proyecto. Para que puedan ver en
nuestra última lección, en realidad
he
reiniciado solo con una nueva plantilla en
tercera persona. Por lo que es posible que quieras
hacer lo mismo también. Y luego sólo
voy a abrir el TercerPersonaje Persona.- Y he añadido algunos de los nodos de utilidad más comúnmente utilizados aquí que sólo vamos a
pasar en esta lección. Entonces, para empezar, echaremos
un vistazo a la nota de secuencia. Así que si movemos esto aquí
arriba por ahora, ahora una nota de secuencia toma en una entrada de ejecución y tiene
múltiples salidas de ejecución. Podemos agregar nuevas salidas haciendo clic en el botón Agregar
pin aquí. Y podemos eliminarlos
simplemente haciendo clic derecho y seleccionando la opción de quitar pin de
ejecución. La forma en que funciona el
nodo de secuencia es que toma una entrada como digamos,
una jugada inicial. Nota. Podemos conectar
eso aquí arriba. Y ejecutará cualquier código
conectado al entonces 0 PM. Una vez que se ejecuta todo ese
código,
se ejecutará el
código de un y luego el siguiente código y el siguiente código y así sucesivamente hasta que
todos los pines se hayan ejecutado. Ahora, el uso principal para
el nodo de secuencia es simplemente mantener tu código un
poco más organizado. Con planos. Si tienes mucho código, puedes tender a tener estas líneas de código
realmente largas. Un nodo de secuencia te permite simplemente romper eso para que
puedas tener múltiples líneas y mantener las cosas un poco
más organizadas. También puede usar el
nodo de secuencia dentro de una función. Entonces, si creo una nueva función, arrastro hacia fuera cuando busqué secuencia
corta en C, puedo crear un nodo de secuencia. La forma en que funciona
dentro de una función, sólo algo de lo
que quieres estar pendiente. Se dice que tenía algún código aquí arriba, digo que imprimo cadena
y luego si nodo, y luego si tuviera de
pelo un nodo de retorno. Ahora recuerda cuando
ejecutas un nodo de retorno, éste termina la función. Entonces, si este nodo de retorno donde
ejecutar cualquier código
que hayas conectado a cualquiera
de estos otros pines dentro de tu función no se
ejecutaría. Así que eso es algo de lo
que hay que tener en cuenta al usar secuencias
dentro de una función. Por lo que ahora volveremos a nuestro gráfico de eventos y echaremos un
vistazo al nodo de la puerta. Entonces, si eliminamos en
esos pit arriba, de nuevo, permite ejecutar código
que está conectado hasta
la salida a una frecuencia de lo que sean las entradas
al entrenudo. Entonces lo que quiero decir con
eso es si conecto un tick hasta el entrenudo aquí, entonces nuestro código de salida
ejecutará cada tecnología. Y el portón
nos permite esencialmente abrir y cerrar esta salida PM. Entonces si añado un, si hago clic derecho
y tal qué
entrada, entrada de ellos, uno, podemos
crear una entrada de ellos, uno. Conecta eso para abrir, copiar y pegar esto. Ahora selecciona la nota aquí, este pequeño
ícono del teclado y presiona dos, y en realidad solo cambia
esto a un 2-input ahora. Y conecto esto y
solo agregaré una cadena de impresión aquí que estamos haciendo esto todo dentro del personaje en primera persona,
tercera persona. Perdón. Vamos a compilar e
iremos al mapa. Se juega. Ahora puedes ver que mi cadena de
impresión no se está ejecutando. Y si
vuelvo al personaje en
tercera persona aquí y uso la opción de depuración. Se puede ver que el código
para mi tick se está ejecutando. Se va a la puerta,
pero la salida no corre. Ahora si vuelvo a mi
nivel, presiono uno. Se puede ver que esa
cadena de impresión ahora se está ejecutando. Y si volvemos a acudir a nuestra
tercera persona, se
puede ver que el
código de salida ya se está ejecutando. Y eso porque apreté
uno y abrí la puerta. Si presiono dos,
ahora puedo cerrar el portón. Si vuelvo, se puede ver
que el código ya no se está ejecutando y que la
cadena de impresión tampoco se está ejecutando. Ahora hay un
par de otras opciones en nuestro nodo de puerta.
Podemosusar toggle. Entonces esto básicamente
solo se
abrirán las puertas actualmente y queremos
alternar, lo cerrará. Si las puertas están
cerradas actualmente y corremos
toggle, toggle, se
abrirá y luego tenemos una
opción para empezar a cerrar. Por lo que actualmente se inicia cerrado. Pero si desmarco
esto, le pegamos a Play, verás que en realidad
solo empieza a correr en su lugar. Ahora, he estado corriendo
la puerta con un techno. Entonces, si solo salgo
fuera de juego aquí, podríamos usar un temporizador
en lugar de un nodo tecnológico, que probablemente sea
mejor para el rendimiento. Por lo que sólo haremos
un plug-and-play, conectaremos un temporizador. Así que si recuerdas el nodo
setTimeout por evento, arrastramos hacia fuera de esto y creamos un evento personalizado que
llamó un temporizador. Podemos conectar esto hasta
nuestra puerta en lugar de un técnico, es
decir 0.5. Por lo que cada 2.5 esta
vez
correrá, tomará en looping. Ahora, cuando golpeamos play, puedes ver que nuestra cadena Hello
print solo se está ejecutando cada 2.5
porque eso es,
ese temporizador es lo que está
controlando nuestra salida de salida. Por lo que a continuación
pasaremos a nuestro siguiente nodo. Por lo que sólo saldremos
del editor de avión de ahí. Y usaremos la nota do una vez. Ahora, la D quiere saber que
prácticamente hace lo que dice. Toma en una entrada, ejecuta una completa y
luego si se ejecuta de nuevo, no ejecutará el
código completo. Para que podamos probar esto. Si acabo de borrar mi nota de puerta, conectará esto
hasta nuestro temporizador que
acabamos de usar y conectará
esto a completado. Por lo que deberíamos ver nuestra cadena de
impresión uno. Hola una vez y luego
no pasa nada más. Entonces le pegaré a play y
veré que eso pase. Y aunque vaya a mi
Third PersonCharacter aquí, se
puede ver que mi tiempo está corriendo, pero la D una vez lo está bloqueando. Ahora podemos restablecer
este nodo do una vez. Si cojo el pin de aquí
y lo enchufa para reiniciar, y puedo sacar y presionar Play. Se pueden ver holos impresos, pero ya no es imprimir. Si presiono uno, se puede ver
que se imprime de nuevo, pero ahora otra vez lo ha detenido. Entonces tendría que seguir
presionando uno para seguir abriendo y reiniciando
que sí quieren nevado. Al igual que nuestro nodo de puerta, sí
tiene una opción cerrada de acciones. Entonces si me llevo esto
y golpeamos Play, verás que no obtenemos ninguna cadena de impresión
hasta que presione una, que restablece ese nodo. Ahora si salimos del editor del plan, pasaremos al siguiente nodo, que es el do n. y n básicamente hace
lo mismo que yo sí quiero nevado. Pero nos permite controlar cuántas veces
se ejecutará este nodo antes de que
bloquee el código. Entonces si elimino esto, enchufo el enter two timer aquí y la salida a nuestra cadena de
impresión y digo, queremos que este código se ejecute cinco veces y luego
queremos que se detenga. Así que podemos enchufar el contador
en nuestra cadena de impresión aquí, y esto solo
mostrará cuántas veces se ejecuta esto. Si podemos jalar, le pegamos a Play. Se puede ver que está
imprimiendo los números, pero una vez que llega a cinco se
detiene porque ARRA sí, un nodo está bloqueando la salida. Y podemos restablecer
este nodo también. Entonces si tomo el pin de reinicio, enchufa eso a uno, pulsa play, podemos reiniciar, o lo siento, contar hasta diez o cinco, lo siento, entonces presionaremos uno y verás que
puedo reiniciarlo de nuevo. Así que ahora volveremos a nuestro Third PersonCharacter y echaremos un
vistazo al siguiente nodo, que es el nodo flip-flop. Ahora esto básicamente justo cuando
se ejecuta, lo vamos a ejecutar un. entonces si este nodo se
ejecuta de nuevo, se ejecutará B. Y simplemente
seguirá yendo entre estos dos pines cada
vez que lo ejecutes. Así que si conecto esto hasta
nuestro evento de una entrada aquí, y imprimo cadena
de una, podemos hacer, voy a establecer esto a una copia y pegar esto y establecer esto a. Vamos a compilar y jugar. Se puede ver que nuestro temporizador
ahí todavía está funcionando. Pero si presiono uno y
ves a, B, a B.
Así que puedes usar esto para hacer un ciclo
entre dos partes de código. Como nota al margen,
con el flip-flop, probablemente no lo
estés usando cuando tengas un poco más de
confianza con la codificación. Pero puede ser útil si estás creando un
prototipo rápido o algo así. Pero normalmente
querrías usar digamos,
una rama, un nodo y un booleano. Y eso
te daría mucho más control sobre cómo funcionaría este código. Y luego avanzando por último, tenemos nuestros nodos latentes. Y si recuerdas eso es
lo latente porque tienen estos pequeños
símbolos del reloj y las esquinas. Ahora que hemos usado el nodo
delay antes, nos
permite esencialmente mantener el código arriba por una
cierta cantidad de tiempo. Entonces si fuéramos a eliminar este
código con eliminar esto, y voy a eliminar esto también. Entonces cuando presionamos uno, podríamos tener un retraso y
luego podríamos hacer algunas cosas. Por lo que podría decir llamar
al salto de ellos. Esto en realidad hará que
nuestro personaje salte. Estableceré el retardo
para decir dos segundos. Entonces ahora cuando golpeo play y
presiono 12 segundos después, se ve que el
personaje salta. Ahora hay un
tipo diferente de este nodo. Entonces si salimos fuera
de juego aquí y volvemos al
ThirdPersonCharacter. Podemos usar el re-gatillo
son ambos retardo. Ahora la diferencia
aquí es que si yo fuera a decir simplemente seguir presionando uno mientras mi nodo de retardo está contando hacia atrás
que la duración, este nodo simplemente ignoraría la entrada y contaría
dos y luego saltar correría. Ahora, un re-disparador o retardo seguirá reiniciándose cada
vez que reciba una entrada. Entonces si uso la palabra trigger delay en lugar de
solo el nodo delay, ella y yo pulsamos Play y
empiezo a presionar uno. Ya has visto que mis zanahorias
no saltan ni después dos segundos porque sigo
reiniciando ese temporizador. Si dejo de
presionarlo, esperará dos segundos ahora
y nuestro personaje saltará. Ahora, hay una última nota
que quería mostrarles, y esa es la demora
hasta el próximo nodo tick. Así que si arrastro esto hasta aquí, puede ver que esto también
es un nodo latente, y esto esencialmente sólo
bloques de código para un fotograma o hace que el código de peso de un fotograma antes de que el
pinna completado luego se ejecuta. Así que si tuviéramos que usar esto con el uno y
saltaré la función aquí, no notarás ninguna
diferencia
porque presiono uno, parecerá que es instantáneo, pero en realidad está
esperando un fotograma antes de que le diga a la función de
salto que funcione. Ahora, esto sí tiene usos
a veces en los planos, es posible que tenga que
esperar un marco antes que se establezca
una variable o
algo así. Para que ese nodo pueda ser útil
para ese tipo de cosas. Eso es todo por nuestra lección de nodos de
utilidades, volveremos a usar la mayoría de estos en futuras lecciones, por lo que tendrás la oportunidad de
familiarizarte con ellos.
24. Aspectos básicos (instancia de juego): Oigan a todos. En esta lección vamos
a estar echando un vistazo
al blueprint de instancia de juego. Ahora el blueprint de instancia de juego se crea cuando nuestro juego
arranca por primera vez y permanece ahí
hasta que cerramos el juego. Y a diferencia de otros planos, si cambiamos de nivel, nuestra instancia de juego
no se destruye. Es permanente
mientras estemos corriendo el juego. Y eso lo convierte en un modelo realmente
útil para almacenar información que necesitas
transferir a otros niveles. Por ejemplo, es posible que tengas variables que
quieras transferir de tu nivel de menú principal
a tu mundo de juego. Bueno, puedes usar una
instancia de juego para hacer eso. Entonces, para empezar, vamos
a crear un nuevo plano. Y ese plano
va a mandar a nuestro personaje a un nivel
diferente. Entonces estamos haciendo clic derecho, ve a Blueprint Class,
crea un actor. Voy a llamar a
mi DP subrayado teletransporte. Teletransporte. Ahí vamos. Y eso lo abriremos. Yo sólo voy a arrastrar el mío
hasta la barra superior aquí. Ahora este va a ser
el plano que realmente envíe a nuestro jugador
a un nivel diferente. Entonces agregaremos una
colisión de caja solo para que sepamos cuando
entren a este actor, yo sólo voy a mover el mío un poco más
arriba así. Después nos dirigiremos
al Event Graph. Y sólo vamos a estar usando el actor comenzar nodo solapamiento. Por lo que va a eliminar
estos dos y vamos arrastrar hacia fuera de otro
actor y sólo cuesta al personaje para
asegurarse de que sólo ejecutamos este código si el
actor superpuesto es un personaje, entonces vamos a usar
las notas de nivel abierto. Entonces arrastraremos hacia fuera y
buscaremos nivel abierto, y vamos a usar
Open level por nombre. Y esto nos permite simplemente decirle al motor que abra un nuevo nivel. Y abrirá el nivel para el
que nos pusimos el nombre. Esto sólo voy a arrastrar hacia
fuera y crear variables. Así que sí promoveremos la
variable y la dejaremos como nombre de nivel y un tipo de
variable de nombre como ese. También voy a tomar en instancia editable, y
luego compilaremos. A continuación, necesitamos crear un nuevo nivel al que nos
vamos a teletransportar. Entonces nos dirigiremos al Navegador de
Contenido, luego a mapas en tercera persona. Y aquí tenemos
nuestros mapas en tercera persona, así que sólo vamos
a duplicar esto. Ahora. Puedo hacer clic derecho y presionar
Duplicar por alguna razón. Pero lo que podemos hacer es simplemente arrastrar esto sobre la carpeta maps. Se puede ver que podemos hacer Copiar aquí. Ahora en realidad nos crean una
copia de nuestro mapa actual. Ahora abriremos nuestro subrayado en tercera
persona para mapear. Yo sólo voy a
seleccionar Guardar actores. Ahora estamos en ese segundo
mapa y sólo voy a borrar algunas cosas para que podamos ver la diferencia
entre las dos. Entonces solo seleccionamos todas estas cosas por
aquí, borra estas. Entonces sabemos que cuando
entramos a este mapa, estamos en nuestro segundo mapa. Ahora regresaremos a
nuestro mapa en tercera persona. Entonces haremos doble clic
para abrir eso. Voy a seleccionar,
Guardar, seleccionarlo. Y ahora estamos de vuelta en nuestro
primer mapa en primera persona. Y vamos a añadir
nuestro teletransporte a este mapa. Entonces iremos a planos
y arrastraremos uno. Voy a hacer el mío
un poco más grande. También podemos ir a nuestro plano de
teletransporte, seleccionar la caja y simplemente
apagar oculto en juego para que realmente podamos ver
la colisión así. Y ahora necesitamos usar esa
variable que creamos en nuestro telepuerto para decirle a
qué nivel queremos
teletransportarnos. Entonces iremos a Detalles y ya
ves que aquí tenemos nuestro nombre de
nivel. Entonces lo que vamos a
hacer es ir a mapas, simplemente hacer clic derecho o en
tercera persona subrayado dos, haremos Renombrar, luego hacer
Control C, y hacer clic de distancia. Y luego pegaremos ese nombre
en nuestro nombre de nivel aquí. Y entonces podemos probar esto. Entonces le pegaré a play o
correré a la caja. Y se puede ver que ahora
hemos transportado a nuestro nuevo segundo nivel. Ahora cuando abrimos un nuevo nivel, todo en el
nivel anterior se destruye. Nuestros modos de juego de
controlador de jugador de personajes están todos destruidos. Y luego cuando se abre el nuevo
nivel, nuestro personaje está siendo engendrado. se crean un nuevo controlador
y modo de juego Tambiénse crean un nuevo controlador
y modo de juegopara nuestro nuevo nivel. Entonces eso significa que cualquier variable
que hayas establecido en tu personaje antes de
transportarnos a este nuevo nivel, todas esas
se perderán y
comenzaremos de nuevo con un personaje
fresco. Y para solo darte
un ejemplo de que saldrá fuera de plano editor, dirígete a nuestros planos que personaje en
tercera persona. Sólo voy a
crear un nuevo booleano. Lo llamaremos ejemplo, y usaremos un nodo tick. Entonces solo voy a hacer clic derecho
y buscar tecnología. En tecnología, solo vamos
a imprimir si nuestra
variable de ejemplo es cierta
o no. Por lo que usamos una cadena de impresión. Conectaremos esto
hasta aquí, así. Y ahora voy
a agregar una entrada, así que llamaremos a este evento
de entrada uno. Entonces cuando presionamos uno, quiero establecer esta
variable en true. Entonces haremos esto y
luego compilaremos. Entonces ahora cuando golpeo play, se
puede ver que actualmente
estamos en nuestro primer mapa en tercera persona. Si presiono uno, se puede ver que nuestra variable se hace verdadera. Pero si me encuentro con nuestra caja
y vamos a un nuevo nivel, se
puede ver que esa
variable es ahora cambiar a ser falsa porque tenemos un
nuevo blueprint de caracteres. Ahora podemos usar nuestra
instancia de juego para realmente guardar esa variable para nosotros y
llevarla al siguiente nivel. Entonces lo que haremos es salir. Vamos a crear una
nueva instancia de blueprint. Haremos clic derecho e
iremos a planos. Queremos clase Blueprint. Y en las opciones aquí, realidad no
hay clase de instancia de
juego. Entonces vamos a bajar a todas las clases y
buscar por ejemplo. Y luego vamos a seleccionar la instancia de juego
aquí abajo y presionar Select. Y ahora eso nos ha creado un
nuevo blueprint de instancia de juego. Por lo que llamaremos a este ejemplo de
subrayado BP, instancia de
juego así. Entonces podemos abrir eso. Y se puede ver que esto
es sólo un plano básico. Ni siquiera
tiene variables incorporadas. Se puede ver si hago
clic en valores predeterminados de clase, aquí no
hay variables. Este es solo un plano bastante
simple que podemos usar para
almacenar variables. Podemos crear funciones, macros como otros
blueprints también. Aquí hay algunas funciones
dobles de anulación, por lo que puedes anular el init, que es básicamente la
función que se ejecutará cuando creamos por primera vez
nuestra instancia de juego, tenemos un error de red, que no voy a estar
cubriendo en esta lección. Nos han cerrado y
esto correrá cuando
en realidad cerremos nuestro juego. Entonces tenemos error de viaje. Y esto correrá si
tenemos algún tipo de problema transportando
a un nuevo nivel. Por ahora queremos que
nuestra instancia
de juego realmente almacene
una variable para nosotros. Entonces vamos a
crear esa variable. Simplemente voy a llamar de nuevo a
este ejemplo. Y vamos a compilar. Ahora antes de
abrir nuestro nuevo nivel, en realidad
necesitamos
establecer esta variable. Por lo que irá a nuestro
Third PersonCharacter aquí y crearemos
una nueva función. Yo sólo voy a
llamar a esta instancia de
ganancia de actualización , así. Ahora lo genial de
las instancias de juegos es que
prácticamente puedes acceder a ellas desde cualquier blueprint
igual que el modo de juego. Por lo que sólo podemos hacer clic derecho en la
búsqueda de Instancia de Juego. Y puedes ver que podemos usar el
get Game Instance y esto solo devuelve una referencia
a nuestra instancia de juego. Ahora debido a que creamos nuestro
propio blueprint de instancia de juego, necesitamos lanzar eso para
poder acceder a sus variables. O podrías configurar una Interfaz Blueprint
si quisieras. Pero sólo nos vamos
a quedar con el casting. Entonces voy a usar
un costo a ejemplo, y luego queremos ejemplo, instancia de
juego así. Por lo que ahora sólo vamos a mover
estos nodos aquí abajo y conectarlos hasta la
entrada de nuestra función. Entonces queremos usar set esa variable de
ejemplo que
hemos creado suficiente. Por lo que vamos a hacer dar ejemplo,
conectar esto aquí arriba. Y luego tomaremos nuestra
variable de ejemplo de nuestro personaje, y conectaremos eso al set. El nodo set compilará. Entonces ahora realmente necesitamos ejecutar esta función antes de
abrir nuestro nuevo nivel. Entonces nos dirigiremos a teletransportarnos y
heredaremos , ejecutaremos esa función. Entonces vamos a necesitar cambiar nuestra nota de costos aquí a
una tercera persona cuesta. Por lo que vamos a arrastrar hacia fuera y hacer costo. En tercer lugar, queremos que el
Third PersonCharacter porque ese es el
blueprint que tiene nuestra nueva función
se arrastrará y
buscará la instancia de actualización del juego. Y eso establecerá
nuestra variable dentro nuestra instancia de juego a
lo que sea de nuestro personaje. Y luego
conectaremos esto hasta nuestro nivel abierto así. Así que ahora cuando nuestro
personaje desove, necesitamos que realmente
lea la variable de ejemplo que hemos creado dentro de la instancia de juego de
ejemplo. Entonces para hacer eso, que puede
ir a la Gráfica de Eventos, creará unos planetas de inicio. Por lo que tal comenzará a jugar de nuevo, lo que puede obtener la
instancia o lo siento, obtener la instancia de juego. Y eso nos dará
acceso al plano, costará al
ejemplo Game Instancia. Y luego obtendremos
su variable de ejemplo. Por lo que vamos a arrastrar hacia fuera
y sí obtener ejemplo. Y lo usaremos para establecer nuestra variable de ejemplo de caracteres. Entonces vamos a poner esto así. Y vamos a correr esto
en Begin place. Así que cada vez que nuestro
personaje lo genere, lee cualquiera que sea la variable
de
ejemplo en nuestra instancia de juego, y luego ponlo en
su variable de ejemplo. Ahora hay un par
de cosas más que
tenemos que hacer antes de
poder probar esto. Lo primero es que en realidad no le
hemos dicho al motor que use nuestro nuevo
ejemplo de Game Instancia. Ahora en realidad no hacemos esto en el modo de juego como la
mayoría de las cosas, realidad lo hacemos en la configuración de
nuestro proyecto. Por lo que tendremos que editar
luego Configuración del proyecto. Y vamos a
buscar Instancia de Juego. Y quieres la clase de
instancia de juego aquí, y cambiaremos esto a la instancia de juego de ejemplo de
BP. Ahora el motor sabe
usar esa instancia de juego. Y luego segundo,
vamos a volver a nuestro segundo mapa que creamos. Entonces yo sólo voy
a abrir eso y vamos a golpear Guardar aquí. Y aquí en
realidad voy a agregar nuestro plano de teletransporte
aquí también. Entonces sólo arrastraré eso, escalaré para ser un poco más grande. Estoy agregando esto
solo para que podamos avanzar y
retroceder entre
nuestros dos niveles. Tenemos que establecer un nombre de nivel. Entonces ese será el nombre
de nuestro primer mapa, que es mapa en tercera persona. Sólo voy a
hacer clic derecho en seleccionar, Renombrar, copiar esto, y luego
pegar eso en nuestra variable de nivel
aquí así. Entonces vamos a regresar a nuestro primer mapa en tercera persona. Por lo que sólo abriremos
eso y luego
presionaremos Seleccionar, Guardar, seleccionarlo. Y entonces estamos listos para
probar esto realmente . Entonces le pegaré a Play. Se puede ver que el
valor es actualmente falso porque acabamos de empezar
y no he establecido el valor. Pero si presiono uno,
se vuelve verdad. Ahora bien, si
entramos al telepuerto, seguirá siendo cierto incluso una vez
que estemos en nuestro segundo nivel. Y eso es porque nuestro personaje
está leyendo esa variable de nuestro ejemplo Game
Instance y luego configurando. Y no importa
cuántas veces cambiemos entre niveles, siempre leerá ese valor porque nuestra instancia de juego no está siendo destruida a diferencia de nuestro
personaje y controlador. Ahora, por supuesto, este es un ejemplo
bastante simple, que es almacenar una variable
en nuestra instancia de juego. Y luego leyendo
desde el personaje, puedes almacenar tantas
variables
como quieras en tu blueprint de
instancia de juego. Y puedes acceder a
esas variables prácticamente desde cualquier plano. Entonces usamos nuestro
Third PersonCharacter, pero si
quisiéramos, podíamos acceder a nuestra instancia de juego
en el teletransporte. Por lo que podríamos hacer conseguir instancia de
juego. Podemos acceder a nuestra
instancia de juego aquí también. Entonces eso es todo por esta lección. Esperemos que ahora
entiendas los usos de la instancia de juego
y cómo puedes usarla en tus proyectos futuros.
25. Lecciones adicionales (rastros): Oigan a todos. En esta lección vamos a
estar echando un vistazo a las huellas. Los rastros nos permiten
tomar una
ubicación de inicio y fin y luego verificar lo que hay entre esas
dos ubicaciones. Entonces, para empezar, crearemos
algunos planos de ejemplo. Solo voy a
hacer clic derecho y crear una nueva clase de blueprint. Va a ser actor, sólo va a llamar a
este rastro BP en cubos. Eso lo abriremos. Y sólo voy a arrastrar
la lengüeta hasta el par superior. Y añadiremos un nuevo componente. Sólo voy a
agregar un componente de cubo que compilará eso. E iremos al Event Graph. Entonces vamos a configurar este
cubo para que haga una traza a otro
cubo cada cuadro. Por lo que comenzará
borrando estos comienzan a jugar y el actor
comenzará a solapar nodos. En realidad usa el
nodo tecnológico y crearemos una nueva variable y
simplemente llamaremos a este cubo. Y voy a establecer su tipo a BP subrayan trace, trace cube. Y vamos a compilar entonces en el panel Detalles
que va a tomar en instancia editable así. Y volveremos a compilar. Entonces nos arrastraremos y
conseguiremos nuestro otro cubo. Queremos comprobar que esté configurado, así que usaremos un nodo israelí solo para asegurarnos de que
no obtenemos ningún error. Y luego de r es válido, vamos a arrastrar hacia fuera y
vamos a buscar rastro. Ahora, si nos desplazamos hasta aquí, se
puede ver que tenemos bastantes nodos de rastreo diferentes. Todos están bajo
colisión aquí. Vamos a empezar con
sólo un simple trazo de línea por canal. Entonces crearé eso. Ahora. Un trazo de línea es esencialmente una línea de píxel único que irá desde el inicio hasta
la ubicación final, verificando si golpea
algo en el camino. Ahora, hay algunas otras
opciones en este nodo, pero vamos a configurar nuestro ejemplo primero y luego voy a
explicar esas. Entonces lo que haremos es
arrastrarnos de nuestro otro cubo. Queremos llegar hasta la ubicación. Y vamos a enchufar
esto a la ubicación final. Y luego para la ubicación de inicio, solo
vamos a usar nuestra ubicación
actual de cubos. Así que obtén la ubicación del actor. Por lo que nuestro rastreo
comenzará en esta
ubicación mantiene y viajará
a la otra ubicación del cubo. Ahora cuando digo viajar, traza sucede en un fotograma, no
es como si
se mueve lentamente a lo largo. Todo sucede en un fotograma
y esencialmente solo verifica, ¿hay algún objeto entre
las ubicaciones de inicio y final? También voy a
encender el Draw Debug aquí. Lo pondré en un fotograma, y esto esencialmente nos
permite ver el rastro en nuestro juego, generalmente los rastros son invisibles, pero esta opción nos permite ver un rastro mientras estamos
jugando en el juego. Un fotograma significará
que la traza
solo será visible para un fotograma. Duración significa que
la traza será visible por mucho tiempo que se establezca
el tiempo del cajón, lo que es de cinco segundos por defecto. Y luego persistente significa que el rastro será
visible para siempre. Entonces, debido a que estamos dibujando
nuestro trazado cada fotograma, podemos simplemente configurar
esto para un fotograma. Por lo que ahora sólo vamos a compilar este plano e
ir a nuestro nivel. Sólo voy a
arrastrarlo en un cubo. Y arrastraremos en un segundo cubo. Y voy a, con
mi segundo cubo seleccionado, sólo
voy a usar
la otra opción Cubo aquí
abajo en los detalles. Y seleccionaremos R de un cubo. Y sólo voy a
moverlos a ambos hacia arriba para que podamos verlos un poco
mejor cuando golpeemos play. Entonces cuando golpeo play, se
puede ver que
tenemos esta línea de un solo píxel que va de
este cubo al cubo
que seleccionamos. Si presiono F1 para
entrar en modo wireframe, se
puede ver que
la traza
comienza en el centro de nuestro par de
claves y se lee. Y luego una vez que
golpea el otro cubo, obtenemos este cuadrado rojo y
luego la línea se pone verde. Y eso significa esencialmente
que hasta ese cuadrado rojo, el rastro no ha golpeado a nada. Entonces el cuadrado rojo indica
que se ha golpeado algo, y luego la luz se vuelve
verde porque es, los trazadores golpearon algo más
allá de ese punto. Ahora, tal vez te estés
preguntando por qué se
rastrean y golpean el cubo del
que provenía. Y si salimos del modo editor
plano y
volvemos a nuestro cubo de trazas, se
puede ver que
en realidad hay una opción aquí llamada ignore self
en el trazado de línea. Y eso significa que la traza esencialmente simplemente
ignorará al actor
que hizo la traza. Entonces porque estamos en nuestro cubo, si desmarco esto y
compilo y luego presiono Play, se
puede ver que la
línea ya está en verde. Y si golpeamos F1, se puede ver que nuestro rastro
en realidad está golpeando nuestro cubo tan pronto como
empieza y luego el resto
de la línea se pone verde. ver que en realidad no
golpea nuestro segundo cubo. Ahora, eso es porque este
es un solo trazo de línea. Golpeará un objeto y luego no
le importa
el resto después de eso. Ahora volviendo a
nuestro seguimiento keep, hay algunas otras
opciones para que
podamos configurar actores para que ignoren. Esto nos permite
esencialmente simplemente establecer actores que queremos que nuestra línea trazada ignore
por completo. Así que si fuera a arrastrar
y hacer un make array, esto nos permite simplemente
agregar actores individuales a una matriz y luego agregar
eso a nuestro trazo de línea. Así que si yo fuera a enchufar
mi otro cubano aquí y enchufar eso
en la matriz, voy a marcar de nuevo en ignorar auto porque
queremos que nuestro rastro ignore el cubo que hace la traza voluntad compilar
cuando golpeo play, se
puede ver si
presiono F1 o trace ya no está golpeando nada porque lo hemos dicho que no lo
queremos ni lo sentimos, queremos que ignore
nuestro segundo cubo. Ahora, volviendo a nuestro plano de cubo de
trazas, hay otra opción
aquí llamada canal de rastreo. Ahora
los canales traza son algo así como capas en las que podemos
usar nuestras trazas. Ahora bien, la razón por la que tenemos esto es que puede tener un
objeto que
desea bloquear un tipo de
traza pero no otro. Por lo que en este momento
puedes ver que lo
tenemos configurado en visibilidad. Este es un canal de rastreo
que está integrado en el motor. Si voy a mi cubo aquí en el nivel
y lo selecciono, voy a seleccionar
el componente de cubo. Voy a hacer esto un poco más grande para que podamos ver
lo que voy a
desplazar hacia abajo a la categoría de
colisión. En Presets de colisión,
puedes ver que
actualmente está configurado para
bloquear todas las dinámicas. Damos clic en el desplegable aquí. Se puede ver que
aquí
tenemos estas opciones que están en gris. Eso se debe a que
tenemos seleccionado un preset. Entonces si hacemos clic en el
desplegable aquí y hacemos clic en Personalizado, eso nos permitirá
personalizar la configuración. Por lo que se puede ver que
para las respuestas de rastreo, tenemos visibilidad
y tenemos cámara. Ahora, si configuro nuestro par de claves para ignorar el canal de
rastreo de visibilidad, y vuelvo a mi cubo. Yo sólo voy a desconectar el otro cubo
de aquí de nuestro make array. Por lo que ahora voy a rastrear, va a golpear el otro cubo. Voy a pegarle a
Compile y a Play. Se puede ver si presiono F1, la traza aún no está
golpeando el cubo, por lo tanto tiene que volver
con nuestro cubo seleccionado aquí. Selecciona nuestro cubo y configúrelo para que bloquee la visibilidad
nuevamente, y luego presiona Play. Ya ves que ahora está
golpeando ese cubo. Y eso es porque
le estamos diciendo a esta malla de cubo ignore
o bloquee
este tipo de traza. Ahora se trazas se utilizan para todo tipo de cosas
en el desarrollo de juegos. Utilizaron para la interacción
para determinar qué está mirando el
personaje. Puedes usarlos para cosas como sistemas de
huellas para detectar qué tipo de suelo están los
personajes de pie. Puedes usarlas para armas. Entonces pulsa Escanear armas,
usas rastros. Por lo que cualquier juego donde
no haya tiempo de viaje de bala que típicamente usa rastros para
los cálculos de bala. Por lo que los rastros tienen
una gran variedad de usos en el desarrollo de juegos. Pero
lo importante de los rastros, en realidad
podemos obtener información sobre el objeto que golpeó. Entonces si salgo de
nuestro editor de planos aquí, volvemos a nuestro cubo de trazas. Se puede ver que
tenemos algunas salidas. Ahora si me arrastro de mi
atuendo aquí, podemos romperlo. Y eso es porque
en realidad es sólo una estructura. Se puede ver la
estructura de resultados de caderas. Para que podamos romper eso. Y eso nos da este
nodo aquí con toda
la información sobre qué
objeto, la cabeza traza. Ahora también tenemos valor
devuelto aquí, y esto básicamente
sólo dice si la traza realmente
golpea algo o no. Así que normalmente
probablemente querrías hacer y si nodo aquí y obtener información sobre
el objeto sólo si el rastro realmente
golpeó algo. Ahora voy a pasar por
algunas de estas variables. No los cubriré todos
porque hay bastantes, pero pasaré por
los más comúnmente usados en la parte superior. Aquí tenemos bloqueo aquí. Esto básicamente hace
lo mismo que un valor de retorno. Dice si la traza de línea
golpeó o
no algo, y
eso es un booleano. Después moviéndose hacia abajo,
tenemos distancia. Ahora bien, así de lejos de la estrella la
traza de línea golpea algo. Entonces si la distancia entre, digamos, inicio y fin era de
500 centímetros y la traza golpeaba algo a 100 centímetros del inicio, entonces este
valor de distancia sería un 100. A continuación tenemos la
ubicación y el punto de impacto. Ahora, para un trazado de línea, estos en realidad solo
serán exactamente el mismo valor, pero serán
diferentes para algunos de nuestros otros nodos de rastreo que
veremos en un momento. A continuación, tenemos uno de
los pines más importantes, que es nuestro Hit Actor. Ahora esto nos da una referencia a cualquier actor o trazo de
línea golpea. Y es muy útil para cosas como si estás creando un arma, ese trazo de línea de Pfizer o
un sistema de interacción, quieres saber a qué actor
golpeó
la traza de línea y usando el pin de Hit Actor aquí es cómo harías eso. También tenemos acceso
al componente de cadera. Entonces ese será el componente
dentro del actor al que golpeamos. Entonces por ejemplo, nuestro cubo, estaríamos golpeando
el componente cubo. Por lo que este componente hit
sería una referencia
al cubo dentro de nuestro actor cubo. Estos pines funcionan como hemos usado clavijas de
actor y bolígrafos de
componentes antes. Podríamos arrastrar hacia fuera de esto, podríamos utilizar un costo para
determinar si es decir, Cast to thirdPersonCharacter. Y si el rastreo llega a un personaje en
tercera persona, podríamos acceder a
esa información utilizando nuestros nodos de costos. Podemos usar nuestros
nodos de interfaz también, y podemos obtener información
del actor. Para que pudiéramos hacer algo
como GetLocation. Y podemos usar este acto de pin, como lo hemos hecho
con los tipos
dependientes de actos anteriores antes. También tenemos acceso al nombre
óseo que golpea el rastro. Entonces si trafico golpea
una malla esquelética, entonces esa es una
malla de máscara animada que tiene un esqueleto. Esto devolverá el nombre óseo
real de la parte de colisión
que golpea el rastro. Por lo que puedes usar estos
para acceder a nombres óseos. Y luego aquí abajo tenemos
nuestro rastro, inicio y rastreo. Y estos
simplemente serían los mismos que nuestros insumos aquí arriba
para inicio y fin. Ahora, hasta ahora
sólo hemos estado
mirando el trazado de la línea por canal. Ahora hay otro nodo de traza de
línea. Entonces, si buscamos trazas mentirosas, se
puede ver que
también tenemos un trazado de línea por perfil y alineamos el trazado
para los objetos también. Entonces, si creo un
trazo de línea para objetos, este es esencialmente
el mismo nodo. Hace lo mismo que
tenemos estamos aquí afuera. Tenemos el inicio y el final. Tenemos la misma configuración, pero en lugar de un canal de seguimiento, tenemos esta entrada de matriz
que es un tipo de objeto. Si arrastro desde
aquí y los uso hacer matriz que nos
permite
establecer realmente qué valores van
a estar en esta matriz de entrada. Por lo que se puede ver que
por defecto tiene un mundo estático aquí. Hago
clic en el menú desplegable. Se puede ver que
nos está dando algunos tipos de objetos. Ahora, si volvemos a nuestro cubo con nuestro
cubo seleccionado aquí, y vamos al componente cubo. Esto se refiere al tipo de
objeto aquí listado. De manera que se puede ver que esto se
establece en mundo a dinámico, lo que significa que este cubo
o sólo se sostendrá por rastros que tienen una
entrada de dinámica mundial. Este trazo de línea aquí
con estática mundial en realidad
ignoraría por completo ese cubo. Entonces a eso se refieren los tipos de
objeto de entrada. Es este tipo de objeto dentro de
nuestros Presets de Colisión. Podríamos
conectar rápidamente esto para ver si acabo de enchufar esto
a mi como válido, voy a eliminar nuestro nodo de traza de línea
anterior. Conectaremos esto a nuestra
estrella y escucharemos nuestro final. Y vamos a conectar esto para arriba. Podemos dejar eso por ahora. Acabamos de establecer el
Draw Debug Type dos para que se compile un frame
y luego le pegaremos a Play. Se puede ver que si presiono F1, ese rastro está
ignorando por completo el cubo. Pero si volvemos a la traza, al cubo de trazas y cambiamos
esto a dinámica mundial. Golpea Compile, dale a Play. Se puede ver que ahora ese rastro
está golpeando a un cubo
porque está golpeando esa Q porque
es del mismo tipo de objeto. Y lo genial
con esto es que
en realidad podemos establecer múltiples tipos. Así que solo podemos agregar
un nuevo bolígrafo y
podríamos agregar wild static también. Podríamos agregar otra entrada. Podríamos establecer esto en
****, por ejemplo. Podríamos añadir tantas como
queramos este rastro a la cadera. Ahora la última
nota de traza de línea que veremos
es la traza de línea por perfiles. Entonces si busco trazo de
línea por perfil, ahora las entradas son las
mismas que nuestros nodos anteriores, pero tenemos este nombre de perfil. Ahora eso se refiere
a las
respuestas de objeto que tiene el objeto que
estamos tratando de golpear. Así que volvemos a nuestro mapa
aquí, seleccionamos nuestro cubo, y en la
configuración de colisión puedes ver que tenemos respuestas de objetos. Ahora, usaré ****
como ejemplo. Por lo que se puede ver ****
está configurado para bloquear. Entonces si vuelvo a mi trazador, voy a establecer nombre de perfil para conectar esto como lo
hemos hecho antes. Conectar empezar a obtener ubicación
activa y terminar hasta nuestros otros
cubos, la ubicación del actor. Encenderemos el Draw Debug
Type dos para un frame. Golpearemos a Compile. Y cuando golpeamos play, se
puede ver que nuestra traza de línea está golpeando
la de un cubo de allá. Pero si aceptamos y
selecciono el cubo y seleccionamos nuestro componente de cubo y configuramos nuestro **** objeto responsive
para ignorar. Entonces le pegué a play. Se puede ver que nuestra traza ya no
está golpeando el cubo porque nuestra traza se hace en ese perfila la respuesta del
objeto. Y nuestro cubo, ya no está
bloqueando ese rastro. A continuación vamos a echar
un vistazo a los múltiples rastros. Ahora bien, si recuerdas, cuando nuestro rastro actualmente
golpea algo, ya no le importa
nada más a lo largo de su camino, se pone verde y no
golpea ningún otro objeto. Pero con multi traza
ya que nos permite golpear múltiples objetos en un solo rastro. Entonces si nos dirigimos de nuevo a nuestro cubo de
traza ahora voy a borrar esta nota de traza que hemos estado usando
y voy a hacer renta. Si busco un trazo de línea, se
puede ver que tenemos versiones de trazas
multilínea de los nodos que hemos mirado. Para que podamos hacer una
traza multilínea por canal. Y se puede ver que todas
las entradas son iguales, pero en lugar de una
sola por aquí, tenemos una matriz de salidas. Y esto funciona como
una matriz habitual. Podemos decir obtener el
resultado getter en un determinado índice. Por lo que podríamos utilizar la
entrada de nodo get un índice al que
queremos acceder desde la matriz y la
salida son resultados de golpe. Entonces si arrastramos fuera de nuestro nodo
get, entonces hacemos un descanso. Se puede ver que tenemos la misma nota de descanso
que teníamos antes. Y ahora estamos accediendo al primer resultado de éxito de
nuestra variedad de atuendos. Ahora también podemos recorrer
estos resultados también. Por lo que podemos utilizar
un nodo de bucle a para cada nota de bucle,
y si se recuerda, que va a ciclo a través de todos los resultados o todas las
entradas en nuestra matriz. Y
nos dará acceso a cada uno de ellos utilizando
nuestros elementos array. Por lo que de nuevo, podemos utilizar un nodo de resultado de kit de
frenos, acceder a toda esa
información sobre cada uno de los objetos que
nuestra línea traza golpeó. Ahora aparte de tener múltiples salidas para
nuestros resultados de cadera, la traza multilínea funciona exactamente de la misma manera una traza de línea normal
por nodo de canal, proporcionamos una
ubicación de inicio y ubicación final. Podemos decir un canal en el que
queremos hacer el rastreo. Por lo que actualmente está ajustado
a cierta visibilidad. Podemos establecer si
podemos ver o no el rastro. Yo sólo voy a poner el
mío para, para un cuadro. Entonces ahora si compilamos
y le pegamos a Play, se
puede ver que nuestro
rastro está funcionando. Pero lo bueno de las trazas
multilínea es que
podemos tener múltiples hits. Ahora para hacer eso, voy
a arrastrar en un cubo nuevo por aquí. Voy a configurar mi primer cubo para rastrear a ese en su lugar. Ahora si le pego play,
se puede ver que
todavía estamos ingresando wireframe con F1. Ya puedes ver que todavía sólo estoy
golpeando uno de nuestros cubos. Si vuelvo a nuestro código y en realidad puedo
arrastrar fuera de los atuendos, voy a hacer longitud
borrará este rastro, el nodo de
bucle por ahora. Esto realmente nos dirá
cuántos resultados hay en nuestra matriz de resultados hit. Entonces, si compilamos y presionamos a Play, ve
que solo está golpeando un objeto a pesar de
que está rastreando a este cubo. Ahora la razón de
eso es que este cubo sigue bloqueando el rastro de
visibilidad, lo que significa que el rastro no puede viajar a través y
golpear a otros objetos. Para permitir eso, tenemos que configurar
nuestro cubo para que realmente se superponga. El rastro. Entonces vamos a visibilidad aquí
con nuestro cubo seleccionado, y voy a
configurarlo para que se superponga. Ahora cuando golpeamos play, se puede ver que estamos
golpeando dos objetos. Si entramos en nuestro wireframe, se
puede ver que estamos golpeando este primer cubo y luego
estamos viendo nuestro segundo cubo. Entonces eso es algo
a tener en cuenta si trabajas con trazas
multilínea. Y el futuro es si
quieres que el rastro pueda
viajar a través de un objeto y
aún así golpear a otros objetos. El objeto debe establecerse
para que se superponga en lugar de bloquear. Si está configurado para bloquear,
entonces cualquier objeto en el rastreo golpea después de
ese objeto no se emitirá en nuestros resultados
desde nuestro nodo de traza multilínea. Ahora, hay otros
tipos de nodos traza. Hasta ahora sólo hemos
usado el trazado de línea. Si hacemos clic derecho y
buscamos rastreo, nos desplazamos hacia arriba aquí. Se puede ver que tenemos
un box trace por canal, multicast, trace by channel. Tenemos el
rastro de esfera por canal. Y esencialmente estos harán lo
mismo que nuestro canal. Trazado de
línea por canal, trazado de línea por perfil y línea
trazada por objetos, nodos. Pero en lugar de
una sola línea de píxeles en realidad nos da una forma. Entonces si tuviéramos que seleccionar,
digamos, por ejemplo, la traza cuadrada por canal, se
puede ver que tenemos
el mismo tipo de entradas. La única diferencia
es que tenemos un radio. Este es el tamaño de la esfera
que son bits trazables. Entonces si borro nuestro trazador
multilínea, podemos actuar hasta nuestro canal de rastreo de
esfera. Simplemente conectaré esto
hasta el final, inicio y fin. Y fijaremos el
radio para decir diez. Ese es el tamaño de
la esfera que
irá de principio
a fin ubicación. Por lo que vamos a establecer el empate D cubo dos para un frame compilará
y luego le pegaremos a Play. Se puede ver que ahora
en lugar de una sola línea, es esta traza en forma de esfera. Ahora esto solo te permite
rastrear un área más grande. Entonces di que no
querías que una bala fuera un pixel de tamaño
cuando una pistola la dispara,
tal vez querías que
fuera una esfera que tuviera 55 centímetros de diámetro,
entonces podrías hacer eso en su lugar. Ahora, al igual que nuestro trazo de línea, hay una multi-versión
de este nodo. Entonces si hago clic derecho y
busco rastro de esfera, se
puede ver que tenemos traza
multi-escalar por canal, maltés, rastreo justo
por perfil y traza
multi esfera para objetos. Así podríamos crear una versión multi
esfera de este nodo. Se puede ver que es
exactamente lo mismo, pero tenemos nuestra entrada de radio y podemos emitir
múltiples resultados de cadera. Ahora no voy a pasar por
cada nodo de rastreo porque la mayoría de
ellos son iguales. Son solo versiones diferentes
para el multi traza y luego las diferentes trazas por tipos y luego las
diferentes formas. Pero si quieres
encontrarlos, siempre puedes
buscar rastreo y buscar decir, caja que te dará
acceso a toda la caja. Traza estos primeros aquí con un solo rastro y luego
tienes los múltiples rastros. También se puede buscar
esfera. Esto te da acceso a
todos los rastros de esfera. Se puede buscar
línea, traza, línea. Esto le dará acceso
a otras trazas de línea. Y luego por último
tienes la cápsula. Estos le darán
acceso a todos los tipos
de trazas de cápsulas. Ahora, por último, te dije que te
diría la
diferencia entre
el punto de impactos y la
ubicación en nuestro descanso ahora, así que si hacemos clic en la
flecha hacia abajo aquí y abrimos eso hacia arriba. Ahora en un trazado de línea tanto la ubicación punto de
impacto serán
exactamente los mismos, pero con una esfera, por ejemplo, el punto de impacto y la
ubicación en diferente, el punto de impacto
seael punto exacto en que la esfera golpea la
superficie del cubo. Entonces si te imaginas
justo en el borde de la esfera donde están las cajas rojas, ese es el punto de impacto. El mismo punto de que la
esfera se superpone a la caja. Mientras que el pin de ubicación aquí es la ubicación
de esa esfera. Entonces nuestra esfera, el centro de la misma, está en realidad más alejada de
la superficie del cubo. Entonces esa es la diferencia
entre el punto de impacto. Ese es el punto exacto en
que la esfera se superpone, el cubo y la
ubicación es el centro del cubo cuando ocurre ese
solapamiento. Ahora eso es todo por nuestras huellas
menos que en este momento, estaremos
volviendo a usar rastros nuevo en algunas de nuestras
futuras lecciones sin embargo.
26. Lecciones adicionales (tablas de datos): Oigan a todos. En esta
lección vamos a estar echando un vistazo a las tablas de datos. Usamos tablas de datos para almacenar información que no necesitamos
cambiar durante el juego, pero podemos recuperar esa
información usando planos. Un ejemplo de cuándo podrías
usar una tabla de datos es por ejemplo, si estás creando un juego de rol o supervivencia donde tenías cientos o tal vez
incluso miles de diferentes tipos de
artículo y estás obtener cada uno de
esos elementos van a tener algún tipo
de información que en realidad
no cambia
durante el juego, como por ejemplo, su nombre, artículo, descripción y peso. Esos valores podrían no
cambiar durante el juego. Por lo que una tabla de datos
sería una buena manera almacenar esa información
y luego
poder recuperarla fácilmente en el
código. Entonces comencemos. Tenemos que crear
una nueva estructura. Y eso se debe a que
las tablas de datos usan
la estructura para determinar qué
información pueden detener. Entonces haremos clic derecho e
iremos a los planos, saldremos e iremos a la estructura. Voy a nombrar el mío
S subrayado y esa es estructura de ejemplo, struct. Vamos a abrir esto.
Ysi lo recuerdan, tenemos una
lección previa sobre estructuras. Entonces si no has visto eso, recomendaría echarle un vistazo a eso. Pero sólo vamos
a agregar un par de nuevas variables y les
daremos nombres. Por lo que nuestro primer nombre de un artículo. Y vamos a establecer esto a
un tipo de variable de texto. Llamaremos al segundo, espera. Y vamos a poner esto en una carroza. Llamaremos al siguiente daño. Y vamos a establecer esto en un entero y causará la
última salud. Y vamos a establecer esto a
un entero también. Y luego salvaremos esta estructura. Ahora estamos listos para
crear nuestra tabla de datos. Por lo que volveremos al navegador
de contenidos, haga clic derecho y seleccionaremos la categoría
miscelánea. Y luego aquí queremos
seleccionar Tabla de datos. Ahora, aquí es donde
seleccionamos qué struct queremos que use nuestra tabla de
datos. Así que voy a hacer clic en el
menú desplegable y buscar S guión bajo ejemplo struct. Seleccionaré eso y le pegaré a Ok. Ahora nombraremos nuestra tabla de datos. Por lo que voy a llamar a la mía tabla de datos de
ejemplo. Y haremos doble clic en
eso para abrirlo. Y yo sólo voy a arrastrar el
mío hasta el pip superior. Por lo que ahora tenemos un nuevo diseño de
interfaz de usuario aquí arriba. Tenemos nuestra tabla de datos. Ahora esta es la información
actual que estas tablas almacenan. Como puedes ver,
actualmente está vacía. Y luego aquí abajo
tenemos al editor de fila. Por lo que cuando sí tenemos información en nuestra tabla de datos,
podemos seleccionar una fila, y este editor de filas nos
permitirá
cambiar la información que se almacena en esa fila en particular. Entonces para crear una nueva fila o sube al botón Agregar
y presiona eso. Ahora puedes ver que tenemos una
nueva fila en la tabla de datos. Y con eso seleccionado, puedo cambiar cualquiera de las
variables que
creamos dentro de nuestra struct
para esta fila en particular. Ahora también tenemos el nombre de la fila. Ahora este es el nombre que usaremos para acceder a la información almacenada en esta fila específica cuando
estemos codificando y blueprints. Por lo que siempre quieres
asegurarte de que estás dando tus nombres de fila y a tus
tablas base nombres fáciles de usar. Entonces podríamos renombrar
esto para decir actos. Por ejemplo, digamos que estábamos
creando una tabla de datos para los elementos que van
a estar en nuestro juego RPG. Por lo que tendría entradas en la tabla estados o
filas nuevas para cada elemento. Aquí, establecerías el nombre
del elemento, por ejemplo, para que podamos configurar nuestro nombre para que actúe. Como dije, el peso diez, el daño a 20 por ejemplo. Y ahora hemos puesto estos datos
en esta cuerda específica. Y si quisiéramos,
podríamos crear otra fila. Para que pudiéramos dar clic en Agregar. Y ahora tenemos una nueva fila. A lo mejor queríamos almacenar
información sobre las clases para
poder crear una fila de espadas en C. He renombrado
el nombre de la fila para ordenar, y voy a establecer el nombre para ordenar. Quién fijó el peso
para ahorrar cinco y nuestro daño a diez, por ejemplo. Ahora hay algunos otros
botones aquí arriba que
nos permiten controlar nuestras filas. Por lo que tenemos copiar y pegar. Esto le permite copiar el conjunto de datos en una fila y
pegarlo en otra. Entonces si selecciono mi
AKS por ejemplo, y hago copia, y selecciono mi espada escribí y hago Pegar. Se puede ver que
ahora ha reemplazado los datos en mi fila de espadas con la información que
se puso en mi fila de AKS, se
puede ver que el
nombre de la fila no se ha cambiado, que todavía está puesto espada. Eso se debe a que
los nombres de sus filas necesitan ser únicos. Entonces no pudimos crear una nueva fila, por
ejemplo, y llamarla actúa. Se puede ver que
nos da un error porque cada fila necesita
tener un nombre único. Ahora también podemos eliminar filas. Entonces con mi nueva fila
seleccionada aquí, puedo golpear quitar
para quitar la fila. Y también podemos duplicar filas. Para que podamos seleccionar fila, golpear duplicar y
duplicará esa fila. Se puede ver que le está dando un nuevo nombre llamado
espada subrayado 0. Si ahora sólo
voy a quitar esa espada subrayado 0 y voy a volver a poner mi información a lo que era para
nuestros SolidWorks. Entonces seleccionaré Ordenar y
pondré esto a espada. Y vamos a configurar esto a, creo que fue
F5 blanco y lo dañó. Ahora te mostraré cómo podemos acceder
realmente a esta
información que estamos configurando en nuestra
tabla de datos dentro de un blueprint. Por lo que comenzaremos yendo a nuestro
plano de personaje ThirdPersonCharacter. Yo sólo voy a abrir eso. Y si hacemos clic derecho, podemos buscar la fila
Get Data Table. Se puede ver que aquí
tenemos dos opciones. Voy a seleccionar el nodo de fila de la tabla de
datos get aquí y vemos que obtenemos este nuevo nodo
que no hemos usado antes. Si seleccionamos nuestra tabla de datos, así es como establecemos desde
qué tabla de datos queremos acceder a
la información. Entonces solo tenemos la tabla de
datos de ejemplo que creé. Entonces vamos a seleccionar eso. Se puede ver que nuestro nombre de
rol en realidad ha cambiado automáticamente en
una pequeña opción desplegable. Y podemos ver que
tenemos tanto nuestros actos como filas de espadas que creamos
dentro de nuestro ejemplo DataTable. Ahora bien, estas son solo entradas
variables. Así que digamos que tenía una variable de nombre de fila a la que
quería conectar aquí. Podría, si me arrastro desde
aquí, podemos hacer promociona variable. Y si recuerdas
que solo crea una nueva variable del tipo del
que hemos arrastrado. Así que sólo voy a crear
una nueva variable y ver que está utilizando un tipo de variable de
nombre. Se acaba de nombrar
para nosotros nombre de fila, pero esto es sólo una variable de nombre
estándar que podemos conectar en nuestra tabla de datos para decirnos qué fila queremos obtener
de nuestra tabla de datos. Pero por ahora sólo voy
a borrar eso y vamos utilizar el menú de selección aquí. Entonces sólo voy
a seleccionar espada. Ahora, tenemos dos salidas. Tenemos fila encontrada
y rho nada encontrado. Ahora, esto se usa más para si estás usando una variable
que se conecta al nombre de fila. Porque si usamos una
de estas selecciones, nos
está dando las filas que
existen en nuestra tabla de datos. Por lo que siempre va
a encontrar estas filas. Pero si tuviéramos nuestra variable de nombre de
fila conectada y decimos que
esto estaba configurado en, si podemos tirar para mostrar
el valor predeterminado, digamos que esto se estableció en
algo así como mochila. Ahora, no hay una fila de mochila dentro de nuestra tabla de datos de ejemplo. Entonces es, este nodo
correría rho nada encontrado
porque no encontrará esa fila. Mientras que si se establece en
algo así como actos por ejemplo, entonces rho found sería gordo, se
ejecutaría porque se encuentra esa fila dentro de nuestra tabla de datos. Ahora tenemos una salida
aquí llamada excrecencia. Y si arrastramos hacia fuera,
podemos hacer un nodo break. Y se puede ver
que en realidad es romper nodo para la estructura que
usamos o hemos creado y estamos
utilizando dentro de nuestra tabla de datos. Para que podamos romper esa estructura. Se puede ver que ahora
podemos acceder a toda
la información que
establecemos dentro de nuestra tabla de datos. Entonces, si tuviera que
crear un begin play, por
ejemplo, conectamos esto
a nuestra fila de tabla de datos. Así, se asegurará de que
el nombre de la fila se establece en hacha, que es entonces
sólo vamos a hacer desde la fila encontrada. Arrastraremos hacia fuera y
haremos una cadena de impresión. Y podemos conectar, digamos, el nombre hasta nuestra cadena de impresión. Y lo compilaremos
y le pegaremos a play. Y verás que el
hacha se está imprimiendo. Si volvemos a nuestro
ThirdPersonCharacter y cambiamos nuestro nombre de fila a algo
así como, creo que se vendió. Podemos apilar. Y cuando lleguemos a Play,
verás que la tabla de datos dentro del ThirdPersonCharacter
está encontrando esa fila de espadas y está devolviendo la información que
almacenamos dentro de esa fila. Si quisiéramos,
podríamos cambiar esos datos. Entonces si voy a ejemplo tabla de
datos y cambio el nombre
dentro de nuestra fila de espadas, algo más, digamos manzana. Si guardamos esto y le pegamos a Play, verás que
ahora imprime manzana, pesar de que estamos
seleccionando la fila de espadas, y ese es solo el nombre de la fila. Estamos usando, la información
que hemos almacenado dentro de esa fila, y
eso ahora es Apple. Ahora hay otra
forma en que podemos decir nuestras fechas get, fila de tabla, nodo, qué fila queremos obtener
esto un poco más fácil de usar que usar
solo una variable de nombre. Entonces, si eliminamos nuestra
variable de nombre del gráfico de
eventos aquí, creamos una nueva variable. Voy a llamar a
esta fila seleccionar. Selector establecerá el tipo a tabla de
datos manejador de filas
manejar, lo siento. Crearemos eso,
compilaremos y obtendremos un error de este nodo solo porque no hemos establecido una fila en. Así que sólo voy a configurar esto para ordenar. Y si volvemos a compilar, se puede ver que el error desaparece. Ahora podemos nuestra fila seleccionar
una variable como esta. Ahora bien, esto es básicamente
sólo una estructura que está integrada en el motor. Así que si arrastramos hacia fuera,
se puede ver que tenemos un
nodo de manija de fila de tabla de datos de ruptura que nos permite
acceder a las dos variables
que se establecen dentro la struct selectiva fila
y en clase por defecto. Así que si nuestras
variables de selector de filas seleccionadas, se
puede ver que podemos decir tabla de
datos y un nombre de fila. Ahora actualmente si selecciono
Renombrar y creo que
aparece porque no hemos
establecido una tabla de datos. Así que voy a establecer esto a nuestra tabla de datos de
ejemplo aquí. Ahora, cuando selecciono el nombre de la fila, se
puede ver que nos
da acceso a ambas filas existen dentro de
nuestra tabla de datos de ejemplo. Podría configurar esto para decir hacha. Ahora, usando el nombre de fila
en nuestro nodo de ruptura, podemos simplemente conectarlo
directamente a nuestra fila Get Data Table. Nota, ahora hemos conseguido forma
mucho más fácil de usar de decirle este nodo sobre qué elemento queremos
obtener información
de nuestra tabla de datos. Entonces si compilo, y ahora esperaríamos que
nuestra cadena de impresión imprima el nombre porque esa es la forma en que le estamos diciendo
que acceda. Si retrocedemos, podemos
cambiar esto a la espada. Y ahora lo veremos imprimir el nombre de Apple al que lo
cambiamos. Ahora, al igual que una nota al margen, si salimos de los planetas, puedes conectar esta variable a la
fila de la tabla get data, nodo también. Pero no recomiendo
hacer eso porque si
estás conectando esto y
cambias la tabla de datos
a una tabla de datos que usara una estructura
diferente a la que estamos usando aquí, podrías causar errores y
problemasen sus proyectos. Así que normalmente recomendaría simplemente dejar esto desconectado o desconectado y luego dejar manualmente configurando la
tabla de datos que estás usando aquí. Ahora hay otra nota de tabla de
datos, así que si hacemos clic derecho y
buscamos la tabla de datos, y buscaremos
fila en C, eso es a. ¿Existe la fila de la tabla de datos? Ahora, esto esencialmente hace lo mismo que nuestra fila
Get Data Table, pero no nos da la información almacenada en esa fila. Todo lo que hace es comprobar si el nombre de la fila existe
dentro de la DataTable. Por lo que de nuevo, podríamos copiar
y pegar estos nodos. Yo enchufé mi fila nombrelo, y pondré la tabla de datos
a tabla de datos de ejemplo. Ahora y empieza a jugar con ella. Simplemente imprimiremos verdadero o falso. Si la tabla de datos que
seleccionamos sí existe. Ahora, porque estamos usando
nuestra fila selecciona una variable. sólo podemos seleccionar tablas de
datos que existan todos modos,sólo podemos seleccionar tablas de
datos que existan
dentro de esta tabla de datos. Por lo que siempre va a
devolver true cuando usamos este nodo para controlar qué
fila queremos seleccionar. Pero tal vez estábamos usando
una variable de nombre en su lugar. Y así podríamos poner
un nombre aquí, digamos mochila. Y esta fila no
existe nuestra tabla de datos. Entonces cuando le peguemos a Play,
verás que imprime falso. Si vuelvo y cambio
esto para decir actos que, y podemos darle a Play. Verás que está volviendo
true porque esa fila sí existe dentro de nuestro
ejemplo DataTable. Otro nodo es el, si eliminamos este código
aquí sólo para
que sea un poco más de espacio,
moveré esto aquí arriba. Si hacemos clic con el botón derecho y
buscamos la tabla de datos, se
puede ver que tenemos que
obtener los nombres de fila de la tabla de datos. Si creo este nodo, ves que establecemos una tabla de datos. Vamos a establecer la tabla de datos de
ejemplo, y luego su salida es
en realidad una matriz de nombres. Y esto dará salida a una
matriz que contiene todos
los nombres de las filas que existen dentro de nuestra tabla de datos de
ejemplo. Entonces si conecto esto
para comenzar a jugar, pasaremos por
estos resultados. Por lo que este nodo se ejecutará para cada fila que existe
dentro de nuestra matriz. Simplemente podemos hacer una
cadena de impresión como esa. Ahora, esto
imprimirá todos los nombres de las filas cuando comience el juego. Entonces si le damos a Play, se puede
ver que está
imprimiendo cera y está
imprimiendo espada. Ahora. Por último, solo quiero explicar cómo funcionan las tablas de datos compuestos. Las tablas de datos compuestos nos
permiten tomar múltiples tablas de datos
y combinarlas para que
podamos acceder a múltiples tablas de datos cuando seleccionamos una tabla de fechas
específicas. Entonces lo que quiero decir con eso es si creamos otra tabla de datos, ahora, estas tablas de datos tienen que usar la misma estructura de voz. No podremos
combinarlos juntos. Por lo que crearemos una
nueva tabla de datos. Usaremos nuevamente la estructura de ejemplo de
subrayado S. Y le pegaré Ok,
voy a nombrar esto. esto le llamamos artículos de armas. Entonces por ejemplo, podrías tener diferentes
tablas de datos para armas, consumibles, medicinas, cosas
así si quisieras, si estuvieras haciendo artículos
para decir, un juego RPG. Así que abre armas artículos IPython. Y sólo voy a
crear un par de nuevas filas
de chula esta pistola de tiro. Y voy a llamar a este un rifle. Pon el nombre en rifle. Rifle también. Y también la escopeta
a arma de fuego. Ahora establece el peso a decir para, para la escopeta y seis para el rifle el
daño se establecerá en 30, y chocolate más
establece el daño a diez. Entonces ahora tenemos estas filas dentro de nuestra tabla de datos de
elementos de armas. Ahora, si volvemos a nuestro ThirdPersonCharacter y
volvemos al código
que creamos antes. Ahora, esas filas están dentro de
una tabla de datos diferente. Entonces si seleccionamos nuestro selector de
filas aquí, ves que no puedo seleccionar
esas filas porque actualmente estamos usando
la tabla de datos de ejemplo. Y si tuviéramos que enchufar, digamos, un nombre de fila, y tuviéramos que enchufar esto
y pusiéramos manualmente nombre de
la fila para decir pistola de tiro. Cuando este código se ejecuta, en realidad no encontraría
esta cuerda porque de nuevo, esa fila existe en
nuestros artículos de armas, no dentro de nuestra tabla de datos de
ejemplo. Por lo que no se encontraría. Ahora porque la tabla de
datos de ejemplo y la tabla de datos de elementos de
armas
usan la misma estructura. Podemos combinarlos juntos
usando una tabla de datos de concierto. Entonces iremos al
navegador de contenido, hacemos clic derecho, vamos a miscelánea, y
queremos crear una tabla de datos
compuesta. Nuevamente, tenemos que
escoger una estructura. Ahora bien, esta tiene que ser la misma
estructura que usamos para ambos, por
ejemplo, tabla de datos y tabla de datos de elementos de
armas. Entonces selecciona el ejemplo
struct hit, ¿de acuerdo? Y llamaremos a esto la lista maestra de
elementos, por ejemplo. Eso lo abriremos y
tenemos un nuevo editor. En realidad, no hay
mucho que pueda hacer dentro de una tabla de datos compuesta. Podemos crear nuevas filas
o cualquier cosa por el estilo. Lo que podemos hacer sin embargo
es agregar tablas padre. Por lo que añadiremos un nuevo elemento. Y vamos a configurar esto a nuestros artículos de armas que no deberían ver. Después de hacer eso, ahora podemos ver nuestros artículos de armas dentro de
nuestra tabla de datos compuestos. Y vamos a
añadir otro elemento. Y vamos a establecer esto
a nuestra tabla de datos de ejemplo. Se puede ver cuando hago eso,
esos elementos que están dentro de
nuestra tabla de datos de ejemplo también se agregaron dentro de nuestra lista
maestra de elementos. Ahora, no podemos editar
estos aquí, o básicamente podemos hacer es
agregar nuevas tablas de datos y combinar las filas juntas en
una tabla de datos compuesta. Así que ahora que tenemos todos
estos elementos dentro de nuestra tabla de datos
compuestos, si volvemos a nuestro personaje en
tercera persona, en lugar de usar la tabla de datos de
ejemplo aquí, sólo
voy a desconectar
el nombre de fila por el momento. Podemos establecer esto en
la lista maestra de elementos. Esa es nuestra tabla de datos compuestos. Y ahora si vas
al nombre de la fila, en realidad
podemos
seleccionar nuestra escopeta, rifle y estas
flechas que existen en la tabla de datos de elementos de armas. O podemos seleccionar los actos y filas de
espadas y ésas existen
en nuestra tabla de datos de ejemplo. Esto nos permite combinar
múltiples tablas de datos, siempre y cuando estén usando
la misma estructura en una tabla de big data a la que
podamos acceder
dentro de nuestro blueprint. Eso es útil para organizar. Si tienes muchos datos
que vas a estar almacenando dentro
de tablas de datos. Y si vamos a decir nuestra
tabla de estado de artículos de armas y agrego nuevas filas, llamaré a esto un
cuchillo como ese. Y ahorramos. Si volvemos al
plano de ThirdPersonCharacter, podemos hacer clic en el desplegable
aquí y se puede ver que el cuchillo ahora está apareciendo y se actualizará
automáticamente si agregamos o editamos la información y
Evason nuestros artículos de armas, tabla
de fechas o la tabla de datos de
ejemplo. Por último, si vamos a
nuestro selector de filas aquí, también
podemos usar la tabla de
datos compuestos aquí también. Así que si voy a la opción Tabla de
datos, podemos establecer esto a lista
maestra de elementos. Y ahora si compilamos y
miramos nuestro nombre de fila, se
puede ver que podemos acceder a
todas las armas
tanto de nuestra tabla de datos de ejemplo como de la tabla de
datos de elementos de armas completas aquí también. Entonces podemos simplemente enchufar
el nombre correcto. Y ahora podemos usar fácilmente
nuestro selector de filas para seleccionar cualquiera de esas filas de
cualquiera de nuestras tablas de datos. Nuevamente, no te
preocupes por este error. Es porque no
teníamos un nombre de fila establecido. Si compilo, se puede ver
que el error desaparece. Entonces, solo para resumir, las tablas de
datos son realmente
buenas para almacenar mucha información que no necesita ser cambiada durante el juego. Si tienes información que
sí necesita ser cambiada, entonces no puedes almacenarla dentro una tabla de datos porque no puedes cambiar la
información de la tabla de fechas durante el juego.
27. Lecciones adicionales (Nodos de superposición): Oigan a todos. En esta
lección vamos a estar hablando de
los nodos superpuestos. Las notas superpuestas son una
buena alternativa al uso de componentes de
colisión de caja o esfera. Ahora una cosa muy común que veo con los principiantes es
que tiendes a abrir sus niveles y
están llenos componentes de
colisión de
caja y esfera. Ahora, estos pueden funcionar y son razonablemente
fáciles de trabajar con ellos. Pero el problema es más adelante
en tu proyecto cuando tienes tal vez proyectiles o rastros o vehículos
tratando de moverse, estas cajas de colisión
y esferas pueden interferir con esos
sistemas funcionando correctamente, podría requerir que usted dé vueltas y cambie la configuración de
colisión en cientos de componentes diferentes de colisión de caja y esfera. Por lo tanto, los nodos superpuestos nos dan una alternativa útil al uso
de componentes Box y esfera. A veces podemos ir a nuestro Third PersonCharacter y
voy a poner un ejemplo. Hagamos clic derecho y
busquemos la entrada. Uno. Esta es una nota que
como hemos usado antes, se ejecutará cuando presionemos
uno en nuestro teclado. Y si hacemos clic derecho,
podemos buscar solapamiento. Ya ves que aquí tenemos
diferentes notas superpuestas. Voy a empezar con la superposición
de cajas para actores. Entonces crearemos esa función. Ahora tenemos algunas
entradas para este nodo. Tenemos posición de caja. Esta es la ubicación en la que se realizará la verificación de la
casilla. Tenemos extensión de caja, que
es lo grandes que son las cajas. Tenemos tipos de objetos. Por lo que estos son los
tipos de objetos que se van a detectar solapamiento
de caja. Si recuerdas de
nuestra lección de trazo de líneas, buscamos make array. Podemos establecer qué tipos de
objetos detectará este nodo. Podemos agregar múltiples
entradas a esto también. Entonces queríamos detectar, vaya, estática, dinámica mundial. Si recuerdas cuando
vamos a un objeto, digamos en un mundo como
este rampa de aquí, si seleccionamos el componente de malla, se desplazará a los ajustes de
colisión y verás
que actualmente está configurado por defecto, pero lo voy a
vender a la costumbre. Y si revisas
el tipo de objeto, puedes ver que este está actualmente
configurado como wild static. Por lo que nuestra caja superpuesta detectaría este
objeto porque
le estamos diciendo que
queremos detectar tipos de objetos estáticos
mundiales. A continuación tenemos nuestro filtro clase
actor. Esto le dice
a la
superposición de la caja que solo queremos encontrar un tipo de actor tan rápido para establecer esto para decir personaje en
tercera persona así. Nuestro nodo de superposición de libros ahora
solo devolvería el blueprint de
ThirdPersonCharacter. No olvides aclarar esto, lo contrario nuestro ejemplo
más adelante no funcionará. Así que asegúrate de
configurar esto en ninguno. Entonces, por último, tenemos
actores que ignorar. Ahora esto es sólo una serie de
actores que podemos introducir, decirle a nuestros libros se superponen que
queremos ignorarlos. Así que podríamos arrastrar fuera de
esto y hacer un make array. Podríamos arrastrarnos de esa tasa de hacer y
buscar uno mismo. Y ahora le estamos diciendo a
la caja solapamiento que queremos que ignore nuestro Third PersonCharacter
y las salidas de este nodo o fuera actores. Se trata de una matriz de actores que la caja se superpone, se superpone. Y entonces tenemos un valor de retorno. Y esto es sólo un booleano que va a ser verdadero o falso si el nodo de superposición de cuadro
se superpone nada. Entonces ahora vamos a poner un ejemplo. Obtendremos la ubicación del actor, y aquí es donde
haremos nuestras comprobaciones de superposición de casillas. Por lo que vamos a conectar esto
hasta la posición de
la caja establecerá la extensión de la caja para decir
200 por 200 por 200. Establecemos los tipos de objeto. Dejaremos esto como
estático y dinámico. Asegúrese de que el
filtro de clase actor esté establecido en ninguno. De lo contrario no podrá detectar
a ningún otro actor. Y vamos a
dejar este auto enchufado al acceso
para ignorar aquí también. Podríamos simplemente enchufar esto
en nuestras notas aquí. Pero algo que me gusta usar
cuando estoy usando nodos de
actores de superposición de Box es un nodo de depuración. Entonces si hacemos clic derecho
y buscamos depuración,
lo siento, dibuja cuadro de depuración. Este nodo nos permite crear una caja visual en el mundo que
podemos usar para la depuración. Entonces voy a enchufar esto a nuestro
cuadro de Draw Debug. Y voy a enchufar esto
en cajas superpuestas. Y para su centro, solo
usaremos la
ubicación del actor y la vamos a establecer en la misma
medida que nuestra superposición de caja. Salsas a doscientas, doscientas, doscientas. Voy a establecer la duración en tres segundos y el
grosor a uno. Al hacer esto,
solo vamos a crear una caja visual y el nivel durante tres segundos en
la misma ubicación y tamaño que nuestra caja se superpone. Para que podamos hacernos una
idea del tamaño
del área que estamos revisando
para los actores superpuestos. Ahora, sólo me voy
a arrastrar fuera de nuestros actores violando y
voy a buscar longitud. Y sólo usaremos
esto para detectar cuántos actores se superponían
en realidad. Cuando ejecutamos nuestros libros
se solapan actores nodo. Así que voy a conectar esto en una cadena de impresión como
esta, y vamos a compilar. Ahora podemos probar esto. Entonces si presiono play
y presiono uno, se
puede ver que tenemos esta caja
grande y se puede ver que nuestro texto está
imprimiendo uno. Y eso es porque actualmente
nuestros libros se superponen. Actores nota es
sólo para lactar a un actor. Ese es el piso. Y la razón de
eso es que le estamos diciendo que ignore nuestro carácter. Si corro por aquí
y presiono uno, se
puede ver que ha
subido a tres porque estamos golpeando la rampa, esta plaza y el piso. Esta es sólo una forma fácil de
detectar qué actores se superponen a un área determinada sin
tener que crear un nuevo componente de
colisión de caja o esfera. Ahora hay otras
versiones de este nodo. Si golpeamos escape y
volvemos a nuestra tercera zanahoria, Third PersonCharacter
Blueprint y hacemos clic derecho y buscamos solapamiento. Se puede ver que tenemos una
caja de componentes superpuestos. Ahora bien, esto funciona
igual que nuestros actores de superposición de cajas. Simplemente busca
componentes en su lugar. Por lo que en lugar de
devolver a los actores, devolverá los
componentes que superpone. Entonces, por ejemplo, si nuestro
piso se superponía, nuestra caja superponía
componentes comprueban. Volvería en lugar del acto
del cubo para hacer referencia, devolverá la pila
Mesh Component restaurantes en lugar de fuera de los
componentes de salida están violando. Aparte de eso, todo
es igual con este nodo. Puede establecer el tamaño de la posición, los tipos de
objetos, etc. Ahora también tenemos diferentes formas para estos nodos superpuestos. Entonces podemos crear, digamos,
un solapamiento de esfera. Se puede ver que tenemos
nuestros actores de superposición de esferas y nodos de
componentes de superposición de esferas. Y por último también está la cápsula se superponen
nodos también. Para que puedan ver que tenemos actores de superposición de
cápsulas y capturamos componentes superpuestos. Y estas son solo formas
diferentes que comprobaríamos si hay
aceptadores o componentes superpuestos. Entonces eso es todo por esta lección. Es una corta que solo
quería hacer en estos nodos porque me
parecen realmente útiles. Y ojalá puedan
reducir el número de componentes de caja y esfera
que tienes en tus niveles.
28. Lecciones adicionales (entradas): Oigan a todos, En esta
lección les voy a estar hablando a través
del sistema de entrada. Ahora, en Unreal Engine cinco, tenemos dos sistemas de entradas. Tenemos el original
de Unreal Engine four, y tenemos el nuevo sistema de entrada
mejorado que ahora está en
Unreal Engine cinco. En esta sesión, te
voy a estar hablando través del sistema
de entrada original. Y la razón por la
que estoy haciendo eso son muchos proyectos, al
menos al momento
de filmar esto, todavía usando ese sistema
original. Entonces en nuestra próxima lección, te
estaré hablando a través del nuevo sistema de entrada mejorado. Ahora, ¿qué quiero decir
con sistema de entrada? Y sistema de entrada es
como tomamos jugador presionando un botón
en mi teclado o su mouse o un gamepad, realidad traducirlo en
código que se ejecuta en
nuestros planos. Ahora, ya hemos usado algunos nodos de entrada en
nuestras lecciones anteriores. Si nos dirigimos
al Third PersonCharacter y hago clic derecho y
busco entrada. Uno por ejemplo, se
puede ver que hemos estado usando el evento de
una entrada, y ese es el
evento que se ejecutará si pulsamos la
tecla una en nuestro teclado. Si nos dirigimos
al panel Detalles, en realidad
podemos cambiar esta entrada para que funcione para que nos guste, podemos presionar este botón aquí y luego seleccionar la
tecla que queremos que use. Para que pudiera presionar L, por ejemplo. Ahora este nodo se ejecutará
cuando sea, siempre presionado. O podemos hacer clic en este desplegable aquí y podemos
mirar a través de todas las diferentes entradas clave que
el motor tiene incorporado. Ahora, este tipo de nodos son realmente útiles para
probar cosas, depurar, simplemente obtener una
entrada en un blueprint rápidamente. Pero no son
particularmente útiles para juegos completos o juegos
terminados. El motivo de eso es que la
mayoría de los juegos modernos tienen un menú de encuadernación de teclas
donde el jugador puede volver a enlazar teclas a cuatro acciones
diferentes. Ahora bien, si estás usando estos
nodos y un juego terminado, no
podrás hacer eso. Y ahí es donde entra un sistema de
entrada. Ahora bien, en esta lección, voy a estar
hablando con ustedes sobre el sistema
de entrada de ustedes antes. Y la razón de
eso es una gran cantidad de proyectos que puedes abrir. Todavía estaremos usando el sistema
de entrada de UE para. Por lo que es una buena idea simplemente llegar a los apretones con cómo funciona. Luego, en nuestra siguiente lección, echaremos un vistazo al
nuevo sistema de entrada mejorado que viene con
Unreal Engine five. Entonces, para empezar,
veremos una de
las entradas clave que viene
con el personaje en tercera persona. Si nos desplazamos hacia abajo aquí y
encontramos la acción de entrada de salto, se
puede ver que en lugar
de decir un nombre de clave, dice salto de acción de entrada. Ahora eso es porque
esta acción de entrada está realmente definida
en nuestro sistema de entrada. Y luego en el
sistema de entrada asignamos claves. Entonces para encontrar este sistema, podemos ir a Edit
Project Settings. Y luego aquí bajamos a
la sección de entradas aquí, y eso está bajo la categoría de
motores. Aquí puedes ver que tenemos acción y mapeos de
acceso. Ahora bien, el mío ya está abierto, pero el tuyo podría verse
un poco así. Damos clic en la flecha junto
a los mapeos de acción. Se puede ver que tenemos
la acción de entrada de salto. Y luego debajo de eso, si haces
clic en la flecha junto a ella, puedes ver que el enlace de clave
predeterminado para ello es la barra espaciadora. Y también tenemos un buy-in clave para el gamepad aquí también. Entonces, esencialmente lo que esto le
está diciendo al motor es que queremos crear
un mapping de acción. Ahora un mapeo de acciones
es similar a nuestros eventos de entrada que
hemos usado antes. Se puede
presionar o soltar. Y
lo estamos diciendo estamos creando un nuevo mapeo de acción
llamado Jump. Y queremos que estas dos claves
estén vinculadas a esa acción. Y por eso cuando jugamos
en el mapa de tercera persona, si presiono Space, esta acción de entrada de
salto correrá presionada. Y luego cuando libere espacio, liberado correrá
y correrá el salto y dejará de
saltar eventos. Ahora también podemos crear nuestras
propias acciones de entrada aquí. Entonces, si vuelves a
la configuración del proyecto, solo
podemos hacer clic en este
pequeño botón más aquí para crear una
nueva acción de entrada. Puedo llamarlo
algo así como disparar, por
ejemplo, va a
poner la clave a. Para que pueda configurar la clave de
múltiples maneras y haga clic en este botón aquí, y luego haga clic en la
clave que desee. Por lo que puedo simplemente botón izquierdo
del ratón y
verás que se
recoge automáticamente para mí. O puedes mirar a través de todos
los diferentes
binds de teclas simplemente haciendo clic en esta flecha hacia abajo aquí y
pasando por las opciones. Ahora hemos creado
una nueva entrada de acción y su nombre es disparar. Y cuando presionemos el botón
izquierdo del ratón, ese evento de zapatos se ejecutará. Si volvemos a nuestro
Third PersonCharacter, haremos clic derecho y
buscaremos entrada. Disparo de acción en C que bajo impactos que tenemos ahora
son evento de rodaje. Y esto se ejecutará cada vez que presionemos nuestro botón izquierdo del ratón. Para que pueda agregar una cadena de
impresión aquí. Y yo sólo pondré prensado. Copiaré y pegaré
eso y lo pondré así. Entonces ahora cuando golpeamos play, se
puede ver que cuando
presiono el botón del mouse, se está registrando
presionado, y cuando suelte, se está
registrando liberado. Ahora lo bueno de
este sistema es que puedes agregar múltiples claves para estar
vinculado al mismo evento. Así que digamos que tu juego fue trabajado en escritorio y funcionó en
consola y VR también. Puedes tener entradas
para la VR, la tecla de salto, el juego pad ki, y eso podría estar todo debajo la categoría shoot si
queremos agregar nuevas entradas. Por lo que sólo podemos dar clic en
el pequeño plus en C, ahora
puedo agregar una nueva clave. Podría decir prensa K por ejemplo. Ahora k también correrá ese evento de calzado así
como el botón izquierdo del ratón. Si deseas
eliminar alguno de estos, solo
podemos hacer clic en el ícono
del bote de basura aquí. Si deseas eliminar un mapeo de acciones
completo, puedes simplemente hacer clic en
la papelera junto
al nombre del
mapeo de acciones así. Ahora ten en cuenta si
haces eso y
todavía tienes el evento y
la cosa si podemos sondear, ya verás que vamos a recibir un aviso. Y eso es sólo decirnos eso. mapeo ya no existe
en la configuración de nuestro proyecto. Entonces borraremos esto por
ahora porque ya no lo estamos usando y compilaremos
para deshacernos de ese querer. A continuación tenemos mapeos de acceso. Entonces, si volvemos a Configuración
del proyecto, se
puede ver que
tenemos mapeos de acceso. Hago clic en el pequeño
desplegable aquí abajo. Se puede ver que
tenemos opciones para el estado de ánimo hacia adelante y hacia atrás. Muévete a derecha e izquierda. Y luego tenemos
las mismas opciones para gamepad y gamepad
mirar hacia arriba y hacia abajo, así
como la mirada del ratón hacia arriba y
hacia abajo en la parte inferior aquí. Ahora los mapeos de acceso
funcionan un poco diferente. Corren cada cuadro. Entonces lo que quiero decir con
eso es si voy al movimiento hacia adelante y hacia atrás y
solo agrego una cadena de impresión. Por lo que sólo agregamos una cadena de
impresión aquí. Ya verás cuando golpee play, está
imprimiendo cada fotograma. No estoy presionando ningún botón, no
estoy haciendo nada en absoluto. Ese mapeo de acceso estará
ejecutando cada fotograma individual. Y eso es lo mismo para todos
los mapeos de acceso. Así que eso será lo mismo para
nuestro movimiento derecha e izquierda, y también para nuestro gamepad, mira hacia arriba y hacia abajo así como
nuestro mouse mira hacia arriba y hacia abajo. Los mapeos de acceso también
proporcionan un valor de acceso. Ahora esto es esencialmente cuánto o cuánto de la entrada
se está recibiendo. Así que si tomo mi valor del eje aquí, y yo estaba en realidad, vamos a eliminar la cadena de
impresión aquí, y vamos a conectar una nueva cadena de
impresión hasta nuestro turno, derecha e izquierda para el
ratón, el sim. Y conectaré el valor x a mi cadena de impresión
y compilaré. Entonces ahora puedes ver que
no estoy moviendo mi mouse, por lo que el valor del eje es 0. Pero si empiezo a mover
el mouse lento, se
puede ver que la cantidad de
acceso aumenta. Ahora, eso es
esencialmente lo que le dice al motor lo mucho que
estoy moviendo mi mouse, qué tan rápido lo estoy moviendo, y luego agrega ese valor
al arco, la rotación de la cámara. Entonces si empiezo a mover
mi mouse muy rápido, se
puede ver que el valor
empieza a subir mucho más arriba. Entonces esto es esencialmente
lo que permite que
los mapeos de acceso controlen nuestra cámara, la dirección en la
que se mueve, así
como nuestro personaje. Si volvemos a nuestro blueprint, se
puede ver que nuestro valor de eje para avanzar y
retroceder es un valor de eje. Y si hago una cadena de impresión aquí, conectamos esto hasta él. Compile. Y eliminaré esta cadena de
impresión para que
podamos ver el valor justo de nuestro movimiento hacia adelante
y hacia atrás. Golpea play y ve
actualmente es 0. Pero si empiezo a avanzar, el valor del eje ha
ido directo a uno. Y si voy hacia atrás, se
puede ver en realidad se ha ido a menos uno. Y eso es lo que le dice
al motor si nos estamos moviendo hacia atrás o hacia adelante. Si x fuera de plano editor
y vamos a Project Settings, y abrimos uno de
estos Mappings de Acceso. Digamos por ejemplo, la
búsqueda recortó el mouse. Se puede ver que
actualmente no está configurado como. En realidad, se establece
una tecla en la dirección del ratón. Entonces está ajustado al ratón Y. La escala es menos uno. Ahora la razón de eso es que es sólo la forma en que la
cámara está trabajando en carril. Si fuera a poner esto a
escala uno y darle a Play. Ahora cuando muevo el mouse hacia arriba, empiezo a mirar hacia abajo y mis controles
en realidad están invertidos. Así que típicamente con los movimientos del ratón hacia
arriba y hacia abajo, usaríamos una
escala de menos uno para deshacernos de ese movimiento
invertido de la cámara. Pero si tuviéramos que mirar, digamos, avanzar y retroceder, se
puede ver que
tenemos W y S. Ahora, w nos da una escala de uno que le dice al personaje
al avanzar. S da una escala de menos uno, y eso es lo que le dice al personaje que nos estamos
moviendo hacia atrás. Y luego tenemos algunos binds clave
adicionales aquí. Estas son las dos
teclas de flecha en su teclado, y luego tenemos el pulgar
en un pad de juego también. Ahora una cosa importante
a recordar acerca los eventos de
entrada es la
razón por la que estos se están ejecutando dentro de nuestro Third PersonCharacter
es porque nuestro personaje de tercera persona es controlado por nuestro controlador de
jugador. Si empezáramos a usar
estos nodos en blueprints, ese controlado por nuestro
controlador, no se ejecutarían. Ahora un blueprint en el que podemos usar estos eventos de entrada
es nuestro controlador. Ahora, en la plantilla de tercera
persona, no
hay un control. Un plan creará uno
nuevo rápidamente. Sólo voy a crear
una Clase Blueprint, seleccionar controlador de jugador. Simplemente llamaré a este controlador de
ejemplo. Así. Y si te acuerdas,
necesitamos configurar nuestro mando y
nuestro modo de juego. Entonces iré al modo de
juego en tercera persona y buscaré la clase de
controlador de jugador. Aquí solo cambiaremos esto
a nuestro controlador de ejemplo, compilaremos y guardaremos. Ahora cuando lleguemos a play, estaremos usando nuestro controlador de ejemplo. Y abriré ese
controlador. Simplemente arrastraré
esto hasta arriba aquí, ve al Event Graph. Y ahora si busco
decir salto, por ejemplo, se
puede ver que puedo crear la acción de entrada de salto y esto en realidad
funcionará muy bien. Y eso es porque estamos
en el controlador, son las acciones de entrada funcionarán perfectamente bien dentro de
nuestro controlador de jugador, porque el
controlador del jugador es lo que maneja son acciones de entrada. A continuación, solo quería
hablarte sobre algunos de los ajustes que encontrarás si seleccionas un nodo de entrada, tenemos consumir entrada, ejecutar cuando se pausa y
anular el enlace padre. Entonces el primero consume
entrada significa que si esto está marcado en lo que estamos usando una acción de entrada dentro de
nuestro controlador. Y tuvimos ese mismo evento
dentro de nuestro personaje jugador. La acción de salto en nuestro
personaje en realidad no correrá. Y eso se debe a que
nuestro controlador esencialmente
está consumiendo esa entrada y no permitiendo que ningún otro blueprint se ejecute. Entonces si fuera a imprimir una cuerda
aquí de nuestro evento de salto. Ahora cuando compilamos
y presionamos Play, si presiono espacio, si vuelvo a mi
personaje en tercera persona aquí, simplemente
quitaremos este print strings para que
podamos ver lo que estamos haciendo así,
quecompilan eso. Y ahora cuando golpeamos
Play, si presiono espacio, se
puede ver que está
imprimiendo hola, pero mis personajes, no hay
suerte con saltar. Ahora eso es porque dentro de
nuestro controlador de ejemplo, estamos consumiendo esa entrada. Pero si desmarco esto y
puedo hacer estallar y darle a Play. Ahora cuando presiono espacio, se
puede ver que
tanto mi texto hola está corriendo como el
personaje está saltando. Entonces ambos de esos eventos
en mi controlador y el
blueprint del personaje o corriendo ahora. Otra de las configuraciones, si seleccionamos aquí la
producción de salto, es ejecutar una pausada. Puedes pausar el motor, o si abres un
menú, por ejemplo, si esto está marcado, entonces la entrada aún
podrá ejecutarse aunque el
juego esté en pausa. Y luego, por último,
anular el enlace padre. Digamos por ejemplo, nuestro controlador de
ejemplo tenía un blueprint padre que era diferente al controlador del
jugador. Entonces si teníamos esta
opción marcada y ese blueprint padre
también estaba usando la acción de entrada. Entonces básicamente
le estamos diciendo al motor ignoró la entrada y
nuestro blueprint padre, use el código que está
conectado a nosotros. Si lo desmarcamos, entonces
este nodo no se ejecutaría. El nodo en nuestro
blueprint padre se ejecutaría. Por último, tenemos
este otro pin aquí, y esto solo nos da
una referencia a la tecla que se presionó que
hizo correr este evento. Entonces tal vez tengas múltiples teclas que harían que el salto ocurriera y querías que sucediera algo
diferente dependiendo de
la tecla que presionara la persona, podríamos arrastrar y
buscar igual. Y usando esta nota, se podría comprobar es
la tecla que se
presionó igualada a otra tecla. Entonces podríamos decir que es
igual al espacio. Y este nodo comprobaría es la tecla que se
presionó Barra espaciadora. Si lo es, entonces
volvería verdad. También podemos obtener el
nombre de la clave, por lo que podemos buscar con pantalla. Podemos usar getc
key display name. Y esto sólo nos
dirá en texto cuál el nombre de la tecla
que se presionó que hizo el salto en la carrera de producción. Entonces eso va a ser
todo por esta lección. En nuestra siguiente lección,
veremos el nuevo sistema de entrada mejorado que viene con el motor cinco
sin amarrar.
29. Lecciones adicionales (entradas mejoradas): Oigan a todos. En esta lección
vamos a estar echando un vistazo
al sistema de entrada mejorado que viene con
Unreal Engine five. Entonces, para empezar, te
mostraré cómo habilitarlo. En esta versión actual del motor, en realidad
tengo que
habilitar un plug-in. Entonces iré a Edit plugins y voy
a buscar mejorar. Se puede ver entrada mejorada,
que puedo asumir. Si el tuyo ya está marcado, entonces no necesitas hacer esto. Pero para mí, me lo
voy a asumir. Se puede conseguir
me da una advertencia aquí, sólo diciéndome
que todavía está en beta. Por lo que sólo voy a golpear a Sí. Y necesitamos
reiniciar el motor, así que lo haré ahora. Entonces ahora he reiniciado el
motor y si revisamos el menú de plugins y
buscamos mejorados, podemos ver que está marcado. Después vamos a ir a Editar
y vamos a Ajustes del proyecto. Y luego aquí vamos a usar una búsqueda y vamos
a buscar entrada,
o lo siento, entrada por defecto. Ahora se puede ver el
mío por defecto se establece en la entrada del jugador
y el componente de entrada. Voy a cambiar estos a
la entrada mejorada del jugador. Y el componente
de entrada mejorado. Si el tuyo ya está
ajustado a esos, entonces no necesitas hacer esto. Ahora el sistema de entrada
es lo que
nos permite ejecutar código cuando
el jugador dice, presiona un botón en mi teclado
o botón en mi gamepad, o mueve su mouse
de cierta manera. Ahora en nuestra última
lección, miramos el sistema de entrada que viene
de Unreal Engine cuatro. Esto sigue presente
en Unreal Engine five. Por lo que pasamos por
los de nuestra última lección, si quieres comprobarlo. Pero en esta lección
vamos
a ver el nuevo sistema que lo ha implementado en
Unreal Engine cinco. Ahora lo bueno de
este nuevo sistema mejorado es que en realidad es
compatible con versiones anteriores. Así que si volvemos a nuestro personaje en
tercera persona aquí, todos estos eventos, estos todavía están utilizando el sistema de entrada
más antiguo de algún lugar motor para estos
eventos seguirá funcionando. Entonces si golpeo play, ahora que estoy usando el sistema de entrada mejorado, pero todavía puedo moverme. Todavía puedo mirar sobre estos
insumos seguirán funcionando. Pero ahora en realidad podemos crear
las nuevas entradas mejoradas, que haremos ahora,
saldremos de la obra un editor. Y comenzaremos haciendo clic derecho en
el navegador de contenido. Y vamos a ir a la opción
de entrada aquí, y vamos a crear una
nueva acción de entrada. Ahora bien, este es el equivalente a, si recuerdas de nuestra
última lección de ir a la opción de entradas aquí y
crear un nuevo mapeo de acciones. Esto es el equivalente a eso, pero ahora tenemos
su propio plan. Por lo que sea que nombremos, este
será el nombre de nuestro evento. Así que sólo voy a
llamar a este ejemplo de entrada. No hay espacios. Así ejemplo
de entrada como ese. Ahora si abrimos eso, sólo
voy a arrastrar
esto hasta arriba aquí. Ahora aquí es donde podemos establecer la configuración para nuestro evento de entrada de
ejemplo. Entonces para empezar,
tenemos el tipo de valor. Ahora bien, este es esencialmente el valor con el que la clave
suministra nuestro código. Si se establece en booleano,
entonces nuestra tecla está presionada
o no presionada. Pero podemos cambiar esto para decir, un eje algún día. Entonces este es un solo flotador que representa un
estado de nuestra entrada. Entonces si nuestro ratón, por ejemplo, se está moviendo a lo largo del eje x, entonces eso es de lado a lado. Este valor de flotación será negativo
o positivo dependiendo de la
dirección que nos movamos hacia él y luego la velocidad en la
que lo movemos, defina qué tan grande es el número. Ahora también hay un 2D y un 3D. Estaré explicando
el 2D un poco más tarde. El 3D es un
poco más avanzado, así que no vamos a entrar en
eso en esta lección. Entonces a continuación tenemos gatillos. Los disparadores definen lo
que realmente hace que nuestra entrada de ejemplo se ejecute. Entonces si creo un nuevo input, puedes ver que
ahora tengo un nuevo índice, y aquí puedo elegir entre
unas cuantas opciones diferentes. Ahora, estos esencialmente le dicen
al motor lo que tenemos que
ver con esta clave se vincula para
hacer ejecutar esta entrada de ejemplo. Por ejemplo, si lo
configuramos para que toque, tenemos que pulsar la tecla. Este evento está obligado
a, para hacerlo correr. Y si hacemos clic en la flecha
hacia abajo aquí, tenemos algunas configuraciones
para el tipo tap. Tenemos el umbral de
tiempo de lanzamiento del grifo. Entonces esto básicamente significa que
siempre y cuando presione una tecla y la suelte más rápido
que 0.2 segundos, nuestro
evento de entrada de ejemplo se ejecutará. Siguiente. Configuraremos un ejemplo en nuestro personaje en tercera persona para que
podamos llamar a nuestra entrada de ejemplo. Pero primero en realidad necesitamos
crear otro plano. Ahora, es posible que hayas
notado que en este blueprint realmente
podemos establecer una clave que queremos hacer ejecutar
nuestra entrada de ejemplo. Ahora, hay otro plano que en realidad define eso. Tendremos que crear eso. Por lo que haremos clic derecho
e iremos a la entrada. Entonces queremos contextos de
mapeo de entrada. Voy a llamar contexto de
mapeo de ejemplo mío . Y eso lo
abriremos. Ahora aquí es donde
definimos nuestros insumos. Entonces, por ejemplo,
nuestro ejemplo de entrada. Entonces lo que podemos hacer es dar clic en
el botón pequeño más aquí. Se puede ver que
tenemos estas opciones. Podemos establecer una entrada. Entonces vamos a usar
nuestro ejemplo y bomba. Entonces le estamos diciendo que este mapeo es para la entrada de ejemplo. Y luego aquí podemos
establecer qué claves
queremos ejecutar realmente esa entrada. Para que podamos hacer clic en el
pequeño icono del teclado aquí y puedo presionar
decir, L en mi teclado. O puede hacer clic en el
menú desplegable aquí y seleccionar una clave y
las opciones aquí. Entonces ahora le hemos dicho al motor
que cuando presionamos hacia fuera, queremos que ejecute el evento input de
ejemplo. Por lo que ahora podemos ir a nuestro
ThirdPersonCharacter y podemos crear un nuevo evento. Podemos buscar, por ejemplo. Se puede ver que
tenemos entrada de ejemplo. Si creo eso,
se puede ver que obtenemos este nuevo nodo de entrada. Ahora, este nodo de entrada se va a ver diferente o
tener diferentes salidas dependiendo de los disparadores que tengamos configurados en
nuestra entrada de ejemplo. Por lo que actualmente tenemos configuración de tap. Por lo que sus entradas van a
ser relevantes para la parte superior. Pero si fuera a mover esto y nos dirigimos de nuevo a nuestro
TercerPersonaje Persona. Se puede ver que las salidas
de nuestra nota de cambio. Ahora, estas salidas harán cosas
diferentes
dependiendo de los disparadores que
hayas configurado dentro de tu entrada. Por lo que vamos a añadir de nuevo en nuestra entrada de
tap o gatillo, lo siento, y ese es el
que está en la parte inferior aquí. Y dejaremos la
configuración por defecto. Por lo que vamos a guardar esto y podemos
volver a ThirdPersonCharacter se activan aquí se
ejecutará cada vez que
primero presionemos el botón de toque hacia abajo. Entonces para nosotros eso está ahí fuera. Lo establecí en nuestros contextos de
mapeo. Y el completado correrá
cuando levantemos la llave. Entonces lo que podemos hacer es
agregar una cadena de impresión aquí. Establecimos esto para que se active. Lo deletreas bien. Ahí vamos. Y voy a copiar y pegar esto. Conectaremos esto, lo
completaremos y lo pondré
completo así. Lo deletreas mal, pero ahí vamos. Así que ahora cuando compilo, esperaríamos que cuando toque hacia fuera
más rápido de 0.2 segundos, estos se imprimirían, pero
en realidad no lo eran. Y podemos ver
esto si le pego play por tap out, no pasa nada. Ahora eso es porque también
tenemos que hacer algunos cambios de código
dentro de nuestro personaje. Entonces para hacer esto, voy a
hacer un evento poseer. Y si recuerdas
de nuestra lección de eventos, este evento se ejecutará cada vez que un controlador tome el control
de este personaje. Entonces a partir de eso vamos a arrastrar fuera de nuestro
nuevo controlador, sí
costará también. Controlador de jugador. Y luego a partir de esto
necesitamos obtener el subsistema de
jugadores locales de entrada mejorada. Entonces a partir de eso necesitamos
agregar un contexto de mapeo. Ahora, esto es esencialmente decirle al controlador del jugador
que queremos
usar este ejemplo de contexto de mapeo
que configuramos overhead. Por lo tanto, necesitamos establecer
nuestros contextos de mapeo al contexto de mapeo de ejemplo. Así que ahora cuando
lo compilamos y golpeamos play, si toco hacia fuera, se puede ver que completa y activó
nuestra impresión hacia fuera. Ahora el propósito de tener que
establecer los contextos de mapeo te
permite tener diferentes esquemas de control
dependiendo de lo que quieras hacer. Entonces por ejemplo, es posible que tengas un personaje en tu
juego y un vehículo. Ahora tal vez quieras que los controles de los
personajes y los controles de los vehículos
sean completamente diferentes. Entonces lo que podrías hacer es tener un contexto de mapeo para tu personaje y luego un
segundo vehículo de combustible. Luego, en tu
personaje, podrías establecer los contextos de mapeo usando el
nodo agregar contextos de mapeo a tu contexto de
mapeo de caracteres, que podría tener
todas tus entradas para cuando tu jugadores
que controlan el personaje. Entonces en tu vehículo,
un plano, puedes tener el mismo código, pero eso podría establecer un contexto de
mapeo de vehículos en su lugar. Y luego ese contexto de mapeo, podrías tener
diferentes controles, tal vez para cambiar de marcha
y cosas por el estilo, cosas que no necesitarías
en un plano de personaje. Ahora esto es un poco
más complicado que digamos, el sistema de entrada anterior
que estoy arreglando para su uso. Pero este sistema es
mucho más
completo y una vez que
lo dominas, hay mucho más
que puedes hacer con él. Pero solo debes saber por
ahora que si
planeas usar el sistema de
entrada mejorado, necesitarás este código
en tu personaje para decirle al controlador
del reproductor
exactamente qué contextos de
mapeo
quieres usar. Y ten en cuenta que el contexto de mapeo
es donde realmente le dices a los eventos de entrada
lo que las claves pueden llamarlos. Ahora, es posible que hayas notado
dentro de nuestros contextos de mapeo, podemos agregar múltiples claves. Entonces si quieres decir
tener L y otra clave, ejecuta nuestro ejemplo y
pon, podríamos hacer eso. Entonces podría configurar esto para decir x Ahora, si presiono Play y toque X, se
puede ver que
también se está imprimiendo. Si presiono hacia fuera, se puede ver que también está
imprimiendo también. Si volvemos a nuestros contextos de
mapeo, se
puede ver que en realidad
tenemos una opción de disparadores aquí también
para cada una de las teclas. Ahora bien, si agregamos un disparador
dentro de nuestra entrada de ejemplo, esto afectará a todas
las claves que tengamos. Cualquier clave que agreguemos bajo nuestro
ejemplo, input tendrá seguir las reglas de activación que configuramos en
nuestra entrada de ejemplo. Pero tal vez no queremos tener eso en nuestro ejemplo de entrada. Queríamos que ciertas claves
tuvieran que hacer ciertas cosas. Entonces tal vez por ejemplo, para que L trabaje con, quiera tener que tocarlo. Pero para que X funcione, tal vez necesitamos
mantener pulsada la llave. Y si vamos, si hacemos clic en la
opción desplegable aquí y vemos que tenemos ajustes para sostener
esta presa clave. Entonces el principal es el umbral de tiempo de
espera. Esto significa que tengo que mantener
pulsado el botón durante 1 segundo antes de que se ejecute
el código. Si golpeamos play ahora, si presiono X, no
pasa nada hasta. Se pasó un segundo, y ahora mi gatillo en realidad está funcionando continuamente
hasta que me solté de x Se
puede ver completo, Simplemente ejecuta y se dispara,
había dejado de correr. Pero si intento tocar
mi x, no pasa nada. Si mantengo pulsado mi búho, no pasa nada porque
si te acuerdas, configuramos la regla de tap para mi L. Así que si toco, puedes ver el evento que se
estaba ejecutando ahora. Así que sólo para resumir
para los disparadores, si salimos del editor de plano, si desea que los disparadores afecten
a todas las teclas que
pueden llamar a un evento, desea agregar los que están
dentro del evento. Así que dentro de aquí, estableces los
disparadores aquí que
afectarán a todas las claves que
asignaste a ese evento. En el contexto del mapeo. Si desea que las claves individuales
tengan diferentes reglas de activación, puede hacerlo dentro los contextos de mapeo
bajo la clave específica. Y por supuesto, si
quieres agregar un gatillo, haces clic en el botón Agregar aquí. Se quiere quitar un gatillo. Sólo tienes que hacer clic en el icono de la
papelera para eliminarlo. Ahora, eliminaremos
la entrada x por ahora. También puede tener configuración de
varios disparadores. Entonces si agregamos un gatillo
y digo establecer esto para tocar, también
puedo agregar un segundo, y podría establecer esto para que se mantenga. Por lo que ahora nuestro botón L
funcionará si lo toco rápidamente o si lo mantengo pulsado
por más de 1 segundo. Y podemos probar esto. Puedo pegarle a play. Y si presiono o
si toco L rápidamente, se
puede ver que está funcionando. O si lo mantengo pulsado
y espero 1 segundo, se
puede ver que ahora disparado
se está ejecutando cada fotograma. Y si dejo ir, se pueden
ver las carreras terminadas. Ahora no voy a pasar por todo tipo de gatillo porque
hay bastantes. Y si alguna vez quieres
saber qué hacen, una buena manera de hacerlo es simplemente pasar el ratón sobre ellos en
este menú desplegable. Y en realidad te da una explicación
razonablemente decente de lo que hace cada uno. Ahora es posible que hayas notado en nuestra nota de evento aquí que
tenemos un valor de acción. Ahora, dependiendo
del tipo de entrada que hayas usado en los contextos de
mapeo, esto nos dará
un valor que
podemos usar para controlar el código. Entonces, debido a que solo estamos
usando un alqueno, esto solo ejecutará
uno cuando se presione la
tecla hacia abajo y 0 cuando no se presione
la tecla. Pero también podemos
cambiar este valor dentro de nuestra entrada de ejemplo. Aquí podemos configurar esto
para decir booleano en C que obtenemos esta notificación cada vez que cambiamos algo. Si volvemos al personaje en
tercera persona, se
puede ver que ahora se ha
cambiado a un booleano. Y esto sólo sería cierto
cuando se presiona nuestra tecla hacia abajo y falsa cuando
se suelta. Ahora también podemos usar
este valor para controlar cosas como están mirando dirección y nuestra dirección de
movimiento. De manera similar a cómo
el valor del eje en el sistema de entrada anterior controla nuestros controladores, su y pitch. Esas son las direcciones a las que va
a estar mirando
nuestra cámara. Ahora hay algunas maneras
diferentes de
hacer esto con el nuevo sistema. Te mostraré un par de
formas de cómo hacerlo ahora. Entonces comenzaremos borrando este evento porque ya no
estaremos usando eso. Y nos dirigiremos al navegador de
contenidos. En realidad voy a
cambiar el nombre de nuestra entrada de ejemplo. Yo sólo voy a
cambiarle el nombre, digamos mouse arriba, abajo. Podemos abrir esto. Y voy a cambiar
el tipo de valor a un eje uno D, Así que un flotador. Por lo que el valor
de salida de nuestro evento en nuestro ThirdPersonCharacter
será un flotador. Después nos dirigiremos a nuestros
ejemplos de contextos de mapeo. Ahora nos desharemos de nuestros mapeos actuales y sólo
voy a
crear uno nuevo. Y vamos a poner esto a
nuestro ratón arriba y abajo. Y voy a configurar
esta entrada al ratón Y. Y el ratón Y es nuestro
movimiento del ratón hacia arriba y hacia abajo. Entonces vamos a seleccionar eso. Así que ahora hemos puesto nuestro ratón arriba
y abajo a un valor de flotación. Hemos configurado nuestro ratón Y para
llamar a ese ratón arriba
y abajo evento. Entonces vayamos a nuestro
ThirdPersonCharacter y encontraremos la
mirada hacia arriba y hacia abajo. Y voy a
borrar esto porque ese es el viejo evento. Y vamos a reutilizar la nota de
tono aquí. Entonces vamos a hacer
ratón arriba o abajo. Se puede ver bajo eventos de acción
mejorada, tenemos nuestro ratón hacia arriba hacia abajo. Desde aquí. Vamos a arrastrar activado
a nuestro Add controller
pitch input. Y esto correrá sólo
cuando esté moviendo el ratón. Y tomará el valor de
acción y conectará esto y lo compilaremos. Ahora recuerden,
esto solo funciona porque tengo este
código aquí arriba en la posesión que le dice a
nuestro personaje que queremos usar nuestros contextos de mapeo de
ejemplo, que es lo que hemos usado para asignar nuestro
movimiento del ratón a nuestro evento. Entonces lo que haremos
ahora es golpear play y voy a mover
mi mouse hacia arriba y hacia abajo. Se puede ver que está funcionando, pero mis controles
en realidad están invertidos. Entonces lo que necesito hacer es invertir
los valores menos y positivos que se están suministrando
desde mi mouse. Y la forma en que podemos hacer eso
es que podemos usar modificadores. Por lo que irá a nuestro ratón
arriba y abajo evento aquí. Y aquí tenemos
una opción de modificadores. Ahora, los modificadores son un
poco más avanzados, así que no te preocupes demasiado si no lo consigues de inmediato. Pero lo que nos permiten hacer
es modificar el valor que está siendo suministrado por nuestra pulsación de tecla o el movimiento del ratón, por ejemplo. Por lo que añadiremos un nuevo modificador. Si hacemos clic en la
opción aquí,
tenemos algunas diferentes. Pero lo que queremos hacer es
invertir nuestro valor de salida. Y el Negate aquí
fue lo que hará eso. Entonces lo configuraremos para negar. Entonces ahora cuando golpeo play, si muevo el mouse hacia arriba, miro hacia arriba y si muevo
el mouse hacia abajo, miro hacia abajo. Eso otra vez, es básicamente
hacerlo para que cuando el ratón está emitiendo
un valor positivo, entonces negar convierte eso
en un valor negativo. Y luego al
revés cuando el ratón suministra un valor menos, entonces la puerta lo
convierte en un valor positivo, y eso es lo que le da a mi
cámara el movimiento correcto. Por lo que ahora necesitamos un sitio a sitio. Ahora mi movimiento de lado a lado, sigue funcionando
porque sigo usando ese viejo input aquí. Pero si borro esto
y presiono Play ahora, solo
puedo mirar hacia arriba y hacia abajo. No puedo mirar de lado
a lado para nada. Por lo que necesitamos establecer un movimiento de
lado a lado. Entonces haremos eso
haciendo clic con el botón derecho. Irá a planos o
lo siento, iremos a Entrada, acción de
entrada, y llamaremos a
este ratón izquierda, derecha. Y eso lo abriremos. Queremos establecer el valor de
tipo al eje un día. Y luego tenemos que ir a
nuestro ejemplo de contexto de mapeo. Y aquí, necesitamos
agregar un nuevo mapeo. Por lo que estamos agregando un nuevo evento. Esencialmente. Queremos poner esto a
nuestra izquierda y derecha. Tenemos que establecer una
tecla ahí o el
movimiento del ratón que
haga correr este evento. Entonces queremos mouse x, así que ese es nuestro
movimiento del ratón de lado a lado. Entonces seleccionaremos eso. Ahora en nuestro ratón hacia arriba y hacia abajo, usamos un Negate para invertir los valores que nos
suministra. No necesitamos hacer eso
con la izquierda y la derecha. Por lo que ahora sólo volveremos a
nuestro ThirdPersonCharacter. Y de nuevo, haremos clic derecho
y haremos tu mouse a la izquierda, derecha, o fue a la izquierda derecha. Tenemos el ratón a la izquierda, a la derecha, bajo eventos de acción mejorados. Y conectaremos nuestro
disparado para agregar controlador. Y tomaremos nuestro valor de
acción y conectaremos eso y compilaremos. Entonces ahora cuando voy a mi mapa de tercera
persona y le pego a Play, puedo mirar de lado a lado y
se está moviendo correctamente. Puedo mirar hacia arriba y
hacia abajo. Ahora estamos utilizando el nuevo sistema de entrada mejorado para controlar el movimiento de nuestra cámara. Ahora el sistema de entrada mejorado en realidad tiene otra forma en que podemos configurar este movimiento de
entrada del eje hacia arriba. Ahora, en lugar de tener que nodos
individuales para esto, en realidad
podríamos
hacerlo con uno. La forma en que podríamos
hacerlo es usando un flotador 2D en nuestro evento. Entonces lo que haremos ahora es eliminar el mouse arriba
y abajo evento aquí. Sólo usaremos el
ratón a izquierda y derecha. En realidad voy a renombrar
esto por solo movimiento del mouse. Por lo que ahora podemos usar solo una acción
de entrada para controlar. Ambos miran de lado a
lado y arriba y abajo. Así que en nuestro movimiento del ratón, hemos establecido nuestro eje, establecemos nuestro acceso a 2D. Entonces eso significa que en lugar de un solo valor de flotación
tendrá que un valor X y un Y. Entonces tenemos que ir a nuestro
ejemplo de contexto de mapeo. Y nos desharemos de
la de arriba aquí. Ya tenemos nuestro movimiento
del ratón aquí porque teníamos
antes acabamos renombrarlo y
tenemos nuestro ratón X aquí. Pero voy a
borrar que fueron simplemente
crear completamente un nuevo mapeo. Por lo que vamos a hacer ratón moverlos. Por lo que ahora tenemos que elegir los movimientos del ratón
que harán correr
este evento de movimiento del ratón. Entonces iremos a la opción aquí. Buscaremos el primer ratón Y. Ahora si recuerdas nuestro ratón
blanco como nuestro arriba
y abajo, y necesitamos
invertir ese valor. Entonces necesitamos un modificador, y necesitamos establecer
este modificador para negar que invertirá
el valle arriba y abajo. Entonces necesitamos un nuevo insumo. Entonces agrega una nueva entrada. Esto va a ser mouse x Ahora si recuerdas
antes teníamos eventos
individuales para
mouse white y mouse x, ahora estamos haciendo
ambos en el mismo evento. Por lo que ahora hemos añadido
tanto nuestro ratón blanco como un ratón X entradas. Cuatro de ellos irán al
ThirdPersonCharacter aquí. Y vamos a borrar estos eventos que
teníamos para antes. Así que ahora, en lugar de tener dos eventos separados
para cada uno de estos nodos que controlan arriba y abajo y el movimiento de lado
a lado, haremos clic derecho y
buscaremos el movimiento del ratón. Movimiento del ratón así. Y tenemos nuestro nuevo evento de
movimiento del ratón que configuramos. Entonces ahora tomaremos disparado, conectaremos esto para
controlar el pitch. Y conectaremos esto
a tu así. Ahora puedes ver que
tenemos un valor de acción, y esto es solo un vector 2D. Entonces, si arrastramos hacia fuera, podemos crear un
nodo break y eso solo nos
da acceso a esos valores de flujo
X e Y. Por lo que usará estos
valores para controlar nuestro movimiento de arriba y abajo y de lado
a lado de la cámara. Por lo que nuestra x es siempre
nuestro sitio a sitio. Entonces conectaremos esto a la entrada de
tu controlador. Y la y está arriba y abajo. Así que conectaremos esto a nuestra entrada de paso
del controlador. Y ahora podemos compilar. Y estamos listos para probar
esto para que podamos golpear play. Y si muevo el mouse así
decido que está funcionando bien. Pero si lo muevo hacia arriba y hacia abajo, sigue moviéndose de lado a lado. Podemos mover la
cámara hacia arriba o hacia abajo. Ahora, la razón de
esto es si
volvemos a nuestro contexto de
mapeo de ejemplo, el blanco del ratón y
el MouseX ambos simplemente nos
proporcionan un
solo valor de flotación. Ahora, si vamos a nuestro evento, pueden
ver que tenemos
dos salidas de flujo. Ahora, estas dos entradas para nuestro ratón arriba y
abajo y de lado a lado, o ambos están tratando de
usar ese valor x. Pero no lo pueden usar los dos. Tenemos que decirle a uno de ellos que necesita
usar la salida y. Entonces en nuestro contexto de mapeo, en los modificadores
para nuestro ratón Y, vamos a agregar
un nuevo modificador. Y vamos a establecer esto a los valores del eje de entrada de
Suiza. Y si lees la punta de la herramienta, en realidad explica lo que hace. Dice útil para
mapear una entrada 1D, que es lo que nuestro ratón Y es,
es una entrada 1D en el
eje y de una acción 2D. Entonces, si lo recuerdas, el movimiento del ratón es un eje 2D. Entonces nuestro switch va
a mapear el valor
del eje de nuestro Y mouse Y a
ese segundo valor y. Entonces usaremos eso. Por lo que ahora nuestro movimiento de lado a lado estará usando el valor X aquí. Y nuestro
movimiento hacia arriba y hacia abajo ahora estará usando el valor y debido a ese
modificador que acabamos de agregar. Si golpeo play, muevo mi mouse de
lado a lado hacia arriba y hacia abajo, y todo está funcionando correctamente. Así que eso es solo un par de
ejemplos de cómo puedes usar las entradas de
acceso con el nuevo sistema de entrada
mejorado. Ahora hay otros tipos
de modificadores que puedes aplicar a tus
entradas clave si lo deseas, puedes agregarlos
donde hayamos agregado en una puerta y valores de eje suizo o de
entrada. No
los estaré cubriendo en esta lección porque hay bastantes. Pero si alguna vez quieres
averiguar lo que hacen, puedes simplemente pasar el mouse sobre
él y te da una breve descripción de
lo que hace cada uno. Ahora podemos aplicar modificadores
a una entrada de un solo jugador, como hemos hecho aquí
con nuestra entrada Y del ratón. Hemos agregado el negate
y la entrada del switch. También puedes aplicar estos modificadores dentro de
nuestro movimiento del ratón. Ahora cualquier modificador
que agreguemos aquí
afectará a todas las teclas que agreguemos a este movimiento del ratón dentro de nuestros contextos de mapeo. Por lo que es importante recordar
que a veces
querrás agregar modificaciones solo a una entrada como lo hemos hecho
con el ratón Y, en lugar de simplemente
aplicarlas al tipo de entrada, porque eso
afectará a todas las claves que vincula a ese tipo. Así que solo para resumir, el sistema de entrada mejorado nos
permite crear acciones
de entrada como
el movimiento del ratón. Entonces podemos crear contexto de
mapeo, que es donde
podemos establecer qué claves llamaremos nuestras nuevas acciones
de entrada. Entonces podemos crear
esas acciones de entrada dentro de nuestro personaje o
controlar los planos. Entonces usando disparadores, podemos
elegir cómo se tiene
que presionar esa tecla para que el
evento se active, luego las modificaciones nos permiten modificar el valor de acción que
proporciona ese evento. Para que esos eventos funcionen, debemos asegurarnos de que
usamos el contexto add mapping. Y podemos usar eso obteniendo
el controlador del jugador, obteniendo el subsistema de entrada mejorada de jugadores
locales. Y eso nos permite
agregar un contexto de mapeo. Después establecemos qué
contextos de mapeo queremos usar. Así que hemos estado usando el contexto de mapeo de
ejemplo. Entonces eso es lo que se establece aquí. Si no tenemos este código, entonces los eventos de entradas que
hemos estado usando no funcionarán. Entonces eso va a ser
todo por esta lección. Esperemos que tenga una mejor
comprensión de cómo funciona
el sistema de entrada mejorado ahora y lo
usaremos un
poco más en nuestras futuras lecciones.
30. Lecciones adicionales (Etiquetas): Oigan a todos. En esta lección
vamos a estar echando un vistazo etiquetas de
actores y componentes. Ahora bien, si estabas siguiendo junto
con nuestra lección anterior, todo lo que he hecho aquí es crear una nueva plantilla de tercera persona
para que podamos empezar de nuevo. Por lo que comienza con las etiquetas son
básicamente solo una matriz de variables de nombre que tanto los ejes como los componentes tienen incorporados. Y por eso, significa que
podemos conseguir un acto como etiquetas o etiquetas componentes sin tener que costar
a otro Blueprint. Utilice interfaces de blueprint. Entonces podemos usar algunos de los
nodos que están integrados en el motor para comprobar a un
actor si tiene una etiqueta. O podemos hacer algo
como conseguir a todos
los actores del mundo
que tienen una etiqueta específica. Empezaremos yendo
al Third PersonCharacter y te mostraré donde
puedes agregar nuevas etiquetas. Yo sólo voy a arrastrar
esto hasta arriba aquí. Y entonces nuestros valores predeterminados de clase solo
van a
buscar etiqueta. Y aquí
se puede ver que tenemos una opción de etiquetas y es una matriz, y es sólo una matriz de
nombres como hemos utilizado antes. Por lo que si hacemos clic en el botón
Plus aquí, podemos agregar una nueva entrada. Puedo configurarlo para decir jugador. Podemos agregar nuevas
entradas también si
queremos simplemente haciendo clic en
el botón más, si queremos eliminar entradas, simplemente
podemos hacer clic en la flecha hacia abajo junto al cuadro de texto
y presionar eliminar. Por lo que ahora hemos añadido una etiqueta a nuestro Third PersonCharacter
y ese objetivo es plan. Ahora necesitamos un plano que
vaya a leer estos textos. Entonces voy a crear
un nuevo blueprint y el navegador de contenidos. Y seleccionaremos Actor y
yo sólo voy a llamar a ese gatillo, abrir eso. Voy a agregar un componente de
colisión de caja. Yo sólo
subiré eso un poco aquí. Vamos a ir a detalles tales
para oculto y desmarcar, oculto y juego solo para que
podamos sentarnos y compilaremos. Ahora como lo hemos hecho antes,
iremos al Event Graph. Voy a eliminar
la
reproducción inicial y los nodos tick, y en realidad vamos a utilizar el actor empezar a solapar nodo
que ya está aquí. Ahora bien, si recuerdas,
este nodo se ejecuta cada vez que algo se
superpone a nuestro gatillo y nos da acceso
al otro actor que
solapó el gatillo. Ahora, normalmente si quisiera obtener información que está en mi
Third PersonCharacter, tendría que arrastrarme y tengo un costo para mi personaje en
tercera persona o configurar una Interfaz de Blueprint para recuperar esa información. Ahora, debido a que nuestras etiquetas en
realidad están integradas en nuestro actor, no
tenemos que hacer esto porque esto
ya es un pin de actor. Para que podamos arrastrar hacia fuera
y podamos acceder a nuestras etiquetas para que pueda
buscar obtener impuestos. Y ya ves que puedo acceder a
mi array de tags. Entonces esto se comporta
igual que una matriz normal. Podemos alargar. Podemos
usar un nodo get con él. Todo lo que podemos arrastrar y
podemos recorrer todas las etiquetas que
se encuentran en nuestro actor. Ahora act en realidad ha
venido con algunas etiquetas, funciones
específicas
incorporadas para que podamos arrastrar hacia fuera y podamos
buscar tiene etiqueta. Podemos usar el actor
tiene tag node y esto solo comprueba es la
etiqueta que establecemos aquí. ¿ O este accesorio tiene
la etiqueta que colocamos aquí? Si lo hace, entonces eso
volverá verdadero, y si no,
volverá falso. Para que podamos probar esto. Ahora, puedo arrastrarme desde aquí. En realidad hará clic derecho
y buscará cadena de impresión. Conectaremos esto hasta
nuestro inicio a superponerse, y conectaré esto a
nuestra salida booleana,
compilaré, arrojaré uno de
estos al mapa de aquí, que lo hace un
poco más grande. Nuestra para re-escalar o para sacar a
colación la herramienta de re-escala, haré un
poco más grande. Golpea play. Ahora cuando me encuentro
con mi cubo aquí, puedes ver que está volviendo falso porque en realidad
no configuré el Typekit. Por lo que configuraremos esto para
compilar y darle a Play. Y ahora cuando me
topo con la custodia y veo que está volviendo verdad porque nuestro personaje jugador
tiene esa etiqueta de jugador. Ahora, debido a que nuestra etiqueta es solo una matriz de nombres que
podemos agregarle durante el
juego también. Entonces si quisiéramos, podríamos
arrastrarnos y hacer conseguir etiquetas. Y usando esta matriz PIM, podríamos arrastrar hacia fuera y
usar el Add Node. Y podríamos agregar una
nueva etiqueta a nuestro plan. Por lo que podríamos agregar say on fire tag. Y entonces borraremos estas
notas aquí abajo por ahora. Entonces podríamos arrastrar hacia fuera de
nuestras etiquetas otra vez y bucle. Así que recorremos todas
las etiquetas actuales e
imprimiremos cadena, las etiquetas actuales de los jugadores. Así que vamos a conectar esto
hasta la cadena de impresión y el elemento de matriz a la
cadena se compilará. Hit Play. Ahora cuando me
topo con la caja aquí, Se va a agregar una
nueva etiqueta a nuestra trama. Y luego se va a
imprimir esos nombres de etiqueta. Justo así. Ahora
también podemos agregar etiquetas a los componentes. Entonces, si salimos del avión, simplemente
me siento dolido y voy a
nuestro TercerPersonaje Persona. Nos desharemos de esta
búsqueda por el momento, y seleccionaré algo así como el componente cápsula aquí. Entonces este es un componente y es la forma de cápsula que está
en nuestro puerto de vista aquí. Y si con ella seleccioné
buscar etiqueta en el panel
Detalles en C, tenemos etiquetas de componentes. Ahora bien, estos funcionan exactamente
igual que nuestro después de impuestos es solo que estas etiquetas
específicas para este componente. Para que podamos agregar una nueva etiqueta, Oh cool, esta colisión. Y voy a compilar. Ahora si
volvemos a nuestro gatillo, tendré que lanzar a un personaje usando mi
otro pin de actor aquí. Porque si te acuerdas,
el actor
en realidad no contiene los componentes de la
cápsula, así que no podré encontrarla. Pero si elenco al personaje. Así. Y eliminaremos el
resto de este código. Entonces desde nuestro personaje, queremos obtener el componente
cápsula. Y eso es
aquí abajo, en la parte de abajo. Ahora a partir de esto podemos arrastrar
hacia fuera y buscar tiene etiqueta. Se puede ver que tenemos un
componente ha etiquetado nota aquí, y esto funciona
exactamente igual que nuestra etiqueta o actor
ha etiquetado nodo. Establecimos una etiqueta que
queremos comprobar. Colisión. Devolverá true o false si componente
cápsula de
este personaje tiene esta etiqueta de colisión. Por lo que arrastrará hacia fuera y otra cadena de impresión y
se conectará hasta aquí, presione Compilar. Y ahora cuando
atropellamos nuestra caja aquí, se
puede decir que está volviendo verdad. Por lo que las etiquetas son una
forma muy útil de poder agregar un poco de
información extra a cualquier actor. Entonces cualquier cosa que esté
en el nivel o cualquier componente en esos actores. Un buen ejemplo de cómo las
etiquetas pueden ser útiles es tal vez en el futuro se
crea un sistema de IA. Y quieres que esa IA
pueda decir si un actor es
amistoso o enemigo. Eso lo puedes hacer usando etiquetas. Debido a que todos los actores y tu nivel tienen etiquetas incorporadas, podrías agregar esas etiquetas a cualquier objeto y ellos
podrían leerlo. Ahora, los tanques también son útiles para conseguir actores o componentes. Entonces si aceptamos nuestro plan ya que es su cabello y
volvemos a nuestro gatillo. Sólo voy a
borrar estos nodos. Si lo recuerdas, tenemos el componente get
por notas de clase. Entonces si lo busco, obtengo componente por clase, puedes ver que hemos usado este nodo antes
y eso nos permite obtener un componente de
un blueprint específico. Ahora, también tenemos los
componentes get by tag node. Entonces, si creamos eso aquí, podemos obtener todos los
componentes que están dentro de un blueprint
con una etiqueta específica. Si recuerdas, cuando establecemos nuestra etiqueta dentro de nuestro Componente
Cápsula, estas son las etiquetas
que estará comprobando. Después emitirá todos
los componentes que tienen esa etiqueta
específica que establecemos. Por ejemplo, podría configurar
esto a colisión así. Vamos a arrastrar hacia fuera y vamos a obtener
la longitud de esta matriz. Y vamos a imprimir
cadena, la longitud, arrastrar hacia fuera de aquí y hacer cadena de
impresión así. Ahora cuando
atropellemos el gatillo, deberíamos verlo imprimir uno. Ahora también podemos conseguir a los
actores que tienen ataque. Entonces si volvemos a nuestro
gatillo y hacemos clic derecho y tal qué actor con etiqueta. Se puede ver que
tenemos el get all actors with tag node. Para que podamos crear eso.
Yesto conseguirá a todos los actores de nuestro nivel
que tengan una etiqueta específica. Ahora como advertencia, este es un nodo
bastante pesado de rendimiento, por lo que no quieres estar usando
esto en tecnología por ejemplo. También hay otro conseguir todos los
actores que hemos etiquetado ahora, si hacemos clic derecho y tal
va a conseguir todos los actores con etiqueta. Se puede ver que
hay un gueto actores de clase con etiquetas. Entonces si creamos eso, esto
hará lo mismo que
el nodo aquí arriba, pero limitará su selección a un acto
específico de tipo. Entonces tal vez tuvimos un montón de
actores con una etiqueta enemiga, por ejemplo, pero
sólo queríamos conseguir los que eran el
Third PersonCharacter. A lo mejor has tenido
muchos personajes que tenían la etiqueta enemiga, pero solo conseguimos uno para obtener
nuestro Third PersonCharacter, podríamos establecer esto aquí. Ahora, esto sólo devolverá planos de personajes en
tercera persona que tengan la etiqueta enemiga. Por lo que las etiquetas son una forma muy útil
de agregar un poco de información a cualquier objeto en
el mundo o cualquier componente. Entonces eso es todo por esta lección. Esperemos que entiendas
ahora
para qué se usan las etiquetas y también cómo
funcionan en el motor.
31. Lecciones adicionales (actores de spawning): Oigan a todos. En esta
lección te voy a estar hablando a través de actores de
desove. Apoyar a los actores
es cómo creamos nuevos objetos en el
mundo durante el juego. Por lo que comenzará con la creación un nuevo actor que
vamos a engendrar. Sólo voy a crear
una clase de blueprint. Se lo pondré a un actor, y sólo voy a
llamar a esta esfera de ejemplo. Y eso lo abriremos. Sólo voy a arrastrar
esto hasta arriba aquí. Y voy a agregar un nuevo
componente o búsqueda esfera y
crearemos una forma de esfera. También voy a habilitar, si bajamos a la física aquí, simular física, eso es para que si la
colocamos en el mundo, empiece a rodar
y tenga física. Entonces ahora volveremos al mapa. Yo sólo voy a
borrar este gatillo. Esto es solo de
nuestra lección anterior. No necesitas preocuparte por
eso si no lo tienes. E iremos a nuestro
Third PersonCharacter. Y luego aquí voy a
crear una nueva entrada de eventos. Entonces buscaremos el evento de
entrada uno. Y si recuerdas,
este nodo simplemente se ejecuta cada vez que presiono
uno en mi teclado. Ahora para engendrar actores
en el mundo, usamos el actor cuchara del nodo
de clase. Ahora ya hemos usado esto
un poco antes, pero en esta lección
vamos a
entrar en todo detalle
sobre cómo funciona. Entonces partiendo de lo más alto, tenemos la clase. Este es el tipo de plano que estamos
desovando en el mundo. Podrá seleccionar cualquiera de nuestros planos desde
nuestro navegador de contenido. Si pinchamos hacia abajo de nuestra cadera, bonita búsqueda, por
ejemplo, esfera. En C, encontramos nuestra esfera de
ejemplo. Es un poco difícil de
ver porque lo más destacado, pero es que
si hago clic en esto, se
puede ver que nuestra clase ahora
es ejemplo de natación. Se puede ver que el nombre
del nodo en realidad ha cambiado a spawn
actor ejemplo esfera. Y eso realmente cambia
el tipo de valor de retorno. Así que si nos desplazamos sobre eso, se
puede ver que esto es ahora una referencia de
objeto esfera de ejemplo, lo que significa que si tuviéramos variables, digamos en nuestro ejemplo allí, crearé una nueva
variable rápidamente, que llamó a este ejemplo. Puedo sondear. Ahora si me arrasto desde
el valor de retorno, sólo
puedo obtener esa variable de
ejemplo. No necesito
lanzar mi esfera a partir de este valor de retorno porque ya le
hemos dicho al nodo que estamos desovando
ese tipo y está establecido el valor de retorno a esa referencia de esfera de
ejemplo. Por lo que esto puede ser útil si
tal vez tuvo funciones o eventos que
desea que se enfríe
tan pronto como se genere el blueprint. Entonces a continuación tenemos
la transformada de desove. Esta es la ubicación en el mundo en la que se engendrará el
actor. Si arrastramos hacia fuera, podemos
usar la
nota make transform aquí que
nos permite establecer la ubicación, rotación y también la
escala del actor. Ahora también podemos, si
desconectamos esto, haga clic derecho en la transformación de
spawn aquí y hacer Split Struct Pin. Y se puede ver que
en realidad podemos acceder a la ubicación, rotación, y escala justo en el nodo aquí
si queríamos. O podemos hacer clic derecho de
nuevo y hacer recombinar, y eso
los combinará de nuevo juntos en este lápiz de transformación. Ahora cuando estás
engendrando a un actor, podría chocar o
algo más en el mundo mientras
intenta engendrar. Por lo que tenemos ajustes de
manejo de colisiones. Ahora, por defecto será la configuración predeterminada del
proyecto que se establece dentro de
la configuración del proyecto. Entonces tenemos siempre
spawn ignorar colisiones. Eso significa que no le
importan las colisiones. Van a desovar en
la ubicación que SAP. Hemos tratado de ajustar la
ubicación pero siempre chocar. Eso significa que si está
tratando de desovar en una ubicación que se superpone, otra
cosa es colisión. Intentará ajustar un
poco
la ubicación para que no se superponga
esa colisión. Entonces hemos tratado de
ajustar la ubicación, no desove si sigue deslizándose. Entonces eso hace lo mismo. Trata de ajustar la
ubicación que está
desovando si hay
colisión interfiriendo. Pero si no puede encontrar un lugar para desovar
sin colisión, entonces no engendrará a este actor. Y entonces tenemos no desovar, que significa que el
actor simplemente no va a desovar si choca
con cualquier cosa. Para esto, siempre quiero que
mi esfera desove. Entonces yo sólo voy a poner siempre
spawn, ignorar colisiones. Ahora la pluma instigador
es una referencia peón. Ahora, en realidad no necesitamos enchufar esto para que
nuestro actor genere, pero esto sí nos permite decirle
al actor esencialmente
qué jugadores engendraron. Esto puede ser útil, digamos, tal vez estés desovando
proyectiles de una pistola. Entonces querrías decirle a los proyectiles
qué jugador
los desove para que cuando esos
proyectiles golpeen a otro jugador, por
ejemplo, el
de un jugador pueda entonces ver quién los estaba dañando. Hay otros usos
para esto, por supuesto, no sólo para proyectiles, sino que eso es sólo un ejemplo. Entonces si hacemos clic en la
flecha hacia abajo aquí, tenemos al dueño. Ahora de nuevo, este es un bolígrafo que no
tienes que enchufar y que
generalmente se usa para replicación
y codificación multijugador. Pero en realidad nos permite
establecer una variable dentro del actor. Y si vamos a nuestra esfera aquí, se
puede buscar dueño. Y eso nos da la
propiedad del plano. Ahora bien, si hemos establecido esto cuando
estábamos desovando el
plano, lo hará, este nodo
volverá a donde sea que
conectamos al
pin propietario cuando lo
engendramos, en realidad podemos acceder
al instigador también. Entonces si vuelvo a
mis ejemplos por ella, podemos hacer conseguir instigador y podemos conseguir esa
variable también. Y esto volverá a
donde sea que
conectemos al pin instigador cuando
engendremos ese plano. Esas son todas las
entradas predeterminadas que vienen con este nodo. Pero en realidad podemos agregar nuestra propia si volvemos a nuestro
ejemplo, así que aquí, y selecciono mi
variable de ejemplo en estos
ajustes para ello, podemos usar la opción expuesta
en spawn. Ahora, antes de asumir esto, tenemos que tomar en
instancia editable. Entonces podemos tomar
en expos en el lugar. Y si compilamos y
volvemos al blueprint de
ThirdPersonCharacter, y lo compilaremos también. Deberíamos ver ese pin un pin. Ahora no me ha aparecido. Así que voy a hacer clic derecho
en el nodo y hacer refrescar nodo. Se puede ver que aparecieron
los pines. A veces esto sucede y solo
necesitas
refrescar el nodo. A veces eso cuando recompilas simplemente
aparecerá la pluma. Es que, es algo aleatorio. Pero como se puede
ver, ahora tenemos la entrada de la variable de ejemplo. Para que podamos
establecer esto en verdadero o falso. Y eso en realidad se
establecerá cuando los actores engendran ese valor
inicial variable. Y lo hemos hecho
con un booleano, pero puedes hacerlo con
cualquier variable que quieras. Si quisiéramos decir tener una
a flote y quisiéramos que esto
se llamara, digamos, daño. Podríamos hacer eso y podríamos configurar esto a incent dijo que es carrete no expuesto en el componente
spawn. Regresa a nuestro personaje en
tercera persona. Se puede ver si puedo sondear,
sigue sin aparecer, pero haré clic derecho en
refrescar. Ahora. Ya ves que ahora tenemos
una pluma de put dañina también. Entonces ahora estamos realmente
listos para engendrar nuestra esfera. Entonces voy a
conectar los prensados hasta nuestro ejemplo aquí. Y ahora necesitamos establecer una ubicación en la que
queremos dividirla. Ahora quiero desovar mi esfera en la dirección en que
mi cámara está mirando, digamos, tres metros de
frente a mi personaje. Entonces lo que haremos es que
haré clic derecho y sí obtengo rotación de control. Ahora esta es la
rotación de nuestra cámara. Voy a arrastrar fuera de eso y
haré el get rotation,
rotation x vector, y esto consigue la dirección hacia adelante
para nosotros, para nuestra cámara. Entonces multiplicas eso por, queremos cambiar
esta pluma a un flotador. Entonces si lo recuerdas,
hacemos clic derecho en él. Nosotros sí los
convertimos y lo cambiamos a un flotador. Voy a hacer
doble precisión. Entonces aquí es donde nos
fijamos lo lejos hacia adelante
queremos que nuestros objetos toquen. Entonces voy a hacer 300. Y esto es en centímetros, que mueven esto
hacia atrás un poco. Entonces tenemos algo más de espacio. Y luego tenemos que arrastrar hacia
fuera otra vez y hacer un add. Ahora necesitamos sumar la
ubicación actual de nuestro actor, porque actualmente solo
estamos moviendo una dirección Ford de 300
centímetros, pero no tenemos ubicación de
partida. Entonces sí conseguiremos la localización del actor. Vamos a enchufar esto aquí. Ahora, esta ubicación
emitida desde
nuestro Nodo Agregar será
nuestra ubicación de acceso. Pero Ford 300 centímetros en cualquier dirección
nuestras cámaras mirando. Para que podamos enchufar esto ahora
a nuestra ubicación aquí arriba. Ahora no tengo que hacer la
rotación porque es justo. Y sólo voy a
dejar la báscula a una por ahora para que se compile. Y ahora podemos probarlo. Voy a saltar al nivel. Le pegaré a play. Y si presiono uno, se
puede ver que
estamos desovando en nuestra esfera donde quiera que esté mirando, pero 300 centímetros por delante de nosotros. Entonces así es más o menos como
engendras en nuevos actores
en un mundo. A continuación, te mostraré
cómo destruir actores. Entonces para eso, en realidad
voy a reutilizar nuestro gatillo
de nuestra última lección. Si no tienes
esto o esto es una, podemos eliminar estos
nodos y el código. Y aquí, todo esto es, es una caja de colisión
que pusimos aquí, he dicho que oculto está
ticked off, y eso es todo. Entonces tenemos un evento que
empieza solapamiento aquí. Lo que vamos a hacer es
que vamos a comprobar que
el
actor superpuesto sea un ejemplo. Si lo es, entonces lo destruiremos. Entonces podemos alargar y
podemos o bien hacer costo a ejemplo, esfera como esta. Ahora cuesta una más útil para cuando realmente necesitamos obtener información de un plano. Porque
en realidad no necesitamos obtener ninguna información
de este blueprint que solo queremos comprobar, es un ejemplo en el que realmente
podemos arrastrar y obtener clase como esta. Y esto consigue la clase de actores. Por lo que se obtiene qué tipo de blueprint que es de
nuestro navegador de contenido. Y a partir de eso
podemos arrastrar hacia fuera cuando en realidad
podemos hacer iguales. Y podemos comprobar si es igual
a la esfera de ejemplo. Y si lo es, entonces
queremos destruirlo. Así que usaremos un
nodo f así. Y nos arrastraremos de
otro actor y sí destruiremos. Y hay un nodo llamado
Destroy Actor y que mata o destruye así a nuestro actor en
el mundo. Por lo que esto nos salva el casting. Son unos cuantos nodos extra, pero el casting sí requiere un
poco de rendimiento. Entonces si no tenemos que hacerlo, entonces lo ideal es que
no queremos lanzar. Entonces ahora queremos probar esto. Voy a ir al mapa
de tercera persona y voy a
sumar en nuestro gatillo. Lo pondré por aquí y
sólo lo haré un poco más grande. Escale un poco. Y le pegaremos a play. Y nací en una esfera. Entonces desove por aquí. Y puedo darle una patada porque tenemos
la física habilitada. Simplemente empújalo dentro
de esa caja y verás que se
destruye al instante. Ahora, hay otra
forma de destruir a los actores. Si volvemos a nuestro gatillo, podemos eliminar este nodo
Destroy Actor. Podemos alargar y podemos
hacer establecer vida útil como esta. Ahora el
nodo set de vida útil nos permite decirle a un actor que
queremos que destruya después de cierto tiempo. Para que pueda configurar esto para decir uno. Ahora, 1 segundo después de que la esfera se superponga al gatillo,
será destruida. Para que podamos
probar esto y darle a Play. Puedo desovar en una esfera. Empujaré esto dentro de nuestra
caja y verás que aún no se ha destruido y luego
destruye después de un segundo. Podríamos cambiar
este valor para decir tres solo para que sea un
poco más obvio. Presiona una de nuevo, empuja esto. Se puede ver que en realidad
se ha ido por el otro lado. Y luego destruye Porque
pidió esperar tres segundos. Entonces eso es todo por esta lección. Ojalá ahora
entiendas cómo
engendrar y destruir
actores en el mundo.
32. Lecciones adicionales (Organización de códigos): Oigan a todos, En esta lección les
voy a estar hablando a
través de algunas de las características de organización de
código que están integradas en el motor. Ahora, acabo de
juntar algún código aquí. Es sólo por un ejemplo, no
tienes que copiar
esto tú mismo. Es sólo para poder demostrar las diferentes características que podemos
usar para organizar nuestro código. Entonces, para empezar,
tenemos nodos de reencaminamiento. Ahora, si hago doble clic en
una línea blanca aquí, podemos crear estos nodos de
redireccionar. Ahora estos nos permiten controlar
hacia dónde irá realmente
la pluma. Y no tienen ningún propósito
funcional. No afectan la forma en que se ejecuta el
código. Todo lo que hacen es ayudarte a
mantener tu código ordenado. Por lo que puede
hacer doble clic en una línea blanca o una luz
variable. Entonces, por ejemplo, una línea
amarilla aquí abajo. Puedo hacer doble clic en eso y
puedo crear
nodos de redireccionar para eso. O puede hacer clic con el botón derecho, desplazarse hasta la parte inferior aquí, y puede usar la nota de redireccionamiento
AD aquí que también crea un nuevo
rotulador de redireccionamiento. Por lo que estos pueden ser
útiles si
quieres sortear algún código
que está en el camino. Entonces por ejemplo,
podría agregar una F sin propina. Y tal vez quería que este código se
ejecutara si algo era cierto, pero quería algún código por aquí para ejecutarlo si no era cierto. Para que pudiera copiar pega esto
y tú pones una C ahí. Entonces, en cambio, lo
que podría hacer es arrastrar de falso a mi
acto de engendro para notarlo, doble clic en esta
línea blanca, arrastrar estos hacia abajo. Ahora tenemos bonito código de aspecto
limpio. Este código se ejecutará si es cierto, entonces simplemente haremos una especie de zigzag alrededor de él y ejecutaremos
este código si es falso. A continuación tenemos comentarios. Ahora los comentarios son
realmente importantes para mantener tu código ordenado. Y también si estás trabajando con otras personas o comentarios
son importantes para que puedan ver fácil y
rápidamente tu código y ver
qué partes del mismo hacen. Por lo que para crear un comentario,
podemos resaltar algunos nodos y presionar la tecla
C de tu teclado. Y eso creará
un nuevo comentario. Podemos agregar algún texto
a esto para que pudiera escribir crear player, HUD. Por lo que ahora solo puedo
mirar este comentario. Sé que estos nodos de
aquí crean la cabaña del jugador. Ahora podemos controlar de qué
color son las casillas de comentarios. Entonces puedo cambiar eso por decir rojo. Puedo aumentar o disminuir el tamaño de la fuente
con este valor aquí, puedo mostrar una burbuja. Entonces, si nos alejamos, puede
ser un poco difícil ver el texto con los textos
burbujeados de la muestra encendidos. Se puede ver que
aquí tenemos
esta pequeña burbuja que rebaja
cuando nos alejamos. Y si seleccionamos nuevamente la casilla de
comentarios, puedes ver que tenemos la burbuja de
color que solo
nos permite cambiar el color
de la burbuja aquí. Entonces tenemos el modo de
movimiento. Ahora, si movemos la caja
con nodos dentro de
ella, trae esos nodos con ella. Pero si queremos apagar esto, podemos cambiar esto para comentar. Y ahora sólo se moverá la casilla de
comentarios. Si alguna vez deseas
editar el texto, siempre
puedes simplemente hacer
doble clic en él de esta manera. O si lo
seleccionas, también puedes cambiar el
texto del comentario por aquí. Otra forma en la que puedes
crear comentarios como si hicieras clic con el botón derecho, desplazarte
hasta la parte inferior. hay una opción de añadir comentario Aquíhay una opción de añadir comentarioen la que puedes hacer clic y que solo nos crea un
nuevo nodo de comentarios. También podemos cambiar el tamaño del nodo de
comentarios simplemente
arrastrando el borde en cualquier dirección que quieras
y puedes redimensionarlo. También puedes usar
cajas comunes dentro de cajas. Entonces si hago esto un
poco más grande, si solo selecciono, digamos estos nodos, puedo agregar
un nuevo comentario a eso. Y puedo agregar algunos
textos que para que pueda hacer crear widget, por ejemplo. Otra cosa buena de
los comentarios es si puedo hacer, si hago Control F,
eso nos permite
buscar en el blueprint
frases clave. Si busco, digamos,
crear jugador HUD, que es lo que está en mi comentario, puede ver que en
realidad encuentra común y me dice
lo que hay en ese comentario. Si hago doble clic en él, me
llevará a esa casilla de comentarios. A continuación echaremos un
vistazo a la nota colapsada. Entonces si alejamos aquí
y seleccionamos este código, por
ejemplo, si hago clic derecho en
uno de los nodos, puedo seleccionar Contraer nodos. Si hago clic en eso, aquí
obtenemos esta nueva nota que puedo nombrar. Entonces está fresco, este
fuego, por ejemplo. Ahora, todo lo que se hace es
tomar las notas que habíamos seleccionado y comprimirlas
hacia abajo en un nodo aquí. Entonces si hago doble clic en
esto, se puede ver que todos nuestros
nodos aún existen. Están aquí y
seguirán funcionando cuando presionemos uno, todavía
se engendró una esfera. Es que ahora todos estos nodos están contenidos
en este único nodo. Ahora podemos agregar entradas y salidas a nuestro
nodo de colapso si quisiéramos, similar a una
función o una macro. Entonces podríamos agregar una entrada, digamos una salida de pin de ejecución, y una salida de ejecución. También podríamos agregar una
salida booleana, por ejemplo. Y si abrimos
nuestro colapso saber T, Se
puede ver que yo nodo de entrada ahora tiene esa entrada de ejecución. También tenemos esa
salida de ejecución y nuestra pluma booleana. Ahora, a diferencia de una macro
o una función, en realidad no
tenemos que
ejecutar estos pines para que se ejecute el código dentro del nodo de
colapso. Porque nuestra prensa una nota aquí está dentro de nuestro nodo de colapso. Seguirá corriendo
sin que ejecutemos estos pines fuera
del nodo de colapso. Ahora personalmente, la
forma en que me gusta usar estos es agrupar código juntos. Entonces, por ejemplo, tenemos
todo este código aquí. Eso es más o menos sólo por
el movimiento del personaje. Entonces podríamos hacer clic derecho,
hacer nodo colapsado, y luego podría llamar a
esto un movimiento. Ahora todo mi código de
movimiento está en un solo lugar al que puedo ir,
eso es todo aquí. Y tal vez tendría
un nodo de colapso para mi mecánica de tiro y escalada y varias
otras cosas. De esa manera no
solo tienes toneladas de código y tu Event Graph. Si alguna vez desea deshacer tener su código en
un gráfico de colapso, siempre
podemos simplemente hacer clic derecho el gráfico colapsado y
podemos hacer el
nodo de expansión que realmente
eliminará nuestros aplaudimientos y traer todo nuestro
código de vuelta al Event Graph. Ahora es posible que hayas notado
la otra opción de colapso. Entonces si hacemos clic derecho
hay un colapso para funcionar y
Colapso a Macro. Ahora ten en cuenta
que estos eventos aquí no pueden existir dentro de
una función o una macro. Así que si tuviera que hacer clic derecho en
esto y hacer colapso función, verás que obtenemos un error, pero el código aquí en realidad podría
existir dentro de una función. Entonces si selecciono eso y
hago la función colapsada, se
puede ver que
crea esta nueva función, en realidad agrega automáticamente
la entrada para nosotros también. Si abrimos eso, verás
que nuestro código está ahí dentro. Si volvemos a nuestro gráfico de
eventos aquí, también
está la opción
para múltiples Event Graph. Para que vean
que sólo tenemos uno. Y si hacemos clic en la flecha
hacia abajo aquí, en realidad
podemos ver nuestra nota de
colapso de fuego también
nos da una lista de todos los eventos
actuales en
el gráfico de eventos. Podemos crear nuevas
gráficas de eventos y crear una nueva. Podría llamar a este
movimiento se por ejemplo. En nuestra nueva gráfica de eventos de movimiento, podríamos simplemente copiar y pegar o cortaré, así que haz Control X. Y pegaré esto en
nuestro gráfico de movimiento. Y ahora todos estos nodos
están en nuestra gráfica de movimiento. Todavía funcionan exactamente igual que si estuvieran
en el Event Graph, pero ahora están
dentro de una nueva gráfica. Podemos utilizar estos para, de
nuevo organizar su código. Ahora también podemos organizar nuestro panel
Mi Blueprint aquí. Entonces comenzaremos con variables. Si hacemos clic en una de
nuestras variables aquí, tenemos algunas opciones. Entonces esta variable
en realidad viene con una punta de herramienta porque viene con la plantilla de tercera
persona. Si selecciono mi variable de salud, por ejemplo, en C, podemos establecer descripción. Entonces puedo configurar esto para decir
los jugadores actuales, así se compilarán. Entonces ahora cuando cierro
el cursor sobre mi variable aquí, dice
que la salud actual de
los jugadores. Y si voy a los impagos de clase
y encuentro mi área de salud, pero que como pueden ver, si cierro sobre ella, dice
la salud actual de los jugadores. También podemos categorizar
nuestras variables. Entonces si selecciono mi
variable de salud aquí de nuevo, y bajo a categoría, podemos establecer una nueva categoría. Por lo que actualmente podemos configurarlo a cámara o personaje por defecto, pero podemos crear otros nuevos. Entonces si solo selecciono el texto y elimino eso,
podemos darle un nombre. Por lo que llamaré a esto
la categoría de salud. Pulse Enter. Verás que ahora nuestra variable está en su propia categoría de salud. Y podemos arrastrar
otras variables a esa categoría de salud con solo
arrastrarla así. O si lo arrasto de nuevo, podemos cambiar la categoría
aquí ahora para ayudar. Y simplemente sube variable
a esa categoría para nosotros. Ahora bien, si vamos a
nuestros incumplimientos de costos, verás que tendremos
una nueva categoría para salud. Entonces compilaremos primero. Después iremos a los valores predeterminados de clase. Se puede ver que ahora
tenemos una categoría de salud. Tenemos nuestra salud
inicial y nuestra variable de salud
tanto ahí. Ahora también podemos
agregar subcategorías. Entonces si selecciono mi variable de
salud aquí, y voy y hago clic en el texto, si hago clic para que todavía
tengamos salud ahí. Pero voy a agregar
una línea vertical. Ahora, esta es la llave en la esquina
inferior izquierda por encima de la tecla de las ventanas. Podría estar en una ubicación
diferente para otras distribuciones de teclado, pero ahí es donde está para mí. Si sostengo shift y
hago una línea vertical, ahora
puedo escribir otro nombre de
subcategoría. Podría hacer, digamos a partir,
por ejemplo, si pulso Enter, verás que ahora
nuestra variable salud está dentro de la categoría salud, dentro de la categoría inicial. Entonces ahora tenemos una subcategoría. Ahora, también podemos hacer lo
mismo para las funciones. Entonces si selecciono mi
func nueva función aquí que creé cuando
colapsé y nodos. Podemos decir una descripción
para esa función. Entonces podría llamar a esto,
esta es una función de prueba. Función. Ahora, al
pasar el ratón sobre él, se
puede ver que lee
esto como una función de prueba. Entonces tenemos una punta de herramienta.
Podemosestablecer una categoría de gorra. Así que puedes ver que en realidad tiene acceso a nuestras categorías de
variables. Por lo que podría establecer esto para decir
en la categoría de salud. Ahora lo tenemos dentro de
una categoría de salud. Y podemos hacer lo
mismo con las macros. Entonces si creo una nueva
macro y la selecciono, se puede ver que puedo decir Categoría, digamos la
categoría de la cámara por ejemplo, podemos cambiar su color también. Entonces si voy al Event
Graph, arrastraremos eso adentro. Simplemente le agregaré algunas entradas rápidamente
para que
sea un poco más grande. Por lo que agrega algunas entradas. Ahora sí podemos
cambiar el color. Entonces si selecciono esto, podemos cambiarlo para que sea como rojo. puedes ver ahora que
tenemos título rojo, pero
también podemos establecer una descripción si quisiéramos. Entonces esto es una prueba, ¿correcto? No es correcto. Si paso el ratón sobre
eso, se puede ver que dice Esto es una macro de prueba. Ahora estas son
útiles, sobre todo si estás trabajando
con otras personas. Puede dar
descripciones detalladas de lo que hacen las funciones, y las variables también lo hacen. También puede ser útil si estás trabajando en un
proyecto grande por tu cuenta, porque puedes tener cientos o incluso miles de variables
a través de muchos planos. Y podría olvidarse de lo que hace una variable o cómo funciona. Por lo que siempre es bueno tener una breve descripción de
lo que hacen tus variables. Por último, podemos decir descripción del
plano. Entonces, si subimos a la configuración de costos, podemos establecer la descripción del
plano actual. Por lo que se puede ver en
este momento dice Character Blueprint que
contiene lógica de movimiento. Si vamos al Navegador de Contenido
y colocamos el cursor sobre nuestro blueprint, puedes ver
que obtenemos esa descripción cuando colocamos el cursor sobre él
y el navegador de contenido, podemos cambiar esto a
lo que quisiéramos. Podríamos cambiar esto para decir el, este es el personaje principal. Ahora cuando compilo, cierro el
cursor sobre él y el navegador de contenido, puedes ver que este es
el personaje principal. Así que eso es más o menos
todas las formas principales que puede organizar el código
en Unreal Engine, es muy importante
mantener su código ordenado porque
realmente puede reducir el tiempo que se necesita para arreglar un error o agrega una nueva función
a tu proyecto. Y sobre todo si estás
trabajando con otras personas, los comentarios y tooltips para tus funciones y variables
son realmente importantes. Entonces eso va a ser
todo por esta lección. Esperemos que hayas aprendido un
poco más sobre cómo
puedes mantener tu
código de blueprint bonito y ordenado.
33. Lecciones adicionales (herramientas de depuración): Oigan a todos. En esta lección vamos a
estar echando un vistazo a algunas de las herramientas de depuración de blueprint
que vienen con el motor. Así que antes de empezar, he creado un nuevo proyecto de plantilla en tercera
persona, solo para que tengamos un nuevo
comienzo para esta lección. Ahora, una de las cosas que
hace que los planos sean realmente poderosos es
lo rápido que son para depurar. Porque podemos ver qué código
se está ejecutando en tiempo real. Podemos comprobar los valores de las variables fácilmente mientras el juego
sigue en ejecución. Y también podemos usar
puntos de interrupción para esencialmente pausar el juego cuando se ejecuta
cierta pieza de código. Entonces, para empezar, te
mostraré cómo podemos ver qué código se está ejecutando mientras
estamos jugando en editor. Entonces le pegaré a Play para
entrar al editor del plan. Si presionamos F8, se puede ver que ahora tengo el control
de mi mouse y
puedo seleccionar cosas en mi navegador de contenido o
alrededor en el editor. Entonces voy a abrir mi
ThirdPersonCharacter aquí. Se puede ver que
tenemos el editor abierto, pero no nos está mostrando qué código se está ejecutando
actualmente. Ahora eso es porque
tenemos
que decirle qué plano
queremos revisar. Entonces aquí arriba en el menú
desplegable, tenemos los diferentes planos
que existen en el nivel. Entonces solo hay un
terceroPersonaPersonaje y yo nivelaré. Entonces sólo tenemos una opción. Entonces voy a seleccionar eso. Ahora. Si tus ventanas son más pequeñas, si hago las mías un poco
más pequeñas así, puedes ver que no tengo
el desplegable. Eso está bien. Simplemente puedes hacer clic en esta
flechacita aquí. Y eso
te dará las opciones que no caben en la barra de herramientas. Se puede ver que aquí también podemos seleccionar nuestro personaje. Por lo que ahora con nuestro
personaje seleccionado, puedes ver que las líneas de
ejecución en varios de nuestros nodos están iluminadas y eso es porque
actualmente se están ejecutando. Ahora. Actualmente podemos
ver que varios nodos se están ejecutando dentro de nuestro
ThirdPersonCharacter. Y la razón de
esto es que estos son nodos de entrada de
acceso y
ejecutan cada frame. Ahora además de poder
ver qué código se está ejecutando, también
podemos comprobar
los valores de las variables si nos dirigimos a las entradas del mouse aquí
y le echo un vistazo a la búsqueda
recortada la entrada del mouse. Tenemos un valor de eje. Y si paso el ratón sobre
eso, podemos ver el valor actual, que
por el momento es 0. Y eso porque no
estoy moviendo mi cámara en juego por el momento. Pero tal vez quiero
ver cuál
es este valor mientras en realidad estoy
moviendo mi cámara por ahí. Entonces lo que puedo hacer es hacer clic derecho
y hacer ver este valor. Y nos sale esta pequeña burbuja de
discurso que dice el
valor actual de esa pluma. Entonces si tomo el control de mi personaje con solo
seleccionar la ventana gráfica, empiezo a mover mi cámara por ahí. Se puede ver que el valor en esa
burbuja de voz se está actualizando. Entonces esa es una
herramienta realmente útil para poder ver qué variables son mientras
estamos jugando el juego. Ahora, sí tiene
algunas limitaciones. Por lo general, no funcionará
dentro de una función. Entonces, si estás trabajando
dentro de una función, normalmente el valor del reloj no
funcionará dentro de esa función. Sólo funcionará dentro de
una gráfica de eventos o una macro. Ahora, es posible que también tengas múltiples
del mismo blueprint y tu nivel y quieras
ver qué código se está ejecutando en cada uno
de esos blueprints. Entonces si X fuera de
juego ahora y arrasto en un Third PersonCharacter
y simplemente lo coloco por aquí. Entonces le pego a play y veo
que actualmente nos está mostrando
qué código se está ejecutando, pero sólo dentro del personaje que estamos
controlando actualmente. Y si quisiéramos
ver el código que se está ejecutando dentro de
nuestro carácter alfa. Bueno, si vamos
al menú desplegable ahora puedes ver que tenemos otro personaje aquí en
nuestra lista de planos. Ahora, es posible que tengas cientos de
planos en tu nivel, por lo que es difícil
saber cuál esta lista es el plano
que quieres revisar. Entonces lo que podemos hacer es mientras
estamos expulsados, podemos seleccionar, o si presionamos F8, podemos seleccionar otro plano
como nuestro personaje aquí. Regresa a nuestro ThirdPersonCharacter,
haz clic en el menú desplegable. Se puede ver que en
realidad tenemos este práctico seleccionado entre paréntesis, y eso nos dice cuál la lista hemos
seleccionado en el nivel. Entonces podemos seleccionar eso y
luego podemos ver el código que se está ejecutando para este
Third PersonCharacter. Ahora bien, debido a que este personaje
no está siendo controlado, ninguno de su código se está ejecutando
actualmente. Entonces ahora avanzando, queremos
echar un vistazo a los puntos de interrupción. Ahora si vuelvo a mi personaje engendrado aquí en el menú desplegable para que
podamos ver que el
código se está ejecutando. Sabemos que tenemos los planos
correctos seleccionados. Lo que haremos es
salir de planetas, salir
y voy a borrar mi personaje aquí,
así que borraré eso. Ahora. Vamos a crear
una nota de inicio de reproducción. Y yo sólo voy a arrastrar hacia
fuera y hacer una cadena de impresión. Y si hacemos clic con el botón derecho en este nodo, se
puede ver que podemos
agregar un punto de interrupción. Y si hacemos eso en C, nos sale este pequeño signo de
exclamación aquí y vamos a compilar, sólo deshazte de ese signo de
exclamación. Entonces este símbolo rojo significa que
este nodo tiene un punto de interrupción. Ahora, los puntos de interrupción detienen el código o detienen el juego cuando se ejecuta
el nodo. Entonces si le pego a play ahora, se
puede ver que los
juegos actualmente se pararon. Y nos está diciendo, Hey, este nodo con el
punto de interrupción como corriendo. Ahora, esta es una
herramienta realmente útil si quieres
comprobar para ver si se está ejecutando un trozo
de código. Ahora, si queremos reanudar la
reproducción y el editor, solo
podemos dar clic en este
pequeño botón de reproducción aquí arriba y podemos tomar el control de
nuestro personaje como de costumbre. Ahora, nuestros puntos de interrupción también tienen algunas otras características
que podemos usar. Entonces si salimos de avión ahora, sólo
voy a añadir algunos nodos para imprimir cadena o añadir una F. Y añadiremos un nodo flip-flop. Y a partir de eso añadiremos, digamos, un par de cadenas de impresiones en cada una de las salidas, así. Ahora, si tocamos a un editor, se
puede ver que corre nuestro
punto de interrupción. Ahora. Podemos retomar
como lo hicimos antes. Todo lo que podemos usar el botón de fotograma
siguiente, y que nos llevará a través de
cada nodo de nuestro código. Entonces si presiono esto, se puede ver que corre
el nodo de la rama. Si lo presiono de nuevo,
nos llevará al nodo flip flop. Y la razón por la que la
pluma verdadera se está ejecutando es porque nuestra condición en nuestro nodo de
sucursal está marcado. Entonces es cierto. Ahora con los nodos
flip-flop seleccionados, si vuelvo a hacer clic en el botón de
fotograma siguiente, se
puede ver que en realidad
nos lleva a un plano completamente nuevo. Aquí tenemos estos códigos
que en realidad no escribimos. La razón de eso
es nuestro nodo flip-flop como una macro
integrada en el motor. Entonces nos va a llevar a través sus nodos en su propio código. Entonces pasaremos por esto y podremos seleccionar para
cada uno de estos. Ahora cuando llegamos al
final y lo presiono de nuevo, nos lleva de vuelta a nuestro
ThirdPersonCharacter fuera la entrada a del nodo flip-flop y ejecuta el nodo print string. Esta es otra
característica realmente útil de los puntos de interrupción. Podemos pasar por nuestro
código un nodo a la vez mientras el juego se está ejecutando para
ver qué código se está ejecutando. Ahora, hay algunos otros
controles para nuestros puntos de interrupción. Si hacemos nuestra ventana un
poco más grande aquí
puedes ver que tenemos algunas opciones
adicionales. Entonces lo que voy a hacer es
reiniciar nuestro editor de planes. Ahora hemos vuelto a
nuestro punto de interrupción original. Ahora tenemos algunas opciones
diferentes, así que tenemos paso al
siguiente nodo para ser ejecutado. Esto funciona más o menos
igual que nuestro cuadro único avanzado. Ahora, si presionamos esto y
ves que nos mueve
al siguiente nodo. Ahora, si vuelvo a presionar esto, pueden
ver que nos lleva
a nuestro nodo flip-flop. Ahora, tal vez en
realidad no me importa lo que está pasando en este nodo es un nodo que está
integrado en el motor. Sé que está funcionando. Así que tal vez solo
quiero saltarme este nodo y el
código dentro de él. Lo que podemos hacer es presionar este botón siguiente y eso
en realidad simplemente saltará llevándonos a través del código
dentro de ese nodo. Entonces solo podemos darle a
eso y ver que no nos lleva a
las macros estándar. Simplemente saltamos por encima de eso y
podemos usar esto con
funciones también. Entonces, si tienes una función
en tu código y no
quieres pasar por cada nodo
que está dentro de la función, solo
puedes usar este
botón para
saltarla y ver cuál es el resultado. También podemos usar esta
pequeña lupa para llevarnos a los nodos
actualmente seleccionados. Entonces si estaba mirando alrededor mi código y quería
ver dónde estaba, solo
podía hacer clic en esto
y nos lleva hasta allí. Entonces así es como podemos navegar mientras usamos nuestros puntos de interrupción. Y si tu ventana es más pequeña, así que tus ventanas así, no olvides que
siempre puedes encontrar estas configuraciones en el menú desplegable de
aquí si tu barra de tareas
es demasiado pequeña. A continuación, vamos a echar un vistazo la ventana del depurador de blueprint. Entonces si pasamos al desplegable de
depuración y hacemos
clic
en el depurador de blueprint aquí puedes ver que tenemos este
panel y esto nos da alguna información
sobre el blueprint que actualmente tenemos seleccionado. Por lo que se puede ver si hago clic en la flecha hacia abajo aquí
al lado de mi nombre de los planos, se
puede ver que la variable
que nos pusimos a ver, si vamos por aquí, este valor del eje
también se enumera aquí. Entonces tal vez si has tenido muchos valores
diferentes que
estabas viendo, podrías abrir
esta ventana y ver
aparecer todos ellos aquí abajo. También podemos ver los puntos de quiebre. Entonces aquí es donde tenemos puntos de interrupción en el código
que nos dice el nodo. Y si hacemos clic en
él, en realidad nos
llevará a ese nodo. Entonces tal vez si tienes
un punto de quiebre en tu código y has
olvidado dónde lo pones, siempre
puedes simplemente dar clic en esto para llevarte a donde está
ese punto de quiebre. Por último, tenemos el rastro
de ejecución. Ahora esto nos dice lo que se
está ejecutando actualmente
en nuestro plan. Por lo que en este momento ya
puedes ver que tenemos el evento empieza a jugar
e imprimir cuerda. Eso se debe a que se está
ejecutando el punto de interrupción. Por lo que todo nuestro código
está actualmente congelado. Pero si hago clic en el botón
Reanudar, verás que ahora tenemos
nuestros eventos del eje de entrada, y estos se están
ejecutando cada fotograma, por lo que estos se
actualizarán continuamente. Ahora, si salimos de nuestro
editor de planes y volvemos a pulsar Play, ahora se activa el
punto de interrupción. Y si pasamos a
la pila de llamadas aquí, realidad
podemos ver qué hizo
exactamente ese gatillo de
punto de interrupción. Ahora, actualmente solo nos estamos
quedando sin y comenzar lugar. Por lo que es bastante fácil de ver. Se puede ver que nos está diciendo en el ThirdPersonCharacter, el evento que comience a jugar en el Event Graph es lo que está
desencadenando nuestro punto de interrupción. Pero es posible que tengas una
situación en la que tal vez tengas un evento
personalizado que ejecute algún código y ese
cliente luego podría ejecutarse en muchos lugares
diferentes. Tal vez otros
planos también. Y tal vez ese código se está ejecutando cuando
en realidad no quieres que lo haga, pero no sabes qué evento en qué blueprint lo está
llamando a ejecutarse. Aquí es donde la pila de llamadas
puede ser realmente útil. Entonces si salimos de editor de
avión por ahora, pondré un ejemplo. Entonces si creo un
nuevo respiradero de cliente, creando un evento personalizado, y llamaré a este ejemplo. Conectaré esto
hasta nuestro código aquí. Y retomaremos tocar nota y
llamaremos a ese evento, así que lo llamaré ejemplo. Ahora, tal vez también tenemos otros lugares que están llamando a
nuestro evento de ejemplo también. Entonces si hago clic derecho y
busco eventos de entrada uno, y voy a copiar y pegar esto. Y voy a establecer esta entrada
a dos, por ejemplo, con
sólo hacer clic en el
pequeño botón del teclado aquí y luego presionar tubo. Y también llamaremos a
ese evento desde estos insumos también, así. Así que copie y pegue estos en,
y luego compilaremos. Entonces ahora cuando presionamos
a Play para planear el editor, se
puede ver que nuestro punto de interrupción
se está ejecutando y ahora nos está diciendo el código que está
llamando a ese punto de interrupción. Podemos ver que en el
ThirdPersonCharacter, el evento comienza a jugar. Entonces, si nos trasladamos
a nuestro evento comenzar juego se está ejecutando en
el Event Graph y eso está enfriando el
evento de ejemplo en nuestro gráfico de eventos. Y luego romperé
punto como siendo llamado. Pero si reanudamos el juego y sólo tomaré el
control de mi personaje. Se puede ver en el fondo ahí me estoy moviendo
alrededor de la cámara. Si presiono uno, se puede ver que nuestro punto de interrupción se está
ejecutando y ahora nos está
diciendo que se está presionando la única
entrada. Eso es genial. Y eso está en el Event Graph. Eso entonces está enfriando a nuestro cliente de
ejemplo entonces, entonces eso es lo que está
desencadenando nuestro punto de interrupción. Y luego lo mismo
para si presiono también, puede ver que en
nuestra pila de llamadas se cambia a dos en
el Event Graph, enfriando el evento de ejemplo, y eso también está en el
Event Graph. Ahora, esto también puede
funcionar para funciones. Entonces, si agrega un punto de interrupción
dentro de una función, entonces cada vez que se llame a
eso, también aparecerá en
la pila de llamadas qué eventos hicieron que se
ejecutara esa función. Y esto es realmente útil en proyectos
más grandes
porque es posible que tengas funciones y eventos que
se están llamando en muchos
lugares diferentes. Y si ese código se está
ejecutando cuando no
quieres que
sea, puede ser realmente
difícil
rastrear dónde exactamente
se está enfriando. Entonces, usando una pila de llamadas
y el punto de interrupción, puede encontrar muy
rápidamente qué eventos están llamando
realmente a esa
función o evento. Ahora, lo último que
encuentro realmente útil a la hora depurar código es el nodo de cadena de
impresión. Ahora lo hemos estado usando
mucho en nuestras lecciones anteriores, pero te voy a
mostrar algunos de los usos para cuando
estás depurando código. Entonces lo que haremos es
salir de nuestra obra un editor, y solo voy a cerrar
nuestro depurador de blueprint
maximizará nuestro ThirdPersonCharacter y cerrará las macros estándar. Ahora, imprime cadenas
o algo que uso todo el tiempo cuando
estoy depurando código. Podemos agregarlos a las cadenas de eventos para saber cuándo se está ejecutando un evento, podemos usarlos para
imprimir valores variables. También podemos usarlos
solo para proporcionar información sobre algunos
de nuestros ajustes. Entonces por ejemplo, digamos que tuve
un inicio sanamente. Por lo que puedo llamar a esto
inicio salud. Y podría tener
un cheque y podría comenzar placode por ejemplo, que podría hacer es mayor que 0. Y podríamos hacer un nodo F. Conecta esto así. Entonces probablemente queremos que nuestra ayuda inicial sea
siempre mayor que 0. Entonces lo que podemos hacer es si el signo de salud
no es mayor que 0, podemos agregar una cadena de impresión
y sólo podemos poner el inicio es 0. Ahora bien, si fuéramos a tocar un editor y estamos
empezando con 0, si retomamos después de
este punto de quiebre, se
puede ver que nos está
dando una advertencia diciendo:
Oye, estás empezando
la salud es 0. Por lo que puedes usar estos para
darte advertencias sobre tal vez un ajuste no es correcto o algo que
no se está configurando en absoluto. Esto también puede ser realmente útil si estás trabajando
con otras personas. A lo mejor están
ajustando un ajuste y lo cambian incorrectamente. Entonces cuando toquen un editor, puedes tener una
configuración de advertencia que les dirá, oye, esta configuración es incorrecta,
necesitas cambiarla. Ahora, voy a imprimir cadena también
tiene algunas otras opciones. Entonces si hacemos clic en la flecha
hacia abajo aquí, tenemos pantalla de impresora. Ahora, si esto está
marcado, será visible en el juego en
la pantalla del jugador. Tenemos que imprimir un registro. Ahora bien, si esto es cierto, también se agregará
al registro de salida. que pueda encontrar la ventana
de inicio de sesión de salida, luego baje al
registro de salida aquí y marque eso. Se puede ver que
tenemos nuestro registro de salida. Si toco un editor, ahora voy a
quitar nuestro punto de interrupción aquí solo para que no se ejecute. Entonces, para eliminar un punto de interrupción, simplemente haga clic derecho en
el nodo que tiene el punto de interrupción en él y simplemente
seleccione Eliminar punto de interrupción. Ahora cuando golpeamos play,
se puede ver que nuestro texto
se está imprimiendo. Y si nos fijamos en
el registro de salida, también
tenemos bajo log
blueprint mensajes de usuario. Tenemos esos mensajes
de nuestras cadenas impresas. Ahora tenemos
algunas otras configuraciones para nuestros nodos Print String. También tenemos el color del texto. Esto cambiará el color
que aparece en la pantalla. Entonces tenemos duración. Estos son los segundos que
aparecerá en la pantalla. Ahora es algo
que me gusta hacer con mis nodos Print String es cuando los
estoy usando alrededor de mi código. También creo una variable
llamada show debug text. Y podemos sondear solo para obtener
nuestra tienda de valor predeterminado. Ahora tiendo a conectar esto hasta la pantalla de la impresora
e imprimir un registro aquí. Entonces ahora si quiero apagar
todas mis cadenas de impresiones, tal vez estoy tomando capturas de pantalla o video o algo así. No quiero que se muestre mi
cadena de impresión. Yo sólo puedo entrar en
el plano. Puedo seleccionar mi show debug
texts on ticket o tomarlo encendido, y eso encenderá o desactivará
todas mis cadenas de impresiones, siempre y cuando las tenga, esta variable conectada
hasta o mis
cadenas de impresión como esta. También puedes simplemente seleccionar todo esto hacer colapsar para funcionar. Podemos llamar a esta función
algo así como error. Textos como ese. Lo abriremos. Por lo que
ahora aquí tenemos nuestra cadena de impresión con
nuestro show debug text. Podemos arrastrar hacia fuera desde la cadena hasta el nodo de entrada para agregar un pin. Podemos hacer lo mismo con la
duración y el color de los textos. Compile esto. Y ahora en nuestro Event Graph, tenemos nuestro nodo de texto de error. Podemos decir agregar un mensaje
diciendo que el inicio es 0. Podemos establecer la duración, guardar tres segundos y
los textos a leer. Y siempre y cuando nuestro texto de
depuración de show esté marcado, si presiono play, se puede ver que nuestro texto
está apareciendo aquí. Pero ahora, si quisiera ocultar todas mis cuerdas de huellas,
podría desmarcar esto. Y si estuviera usando esta función en lugar de estos nodos
Print String, así que tenía un, tal vez
un mensaje aquí. Digamos ejemplo, corre. Y podríamos cambiar
el color a azul, y sólo borraremos
estas cadenas de impresiones. Por lo que ahora si nuestro show debug texts está ticked
off estos ron blanco. Pero si lo tomamos, ahora
podemos ver esos mensajes. Entonces eso va a ser
todo por esta lección. Esperemos que ahora entiendas algunas de las herramientas que están
integradas en el motor que
te ayudan a depurar tu código.
34. Lecciones adicionales (cronogramas): Oigan a todos. En esta
lección vamos a estar echando un vistazo al nodo
de líneas de tiempo. Entonces, para empezar,
solo voy a crear un nuevo plano en el que
podamos caminar. Por lo que vamos a crear una
clase de blueprint establecida para actor. Y yo sólo voy
a llamar cubo mío. Y eso lo abriremos. Yo sólo voy a arrastrar el
mío hasta arriba aquí e ir al Event Graph. Entonces solo para darte
una breve explicación lo que hacen los nodos de la línea de tiempo, nos permiten cambiar tus
valores lentamente con el tiempo. Son realmente buenos para
animar cosas como, por ejemplo, una puerta. O si quieres que un actor se mueva de un
lugar a otro, pero quieres hacerlo
agradable y sin problemas. Entonces, para crear una nueva línea de tiempo, simplemente
haremos clic derecho
en nuestro Gráfico de eventos aquí y buscaremos la línea de tiempo. Y puedes ver que tenemos
una opción para Add Timeline. Ahora, no puede agregar
líneas de tiempo en funciones, y no puede agregar
líneas de tiempo en componentes. Entonces eso es sólo
algo a tener en cuenta cuando estás
usando líneas de tiempo. Entonces haremos clic en Agregar Línea de Tiempo
y ya puedes ver que aquí
obtenemos este nuevo nodo
y puedo nombrarlo. Por lo que sólo voy a llamar a
mi ejemplo línea de tiempo. Así. Ahora, vamos a estar pasando por todas estas entradas y
salidas en un momento. Pero lo que haremos es hacer
doble clic en el nodo de la línea de tiempo, y eso
abrirá esta nueva ventana que en realidad no hemos
visto antes. Y aquí es donde
establecemos qué valores queremos que nuestra línea
de tiempo pueda cambiar. Lo que haremos es
crear una nueva pista. Se puede ver que podemos
seleccionar entre flotadores, vectores, eventos, y colores. Simplemente comenzaremos
con un flotador simple, así que agregaremos una
pista de flotación y lo podremos nombrar. Por lo que sólo voy a llamar
a la mía
Float, Float, salida así. Ahora aquí tenemos una línea de tiempo
que esencialmente nos dice cuál será el valor de nuestra salida de
flujo. Tiempo específico. Por lo que actualmente no hemos
agregado ningún punto de datos aún. Entonces nuestro valor de flotación sólo
va a ser 0 todo el tiempo que
nuestra línea de tiempo se reproduzca. Pero si queremos
sumar nuevos puntos,
podemos, podemos sostener
Shift y dar clic. Se puede ver que ahora tengo un nuevo
punto en mi línea de tiempo aquí. Y aquí arriba podemos fijar el
tiempo en que este punto está para arriba. Entonces voy a poner el mío a 0. Entonces eso es justo al
principio de la línea de tiempo. Y entonces podemos establecer un valor. Si tuviera que configurar esto para decir uno, se
puede ver que
en realidad ya no puedo ver mi punto. Bueno, lo puedes hacer es dar clic en
este pequeño botón de aquí, y eso traerá a
la vista todos los puntos que hay en
tu gráfica. Para que puedas ver mis puntos
detrás de estos botones arriba ese valor uno y a la vez uno. Pero también podemos sumar puntos
adicionales. Y esto es lo que nos permite
cambiar nuestro valor con el tiempo. Entonces si
vuelvo a hacer clic por aquí, pueden
ver que he añadido un nuevo punto y tenemos un nuevo tiempo. Entonces voy a poner esto a uno. Voy a dejar
el valor en uno, y seleccionaremos nuestro punto
original por aquí, y voy a
establecer su valor en 0. Ahora, puedes ver que
cuando comience nuestra línea de tiempo, la primera está en 0, por lo que su valor será 0. Pero a medida que el tiempo avanza, puede ver en la parte superior aquí
tenemos el Valle del tiempo, una vez que llegue
al valor de uno, y ese es nuestro tiempo,
el valor
de salida de nuestra flotación será uno. Si volvemos a nuestro gráfico de
eventos aquí, verás que en realidad tenemos una nueva salida en nuestro nodo, y esa es nuestra salida flotante. Y esto es lo que
va a devolver ese valor de nuestra línea de tiempo. Ahora, actualmente nuestra
línea de tiempo se ejecutará durante cinco segundos después de
que se le diga que se ejecute. Y la razón de eso es aquí
arriba dice longitud cinco. Ahora bien, si tuviera que cambiar
esto para decir uno, se
puede ver que nuestra línea de tiempo aquí se ha hecho un poco más pequeña. Y eso se debe a que el área
resaltada es el tiempo que correrá para ello porque hemos
grabado durante 1 segundo, se
puede ver que ahora está
parando 1 segundo. Entonces ahora esencialmente, cuando
le decimos a nuestra línea de tiempo
que se reproduzca, dará salida a un valor comienza en 0, que
será un flotador. Y luego a medida que
el tiempo avanza, se puede ver, si pasamos el ratón sobre,
se puede ver que el valor aumenta a medida que pasa el tiempo. Y eso es porque nuestro
segundo está por aquí a la una. Por lo que nos da un
incremento lineal en el valor. Entonces ahora realmente
aprenderemos cómo podemos ejecutar nuestra línea de tiempo si volvemos
al Event Graph aquí, se
puede ver que tenemos
una obra de teatro y juego desde el principio. Y esto es lo que le dice a
la línea de tiempo para jugar. Y por lo general se reproducirá desde el inicio de la línea de tiempo. Entonces cuando le decimos que juegue, comenzará desde el tiempo
0 y comenzará, nuestro valor es 0 valor. Entonces tenemos parada, que detendrá la línea de tiempo para el dinero y su punto actual. Hemos revertido,
lo que invertirá la línea de tiempo corriendo en
cualquier punto actual que sea ese. Entonces, por ejemplo, si nuestra
línea de tiempo estaba a 0.2 segundos de correr y luego le
dijimos que retrocediera. Se invertiría de
0.2 segundos de nuevo a 0. Entonces hemos invertido desde fin, lo que significa que
la línea de tiempo se
invertirá desde los puntos finales. Entonces las probabilidades son de 1 segundo, por lo que se revertiría
de uno atrás a 0. Y luego, por último,
tenemos el nuevo tiempo establecido. Y esto nos permite
realmente decirle a la línea tiempo de
qué hora exacta
queremos que corra. Ahora, cuando nuestra línea de tiempo
se está ejecutando realmente, lo que sucederá es que tenemos
estos dos nodos de salida aquí. Ahora la actualización ejecutará cada fotograma que esté ejecutando la
línea de tiempo. Entonces, si nuestra línea de tiempo está
establecida para ejecutarse durante 1 segundo, que
es actualmente, esta se ejecutará durante 1 segundo cada fotograma individual. Y luego una vez que la línea de tiempo
haya terminado de ejecutarse, se ejecutará
el PIM terminado. Ahora también tenemos una dirección. Ahora, nuestra línea de tiempo
podría estar corriendo hacia adelante
o hacia atrás. Para saber de qué manera se está ejecutando. Podemos arrastrar hacia fuera
desde nuestra dirección y podemos usar una nota igual. Podemos usar anión igual. Y aquí sólo podemos comprobar ¿
va hacia adelante o
va hacia atrás? Y eso solo
devolvería un verdadero o falso dependiendo de nuestro valor. También podemos usar un interruptor para que podamos arrastrar hacia fuera y
buscar interruptor. Ya ves que podemos crear un nodo de conmutación que saldrá hacia adelante
o hacia atrás dependiendo de cuál
sea o hacia atrás dependiendo de cuál nuestra dirección
actual para nuestra línea de tiempo. Luego, por último, tenemos
nuestro valor de salida de fluido. Y como he dicho antes, esto aumentará lentamente con el
tiempo a medida que se
reproduzca nuestra línea de tiempo debido a
estos dos puntos que tenemos en nuestra gráfica. Entonces lo que haremos ahora es poner un ejemplo de cómo funciona esto. Por lo que sólo correremos
play desde Begin Play. Y voy a agregar una
cadena de impresión hasta nuestra actualización. Así que ahora nuestra cadena de impresión, cada fotograma que está
reproduciendo nuestra línea de tiempo generará el valor de flotación
actual. Entonces si le damos a Compilar,
vuelva a nuestro mapa. Voy a arrastrar en el
cubo porque actualmente en realidad
no tengo uno a mi nivel. Si le damos a Play,
se puede ver que ahora va aumentando
gradualmente
de 0 a uno. Ahora te mostraré
cómo podemos
mover realmente el cubo usando este valor. Entonces volveremos a nuestro cubo. En realidad voy a ir a
la ventana gráfica y solo agregaré un componente de cubo para que podamos verlo en el
mundo y compilaremos, volvamos al Event Graph. Entonces ahora queremos
realmente mover nuestro cubo. Lo que haremos es usar
un nodo de ubicación de actor de conjunto. Y a partir de eso vamos a hacer una ubicación principal o
hacer vector así. Entonces sólo voy a estar
incrementando el valor Z. Ahora bien, podríamos, en nuestra nota de
línea de tiempo aquí, realidad establecer este valor a lo que queramos que nuestro
cubo aumente. Para que pudiera configurar esto para decir 300. Y podemos dar clic en este
botoncito para que sólo quepa los puntos y verticalmente. Y volveremos
a nuestra gráfica de renta. Podríamos enchufar esto
directamente a nuestro valor z aquí, enchufa la actualización a esto. Y queremos que los
actores tengan ubicación actual. A partir de eso,
usaremos un nodo break. Ahora, todo lo que estamos haciendo
aquí es que estamos obteniendo sus ubicaciones actuales y y x porque queremos que esas
permanezcan iguales,
pero luego la estamos
incrementando z location. Entonces si golpeamos play ahora, verás que los
cubos se mueven lentamente hacia arriba como nuestro lugar de la línea de tiempo. Si quisiéramos, podríamos
hacer esto en un
poco más lento para poder
abrir mi línea de tiempo aquí. Podría establecer la longitud
para decir cuatro segundos. Ahora, tenemos que cambiar
nuestro último punto aquí. Por lo que tendremos
que cambiar es tiempo a cuatro segundos. Por lo que ahora nuestro cubo o poco a poco
se mueven hacia arriba durante cuatro segundos. Así que dale a Play. puede ver ahora que se mueve hacia arriba mucho más lento de lo que era antes. Ahora otra forma en que podemos usar nuestra variable float para
cambiar la ubicación, y eso es un
poco más práctico si cambiamos nuestro valor n. Entonces lo que voy a hacer es dar clic en
el Zoom Para Ajustar Horizontal. Entonces eso solo trae
la línea de tiempo. Para mostrar todos nuestros puntos. Puedo seleccionar nuestro punto aquí, y en realidad
voy a cambiar el valor de nuevo a uno. Entonces ahora nuestro primer valor es 0
y nuestro último valor es uno. Y haremos el Zoom To
Fit Vertical también, que podamos ver que eso
sucede ahí. Por lo que ahora volveremos
a la Gráfica de Eventos. Y en lugar de simplemente decirle
directamente al cubo o flujo
de salida va a ser que es alto. Podemos usar esto para mover r en
cubos entre dos ubicaciones. Por lo que eliminará este
código aquí por ahora. Y nos largaremos de nuestra nueva ubicación y buscaremos laboratorio. Si recuerdas esto
de nuestra lección de vectores, este nodo nos permite
ir gradualmente desde la ubicación a, ubicación B, y esa cantidad
es determinada por el Alfa. Por lo que 0 sería sólo la salida de este
nodo sería el valor a. Y si esto se estableciera para decir 0.5, entonces sería un valor
entre las ubicaciones a y b. Y si ésta fuera una,
entonces solo sería la ubicación B completa la
que se está devolviendo. Y si lo recuerdas, nuestro
valor de flotación ahora sale comenzando en 0 y terminando en
uno a los cuatro segundos. Por lo que podemos usar esto para controlar nuestro ganglio linfático para mover nuestro cubo entre dos ubicaciones
diferentes. Entonces lo que podemos hacer ahora es crear algunas variables activas. Entonces sólo voy a
llamar a este actor de inicio. Y vamos a establecer esto
a un tipo actor. Seleccione que dos
aquí abajo, referencia de objeto, y luego vamos a duplicar esto o simplemente hacer clic derecho
y hacer duplicado. Llamaremos así
a este actor y nos enfrentaremos
a estos hielos para que podamos
editarlos en el nivel. Por nuestro actor estatal. Queremos obtener su ubicación. Y conectaremos esto
al valor a. Entonces haremos lo
mismo con nuestro inductor. Llegar a la ubicación. Vamos a conectar esto en el valor b aquí y vamos a compilar esto. Entonces ahora iremos a nuestro nivel y podremos crear un nuevo actor. Entonces solo voy a
crear una clase de blueprint. Lo llamaremos
actor y llamaremos a este waypoint, por ejemplo. Así, colocará uno en
el nivel aquí y otro aquí. Y en realidad voy
a seleccionar a
los dos con solo sostener Control. Y los moveré hacia
arriba en el aire para que
podamos verlas un poco más fácil. Entonces ahora cuando golpeemos play, ¿qué pasará si
seleccionamos nuestro cubo? Tenemos que decirle a los actores de
inicio y fin. Entonces le pondré mi inicio
a este tipo de
aquí y el final
al otro waypoint. Y ahora cuando golpeo play o cubo
o al instante aparezco sobre él
este punto de manera y poco a poco me o al instante aparezco sobre él muevo a ese waypoint final. Entonces si le damos a Play, se
puede ver que se está moviendo
lentamente entre
esos dos waypoints. Eso está pasando porque
si te acuerdas, nuestro valor de flotación
va de 0 a uno. Y luego me fui
nodo es conseguir son una locación que es nuestra ubicación de actores
estelares. Y poco a poco, poco a poco
moviendo eso hasta el final la ubicación de los actores, que es el valor b. Y luego
le estamos diciendo a nuestro actor que se mueva entre esos dos puntos. Así que esta es una mejor manera de controlar y la ubicación de
los actores usando un nodo de línea de tiempo en lugar
de simplemente
poner manualmente la ubicación
dentro de la línea de tiempo. Ahora también podemos agregar diferentes tipos de
salidas variables a nuestra línea de tiempo. Si lo abrimos
y vamos a rastrear, se
puede ver que en realidad podemos
agregar una trampa vectorial. Entonces voy a dar clic en eso.
Yaverán que ahora
tenemos una nueva
gráfica aquí abajo. Sólo voy a dar
clic en la flecha
al lado de nuestra salida de flotación aquí solo para ocultarlo para que podamos ver
nuestro nuevo track un poco mejor. Voy a nombrar esto también. O si haces clic derecho
y seleccionas Renombrar, podemos nombrar esto a salida
vectorial así. Y si compilamos y
vamos al Event Graph, se
puede ver que ahora tenemos una salida vectorial en
nuestro nodo timeline. Ahora esto funciona exactamente
igual que lo hizo nuestro valor de flotación, es solo que tenemos valores de flotación
libre siendo
controlados en esta gráfica, uno para nuestra z, y, y x Así que si
quisiéramos, podríamos gradualmente
sale un vector de nuestra
nota de línea de tiempo que
comienza en un valor y
termina y otro, igual que hicimos con nuestro flotador. Y si queremos
sumar nuevos puntos, podemos Shift-click que
agrega un nuevo punto aquí. Ahora si muevo esto, ver que esto está en
realidad en el valor x, pero nuestra Y y Z es no tienen un punto y
siguen en 0. Así que si queremos trabajar en
solo uno de estos valores, digamos que quería simplemente
agregar un valor a la z. podemos ocultar la y y la x, y podemos Shift-clic en nuestra z. y ahora podemos establecer un valor z. A lo mejor ahora
quería agregar un valor y. Puedo ocultar mi valor z
y mostrar el valor y. Y ya pueden ver que ahora puedo
moverme sobre este punto. Y esto sólo hace que sea
un poco más fácil si tienes todos estos
puntos es visible, puede llegar a ser un poco confuso. Entonces ahora los tengo a todos
visibles. Puedo cambiar estos
puntos como me gusta, y podríamos agregar
otro valor 12 y aquí. Y podemos mover esto. Y podríamos hacer lo
mismo por nuestro valor z. Ahora, los valores iniciales para
cada una de estas salidas. Y si lo recuerdas, un vector es solo flotadores libres combinados. Entonces, si lo rompemos, usa
el nodo vector break. Se puede ver que
tenemos una X, Y, y Z. Cualesquiera que sean los valores
en los que nos sentamos aquí para x, y, y z, valores de
línea de tiempo,
eso es lo que
se generará en ese
momento específico en nuestra línea de tiempo. Y podemos usar
este vector de salida igual que cualquier otro vector. Entonces, si
quisiera, en realidad podría enchufar esto a mi nodo lap, por ejemplo, en el punto final. Así que ahora cuando compilamos, en lugar de ir
al waypoint final, Se va a ir a cualquiera que sea
la ubicación de salida es de nuestra línea de tiempo. Si recuerda que la
ubicación de salida en realidad
cambiará porque tenemos estos puntos aquí
que están cambiando los valores x, y y z
dependiendo de la hora. Entonces, si golpeamos Play, veremos que nuestro cubo realmente se movió desde la ubicación de inicio. Va hacia 0, por lo que
va a encaminarse hacia
esa dirección. Ahora, hay otras salidas
que nuestra línea de tiempo puede hacer. Así que si volvemos a nuestra nota de
línea de tiempo aquí
y la abrimos, realidad
podemos
tener salida y evento en ciertos
momentos en que se está ejecutando. Entonces si agregamos una nueva pista aquí, sólo
voy a
agregar una pista de ventilación. Ahora voy a ocultar
mi salida vectorial solo hacer clic en la
flechita aquí. Y cambiaremos el nombre de nuestra
pista de eventos a la salida de eventos. Así. Ahora, al igual que nuestros
tipos de salida anteriores para Shift-clic, podemos agregar un punto
a la línea de tiempo. Pero la única diferencia está aquí. Nosotros no, el valor aquí en realidad no
importa. Todo lo que importa es el tiempo. Entonces si configuro esto para decir 1.5, si cambiamos click de nuevo, podemos agregar otro
punto y podemos tener esta corrida en digamos, 2.5. Así que ahora lo que sucederá es la salida del evento en
nuestro nodo timeline se ejecutará en 1.5 segundos
y luego 2.5 segundos. Y si volvemos
a nuestro evento gra, ves que ahora tenemos
una nueva salida de evento. Entonces si agregamos una
cadena de impresión a esto, y veremos este
hola ahora imprimir en esos dos momentos en que
nuestra línea de tiempo se está ejecutando. Entonces tenemos uno en 1.5
y luego otro 2.5. Entonces el último
tipo de salida para nuestra línea de tiempo, si volvemos a ese nodo, ocultará nuestras salidas de eventos haciendo clic en la
flecha junto a él. De nuevo, agregaremos una nueva pista y podremos añadir la pista de color. Ahora esto nos permite emitir
un color en un momento determinado. Por lo que de nuevo, como antes, podemos desplazar clic en este color aquí
abajo para agregar un nuevo punto. Entonces acabo de agregar un
nuevo punto aquí y
podemos moverlos
como nos gusta ahora, porque estos son blancos, En realidad no está
cambiando el valor. Pero si hago clic derecho en
esto en la parte superior, podemos elegir un color. Y puedo configurar esto para
que diga rojo, por ejemplo. Ahora, a unos 2.5 segundos, el color de salida será rojo. Pero podemos
mover esto y podemos cambiar lo severamente que cambia el color dependiendo de estos otros valores. Si movemos estos
por ahí y vemos ahora a 2.5 segundos obtenemos
un color rojo claro. Si queremos, podemos cambiar los predeterminados que venían con nuestra línea de tiempo para que
podamos hacer clic derecho esta, elegir un color
diferente. Podemos cambiar esto para decir, un azul así. Y ahora puedes ver que aquí tenemos
un color azul que
se saldrá a 0.5 segundos. Pero a medida que pasa el tiempo, poco a poco cambia a un color
rosáceo violáceo y luego se va a rojo. A diferencia de antes. Si
volvemos a nuestra línea de tiempo, se
puede ver que
ahora tenemos un nuevo output. Yo no le
di nombre, así que aquí
le daremos un nombre rápidamente. Yo lo llamaré color. Si volvemos
al Event Graph, puedes ver que ahora tenemos acceso a nuestro tipo de
variable de color, y puedes conectarlo cualquier otra
entrada de color que te guste. Entonces, si quisiéramos, en
realidad podríamos enchufar esto
a nuestra cadena de impresión. Podemos enchufar el color al color
del texto
aquí, por ejemplo, solo presiona play y deberíamos ver algunos colores diferentes
para nuestros textos. Se puede ver como el morado
y ahora es como un rojo. Así que esos son todos los tipos de salidas que puede hacer nuestra
línea de tiempo. Por lo que realmente puedes usar las líneas para hacer un montón de cosas diferentes. Ahora, tal vez querías que
tu línea de tiempo en realidad solo vaya de
ida y vuelta para hacer un bucle. Te puedo mostrar cómo
puedes configurar eso. Entonces, lo que haremos es volver a usar nuestra ubicación de inductores
aquí para nuestra entrada B. Y nos llevaremos
la pluma terminada. Y en realidad, nos
arrastraremos desde todas las direcciones y
buscaremos switch. Cuando se enciende la línea de tiempo la dirección
conectará esto hasta terminado. Entonces ahora queremos poder
controlar lo que va a hacer nuestra
línea de tiempo, pero no queremos
tener que enchufar
estos a las entradas aquí. Entonces lo que
realmente puedes hacer es usar una variable para controlar
esta línea de tiempo. Si vamos a los
componentes aquí abajo, puedes ver que tenemos cronología de
ejemplo. Podemos conseguir esa variable. Y en realidad podemos usar esto
para controlar nuestra línea de tiempo. Así que digamos que más adelante en nuestro código queríamos que
nuestra línea de tiempo se reproduzca, pero sin tener que
enchufar esta entrada, podemos usar esta variable. Podemos alargar y
podemos buscar el juego. Ya ves que podemos llamar a una
función llamada play. Y esto realmente
hará que nuestra línea de tiempo se reproduzca. Para hacer que nuestra línea
de tiempo retroceda y adelante, lo que
podemos hacer es usar lo contrario. Entonces si arrastramos hacia fuera,
buscamos reversa. Podemos usar la opción inversa. Entonces, si actualmente está
jugando hacia adelante, queremos que luego juegue al
revés una vez que esté terminado. Y luego si
va hacia atrás, queremos que se reproduzca desde el principio. Entonces sólo haremos el juego. Bueno, podemos hacer jugar
desde el principio así. Por lo que ahora nuestro cubo se
va a mover de la ubicación
del actor estrella al final y luego de vuelta
al final, al inicio. Y simplemente seguiría
looping y haciendo eso. Por lo que eliminaremos esta nota. Ya no estamos usando eso
. Entonces compilaremos y le pegaremos a Play. Podemos ver nuestros codos moviéndose
desde el principio hasta el final. Y ahora está
retrocediendo del final al principio. Y esto sólo va a seguir haciendo
esto ahora de ida y vuelta. Por último, veremos
al dramaturgo. Ahora el dramaturgo controla qué tan rápido
se va a reproducir la línea de tiempo. Por lo que ahora mismo nuestra línea de tiempo
está establecida en cuatro segundos. Ese es el tiempo que
tardará en jugar. La tasa de juego está actualmente establecida uno porque
ese es el valor predeterminado. Ahora bien, si aumentamos dos
al dramaturgo, eso haría que el tiempo que
corro sea el doble de rápido. Entonces te mostraré
cómo podemos hacer esto. Podemos tomar nuestra variable de línea de
tiempo de ejemplo, arrastrar hacia fuera y hacer establecer tasa. Por lo que ahora podemos configurar la sala de juegos. Entonces tal vez quiero que esto
corra el doble de rápido. Entonces, si conectamos esto aquí
arriba para jugar, y jugamos ahora, verán
que
está funcionando mucho más rápido de lo que era antes. Si lo aumentamos de
nuevo para decir cuatro, correrá cuatro veces más rápido. Por lo que ahora nuestra línea de tiempo en
realidad se completará en 1 segundo, pesar de que dentro de
la longitud es de cuatro, porque le estamos diciendo
que juegue cuatro veces más rápido. Entonces si golpeamos play ahora
verás que está completando eso ahora en 1 segundo. Ahora, hay algunas otras
configuraciones por las que quería pasar rápidamente dentro
del nodo de la línea de tiempo. Entonces, si volvemos a
nuestro plan de colas y abrimos nuestra línea de tiempo. Aquí tenemos algunas
bandas en la parte superior que
podemos usar para controlar lo que hace
nuestra línea de tiempo. Entonces, para empezar, tenemos reproducción automática, y si
encendemos esto,
básicamente significa que en realidad no
necesitamos ejecutar el play pen para que
nuestra línea de tiempo se frote. Simplemente correrá al inicio
del juego o cada vez que desove
nuestra Cuba. Entonces si enchufo el
pin de play y le pegamos a play, ahora, se puede ver que
se está reproduciendo automáticamente, aunque
en realidad no se lo estoy diciendo. También hay una opción de bucle. Si volvemos a nuestro cubo
y luego a nuestra línea de tiempo, se
puede ver que hay
un botón de bucle. Ahora bien, esto no hará lo mismo que lo que
hemos hecho aquí abajo, donde una vez el cubo llega a la ubicación final y luego vuelve a la ubicación de inicio. Este bucle solo hará que la línea de tiempo comience desde
el principio cada vez. Entonces si encendemos esto
, desenchufaré mi terminado y
compilamos y le pegamos a Play. Verás que llega
al final y luego solo
empieza de nuevo desde
nuestra ubicación de inicio. Entonces ese es un par de
oxígeno que podría encontrar útil si estás usando
líneas de tiempo en el futuro. Ahora también podemos cambiar
la forma en que nuestros valores y nuestras gráficas aquí van el uno
hacia el otro. Entonces, si selecciono ambos
puntos aquí, solo sosteniendo Control,
puedo seleccionar ambos. Si hago clic derecho, Hay algunas opciones diferentes
para la interpolación. Entonces si lo pongo para decir auto, y ves que ahora, en lugar de esta recta que va
entre los valores, tenemos una curva lo que significa que el valor de inicio
aumentará lentamente cada vez más rápido. Y luego
disminuirá lentamente cada vez más rápido hasta que llegue
a su valor objetivo. Podemos usar estos
pequeños mangos aquí para controlar la rapidez o la
lentitud con que el valor se acercará también
al valor objetivo. Entonces si selecciono mi punto
aquí, muévelo hacia arriba así. Tengo valor va a aumentar lentamente que más rápido y más rápido hasta que llegue a este punto donde
en realidad será más alto que nuestro valor n, porque se puede ver la
línea va por encima de ella, pero entonces volverá a
bajar a nuestro valor V1. Ahora hay algunas opciones
diferentes. Cuando destacamos estos puntos, se
puede elegir entre auto usuario, break, lineal y constante. Tan constante por ejemplo, sólo una línea recta hasta el punto y luego va
instantáneamente a ese valor. Podemos usar lineal,
que es el predeterminado. Va desde ese punto hasta el punto final exactamente a la
misma velocidad todo el tiempo. Podemos usar estos ajustes
dentro de nuestra salida vectorial aquí. Así que puedes ver si selecciono
ambos estos puntos aquí, en realidad
ya
he configurado en auto, pero podemos volver
a ponerlo en lineal por ejemplo. O si lo desea, podemos
llevarlo de vuelta a auto. Podemos controlar esos puntos como lo hicimos antes
con nuestra flotación. Y podemos hacer esto
con cada uno de nuestros valores x, y, y z también. Entonces podríamos hacer lo mismo con
nuestro valor y, por ejemplo. Podríamos ajustar estos para realmente aumentar o disminuir
como queramos. Entonces eso es todo por nuestra lección de
líneas de tiempo. Ojalá tengas una
mejor comprensión de cómo funcionan ahora y para qué puedes usarlos en tus proyectos en el futuro.
35. Lecciones adicionales (sockets): Oigan a todos. En esta lección vamos a
estar echando un vistazo a los zócalos. Sockets o cómo
podemos unir actores a otros actores o componentes
a otros componentes. Ahora podemos agregar zócalos
a mallas esqueléticas. Entonces eso son mallas que pueden
animar como por ejemplo, el maniquí que hemos estado
usando para nuestro personaje. O podemos agregar sockets
a mallas estáticas. Entonces esas son medidas como
los cubos que hemos estado usando. Entonces, para empezar, te
mostraré cómo podemos agregar un nuevo socket a un esqueleto. Por lo que vamos a pasar a
la carpeta Personajes aquí, luego a maniquíes mallas. Y entonces aquí se puede ver
que tenemos nuestras mallas
esqueléticas de maniquí y
también el esqueleto que usan los maniquíes. Abriremos el maniquí SK. Aquí adentro. Se puede ver en el
lado izquierdo tenemos una lista de todos
los huesos que son
esqueleto incluye. Ahora, aquí es donde seleccionamos un hueso específico al que
queremos agregarle un alveolo. Digamos, por ejemplo, que estábamos
agregando un sombrero a nuestro personaje. Vamos a querer que el sombrero
siga al hueso de la cabeza. Por lo que se desplazará a través
y encontrará el hueso de la cabeza que debe estar cerca de
la parte inferior aquí. Si sigo adelante. Aquí vamos. Tenemos los dos huesos del cuello
y luego el hueso de la cabeza. Entonces si seleccionamos el hueso de la cabeza, haga clic derecho y sí le agregamos alvéolo, eso nos agregará un nuevo
alveolo al hueso de la cabeza. Si nos dirigimos
al panel Detalles, puedes ver que podemos
renombrar este socket. Voy a llamar así a mi zócalo de
sombrero. Ahora con el socket seleccionado, se
puede ver que tengo la
opción de rotarlo aquí. Y si presiono W mientras estoy
seleccionado en la ventana gráfica, también
puedo mover el zócalo. El socket es actualmente
si miras por aquí en el panel Detalles en
ceros son 0 ubicación. Eso significa que está en la
ubicación exacta del hueso de la cabeza, pero podemos mover esto para que
podamos subir esto. Por lo que ahora nuestro zócalo está
por encima de nuestro hueso de la cabeza. Lo que eso significa es incluso cuando
los personajes que animan este zócalo se
mantendrán a esta distancia lejos del hueso de la cabeza. Y esto es útil
porque si estamos adjuntando un sombrero a este zócalo, quisiéramos que
siguiera junto con el hueso de la cabeza incluso cuando
los personajes animaran. Ahora si quisiéramos
previsualizar cómo se
vería cuando está unido a
un socket. Podemos hacer eso. Así que podemos hacer clic derecho en
nuestra toma del corazón aquí, bajar a Agregar
activo de vista previa y
en realidad podemos seleccionar una malla
para unir a nuestro socket. Ahora ten en cuenta que esto
es solo vista previa. Entonces aunque adjuntemos
algo aquí ahora mismo, no lo veremos en juego. Esto es solo para previsualización
cuando estamos viendo animaciones o en nuestro editor
esquelético. Para mí, voy
a seleccionar sólo el, seleccionar el cilindro aquí. Y se puede ver que mi cilindro está girado de manera equivocada. Entonces voy a rotar mi
zócalo y se puede ver en tiempo real o el
cilindro gira. Ahora, obviamente esto no es un sombrero, es sólo un cilindro,
pero vamos a estar usando esto como ejemplo. Y podemos ver cómo se
verá
nuestro cilindro mientras está
unido a nuestro zócalo. Entonces ahora si vamos a ver una animación que
usa este esqueleto, en realidad
veremos
esta vista previa y veremos que se mueve junto
con la animación. Entonces si volvemos al
hit del navegador de contenido, voy a ir a la carpeta
maniquíes. Entonces las animaciones
irán al dinero. Y echaremos un vistazo
al salto, por ejemplo. Haremos doble clic en eso y traeré esa
animación hasta aquí. Se puede ver que mientras nuestra animación de
salto está jugando, R hat sigue siguiendo
junto con nuestro hueso de la cabeza. Ahora, volviendo a nuestro esqueleto de
maniquíes, si queríamos
deshacernos de esta vista previa, siempre
podemos simplemente
hacer clic derecho, eliminar todos los
activos adjuntos y eso solo nos
deshará de todos
los avances . Podemos, si queremos agregar múltiples zócalos
al mismo hueso. Entonces si quisiéramos otro
zócalo que tal vez tuviera una ubicación diferente para tal vez
un tipo diferente de sombrero. Podríamos hacer eso también. Simplemente hacemos clic con el botón derecho
Agregar un nuevo zócalo, y eso nos permitiría agregar un alveolo adicional
a nuestro hueso de la cabeza. Si alguna vez deseas
eliminar un socket, puedes hacer clic derecho en él y
seleccionar la opción Eliminar aquí. Ahora también podemos agregar
sockets a mallas estáticas. Entonces si volvemos al navegador de
contenidos aquí, sólo
voy a pasar a la
carpeta de prototipado de nivel y dos mallas. Acabamos de conseguir algunas mallas de pila
simples aquí. Pero si abrimos el
cubicado con champú, por ejemplo, aquí tenemos algunos
de los detalles sobre la malla y la malla
en la ventanilla. Y si subimos al panel de
Windows aquí, debería
haber un administrador de socket y sus mentes marcaron. Si el tuyo no lo es,
querrás hacer clic en él. Y puedes ver eso
para mí, está por aquí. Y esto nos permite agregar nuevos
zócalos a nuestra malla estática. Por lo que simplemente hacemos clic en este
pequeño botón más aquí. Podemos nombrar nuestro socket. Sólo voy a llamar a
mi socket otra vez. Así. A diferencia de antes, podemos
posicionar nuestro zócalo. Podríamos decir montadas aquí. Y ahora, dondequiera que se mueva
esta malla, este zócalo estará a 90 centímetros de su
centro incluso durante el juego. A diferencia del esqueleto, también
podemos agregar una vista previa. Entonces si bajamos
al conjunto de opciones, podemos hacer clic en Avanzado y decir una malla de pila anterior
para que podamos seleccionar el cilindro que teníamos antes o el cilindro aquí y ver que tenemos eso
mismas mallas que teníamos antes. Y podemos previsualizar cómo
se vería cuando en realidad se
acopla al socket. Así que ahora ya sabes cómo
crear zócalos y
agregarlos a mallas esqueléticas
y mallas estáticas. Ahora te voy a mostrar
cómo podemos realmente usar ese socket durante el juego
y adjuntarle cosas. Por lo que volverá a
nuestro Navegador de Contenido, a la carpeta Personajes,
o a la carpeta de contenido. Después ve a planos de tercera
persona y abriremos nuestro
Blueprint de Personajes Terceros. Ahora tengo algunas variables
extra y una función aquí de una
de nuestras lecciones anteriores. Si no lo haces, no
te preocupes por eso, no
vamos a estar usando esos de todos modos. Entonces antes de empezar a desovar actores y
unirlos a los sockets, primero
voy a
mostrarte algunos de los
nodos más utilizados con sockets. Por lo tanto, primero
comenzaremos con obtener nuestra malla de personajes de
nuestro panel de componentes. Y si lo recuerdas, solo podemos hacer doble clic en esto para
abrir la ventana gráfica. Esta es nuestra
malla animada en nuestro personaje. Así que volviendo al Event
Graph, me acercaré aquí. Podemos agarrar nuestro componente de malla. Si arrastramos fuera de
eso y
buscamos obtener la ubicación del socket, se
puede ver que
obtenemos esta nota aquí. Esto nos permite
proporcionar un nombre de socket como r hat socket. Y si esta malla, así que si nuestra malla de caracteres aquí tiene ese socket usando ese nombre, devolverá una
ubicación mundial para ese socket. Ahora también podemos usar
este nodo get socket location con mallas
estáticas. Entonces si agregué una nueva malla estática, que haciendo esto como
ejemplo porque nuestro personaje no tiene
un componente de malla escalonada. Voy a añadir eso en. Y si arrasto eso a
nuestro gráfico de eventos aquí, también
puedo enchufar esto
a esta nota. Y ahora si la
malla de pila que hemos configurado para este componente tiene un socket, obtendremos su ubicación
mundial actual. Ahora, hay algunas otras
notas que funcionan así. Podemos arrastrar hacia fuera de nuestra malla
y obtener rotación del zócalo. Esto nos dará la rotación
mundial de
cualquier nombre de socket que coloquemos aquí que esté en nuestra malla de
personaje. O podemos eliminar estos nodos, podemos arrastrar hacia fuera y buscar
obtendrá socket transform, y eso conseguirá
la transformación de cualquier nombre de socket que
establecemos aquí. Y si recuerdas de
nuestra lección de transformación, podemos simplemente arrastrar desde aquí, usar un nodo break y eso
nos da acceso a la ubicación, rotación y escala
del socket. Ahora esto también nos da una opción de espacio de
transformación. Ahora bien, si esto está configurado en RTS world, eso significa que obtendrá
la rotación mundial, ubicación y la escala de cualquier nombre de socket que
coloquemos aquí. Suponiendo que nuestra entrada de malla
sí tiene ese socket. Ahora si hacemos clic en los espacios de
transformación, unas cuantas opciones diferentes,
podemos seleccionar actor. Ahora, esto conseguirá que
los sockets se transformen relación con la ubicación
central de los actores. Y lo que quiero decir con eso,
si vamos a la ventanilla, si seleccionamos nuestro
componente de malla de estaca que agregamos, si lo muevo por aquí e
imagino que este es el zócalo. El actor de sockets
transformada relativa sería esta
ubicación que tenemos aquí. Entonces si esto fuera un socket
y obtuviéramos transformada de
ese socket
usando la opción actor aquí, devolvería la
ubicación proporcionada aquí. Ahora, la siguiente opción
si volvemos a nuestro nodo de transformación
es el componente. Tenga en cuenta que ahora esto
obtendrá la
transformación de sockets en relación con el componente al
que está unido. Entonces si de nuevo, si vuelvo a nuestra ventana gráfica y
nos imaginamos que la malla de pila aquí es un
socket en lugar de un componente. Si tuviera que adjuntar
esto a esta medida, pueden
ver que nuestra ubicación realmente
ha cambiado. Ahora este es su
componente transformar. Si lo tomo de vuelta y lo vuelvo a
colocar al componente de la
cápsula, ver que la ubicación
es diferente porque esta es la transformada del
actor. Y si lo movemos de
nuevo a componente, se ve que este es ahora
el componente transform. Así que de nuevo, si nuestro socket o
lo siento si nuestra malla de pila era un socket y tuviéramos que obtener su ubicación utilizando
el espacio de componentes, devolvería este valor aquí una vez que se une a algo
así como la malla Componente. Y luego, por último,
si volvemos a nuestro Transformar ahora tenemos
el espacio del padre Bowman. Y si volvemos a
nuestro maniquí aquí, seleccionamos nuestro hueso. Su espacio óseo padre sería el valor que aquí
hemos establecido. Ahora bien, no te preocupes demasiado si te pareció un poco confuso. La mayoría de las veces cuando
estás usando este nodo, simplemente
estarás usando la opción
World de todos modos, porque esa suele ser
la más útil, pudiendo obtener la
ubicación mundial del socket. Ahora, hay un
par de otras notas que son útiles cuando se
trabaja con sockets. Por lo que vamos a eliminar estos nodos
ahora y voy a arrastrar hacia fuera de nuestra
variable de componente de malla, lo buscaré. ¿ Existe socket? Y esto solo comprobará,
¿
existe el nombre del socket que proporcionamos en la malla o la malla estática
que conectamos
al hocico y luego devuelve
un valor verdadero o falso. Si lo hace. También podemos
obtener una lista o una matriz de todos los nombres de socket existen en un
componente en particular. Para que podamos arrastrar hacia fuera y
buscar get socket, obtener todos los nombres de socket. Y esto sólo
nos proporcionará una serie de nombres. Y estos serán todos los nombres
de todos
los zócalos en esta malla de pila
específica. Y esto funcionará de nuevo con
nuestra malla esquelética también. Simplemente podemos enchufar eso
como nuestros nodos anteriores. Entonces ahora en realidad
vamos a adjuntar algo a un socket
durante el juego. Por lo que comenzaremos simplemente borrando estas notas y golpeando compile. Vamos a ir al Navegador
de Contenido. Voy a crear
un nuevo actor que se adhiera a nuestro personaje. Entonces
haremos clic derecho en clase Blueprint. Vamos a crear un actor,
voy a llamar al mío BP subrayado sombrero, o abrir eso. Y luego aquí solo
voy a agregar un nuevo Componente de Malla
Estática como ese. Y lo configuraremos. Malla. Así que hemos tenido por aquí abrir
el desplegable de malla de pila. Y voy a configurar esto
al cilindro que hemos
estado usando antes,
así, compilará y guardará esto. Después nos dirigiremos de nuevo a
nuestro ThirdPersonCharacter. Y voy a hacer clic derecho
y buscar evento de entrada. Y usaremos un evento
de entrada uno. Entonces si recuerdas este nodos se ejecuta cada vez que presiono
uno en mi teclado. Entonces lo primero que
vamos a hacer cuando presionemos uno es spawn en el nuevo actor de sombreros. Entonces me arrastraré
de presionado y desove
social activo de clase. Pondremos la clase
a r sombrero así. Ahora, porque vamos
a unir inmediatamente nuestro sombrero al zócalo de cabeza de nuestro
personaje. Podríamos salirnos con la suya con solo
arrastrar desde aquí usando un nodo de transformación y simplemente desovar el sombrero
a 0 en el mundo. Y entonces al instante se
apegará a la cabeza de nuestro
personaje de todos modos. Pero lo que pasa con esto es a veces para un
par de marcos, podrías ver el sombrero
aparecer en el centro
del mundo y luego de repente
encajar en el zócalo. Entonces, lo que me gusta hacer es
obtener los sockets de
ubicación actual spawn están en esa
ubicación y luego adjuntarlo. Así que en lugar de usar
el nodo de transformación, vamos a obtener la ubicación de los
sockets. Por lo que voy a
conseguir la malla se va arrastrar hacia fuera y sí conseguir socket. Usaremos la transformada de
socket get. Pondremos nuestros sockets
naming y esto tiene que ser exactamente el mismo el socket que creamos
en nuestro esqueleto. Por lo que si recuerdas cuando lo
llamamos hat socket, necesitamos usar el
nombre exacto de formas que no encontrarán nuestro zócalo de sombrero de futbol. Vamos a dejar esto en RTS world porque queremos que
el mundo se transforme. Y sólo vamos a arrastrar esto hacia fuera, conectar esto en spawn
transform así establecerá el manejo de colisión para
siempre desovar ignorar colisión, porque sólo queremos que se
genere en esta ubicación. No queremos que intente
ajustar nuestro extra de ninguna manera. Así que ahora vamos a
establecer r hat actor a una nueva variable sólo para
que podamos editarla si queremos más tarde arrastrar hacia fuera, vamos a hacer promueve una variable para crear una nueva variable para nosotros. Voy a llamar así a
este sombrero. Ahora, tenemos un sombrero que va a desovar en nuestra ubicación de socket
cuando lo volvamos a jugar. Entonces si podemos Pablo golpear
play y si presiono uno, se
puede ver que nuestro corazón se está
desovando encima de mi cabeza. Pero si me muevo en C, se
queda ahí porque aún no
lo
hemos apegado a nuestro personaje. Sólo le estamos diciendo que desove
en la ubicación de ese socket. Por lo que saldrá
de editor de plano y se dirigirá de nuevo al
Third PersonCharacter aquí. A continuación, en realidad
vamos a unir nuestro sombrero a nuestro personaje. Entonces, para hacer eso, arrastraremos hacia fuera desde el componente de malla hasta aquí, crearemos una nueva
variable de puré, arrastraremos hacia fuera. Voy a
buscarlo. Adjuntar. Ahora hay dos notas adjuntas que tenemos
adjuntar actor a componente, que es lo que
vamos a estar usando hoy porque estamos uniendo todo
el actor corazón
a un componente, que es nuestro componente de malla. Pero también podemos unir
componentes a otros componentes. Entonces, por ejemplo, si dentro del sombrero R, sosteníamos un componente que
queríamos unir a la malla, pero no queríamos unir todo
el
actor de sombrero a nuestra malla. Podríamos usar que adjuntar
componentes, componente. Pero por ahora, solo usaremos
adjuntar actor a componente. Y conectaremos esto
hasta el nodo set. Ahora tenemos un objetivo, y este es el actor que en realidad
vamos a estar uniendo a nuestra malla,
que es el padre. Entonces vamos a enchufar eso
en el blanco aquí. Entonces necesitamos establecer
el nombre del socket. Ahora este va a
ser el zócalo del sombrero. Nuevamente, esto siempre
tiene que ser exactamente lo mismo que el socket que
creamos en nuestro esqueleto. De lo contrario no unirá
al actor al futbol. A continuación, tenemos las reglas de ubicación, rotación y escala. Ahora bien, esto es lo que le va a hacer el
motor
al actor de corazón cuando en realidad lo
acople al puré. Ahora, por defecto
es mantener relativo, y te mostraré lo
que eso hace en el gameplay. Entonces si le pego play, presiono uno. Ya ven,
ni siquiera puedo ver mi sombrero aquí. Pero si presiono F1, miro hacia abajo. Se puede ver que los sombreros
en realidad por
ahí, está unido al zócalo, pero tiene una distancia
muy lejana. Y básicamente esa es la
distancia que
está el zócalo del World Center,
que está por aquí. Entonces si corro mi personaje
por aquí y presiono uno, ahora, deberíamos ver el Sombrero
mucho más cerca del personaje. Esta es la distancia relativa que el zócalo está lejos
del centro del mundo. Ahora, el siguiente,
si volvemos a nuestro Third PersonCharacter
aquí, es keep world, que si ponemos
todos estos hacia arriba hacia el sombrero, se conectará al socket. La distancia de distancia es
actualmente del zócalo. Ahora, si usamos esto
y presionamos uno ahora, en realidad
ves que está justo
encima de la cabeza de nuestro personaje y se mantiene conectado
al conjunto de caracteres. Pero si tuviera que volver
a mi personaje y bajo retraso, digamos dos segundos. Si le pego play ahora y presiono
uno y me muevo por aquí. Se puede ver que
ahora está conectada porque se está moviendo
con la animación, pero es esa distancia que
estábamos lejos de ella
cuando la engendramos. Luego, por último, si volvemos
a Third PersonCharacter, podemos cambiar esto
para ajustar al objetivo. Y eso solo
hará que nuestro corazón encaje directamente al zócalo. Por lo que de nuevo, si podemos sondear, nos desharemos de este
retraso aquí y le pegaremos a Play. Si presiono uno, pueden
ver que nuestros sombreros se adhieren
al zócalo y se queda
ahí sin importar lo que hagamos. Y si en realidad agrego en
ese retraso así. Ahora antes, si presionamos
uno y luego nos alejamos, se mantendría esa distancia
lejos de nosotros libro. Una vez que dos segundos que arriba, simplemente
se ajusta directamente a la toma como es de esperar
que lo haga. Ahora tal vez quieras separar a
un actor de otro actor, lo cual
te mostraré cómo hacerlo ahora, si volvemos al personaje en
tercera persona aquí, voy a agregar un
nuevo input events. Entonces buscaremos el evento de entrada, y lo agregaré para los
eventos de entrada 0, por ejemplo. Aquí arriba, vamos a conseguir
nuestra variable sombreros que creamos antes que
se está configurando cuando desove el sombrero, podemos arrastrar hacia fuera y
podemos buscar separar. Y podemos usar la opción
de despegarse de actina aquí. Y ejecutaremos esto
cuando nuestro 0 esté presionado. Ahora el valor por defecto
es mantener relativo. Ahora bien, esto hará lo mismo que cuando coloquemos el sombrero. Mantendrá la ubicación
relativa del sombrero del
centro del mundo, cual no suele ser muy útil. Por lo que la mayoría de las veces
estarás cambiando esto para mantener el mundo así. Por lo que cuando r hat se desprenda, se quedará en
el lugar que fue cuando le dijimos que se despegara. Entonces si le pego Compile ahora, le pego play, presionaré
un sombrero de spawner. ¿ Todavía tenemos ese retraso? Entonces si vuelvo a nuestro código
aquí, simplemente quitaremos eso. Por lo que compilará, golpeó Play. Cuando presiono uno, se puede
ver que nuestro corazón está apegado a nuestro personaje como
lo era antes que
pueda saltar y sigue ahí. Si presiono 0,
se puede ver que
ya no se mueve con
nuestro personaje. Y es mantener esa ubicación
exacta que estaba cuando presioné
0 para despegarlo. Ahora por último,
hay un par de otras notas que tal vez quieras
usar al usar archivo adjunto. Entonces si volvemos a nuestro
Third PersonCharacter aquí, podemos arrastrarnos desde r
hat y sí nos apegamos. Y esto en realidad
nos va a conseguir el actor adjunto. Entonces, si usamos este nodo mientras estamos
unidos a nuestro personaje, devolvería una referencia
a nuestro personaje. También podemos arrastrar hacia fuera
y sí nos apegamos. Y esto nos dará a
los actores adscritos. Por lo que esto nos da
una matriz de todos los actores que están apegados
al sombrero actualmente. Un ejemplo de cómo esto podría
ser útil es tal vez cuando tu personaje muere y
destruyes su cuerpo, quieres destruir todas
las cosas que podrían
estar apegadas a él. Esta podría ser una buena manera de conseguir a todos los
actores que están apegados a tu personaje y destruir a todos
ellos también. Entonces el último,
si arrastramos hacia fuera y buscamos de nuevo se adjunta, puede ver que hay get attached parents socket name. Y esto te dirá a
qué socket R hat está conectado
actualmente
si está conectado a un socket. Ahora si quieres encontrar alguno de estos nodos por los que
hemos pasado, siempre
puedes
simplemente arrastrar hacia fuera desde un componente como la malla aquí. Si voy a hacer un nuevo componente
de malla aquí arriba, arrastre hacia fuera, puede buscar
adjuntar para encontrar estos nodos
adjuntos. Puede buscar socket
para encontrar los nodos de socket. Y también puedes buscar consigue apegado para obtener estos modos
adjuntos. Ahora, una última cosa que
sí quería mencionar antes de terminar esta
lección es que sí necesitas tener cuidado y
unir actores a tu personaje porque
pueden interferir con la colisión de tus
personajes. Y esto puede hacer que
tu personaje
salga volando al aire
o tenga problemas moverse porque ese
actor que le has para
moverse porque ese
actor que le has
pegado está
bloqueando su colisión. Una cosa para asegurarte cuando lo
haces adjuntar cosas a tu personaje es esta una buena idea para ir a través de
cualquiera de sus componentes? Tengo colisión como un sombrero r. Aquí tenemos nuestro componente
de malla apilada. Bajamos y encontramos
los presets de colisión. Actualmente está configurado
para bloquear o dinámico, lo que incluye a nuestro personaje. Por lo que siempre es una buena
idea cambiar esto a la costumbre y
asegurarse de que **** está configurado para ignorar para que r hat no interfiera en absoluto con la colisión de
nuestros personajes. Entonces eso es todo para
nuestra lección de sockets. Esperemos que ahora entiendas
cómo funcionan y cómo puedes usarlos en
tus futuros proyectos.
36. Lecciones adicionales (componente de movimiento): Oigan a todos. En esta lección
vamos a estar echando un vistazo al Componente
de
Movimiento de Personajes. Y para aquellos de ustedes
que estaban siguiendo a lo largo de nuestras lecciones anteriores, acabo de crear una nueva plantilla de
tercera persona que podamos empezar desde
fresco para esta lección. Ahora, el
componente de movimiento de personajes está
integrado en cualquier tipo de
plano de personaje. Por lo que aquí dentro de nuestro Plano de
PersonalThirdPersonCharacter, se
puede ver en el panel
Componentes, tenemos el Componente de
Movimiento de Caracteres. Ahora bien, el componente de
movimiento del personaje es lo que permite que nuestro personaje
se mueva realmente. Y también
nos proporciona montones de ajustes
adicionales
que podemos usar para ajustar cómo
se mueve nuestro personaje y qué tipo de
movimiento está haciendo. Así que si seguimos adelante y seleccionamos el Componente de
Movimiento de
Caracteres, puedes ver encima en
el panel Detalles, tenemos todos los ajustes
para ese componente. Si no tienes
el panel Componentes
o el panel Detalles, siempre
puedes
encenderlos simplemente
subiendo al
menú desplegable de ventanas aquí y seleccionando en el panel Detalles y también la
Panelde componentes aquí. Ahora no vamos a pasar por
todos los ajustes para
el componente de movimiento porque hay bastantes de ellos, pero vamos a estar pasando por
los principales y voy a estar explicando lo que hacen y
cómo puedes ajustarlos. Si alguna vez olvidas
lo que hace un ajuste, siempre
puedes simplemente
pasar el mouse sobre él y te da un consejo de herramienta razonablemente bueno sobre lo que hace ese ajuste
específico. Entonces, para empezar,
tenemos la escala de gravedad. Ahora bien, esta es la cantidad de gravedad que se aplica a nuestro personaje. Rápido para establecer esto en
algo mucho más alto, como cinco, y lo
compilaremos y le pegaremos a play. Cuando salto, se puede ver mi personaje en realidad
no salta muy alto. Y eso es porque
estamos aplicando cinco veces la
gravedad normal a nuestro personaje. Ahora ten en cuenta que
este valor de gravedad sólo afecta al personaje, no a otros objetos en el mundo. Después, volviendo a nuestro Third PersonCharacter y seleccionando el movimiento del
personaje, tenemos la aceleración máxima. Ahora esta es
la rapidez con la que
acelerará el personaje hasta su velocidad
máxima de movimiento. Cuanto mayor sea este
valor, más rápido será
el personaje
a esa aceleración, y cuanto
menor, menor será. A continuación tenemos el factor de
fricción de rotura. Ahora cuanto más alto sea este valor, más rápido
se detendrá el carácter cuando
soltemos todas las teclas de entrada de
movimiento. A continuación tenemos la media altura
agachada. Ahora bien, esta es la altura que tendrá
nuestro componente cápsula cuando nuestro personaje
esté agachado. Y si vamos a nuestra ventana gráfica, puedes ver nuestro
Componente Cápsula aquí. Ahora nuestro componente cápsula
es lo que los textos, lo que nuestro personaje
se está topando. Ahora, cuando estás agachado, normalmente querrías que esto fuera más corto porque tu
personaje está agachado, y eso es lo que te
permitiría
moverte debajo de objetos inferiores. Entonces ahora regresaremos al Event Graph y
voy a configurar un ejemplo rápido de
cómo podemos decirle al componente de movimiento
que estamos agachados. Así que si nos movemos aquí arriba, voy a crear
un nuevo evento de entrada, registro de búsqueda de eventos de entrada
C. Y sólo voy a desplazarme hacia arriba
y tratar de encontrar esa entrada. Entonces eso está aquí para mí. Yo sólo voy a
configurarlo para que cuando presione C, nuestro personaje
Will Crouch. Y cuando realmente veo a
nuestro personaje caminar en cuclillas, ahora ten en cuenta, nuestro personaje en
realidad no
tocará una animación agachada porque no
hemos configurado el lado de
animación de esto. Pero lo que vamos a estar
haciendo es decirle al componente de movimiento
que queremos que utilice la configuración de agacharse para decirle a nuestro componente de movimiento
que estamos agachados
arrastrará hacia fuera de Preston
búsqueda de agacharse. Y seleccionaremos la función
agacharse aquí. Y luego nos arrastraremos de
liberados y buscaremos y nos agacharemos así. Ahora bien, estas son
funciones que están integradas en los planos de los personajes. Si tratas de usar estas
funciones y dices, solo un acto aleatorio de blueprint, no
serías capaz de
encontrar estas funciones. Ahora hay
otra configuración que necesitamos activar
y que en realidad está dentro de nuestro componente de
movimiento de personajes que necesitamos decirle
que nuestro personaje puede agacharse en
el buscador sólo vamos a
buscar puede agacharse. Y verás bajo capacidades de
movimiento, puede agacharse
en realidad ha tictac apagado. Entonces nos vamos a llevar ese. Ahora podemos probar
esto en juego, así que solo compilamos y dirígete
al mapa en tercera persona
y le pegaremos al play. Ahora antes de golpear C, sólo
voy a
presionar la tecla Tilde, que es la tecla del
lado izquierdo del wonky. Voy a buscar
show space collision. Me golpean Enter. Por lo que ahora podemos ver toda
la colisión en nuestro nivel, incluyendo nuestra colisión cápsula, que se puede ver es ese
contorno rojo de nuestro personaje. Ahora si sostengo C y veo que mis cápsulas
ahora se hicieron más pequeñas, Esa es nuestra semivida de las cápsulas, que es de 40 centímetros. Y si intento moverme
y veo que mi
personaje en realidad
también se mueve más lento y mi
cámara se mueve hacia abajo. Ahora, todo esto está sucediendo
porque le hemos dicho al
componente de movimiento que
vamos al modo de
movimiento agachado. Por lo que ahora si nos dirigimos de nuevo
al tercer
plano PersonCharacter y seleccionamos aquí el
componente de movimiento. Y si buscamos agacharnos
y barra de búsqueda aquí arriba, podemos encontrar los otros ajustes
agachados. Por lo que tenemos la velocidad máxima de
caminata agachada. Ahora bien, esto es lo rápido que se mueve el
personaje mientras se
agacha, y ese valor es en
centímetros por segundo. Ahora también tenemos un
ajuste llamado puede caminar fuera de los libros mayores al agacharse. Si esto es despega, te puedo
mostrar lo que eso hace. Golpearemos el juego,
correremos a nuestra cornisa aquí. Y si sostengo asiento agachado en C, no me permitirá caminar fuera del borde mientras estoy agachado. Ahora bien, si tuviéramos que
habilitar ese ajuste, nos
permitiría caminar
fuera de los bordes mientras nos agachamos. Por lo que a continuación nos desharemos de
la búsqueda de multitudes y
continuaremos a través de los ajustes
generales. Ahora tenemos el modo de movimiento de
tierra por defecto
y el modo de movimiento de agua predeterminado. Ahora, modos de movimiento
o cómo le decimos al componente de movimiento qué
ajustes queremos que use. Entonces, por defecto, cuando
estamos en tierra, le estamos diciendo que queremos usar los ajustes de caminata
que encontramos aquí abajo. Cuando en el agua queremos utilizar los ajustes de natación que
se encuentran más abajo. Ahora cuando el componente de movimiento
está en el modo de natación, no comenzará repentinamente a
usar animaciones de natación. Las animaciones se
manejan por separado. Lo que sí hace es decirle
al componente de movimiento que
queremos usar los ajustes de
natación en lugar de decir, los ajustes para
caminar. Ahora, pasando a los ajustes para
caminar, tenemos la altura máxima del paso. Ahora esto es lo alto de una ventaja que tu personaje no
podría
intensificar sin tener que saltar. Ahora por defecto, esto
es de 45 centímetros, pero tal vez tenías una
escalera y el personaje no
puede simplemente subir a pie
normalmente, tendrías que saltar. Es posible que tengas que aumentar un poco este
valor para permitir que el personaje
suba una altura más alta. A continuación tenemos el ángulo de piso
transitable. Ahora bien, así es como empinado de una pendiente
puede subir nuestro personaje. Si quieres que tu personaje
camine por pendientes más pronunciadas, necesitarías
aumentar este valor. A continuación tenemos nuestra velocidad
máxima de caminata. Ahora esta es la velocidad máxima nuestro personaje
irá mientras camina. Entonces si queremos que nuestro
personaje camine más rápido, habíamos aumentado
este valor y si
queríamos que caminaran
más lento con disminuidos, entonces tenemos la velocidad máxima de
caminata para agachados. Esto ya lo hemos explicado antes. Esta es la velocidad que nuestro personaje se moverá mientras se agacha. Entonces tenemos el Min, velocidad de caminata
analógica. Y esto se usa para si tienes un balde, un gamepad stick. Esta es la
velocidad mínima que tu personaje puede ir con la entrada
del stick de entrada. A continuación, tenemos la
deceleración de frenado caminando. Ahora esta es la cantidad de fuerza de
desaceleración que se aplica
al personaje cuando
ya no estás caminando en una dirección. Por lo que cuanto mayor sea este valor, más rápido
se ralentizará tu personaje. A continuación tenemos la puede
caminar fuera de repisas. Si esto es cierto, se comporta como R puede caminar de libros mayores
cuando está agachado, permite
que nuestro
personaje camine por
la cornisa al caminar. Y si esto es
falso, nuestro personaje no podrá
salirse de los libros mayores. Ahora, desplazándose hacia abajo, iremos
a la configuración de salto aquí. Ahora tenemos los
saltos, la velocidad. Esta es la cantidad de fuerza que se aplica cuando un personaje
realmente salta. Entonces si tuviéramos que establecer
esto es algo realmente alto como los 2000s. Y podemos jalar, si golpeamos play y saltamos nuestros personajes ahora
saltando muy alto. Ahora, volviendo
al Third PersonCharacter y seleccionando nuestro movimiento de
personaje hip, tenemos algunos otros
ajustes para nuestro Jumping. No voy a
pasar por todos ellos, pero algunos de los principales
son el control aéreo. Ahora bien, esto es
cuánto control el jugador sobre la dirección que
se mueve
tu personaje tendrá
el jugador sobre la dirección que
se mueve
tu personaje, cuanto mayor sea este valor,
más control tendrá. Ahora, moviéndose hacia abajo, no
vamos a estar cubriendo los ajustes de red en esta lección porque
están mucho más avanzados de lo que esta
lección va a cubrir. Pero si seguimos bajando, encontrarás los ajustes de
natación. Y aquí puedes establecer
la velocidad máxima de nado. Podemos establecer cosas como flotabilidad. Y estos solo son relevantes si tu personaje está en
la modalidad de natación. Entonces tenemos vuelo. Nuevamente. Podemos establecer
la velocidad máxima de flujo. Esta es la velocidad que
el personaje se moverá mientras esté en el modo de
movimiento de vuelo. Ahora, bajando a los ajustes de
rotación del movimiento del personaje, puedes ver que
tenemos una velocidad de rotación. Esta es
la rapidez con la que
girará el personaje para enfrentar la dirección en la
que está destinado a enfrentar. Entonces si yo fuera a configurar esto
de 500 a 50, y compilamos y golpeamos play. Ahora, si miro en la
dirección aquí y presiono W, se
puede ver a mi personaje
girando lentamente hacia esa dirección. Ese escenario es como controlamos. Qué tan rápido es el carácter gira. Ahora también tenemos un par de otros ajustes de rotación aquí. Ahora tenemos orientar la
rotación al movimiento, lo que significa que el
personaje se enfrentará a la dirección en la que
nos movemos. Si apagamos esto
y caemos y golpeamos play, y vemos que si empiezo a
moverme en esta dirección, nuestro personaje continua mirando
hacia adelante porque
ya no estamos girando hacia nuestra dirección de
movimiento. Ahora en nuestro componente de movimiento, también
tenemos otro
ajuste llamado use controller desired rotation. Ahora bien, si encendemos eso, nuestro personaje se enfrentará a la
dirección que enfrentan nuestras cámaras. Ahora fijamos nuestra tasa de
rotación en 50. Voy a volver a subir
esto a 500. Y si compilamos y le pegamos a Play, se
puede ver que ahora
cada vez que mueva mi cámara, nuestro personaje se volteará
para hacer frente a la dirección. Ahora se puede ver si
me detuve de mi personaje rápidamente, nuestro personaje
tiene un poco de retraso. Ahora eso es por
la velocidad de rotación. Entonces podríamos
disminuir o aumentar este valor para hacer que nuestro personaje gire más rápido hacia
esa dirección. Ahora, algo a tener en cuenta, hemos utilizado la rotación
deseada del controlador es que no funciona si también
tienes la
rotación orientada al movimiento marcada. Si ambos están marcados
aquí o usan el controlador, rotación
deseada no funcionará. Por lo que esos son la mayoría de los ajustes
principales que
estarás ajustando y el Componente de Movimiento de
Personaje. Pero también podemos
ajustarlos en juego. Entonces, si queremos acceder a lo que
son actualmente estos valores, todos los cambian. Siempre podemos conseguir que nuestro componente de movimiento de
personajes se
arrastre y podemos
buscar un valor en particular. Digamos por ejemplo, estábamos
haciendo un sistema sprint y
queremos que cambie la velocidad máxima de movimiento de nuestros
personajes. Podríamos buscar la velocidad máxima de caminata
establecida, y eso nos da
acceso tanto a nuestra velocidad máxima de
caminata como a nuestra
velocidad máxima de caminata agachada también, donde usamos la velocidad máxima de caminata. Voy a establecer la velocidad máxima de
caminata para decir 1500. Y copiaremos y
pegaremos este nodo, conectaremos su backup objetivo a nuestro movimiento de personajes aquí. Y vamos a crear un nuevo input. Por lo que buscará entrada, luego desplazará, creará
una entrada de desplazamiento a la izquierda. Cuando se presiona, queremos que nuestra velocidad máxima de
caminata aumente a 1500 y cuando se libere la
cambiará a decir, 600. Entonces ahora cuando compilamos
y le pego a Play, si camino sin
presionar shift, tenemos nuestra velocidad normal de caminata. Y si mantengo el turno
hacia abajo, se puede ver nuestro personaje se pone mucho más rápido. Ahora volviendo al plano de
personajes de ThirdPersonCharacter, también
podemos cambiar en qué
modo de movimiento o personaje se encuentra. Así que de nuevo, si conseguimos el movimiento de nuestro
personaje, podemos arrastrar hacia fuera y simplemente
hacer establecer el modo de movimiento. Y podemos usar la función de modo de
movimiento SAT aquí para cambiar el
modo de movimiento actual de nuestro personaje. Por lo que podríamos configurarlo a
caer o nadar dependiendo del modo de movimiento en el que
queremos
que esté actualmente nuestro personaje. Ahora bien, si lo recuerdas, habilitamos
podemos agacharnos en nuestro componente de
movimiento, pero en realidad
también puedes activar y desactivar otros modos de movimiento. Entonces si nos desplazamos a la derecha
hacia abajo aquí, debería estar bajo
el movimiento naff. Podemos soltar, haga clic en el menú desplegable para las capacidades de movimiento. Entonces aquí puedes
ver que en realidad podemos habilitar y deshabilitar todos
los diferentes tipos de modos
de movimiento a los que tu personaje puede entrar. Ahora también podemos
acceder si
estos están o no habilitados o
desactivados en nuestro código. que podamos buscar
can agacharse por ejemplo. Eso nos permitirá comprobar ¿puede nuestro personaje agacharse
actualmente? Ahora usando nuestra variable de
movimiento de caracteres, también
podemos ajustar cualquiera
de nuestros otros ajustes. Por lo que podríamos arrastrar hacia fuera
y buscar conjuntos, utilizar el controlador de rotación deseada. Y podríamos encender o apagar esto
dependiendo de lo que estemos
haciendo en nuestro código. También podemos aumentar o
disminuir o tasa de rotación. Así que podemos
buscar rotación, renta, y podemos establecer una tasa de
rotación que queremos usar
en lugar de tener que
establecerla dentrode establecerla dentro nuestra configuración de
rotación de movimiento de caracteres aquí. Ahora hay ajustes
que no hemos cubierto en esta lección puramente
porque hay muchos
de ellos y algunos
de ellos son mucho más avanzados y bastante
específicos para ciertas necesidades. Pero puedes encontrar bajo la
mayoría de las categorías y opción
avanzada la
cual te dará acceso a alguna información
adicional. Y si quieres saber
lo que hacen estas variables, siempre
puedes simplemente pasar el cursor sobre. Te da una explicación bastante
buena cuanto a lo que hacen. Los últimos ajustes que
vamos a cubrir están
en realidad en los valores predeterminados
de clase del personaje. Por lo tanto, si hacemos clic en los
valores predeterminados de clase y nos desplazamos hacia arriba aquí, debe encontrar el
control de uso de las opciones de rotación, cabeceo, guiñada y
rollo aquí. Ahora, al igual que el
controlador de usuario deseado ajuste de
rotación que tenemos
en el movimiento del personaje, estos hacen que el personaje se enfrenta la dirección que la
cámara está apuntando. Pero la diferencia está
con estos ajustes, si estos están habilitados, el personaje enfrentará
esa dirección al instante. No toma en cuenta la velocidad de rotación que tenemos dentro de nuestro Componente de
Movimiento de Carácter. Si nos desplazamos hacia abajo de nuevo a
los ajustes de rotación, ignorará esta velocidad de
rotación. Si apagamos nuestra rotación deseada
del controlador de uso, y nos dirigimos de nuevo a nuestros valores predeterminados de
clase, desplácese hacia arriba. En realidad podemos
habilitar estos ajustes para ver cómo funcionan en el juego. Por lo que para empezar sólo
permitirá la rotación Europa. Entonces eso es de lado a lado. Vamos a compilar, dale a Play. Ya se puede ver ahora cuando giro
mi cámara, el personaje
se enfrenta instantáneamente a esa dirección. Ahora, normalmente para un personaje
basado en tierra como nuestro
Third PersonCharacter aquí, solo
usarías
el, tu opción, pero puedes habilitar los otros ajustes en
los valores predeterminados de clase. Si nos desplazamos hacia abajo para
encontrarlos, pueden ver que
tenemos pitch and roll. Ahora bien, si habilitamos
ambos y pulsamos Compile, verás cuando golpeemos play, podemos apuntar a nuestro personaje en cualquier dirección a la que esté enfrentando
nuestra cámara. Pero de nuevo, normalmente no
usarías esas dos configuraciones para un
personaje basado en tierra como este. Ahora, por último, al igual que nuestras variables en nuestro componente de
movimiento de caracteres, podemos establecer las que utilizan el
código para que podamos hacer clic derecho, podemos buscar establecerá la rotación
del controlador. Podemos usar set, usar
control de rotación,
pitch, roll y guiñada. Y podemos ajustar esos
ajustes usando código. Entonces eso va a ser
todo por esta lección. Hemos cubierto la mayoría de los ajustes
más utilizados con el componente de
movimiento de personajes. Entonces ojalá ahora
entiendas cómo
funciona eso y cómo puedes ajustar
cómo se mueven tus personajes.
37. Lecciones adicionales (efectos de audio): Oigan a todos. En esta lección
vamos a estar echando un vistazo a cómo podemos reproducir sonidos
usando los nodos Blueprint. Ahora, Unreal Engine cinco
tiene que sistemas de sonido. Actualmente se cuenta con
el sistema de cue de sonido y el sistema de sonido Meta. Y ambos sistemas usan
los mismos nodos Blueprint para reproducir
realmente los sonidos. Y por eso
vamos a estar echándoles un
vistazo a ambos en
esta lección de hoy. Ahora, el sistema de sonido Meta
está actualmente en beta, lo que significa que
necesitamos habilitarlo. Entonces nos dirigiremos a
la opción de edición, iremos a plugins, y
vamos a buscar la materia. vamos a asumir
la opción del metal. Si el tuyo ya está marcado
, entonces eso es genial. Ya lo tienes habilitado. Si no, que
va a tomarlo,
vamos a dar clic en sí, y luego necesitamos reiniciar
el motor rápidamente. Por lo que ahora estoy de vuelta en
el motor y he habilitado el sistema de sonido del metro. Ahora todavía podemos usar el sistema
de sonido de cola también. Acabamos de habilitar el sistema de
metro también. Y lo que podemos hacer para
asegurarnos de que esté habilitado es Haga clic con el botón derecho en el
Navegador de contenido aquí podemos ir a la opción de sonido
y asegurarnos de que tenemos la opción de
fuente de sonido Meta aquí. Ahora solo voy a
explicar la principal diferencia
entre las señales sonoras, los sonidos de
metal y las ondas sonoras. Entonces lo que vamos a hacer es
ir a la carpeta del motor. Y si no tienes eso, puedes ir a Configuración
y luego ir a la categoría de contenido y
asegurarte de que el
contenido del motor de espectáculos esté marcado. Y eso debería mostrar
esta carpeta aquí. Ahora, con la
carpeta del motor seleccionada, vamos a agregar un nuevo filtro, bajaremos a sonar. Vamos a encontrar
la opción de onda sonora que debería estar aquí abajo. Nos encargaremos de eso. Y ahora actualmente
estamos viendo todas
las ondas sonoras que están
incorporadas al motor. Si colocamos el cursor sobre uno, en realidad
podemos tocarlo. Entonces, si le pego, deberías
poder escuchar ese sonido. Y la onda sonora es
básicamente el archivo de sonido que obtendrás al importar un
nuevo sonido al motor. Pensar en las ondas sonoras es
sólo un archivo de sonido básico. En realidad no tiene muchas opciones
de personalización. Abre una de estas ondas
sonoras ahora que nos traen a
mi otra pantalla aquí, puedes ver que aquí
tenemos algunos ajustes. Mayormente bajo sonido es
lo que estarías ajustando. Hay ajustes adicionales, pero no los vamos
a cubrir en esta lección puramente porque son un
poco más avanzados. Pero puedes hacer cosas como
ajustar el tono de volumen y también
puedes activar o desactivar el
looping para esta onda de sonido. Pero pasado eso, aquí
no hay un montón de opciones para
personalizar el sonido. Ahora aquí es donde entran las señales sonoras y el sistema de sonido Mehta. Por lo que cerrará
nuestra onda de sonido por ahora y regresará
al navegador de contenidos. Y nos vamos a deshacer
de nuestras caderas filtrantes. Por lo que eliminaremos onda sonora, agregaremos un nuevo filtro
y vamos a
buscar los sonidos que salgan. Entonces queremos la opción de
cue de sonidos aquí. Y ahora se pueden ver todas
las señales sonoras que están integradas en el motor,
como las ondas sonoras. Para que podamos pasar el ratón sobre uno y golpear el play y escuchar el sonido, ese sonido cue o play. Si hacemos doble clic en un cue de sonido, podemos abrir el editor de cue de
sonido. Ahora, no voy a estar
pasando por todas las
cosas que puedes hacer en un editor de cue de sonido porque
hay muchas de ellas. Si haces clic con el botón derecho, verás hay muchos nodos diferentes que hacen cosas diferentes
para el control del sonido. Pero esencialmente lo que
hace un taco de sonido es que toma un sonido de onda. Entonces, si seleccionamos esta nota aquí, se
puede ver que
en realidad está representando la onda fallida compilada. Y
eso lo podemos cambiar si quisiéramos. Y luego emite ese
sonido al nodo de salida. Cualquier sonido que hayamos
enchufado a esta salida es lo que
se reproducirá cada vez que toquemos
nuestra cue de sonido fallida de compilación. Ahora, si quisiéramos, en realidad
podríamos tener múltiples sonidos de
onda en un
solo taco de sonido. Y la forma en que podemos
hacer eso como si hiciéramos clic derecho en la
búsqueda de jugador de olas. Podemos seleccionar ese nuevo
nodo y establecer nueva onda que queremos colocar para que
podamos hacer compilar el éxito. Ahora, tal vez queríamos, cada vez que le dijimos a esta señal
sonora que la tocara para escoger aleatoriamente entre
dos ondas sonoras diferentes. Podríamos hacer eso con solo
arrastrar la búsqueda al azar. Y podríamos conectar ambas
ondas sonoras en esta carga aleatoria, luego la salida en
nuestro nodo de salida. Y ahora cada vez
que toquemos esta Q, escogerá aleatoriamente uno
de estos sonidos así. Ahora hay algunas cosas
aquí a la izquierda. Ahí está el volumen
multiplicarlo y el tono se multiplican. Y esto afectará a todas
las olas que hay en este cubo. Entonces en lugar de tener que ir a cada ola que nuestros usuarios de cola, podríamos simplemente controlar el
volumen y el tono aquí. Ahora tenemos los ajustes de
atentuación. Ahora bien, no voy a estar
cubriendo esto a detalle en esta lección porque están
un poco más avanzados. Pero básicamente los
planos de ajuste de
atentuación solo contienen
un montón de configuraciones que controlan qué tan lejos
viaja un sonido y también
cuánto disminuye el volumen del sonido a lo largo de una distancia. Si quieres ver esas
configuraciones que están incluidas, ese blueprint puedes
asumir esta opción aquí. Y en realidad te mostraré
todos esos ajustes. No voy a pasar por
estos porque hay muchos y
son bastante complejos. Si quieres aprender más
sobre estos épicos en realidad tiene alguna documentación realmente buena
sobre la atentuación de sonido. Por lo que ahora hemos cubierto
las diferencias básicas entre una onda de sonido
y una cue sonora. Ahora, las ondas sonoras de nuevo, son sólo el archivo básico de sonido que importas
para el motor. Y luego suenan señales.
Podemoshacer cosas como
recoger al azar ondas sonoras. Podemos ajustar cosas
como el pitch a través de estos nodos aquí. Ahora, por último, sólo
voy a explicar cómo creamos una cue sonora. Entonces lo que podemos hacer es si
vamos a nuestro navegador de contenidos aquí, voy a deshacerme
de mi filtro de cue de sonido solo hacer clic derecho y
haciendo sonido cue eliminado. Y añadiremos un nuevo filtro. Y vamos a ir a los sonidos y
nos limitaremos a asumir los sonidos. Y esto
nos va a mostrar todos los tipos de sonido. Entonces nos encargamos de esto y vamos a encontrar
unas ondas sonoras. Entonces tenemos nuestro obturador de
la cámara aquí. Ahora para crear una nueva cue de sonido, puedes simplemente
hacer clic derecho en una onda de sonido. Y aquí, puedes subir a crear cubo y
puedes dar clic en esto, y eso
nos creará un nuevo cue de sonido. Si abrimos ese nuevo taco de sonido, ya
verás, si
lo traigo a la pantalla. puede ver que en realidad
tiene una onda de obturación de cámara. Y eso es en lo que hicimos clic derecho en el Navegador de contenido. Y se conecta
a nuestra salida para nosotros dentro de nuestro nuevo obturador de
cámara q. Si subimos a la carpeta
Characters aquí, solo
me voy a
deshacer de estos filtros, simplemente haga clic derecho y luego
haga eliminar todos los filtros. Entonces también podemos crear
señales sonoras haciendo clic derecho. Y aquí ir al sonido y
podrás encontrar el taco de sonido. Y lo que eso
hará es simplemente crear un taco de sonido vacío para nosotros. Entonces, si abrimos esto, verías que
en realidad no hay entrada aquí porque no le dijimos
qué onda queremos que use. Y si quieres agregar una ola, puedes simplemente
hacer clic derecho y
buscar wave, wave player. Y puedes configurar un taco de sonido aquí y
conectarlo a la salida. Entonces a continuación vamos a pasar
al sistema de sonido metal. Y el sistema de sonido metálico simplemente reemplaza al sistema de cue de sonido. Entonces si nos dirigimos al navegador de
contenidos, voy a hacer clic derecho en
ir a sonidos y
vamos a crear una nueva fuente de sonido
metro. Ahora bien, este es el equivalente
de nuestra señal sonora aquí. Entonces lo que haremos es crear una nueva fuente de sonido de medida. Llamaremos así a este nuevo sonido, y lo
abriremos. Por lo que ahora tenemos una
nueva interfaz de usuario. Se ve un poco similar
a nuestro sistema de colas, pero tiene algunas diferencias. En primer lugar, tenemos una entrada aquí, y este tipo de trabajos como ejecución pendens hacen
dentro de los planos. Esto correrá cuando se le diga a nuestro
sonido de metro que se reproduzca. Y luego tenemos un acabado. Entonces queremos ejecutar
esto una vez que hayamos
terminado de ejecutar
nuestro código y gallina, entonces tenemos esta salida
y esto es a lo que
conectamos para nuestro sonido. Ahora actualmente
dice nuestro jitomate, porque nuestro ajuste para nuestro sonido Meta
en realidad está ajustado a mono. Si desea
cambiar esto,
lo que normalmente probablemente lo haga,
desea hacer clic en este
menú desplegable y seleccionar estéreo. Y ahora puedes ver
que tenemos una opción para nuestras salidas izquierda y derecha. Ahora, a diferencia del sistema de cue de
sonido, no
voy a
entrar en súper profundidad con este sistema porque
si haces clic derecho, verás que hay
montones y montones de funciones. Es un sistema muy grande. Pero lo que
haremos es crear un nuevo plan Wave. Entonces, si haces clic derecho y
buscas la onda Claire, podemos usar este nodo para
reproducir nuestros sonidos de onda. Se puede ver que tenemos un
play y stop inputs. Y de nuevo, estos funcionan como entradas de
ejecución en
un nodo blueprint. Es así como sostuvimos
esta nota para reproducir un sonido o para dejar de
tocar un sonido. Podemos establecer una ola de activos. Entonces aquí es donde establecemos nuestro sonido de onda que
queremos que se reproduzca. Para que pudiéramos escoger,
digamos, archivo compilado. Podemos establecer una hora de inicio. Entonces si quisiéramos, podríamos iniciar el sonido en otro momento
distinto al 0. Podemos cambiar el terreno de juego. Podemos configurarlo en bucle. Podemos establecer la hora en
que inicia el bucle. Y podemos establecer cuántas
veces o cuánto tiempo, lo siento, el bucle lo hará. Bucle para. La duración del bucle se
establece en menos uno. Eso sólo significa que si la
flauta está activada, se repetirá para siempre. Ahora, este nodo tiene muchas salidas y no vamos
a estar cubriendo todas ellas, pero sí cubriremos cómo reproducir
realmente este sonido. Entonces desde nuestra entrada, queremos ejecutar nuestra obra de teatro
en nuestra ola Claire, esto es lo que le dice que
empiece a tocar un sonido. Y luego de nuestras
salidas que queremos, estoy acabado, y
lo conectaremos a nuestro sonido de metal
en terminado aquí. Eso es lo que
les dice a un sonido que nuestra onda ha terminado de tocar. Entonces tenemos este
tomacorriente y francamente, y vamos a enchufar
esos en nuestras salidas aquí. Por nuestro sonido de metal. Esto es lo que proporciona una salida de audio izquierda y derecha
para nuestro sonido. Entonces ahora si le pegamos a play, deberíamos escuchar un sonido. Ahora, la diferencia
con los metazoanos es que
tenemos estos
pines de ejecución en los nodos. Y aquí, lo que
podríamos hacer en lugar de simplemente ejecutar el nodo de salida
sin terminar, es que si
quisiéramos, podríamos tener múltiples sonidos
reproduciendo uno tras otro. Para que podamos copiar a nuestro jugador de
olas aquí, pegarlo aquí abajo. Ahora, cuando termine nuestro primer
sonido, tal vez queramos que se reproduzca otro
sonido para
poder conectar este
pin up terminado demasiado educado. Insertamos un nuevo sonido o
lo configuramos para decir compilar éxito. Pero ahora queremos
conectar nuestra izquierda y
nuestras partes a estos pines de salida realmente
podamos
escuchar el sonido. Pero si los reemplazamos, se puede ver que desconecta
nuestros primeros. Entonces lo que necesitamos ahora es una mezcladora. Por lo que haremos clic derecho
y buscaremos mezclador. ves que tenemos muchas mezclas diferentes
dependiendo
de cuántas entradas tenga, vamos a usar
un mezclador estéreo. Entonces haremos mezcla estéreo o dos. Eso significa que podemos enchufar nuestra izquierda y nuestra derecha desde aquí, y nuestra izquierda y nuestra
derecha desde aquí. Y nos dará sólo una
salida para izquierda, para derecha. Entonces desde nuestro acabado en nuestra segunda trama de onda
conectaremos esto hasta la salida. Entonces ahora lo que va a pasar es cuando le digamos a nuestra
medicina que juegue, va a jugar se
compilan, fallan. Una vez que haya terminado de jugar, se jugará se
compilan el éxito. Y va a emitir el audio izquierdo y derecho
de ambos nodos al mezclador y luego emitir el resultado a nuestro sonido metal. Y podemos probar esto
con solo golpear Play. Se puede ver que ambos sonidos se
reproducen uno tras otro. Entonces ese es solo un ejemplo
sencillo de las cosas que puedes hacer con el nuevo sistema de sonido del metro. Ahora, hay algunos
otros ajustes. Si vamos a la configuración de la
fuente aquí, puede ver que podemos establecer un ajuste de certificación al
igual que nuestras señales de sonido. Y de nuevo, este es el
plano que controla la distancia a
la que se puede
escuchar el sonido y cuánto disminuye
el volumen del sonido a lo largo de una distancia. Así que a continuación en realidad voy a estar
mostrándote cómo podemos reproducir todos estos diferentes
tipos de sonido usando planos. Entonces lo que haremos es ir
a nuestro ThirdPersonCharacter, diríjase de nuevo a nuestra carpeta de
contenido aquí. Sólo voy a ocultar la carpeta de
contenido para nuestro motor. Iremos a la carpeta en
tercera persona, abriremos planos, e iremos
al ThirdPersonCharacter. Y si no te has
dado cuenta ya, he creado un nuevo proyecto en
tercera persona a partir de nuestros últimos proyectos son así que
tenemos un nuevo comienzo aquí. Entonces ahora sólo vamos a
configurar ejemplo de cómo
podemos tocar algunos sonidos. Por lo que voy a agregar
el nodo de juego juego se arrastrará hacia fuera de esto y hacer un temporizador por eventos.
Delevento chulo. Vamos a crear
un evento personalizado. Llamaremos a esto el sonido de M. Y simplemente ordenaremos esto rápidamente. Y voy a hacer este bucle, digamos cada dos segundos y
vamos a tomar en bucle también. Por lo que ahora hay cuatro
nodos principales para reproducir sonidos. Si nos arrastramos fuera de nuestro evento sonoro aquí y la
búsqueda tocará sonido. Y ya ves que
tenemos reproducir sonido, 2D y reproducir sonido en locación. La diferencia entre
estos es reproducir sonido. Un 2D es realmente útil para
cosas como sonidos de interfaz de usuario. Simplemente lo reproduce en la computadora de los jugadores
locales. No reproduce el sonido en un lugar
específico del mundo. Entonces tenemos reproducir
sonido en la ubicación, que reproduce un sonido en un lugar
específico del mundo. Por lo que comenzaremos con
el lugar el martes. Aquí puedes ver que
podemos establecer un sonido. Esto en realidad puede
ser una onda de sonido, un taco de sonido, o un sonido de metal. Entonces, si buscamos nuestro asunto, pueden
ver que podemos configurarlo
a nuestro nuevo sonido masker. Podemos establecer en cola de sonido agudo o podemos configurar a una onda sonora. Ahora, es una buena práctica usar
señales de sonido o sonidos
Meta puramente
porque solo tienes más control sobre
cómo se ejecutan esas. Pero por ahora, sólo voy
a usar nuestros nuevos sonidos Meta. Por lo que he
buscado nuevo sonido de metro y lo seleccionaremos de nuevo. Podrías seleccionar una
Q si quisieras. Corría exactamente
igual que nuestro sonido de metro. Se compilará
y golpeará play. Y deberíamos escuchar
ese sonido tocar. Y es pagar
ambos sonidos. Porque si te acuerdas, en nuestro sonido metal, encadenamos esos dos
sonidos juntos. Ahora, volviendo a nuestro
Third PersonCharacter, haremos clic en este pequeño
desplegable aquí y nos
da algunas configuraciones
que podemos usar para controlar este sonido
que se está reproduciendo. Podemos cambiar el
volumen y el tono. Podemos establecer una hora de inicio. Entonces tal vez tenías un
sonido muy largo y querías que
empezara a los cinco segundos,
podrías poner cinco aquí,
y ese es el momento en podrías poner cinco aquí, que el
sonido dejaría de sonar. Tenemos configuraciones de concurrencia. Ahora bien, esto es algo así como
el plano de la atentuación. Pero este tipo de blueprint
contiene los ajustes de cuántos de este sonido se pueden reproducir
al mismo tiempo. No voy a entrar en ello en esta lección porque es un
poco más avanzado, pero para eso
se usa eso y eso
es lo mismo para ser dueño de actor aquí, los dos se usan
para
concurrencia. Pero por ahora
sólo podemos dejar esos en blanco y nuestro sonido
sonará muy bien. Por lo que a continuación vamos
a echar un vistazo a la ubicación del sonido de reproducción ahora. Por lo que nos desharemos de
nuestro lugar el martes. Sólo compilar, arrastrar hacia fuera
de nuestro sonido aquí y buscar el sonido de Platón en. No tocaremos sonido en locación. Ahora este nodo va a
tener algunas opciones extra. Entonces podemos decir sonido. Esta vez escogeremos, digamos, nuestra
cola de obturación de cámaras por ejemplo. Podemos decir ubicación. Entonces sólo voy a usar la ubicación de
nuestros personajes. Por lo que usamos obtener la ubicación del actor. Conecta eso a la clavija de ubicación. Y si compilamos,
deberíamos escuchar ese sonido reproducirse cada dos segundos.
Justoasí. Si nos dirigimos de nuevo a nuestro blueprint en
tercera persona, si hacemos clic en la flecha hacia abajo aquí, verás que
tenemos algunas opciones nuevas
así como algunas de
las mismas de nuestro nodo anterior. Podemos establecer una rotación
si queremos. También podemos cambiar
el tono del volumen y los tiempos de inicio como antes. Pero ahora tenemos una opción para
el ajuste de atentuación. Ahora bien, si dejas este espacio en blanco, usará el
ajuste de atentuación que has
establecido dentro del cubo. Así que si lo recuerdas establecido aquí, ahora, esto es como
una especie de opciones de anulación. Entonces tal vez esta vez
cuando tocas el sonido, querías usar diferentes ajustes de
distancia para saber hasta dónde se puede escuchar el
sonido. Así que esto es algo así como
una configuración de anulación. Por lo general, si está
utilizando la activación de sonido, en realidad
desea
configurarlos dentro las señales de sonido en lugar de
los nodos aquí. Entonces como antes, tenemos
los ajustes de concurrencia y nuestros
pines de actor propietario aquí también. Ahora, tanto los nodos que
hemos estado usando hasta ahora, me acaban de colocar
hasta los nodos y son geniales por solo tocar un sonido
y olvidarlo. Pero tal vez queramos
poder reproducir un sonido y pausar ese sonido
o lupus o repetirlo. Así que hay algunos otros
nodos que podemos utilizar para que si arrastramos
hacia fuera de nuestro sonido ahora y buscar el
sonido de spawn en C que
tenemos spawn sonido 2D, spawn sonido en la ubicación
y spawn sonido adjunto. Ahora no voy a estar cubriendo el sonido de spawn 2D
porque básicamente es el
mismo que nuestra nota 2D anterior. Pero lo que haremos es usar
la localización de sonda de spawn. Ahora si creamos esto, se
puede ver que
tenemos todas
las mismas opciones que teníamos antes, aparte de que tenemos
una nueva llamada auto destroy. Lo que esto significa es que una vez que
el sonido que configuramos
haya terminado de reproducirse, destruirá automáticamente
este componente sonoro. lo que dependiendo de lo que estés planeando hacer con estos sonidos, es posible que quieras desactivar esto. A lo mejor planeas repetirlo o detenerlo y luego volverlo a
reproducir más tarde. Probablemente querrías
desactivar este ajuste. Ahora puedes ver que
también tenemos una salida, y esta es una salida de
componente de audio, y esto es lo que podemos usar
para controlar su sonido. Entonces, si nos arrastramos, podemos
promover esto a una variable. Por lo que podemos seleccionar la opción
Promociona Variable que creará una nueva variable
llamada componente de audio. Y podemos poner un nombre. Entonces lo configuraremos para que diga un componente de
sonido como ese. Y ahora usando esta variable de
componente de sonido, podemos llamar
a muchas funciones
diferentes para controlar realmente el
sonido que hemos establecido. Entonces si obtenemos nuestra variable de
componente de sonido aquí, nos arrastramos hacia fuera, podemos hacer cosas como pausar nosotros mismos para que podamos
buscar Set Pause. Y podemos establecer si el sonido está
pausado
o no o si queríamos
cambiar el volumen de nuestro sonido, podríamos arrastrar hacia fuera y
sí establecer el volumen. Podríamos cambiar el volumen, multiplicar usando este nodo. Y una vez que terminamos
con nuestro componente sonoro, tal vez solo
queríamos destruirlo. Podemos simplemente arrastrar hacia fuera la
búsqueda de destruir, y podríamos usar el nodo de
componente destruir aquí. Ahora en realidad hay
bastantes ajustes que podemos usar con
nuestro componente de sonido. Si arrastra hacia fuera y
busca audio, en realidad
puede encontrar todas las funciones relacionadas con
el audio que se pueden usar con
nuestro componente de sonido. Ahora el siguiente nodo que cubriremos es el sonido adjunto a nodo. Entonces si eliminamos
este código por ahora, moveremos esto un poco más arriba así que tenemos un poco más de espacio. Nos arrastraremos de nuestro evento
sonoro y
buscaremos el sonido de spawn. Y queremos el
sonido de spawn adjunta nota aquí. Ahora en lugar de una ubicación, en
realidad nos da un componente que podemos unirnos. Esto es útil para cosas
como tal vez tuvieras un auto, si tuvieras ruido en el motor de un auto, en realidad
querrías que eso siguiera
al auto por ahí. Por lo que querrías adjuntar
ese sonido a un componente. Podríamos adjuntarlo a decir, el componente de malla de
nuestro personaje aquí. Podríamos enchufar eso
y ahora el sonido
seguirá junto con
nuestro componente de malla. Y por supuesto
podemos configurar nuestro sonido para que pudiéramos configurar esto para decir sea el clic
en el botón Q aquí. Ahora si hacemos clic en la flecha
hacia abajo aquí en nuestro nodo spawn adjunto en realidad nos da
algunas opciones nuevas. Yo sólo voy a subir estos. Entonces tenemos un poco más espaciador. Podemos configurar un socket para
conectar nuestro sonido también. Así que si nuestra malla tuviera que decir, un zócalo en su cabeza, podemos establecer el nombre del socket aquí y me suena realmente unido a ese zócalo y
seguir junto con nuestra malla. A continuación, tenemos la configuración de ubicación
y rotación. Ahora bien, estos hacen algo
diferente
dependiendo de la configuración del
tipo de ubicación aquí. Entonces, si esto se establece para
mantener el desplazamiento relativo, y diríamos establecer
nuestro valor Z en 50. Bueno actualmente nuestro sonido
se está uniendo a nuestra malla. Entonces si vamos a nuestra ventanilla, soy mallas ubicación está justo
aquí y este punto de pivote. Entonces debido a que hemos añadido 15, el sonido z r se
uniría a la malla, pero sería aproximadamente esta altura, 50 centímetros por encima de
la ubicación de las mallas. A continuación, si volvemos a nuestro nodo, tenemos la opción de
mantener la posición girada. Ahora bien, si dejara esto
a decir, los ceros son 0, el sonido r
engendraría en el centro
del mundo y luego se
uniría a nuestra malla de personaje. Ahora, dependiendo de lo lejos estuviera
nuestra malla de carácter
del centro del mundo, segura, por ejemplo, estaba 500 centímetros en
dirección x. El sonido siempre se mantendría 500 centímetros en la dirección x
de nuestro personaje, pero seguiría junto con nuestro personaje a medida que se movía. Luego, por último, tenemos
las dos opciones de complemento. Ahora, hay dos de estos. No importa
cuál selecciones para los sonidos. Tan ajustado al blanco
sólo significará que el sonido está unido a las raíces de las mallas. Así que aquí mismo en nuestra malla, otra nueva configuración
que tiene este nodo es el stop cuando está unido
a destruido. Y eso básicamente
significa que nuestro sonido, si esto está marcado, dejaremos de jugar cuando
nuestra malla se destruya. Si esto está ticked off
que
el sonido r seguirá jugando incluso si la
malla se destruye. Entonces debajo de eso acabamos de conseguir todos los mismos ajustes que
teníamos para nuestros nodos anteriores por los que ya he pasado. Y por supuesto, tenemos un nodo de salida
del componente de audio. Y podemos configurar nuestra
variable
de componente de audio que creamos anteriormente. Y podemos usar todas esas mismas
funciones que acabo de mostrarte con esta variable de
componente de sonido. Ahora también podemos agregar
componentes de audio a los planos. Por lo que si nos dirigimos
al panel Componentes y buscamos audio, se
puede ver que en realidad
dice Audio y luego en soportes de la cámara obturador cue. Para mí, la razón por la
que está haciendo eso es si voy
al Navegador de Contenido, en realidad lo tengo seleccionado. Entonces si desselecciono eso, volvemos a nuestro componente
aquí y busco audio. Simplemente deberíamos ver el
nombre del audio para que podamos dar clic en eso. Eso crea un nuevo componente
de audio. Y ese componente se adjunta a nuestro personaje automáticamente. Y encima en el panel Detalles, puedes configurar todas
las cosas que hemos estado diciendo en
estos nodos antes, podemos establecer el sonido
que queremos usar. Y esto puede ser una ola, una cola, o un sonido de metal. Para que pudiéramos elegir
nuestro nuevo sonido de metro. Y eso funcionará muy bien con nuestros nuevos componentes de audio. Podemos establecer cosas
como el volumen, el tono, podemos ajustar
los ajustes de accionamiento. Y podemos controlar
este componente de audio la misma manera que controlamos a nuestro componente de
audio aquí abajo. Podemos arrastrar hacia fuera, podemos
pausarlo, por ejemplo. Podemos quitarlo
si quisiéramos. Nos vendría bien un destruir. Y se comporta
exactamente igual que nuestra variable de componente de sonido
que usamos anteriormente. Por lo que ahora podemos probar este componente
de audio hacia fuera. Yo sólo voy a desconectar este código aquí para que no
esté reproduciendo nada. Y si
lo compilamos y le pegamos a Play, verás que nuestro
sonido de audio
se reproduce en el Stan Lee porque
ese componente el Stan Lee porque
ese componenteforma parte de nuestro personaje. Ahora, tal vez no quieras que
el sonido se reproduzca al instante, quieres reproducirlo más adelante, lo que podríamos hacer es volver
a nuestro Third PersonCharacter, seleccionar nuestro componente de audio, desplázate hacia abajo hasta el auto
activar y marcar eso apagado. Ahora, cuando compilamos
y golpeamos play, nuestro sonido no se reproduce. Pero podríamos agregar algún código
para activar ese componente. Por lo que podríamos hacer clic derecho en la
búsqueda de entrada. Podemos buscar
decir, entrada evento uno. Y cuando presiono
uno de mis teclados, quiero activar mis sonidos para que podamos sacar el componente de audio arrastrar y hacer activar y
usar la nota de activar aquí. Conecta eso a nuestro prensado. Y ahora podemos
compilar y golpear play. Y cuando presiono
uno, suena suena. Ahora puedo reactivar eso cada vez que quiera con solo
presionar uno. Eso cubre más o menos
las principales formas en las que puedes tocar sonidos
usando planos. Ahora también podemos reproducir sonidos
dentro de animaciones. Entonces lo que haremos es sacarnos
X fuera de plan editor. Voy a volver a subir
a la carpeta de contenido aquí, a la Carpeta de Personajes, luego a los maniquíes,
luego a las animaciones. Quinn, aquí vamos a
abrir una carrera para la animación. Y aquí puedes ver
que tenemos un bar notificado. Ahora, las notificaciones son básicamente
piezas de código que se pueden ejecutar en un
momento específico en una animación. Entonces, si hacemos
clic derecho en nuestra barra de notificación, podemos agregar una nueva notificada y hay algunas
incorporadas aquí, pero vamos a estar
usando el sonido de reproducción. Si agregamos eso,
podemos arrastrar esto a cualquier punto que queramos en la
animación, digamos aquí mismo. Y ahora, cada vez que la
animación llegue a reproducirse, en este punto, tocará
el sonido que nos sentamos. Y aquí arriba en el panel Detalles es donde nos podemos poner. Entonces esto puede ser de nuevo, un sonido de onda, un taco de sonido
o el nuevo medidor suena. Para que podamos seleccionar esta celda
a nuestro obturador de cámara, o podríamos configurarlo a
nuestro nuevo sonido de metro. Y eso sólo jugará bien. También tenemos ajustes para
cosas como el tono de volumen, y podemos
activar si
el sonido sigue o no la malla. Esto puede ser bastante importante
si estás haciendo un sonido que quieres seguir
junto con el personaje, querrías asumir esto. Ahora cuando nos arrastramos a nuestro sonido de
metro aquí, veamos. Jugaré cada vez que la
animación llegue a ese punto. También podemos agregar sonido múltiple, notifica para que podamos
hacer clic derecho y otro golpe
haga clic en reproducir sonido. Y ahora tenemos un lugar
adicional y notificar. Podemos agregar un sonido totalmente
diferente, digamos el disparo de la cámara agudo. Entonces ahora cuando llegamos
a ese punto, teníamos esa cámara filmada en juego. Y luego cuando
llegamos a este punto, están destinados a sonar las reproducciones. Entonces ahora en realidad estamos listos
para probar esto en juego. Nos dirigiremos a
nuestro mapa y le pegaremos a play. Por lo que ahora cuando corro hacia adelante, deberíamos escuchar nuestros
sonidos tocar en el momento de la animación
que nos sentamos ahí como. Entonces, eso va a ser
más o menos por esta lección. Esperemos que ahora entiendas un poco más sobre
cómo podemos reproducir sonidos y el motor usando planos y también avisa
animación. Al igual que una nota al margen,
tal vez te estés preguntando si deberías usar
señales sonoras o sonidos metta. Eso va a depender de cuando estés viendo este video. Actualmente,
los sonidos de metal está en beta, y por eso tenemos que ir
al menú de plugins y habilitarlo. Pero si estás viendo
esta lección y
ya no dice Beta junto
al plugin de sonidos de metal, probablemente
deberías estar usando
el sistema de sonido metro.
38. Lecciones adicionales (efectos de partículas): Oigan a todos. En esta lección vamos a estar aprendiendo cómo generar
efectos de partículas del Niágara usando planos. Así que antes de
empezar para aquellos de ustedes que estaban siguiendo
en la lección anterior, he creado una nueva plantilla en
tercera persona, solo para que tengamos un nuevo
comienzo para esta lección. Ahora, la
plantilla de tercera persona en realidad no incluye ningún
efecto de partículas del Niágara para que utilicemos. Entonces vamos a usar
uno gratuito del mercado. Voy a estar usando Niagara
step VFX pack de side arm studio es completamente gratis así que puedes simplemente
recogerlo en el mercado, seleccionar Agregar al proyecto, y luego seleccionar tu
proyecto y lo hará descarga automáticamente
todo por ti. Por lo que una vez que
haya terminado de descargarse, deberías encontrar una nueva carpeta y tu navegador de contenido al
que podamos ir. Y aquí estarán todos
esos efectos de partículas que
acabamos de descargar. Entonces iremos a la carpeta
Niagara Effects e iremos a sistemas de partículas. Y entonces aquí puedes
ver que tenemos todos
nuestros efectos de partículas del Niágara. Ahora podemos seleccionar uno de
estos para echar un vistazo más de cerca. Voy a abrir el restos de
tierra, por ejemplo. Y sólo traeré esto
de mi otra pantalla. Puede tardar un momento en compilarse, así que solo déjalo hacer eso
antes de que podamos ver una vista previa. Ahora el mío terminó de compilar. Si me acerco un poco, se
puede ver que
tenemos una partícula de tierra
perfecta jugando aquí. Ahora no vamos
a estar cubriendo Editor
del Niágara en esta
lección puramente porque es un sistema enorme que podría tener todo
un curso simplemente
enfocado alrededor de él. Pero lo que estaremos
haciendo es que
usaremos estos nuevos
efectos que hemos importado a nuestro proyecto y estaremos
desovando durante el juego. Entonces empezaremos por ir
al personaje en tercera persona. Así que nos dirigiremos a
nuestra carpeta en tercera persona, luego los planos de
ThirdPersonCharacter y heredaremos, que va a
configurar un temporizador en Begin Play para generar
nuestro efecto de partícula. Entonces haremos clic derecho. Entonces solo olvídate para empezar a jugar. Arrastra desde aquí y
haremos temporizador por ellos. Nos arrastraremos
desde el pin del evento y buscaremos un evento personalizado. Y llamaremos así a este efecto
engendro. Y lo configuraremos para que
desove cada 1 segundo. Y queremos que esto se vuelva en bucle. Entonces
me voy a encargar de looper. Ahora, hay algunos nodos
diferentes que pueden engendrar efectos de
partículas del Niágara. Nos vamos a estar enfocando en los dos principales
en esta lección. Así que si arrastramos fuera
del efecto spawn y buscamos el sistema de spawn, se
puede ver que
tenemos cuatro nodos, pero vamos a estar echando un
vistazo al sistema de spawn en la ubicación y al
sistema de spawn adjunto. Ahora la diferencia
entre estos dos, observe que el sistema de desove
en la ubicación solo
generará nuestro efecto en una ubicación dada y
se quedará allí. Mientras que el
sistema de desove conectado, podemos usar eso para unir nuestro efecto de partícula
a algo. Y si eso se mueve,
seguirá junto con ese objeto. Entonces comenzaremos con
el sistema de spawn en la nota de ubicación
y crearemos. Ahora partiendo de la parte superior
tenemos plantilla de sistema. Este es el efecto Niágara que vamos a
engendrar usando este nodo. Para que podamos dar clic en esto. Se puede ver que
tengo todos mis efectos de nuestro paquete
de activos de paso. Para que podamos seleccionar uno de estos. Voy a seleccionar digamos, el efecto hierba aquí. Y eso quiere decir que ahora
cuando ejecutemos este nodo, éste engendrará el efecto de partícula de
hierba. Puede que desee compilar algunos
shaders, solo déjelo hacer eso. Entonces a continuación tenemos la ubicación. Ahora esta es la ubicación en la que generará
nuestro efecto de partículas. Tenemos la rotación, esta es la rotación,
será desovar eso. Y entonces tenemos
la escala también. Ahora tenemos auto destruir. Ahora lo que eso hará
es que destruirá nuestro componente de efecto de partículas cuando termine de reproducir
su efecto de partículas. Así que normalmente probablemente
querrías tener esto encendido. También tenemos auto activate, lo que básicamente significa que cuando desove el efecto de partícula, automáticamente
comenzará a reproducirse. Y tenemos el método de pooling. Ahora, el pooling es cuando
el motor básicamente almacena una carga de efectos de partículas
desactivadas. Y luego cuando le decimos que
desove un efecto de partícula, en lugar de crear uno nuevo, puede reutilizar uno desactivado. Ahora para este ejemplo, que
puede dejar esto como ninguno. Entonces ahora vamos a desovar nuestro efecto de partículas en las ubicaciones de
nuestros personajes. Entonces sólo vamos a
conseguir la ubicación del actor. Y conectaremos
eso directamente a nuestra variable de ubicación aquí. Voy a dejar la rotación
y la escala como están. Ahora podemos compilar y probar
esto. Entonces le pegaremos a play. Y si nos fijamos en nuestro centro de
personajes aquí porque esa es la ubicación de nuestros
personajes como actores, se
puede ver que tenemos
un efecto de partícula reproduce cada 1 segundo. Ahora bien, si empiezo a moverme, verás que los efectos de
partículas se quedan donde estaba
cuando se engendró. En realidad no está apegado
a nuestro personaje. Entonces lo que podemos hacer ahora es
echar un vistazo al nodo
adjunto. En su lugar. Eliminará nuestro sistema de
spawn en la ubicación. Y vamos a arrastrar hacia fuera
desde el efecto de spawn y buscar el sistema de spawn. Queremos usar el sistema de
spawn adjunto. Ahora, esto tiene muchos de los mismos ajustes que nuestro nodo anterior, pero en realidad tiene
algunos nuevos también. Así que a partir de arriba, podemos establecer nuestro efecto Niagara
y la plantilla del sistema. Podemos escoger una diferente
esta vez quizá las hojas. También podemos proporcionar un componente
apegado a. Ahora bien, esto es lo que nos
permite especificar a qué componente queremos
unir nuestro efecto de partícula. Podríamos agarrar el componente
de malla aquí, y podemos conectarlo
directamente a los
dos componentes conectados. Esto hará que nuestro efecto de
partícula se
adhiera a nuestro componente de malla. Ahora bien, si nuestro
Componente Mesh tuviera zócalos, podríamos especificar el
nombre del socket aquí y eso
causaría que los efectos de partículas se unieran a ese socket. Ahora tenemos la
ubicación y la rotación. Estos harán algo
diferente dependiendo de en qué se establezca nuestro
tipo de ubicación. Si está configurado para mantener el desplazamiento
relativo, entonces si nos dirigimos a la ventana gráfica, si tuviéramos que establecer ese valor, digamos 250 en la Z, lo que sucedería es que nuestros efectos de
partículas
se generarían en el 0
ubicaciónde nuestra malla. Entonces ese es el punto aquí
donde está el pivote. Agregaría 50% a su altura. Por lo que aún estaría
unido a la malla, pero estaría 50 por encima
del punto de pivote de las mallas. A continuación se encuentra la opción de mantener
la posición girada. Entonces, si cambiamos esto a la configuración de posición
del teclado, lo que sucederá ahora es la ubicación
que
establecemos aquí es donde se generarán
los efectos de partículas. Y luego
lo sujetamos a la malla. Entonces, si tus personajes dicen que 500 centímetros
del centro del mundo, entonces el efecto de partícula se
uniría
al personaje a 500
centímetros de distancia. Y mantendría esa distancia de 500
centímetros del personaje al
que está apegado. Por último, tenemos el
broche de presión al blanco. Ahora, esto hará que
el efecto de partícula rompa a lo que sea que lo
estemos uniendo. Entonces, si lo estamos uniendo
a nuestra malla, se uniría directamente
a su punto de pivote aquí. Entonces, para este ejemplo, vamos a mantener nuestro conjunto
para ajustar al objetivo para que nuestro efecto de partícula desove
exactamente en nuestra malla de personaje. Y después de eso,
acabamos de conseguir los mismos ajustes
que teníamos antes. Tenemos auto destroy, un auto activate y luego tenemos el
método de pooling también. Voy a asumir también
destruido porque en realidad
quiero que mi efecto de partícula destruya después de que
termine de jugar. Por lo que ahora podemos probar
esto otra vez. Podemos golpear play y se
puede ver que nuestro efecto de partícula está jugando
en nuestra ubicación de malla ahora, lugar de en el centro
de nuestro personaje. Ahora, es posible que desee
poder controlar qué
efecto de partícula se va a reproducir dependiendo de una variable. Así que lo que podemos hacer
es volver a nuestro personaje en tercera persona aquí, y vamos a
crear una nueva variable que podemos conectar a nuestra plantilla del sistema para decirle
al nodo qué tipo de
efectos que queremos jugar. Entonces vamos a crear una nueva variable, voy a llamar efecto mío. Podemos cambiar el
tipo de variable al sistema Niagara. Queremos referencia de
objeto del sistema Niagara, luego compilaremos y
ahora en la clase por defecto. Por lo que puedes ver podemos seleccionar
cualquiera de nuestros efectos Niagara. Puedo picar decir, hielo por ejemplo. Entonces simplemente arrastraremos esto
y lo conectaremos a nuestra plantilla de sistema y
lo compilaremos antes de volver a probar, solo
vamos a dejar que los
shaders terminen de compilar. Ahora eso está terminado.
Paraque podamos darle a Play. Se puede ver que ahora podemos ver nuestro efecto de partículas de hielo
jugando en lugar de nuestras hojas. Ahora todos los efectos de partículas que
hemos estado usando bastante cortos, pero tal vez en el futuro
estés trabajando con uno que se reproduce durante mucho tiempo
en cierto momento, tal vez quieras
destruirlo para lo que sea razón. Bueno, eso también lo puedes hacer. Si nos dirigimos de nuevo al
Third PersonCharacter, tenemos una salida aquí, y este es un componente del sistema de
partículas del Niágara. Y esto nos permite
controlar lo que queremos que haga
este sistema de partículas
después de haberlo engendrado. Para que podamos arrastrar hacia fuera, podemos usar la opción Variable promotora
que acaba de crear una nueva variable con el tipo de componente
del sistema de partículas Niagara, como puedes ver aquí,
solo voy a llamar al mío y engendró un efecto
así. Y vamos a compilar. Entonces usando esta variable
podemos acceder a algunas funciones
útiles. Entonces si me sale la variable, podemos arrastrar hacia fuera y
podemos usar la pausa. Podemos usar set post. Y esto nos permite pausar el efecto de partícula
o desactivarlo dependiendo de qué valores
booleanos te sentaste en la nota aquí, podemos obtener si
es o no actualmente ports. Por lo que podemos hacer ponernos en pausa
debido a que de este tipo de reportes vamos hacer se pausa y
eso volverá si el
efecto de partícula está pausado o no actualmente. Y entonces si queremos
destruir los efectos de partículas, sólo
podemos arrastrar hacia fuera la
búsqueda de Destroy. Podemos usar el nodo destruir
componente aquí. Ahora también podemos agregar efectos de
partículas como componentes en lugar de
tener que desovarlos con un nodo. Entonces si digo quería agregar un efecto de partícula
a mi malla aquí, podría ir a agregar
búsqueda de Niágara. Podríamos agregarle un componente
del sistema de partículas del Niágara. Con ese sistema de partículas seleccionado, se puede ver por aquí, podemos establecer un
sistema de partículas que queremos usar. Entonces dicen la grava por ejemplo, si vamos a nuestra ventanilla en C que cuando
entré a la vista, pero nos dio un rápido adelanto. Pero podemos establecer la
ubicación y en realidad nos
muestra cómo se verá cuando esté jugando
en esa ubicación. Esto se comportará de la
misma manera que un efecto de partícula adjunto. Por lo que esto está unido ahora
a nuestro componente de malla. Entonces donde quiera que vaya el
componente mallado, nuestro efecto de partícula seguirá. Y también podemos
usar este componente la misma manera en
nuestra gráfica de eventos. Entonces, si conseguimos nuestro componente
Niagara, podemos enchufar esto en decir,
el componente destruido. Si quisiéramos destruir
ese componente. También podemos usar esos nodos de
poros que acabo mostrarte con nuestro componente
Niagara también. Ahora otra forma podemos generar efectos de partículas como usar
el sistema de animación. Entonces si nos dirigimos
a una animación ahora, voy a ir a personajes, maniquíes que dos animaciones. Y vamos a ir
a la carpeta Quinn porque eso es lo que es
nuestro personaje. Y abriremos aquí la animación de
Rumford. Ahora, inhala, podemos agregar
notificaciones que son algo así como bits de código que se ejecutan en
cierto punto de una animación. Estos nos permiten reproducir sonidos o efectos de
partículas mientras
nuestra animación se está reproduciendo en el
momento exacto en que
queremos reproducir una partícula
o un efecto de sonido. Entonces, lo que podemos hacer es hacer clic derecho en nuestra línea de tiempo de
notificación aquí. Ve a Agregar notificado, y podrás ver que tenemos algunas notificaciones incorporadas aquí. Ahora vamos a estar usando la obra efecto de partículas Niágara. Entonces seleccionaremos eso
y eso nos crea un nuevo efecto de partícula notificado. Y podemos
arrastrar esto para que se reproduzca en cualquier momento que queramos
durante la animación. Para que pudiera poner
el mío a decir 40 aquí. Con eso notifica seleccionado. Se puede ver aquí arriba podemos
configurar cualquier sistema Niagara. Para que pudiera establecer que esto fuera, digamos, nuestro efecto de partículas. Ahora, si pasamos
a nuestra notificación aquí, deberían
ver un par de efecto de
partículas de suciedad. Ahora bien, si el tuyo no lo hace, puedes obtener un pequeño
pop-up diciendo que está compilando shaders, solo permitas que termine de hacer
eso y luego deberías ver tus
efectos de partículas jugar así. Ahora actualmente el efecto de
partícula reproduce la raíz de los personajes, que está justo aquí abajo. Pero si quisiéramos, podríamos
establecer una ubicación diferente. Entonces podríamos usar el
desplazamiento de ubicación aquí para sumar digamos, un 50 y la altura. Por lo que ahora cuando
tocamos los efectos de partículas, se
puede ver que está más
hasta las rodillas del personaje. Ahora. También podemos establecer el desplazamiento de
rotación, que es la rotación de
efectos de partículas. Y también podemos establecer la escala. También podemos unir el efecto de partícula a
un alveolo o a un hueso. Entonces, por ejemplo, si quisiera que mi efecto
de partícula de suciedad se adhiriera a la cabeza, podríamos fijar la cabeza hueso
cadera, seleccionar la cabeza. Y voy a establecer el desplazamiento de
ubicación a 0 y la z Así que ahora cuando ejecutemos
el efecto de partículas, verán
que el efecto de
partículas ahora se está ejecutando en la ubicación del
hueso de la cabeza. También podemos agregar múltiples efectos
de partículas. Si quisiéramos, podríamos
simplemente hacer clic derecho en Agregar, notificarlo y podemos agregar
otro Niagara notificar. Y aquí podemos configurar esto
a otra ubicación. Podemos establecer un efecto de
partícula diferente para salvar los efectos de partículas de hielo. Y podemos tener a ambos
juegan en esta animación y ver que actualmente
se está
reproduciendo aquí abajo. Ahora, solo un consejo rápido al
trabajar con notifica. Si acabas de tener una barra aquí, se puede obstruir bastante si tienes muchas
notificaciones y una animación. Entonces lo que puedes hacer es hacer
clic en el desplegable aquí para agregar la pista de notificación. No solo te da una nueva
pista de notificación que puedes agregar notifica como otro efecto de
partícula por ejemplo. Y funcionará
exactamente igual que agregarlos a la primera pista. Simplemente te ayuda a
organizarlos un poco mejor. Entonces ahora tenemos todos estos poderosos efectos
en nuestra animación. En realidad podemos comprobar para ver si estos están jugando en juego. Entonces lo que haremos es ahorrar, volveremos a nuestro personaje en
tercera persona aquí. Y en realidad voy a eliminar el componente Niagara
que acabamos agregar y vamos a
desconectar. Empiezo a jugar nodo. Así que ahora nuestro ThirdPersonCharacter no está generando ningún efecto de
partículas en absoluto. Y podemos probar
esto out and game. Entonces ahora cuando golpeemos play, deberíamos poder
correr y ver esos efectos de partículas que
agregamos a nuestra animación. Se pueden ver los otros efectos de
partículas que se están reproduciendo y nuestros
efectos de partículas ICER también se están reproduciendo. Un poco difícil de
ver, pero se puede ver corriendo por ahí abajo a los pies. Así que eso es solo una
visión general básica de cómo generar y agregar
efectos de partículas del Niágara a las animaciones. Si estás interesado
en VFX y cómo
crear nuevos efectos de partículas
con el sistema Niagara, definitivamente te recomiendo
revisar cursos que están específicamente
enfocados en ese sistema.
39. Widgets (descripción general): Oigan a todos. En esta sección del curso, vamos a estar echando
un vistazo a los widgets. Ahora, widgets o el
tipo de blueprint que usamos para agregar UI a la pantalla de
nuestros jugadores, cosas como sistemas de menús, sistemas inventario, barras de salud. Todos esos se harían
típicamente con widgets. Ahora, que es un sistema bastante
grande por sí solos. Probablemente podrías
hacer un
curso completo solo para widgets. Entonces en esta sección sólo
vamos a estar pasando por
algunos de los conceptos básicos. Aprenderás cómo
crear nuevos widgets, cómo editar sus diseños, cómo enlazar cosas como
variables y funciones. Para empezar en esta lección, solo
vamos a
estar echando un vistazo
al widget UI Layout. También vamos a estar aprendiendo
cómo crear realmente un widget y luego agregarlo
a la pantalla del jugador. Entonces empieza con, vamos
a crear un nuevo widget. Para ello, solo
vamos a hacer clic derecho en nuestro navegador de contenido, luego buscar la Interfaz de
Usuario, salir y bajar
a Widget Blueprint. Y vamos a seleccionar
el widget de usuario común aquí. Y lo vamos a nombrar bp
subrayado, HUD, así. Ahora necesitamos
escribir realmente algún código para desovar que estén calientes y luego
agregarlo a la pantalla de nuestro reproductor. Así que voy a estar haciendo esto en el
plano de personajes de tercera persona, que nos traen de
mi otra pantalla aquí. Ahora, puedes hacer esto dentro del mando del jugador
también si quieres. Simplemente lo estoy haciendo dentro
del ThirdPersonCharacter porque ese es el blueprint que
tengo en esta plantilla. Entonces lo que haremos es hacer clic derecho y buscarlo
para empezar a jugar. Y a partir de eso vamos a
arrastrar hacia fuera y vamos a buscar Crear Widget. Y eso
nos va a dar este nuevo nodo de aquí. Y es un nodo específico
diseñado para generar widgets. Entonces lo primero
que vamos a hacer es establecer una clase
y vamos
a seleccionar nuestro nuevo BP HUD que acabamos de crear. Ahora también necesitamos
proporcionar un Jugador poseedor, y este es un tipo de
controlador de jugador. Entonces lo que haremos es hacer
clic derecho y
buscar el controlador de jugador gap. Simplemente podemos enchufar esto
directamente a nuestra oración de apertura. Entonces ahora estamos desovando o BP HUD, pero en realidad no lo estamos agregando a la pantalla del jugador todavía. Entonces lo que tenemos que hacer primero es crear una variable para almacenar
una referencia a nuestro HUD. Así que si queremos
acceder a ella más tarde, podemos simplemente arrastrar hacia fuera
desde el valor de retorno, clic promueve variable,
y eso va a crear una nueva variable HUD
BP santo. Yo sólo voy a llamar al mío HUD. Y podemos arrastrar esto hasta aquí. Ahora. Vamos a arrastrar
hacia fuera desde la salida del nodo set y
vamos a
buscar Add to Viewport. Y ahora este nodo se va a sumar a la ventanilla de nuestros jugadores. Ahora en Begin Play, creamos nuestro bp HUD, dijo que es Poseer Jugador
para que nuestros jugadores controlen. Establecemos la variable HUD si queremos
acceder a ella más adelante. Y luego agregamos nuestra cabeza
a nuestra pantalla de jugador. Pero si le pegamos a play ahora, en realidad no
veríamos nada. Y eso es porque
nuestro bp HUD está vacío. Entonces nos dirigimos para allá ahora. Compilaremos esto y
abriremos nuestro bp HUD. Ahora estamos dentro de nuestra vista de diseñador
bp HUD. Y aquí es donde en realidad
diseñamos cómo
van a verse nuestros widgets. Ahora, aquí arriba a la izquierda,
tenemos el paladar, y aquí es donde
encontrarás todos los tipos de widgets incorporados
que vienen con el motor. Tenemos cosas como botones,
imágenes, barras de progreso y muchas otras
que estaremos analizando en futuras lecciones. Ahora esencialmente crear
nuevos widgets para nuestro HUD se realiza mediante el uso de los
widgets incorporados que vienen
con el motor, cosas como la barra de progreso
en los tipos de widget de imagen. Los personalizamos para que se
comporten de la manera que queramos. Entonces, si quisiéramos barra de salud, normalmente usamos nuestra barra de
progreso y la
personalizaríamos para que se comportara
como una barra de salud. O si estamos construyendo
un sistema de menús, tal vez podríamos usar
el widget de botones y el widget de imagen
y usarlos en combinación para abrir nuevos menús y cambiar la
configuración, por ejemplo. Entonces esa es nuestra
sección de paleta aquí. También tenemos la sección de
biblioteca. Esto es nuevo y
Unreal Engine cinco. Esta es una especie de
vista
más fácil de usar de la vista del paladar. Se puede ver que en realidad tiene
las mismas opciones aquí. Simplemente te da un pequeño
adelanto en el ícono aquí. Entonces es un poco más fácil ver lo que hacen estos
widgets individuales. Y más adelante cuando creamos
nuestros propios widgets en
realidad encontraremos aquellos
bajo el creado por el usuario. Entonces si hago clic en ese desplegable, puedes ver que
no hay, no hay ningún widget aquí
aparte de este incorporado. Pero cuando creamos
nuestros propios widgets, en realidad
podemos
encontrarlos aquí y usarlos dentro de
nuestros otros widgets. Se puede utilizar ya sea
el paladar o la
vista de biblioteca como preferencia completamente
personal. Ahora, pasando a la
jerarquía aquí también, podemos ver los
widgets actuales que están en el widget de la
barra lateral ahora actualmente el aleatorio porque no
hemos colocado ninguna m. pero si fuera a decir agarrar esto
texto y solo deja caer eso, puedes ver que ahora tenemos un libro de texto que está apareciendo. Podemos usar estos ajustes aquí
para cambiar su visibilidad. Ahora, esto es útil
si tal vez más adelante, tienes muchos
widgets pasando y mayoría de las veces no
serán visibles al mismo tiempo. Puedes ocultarlos así para que sea más fácil
trabajar en el widget. A continuación están los widgets de bind. Ahora, esto tiene más que ver con animaciones de
widgets y no
vamos a estar cubriendo la animación
en este curso solo puramente porque es un
poco más avanzado. Y lo que
vamos a estar cubriendo. A continuación, tenemos
nuestro panel Detalles. Ahora porque tengo mi cuadro de
texto seleccionado aquí en nuestro panel de jerarquía nos está dando la configuración para nuestros textos. Entonces por ejemplo, lo que podría
cambiar lo que dice el texto. Por lo que podría decir, Hola, Esta es una prueba y
actualiza nuestros textos. Podemos establecer cosas como el color, pero si estuviéramos usando otra
cosa, si elimino mis textos
aquí y agregué una imagen, puede ver cuando
selecciono nuestra imagen, en realidad
obtenemos
diferentes configuraciones. Y eso nos permite
establecer cosas como una imagen del tamaño de nuestra
imagen, y cosas así. Si en algún momento alguna de
estas ventanas está cerrada, puedes ir a la
pestaña de Windows justo aquí y puedes subir cualquiera de
ellas aquí arriba. A continuación tenemos la vista gráfica. Ahora aquí es donde ponemos
código que se va a
ejecutar que sea relevante
para nuestro widget. Si nos dirigimos a
la vista gráfica ahora, debes notar que
se ve más o menos igual que los editores de blueprint con los que hemos estado trabajando. Tienes tu panel de
blueprint de mike. Aquí tienes las funciones,
macros, variables y despachadores de
eventos. Tenemos nuestro panel Detalles, que
dependiendo de lo que seleccione, si creo una nueva variable, por
ejemplo, se puede
ver que nos da todos los detalles de nuestras variables como
usted esperaría que lo hiciera. Y por supuesto, si arrasto esta variable cuando
podemos obtenerla y configurarla, podemos ejecutar código normalmente como si esto fuera un blueprint
normal. Ahora sí tenemos un par
de avisos diferentes, así que tenemos el
constructo de eventos que puedes ver. Está algo grisáceo. Ahora, si eliminamos esto
y simplemente lo buscamos, podemos buscar
Event Construct. Simplemente puedes crearlo normalmente. Ahora, esto funciona
más o menos como un empezar a jugar a cabo se ejecuta cada vez que se crea
nuestro widget. Ahora también tenemos preconstruido este
evento. Esto en realidad será uno cada vez que podamos sacar el plano. Entonces para darles un ejemplo, Tal vez podríamos ocultar nuestra imagen
que otra semana la suba. Se nota que en realidad tenemos una variable de imagen aquí
en nuestras variables. Y esto se refiere a la imagen que agregamos
al plano. Y la razón por la
que tenemos tan accesible en nuestro Event Graph es si
volvemos a nuestro diseñador,
seleccionamos la imagen. Se puede ver que aquí está
marcado para es variable. Así que eso significa que podemos acceder a este
código de fruta de imagen a través de una variable. Entonces lo que
haremos es agarrar esa imagen, arrastraremos una solo
para establecer visibilidad. Conectaremos esto a nuestro
preconstruido así. Entonces cuando puedo sacarlo, podemos ver que está configurado en Visible. Entonces si voy con mi diseñador,
podemos ver nuestra imagen. Es sólo una
imagen en blanco en este momento. Pero si volvemos
al Event Graph y cambio esto a oculto, ahora cuando compilo,
vuelvo al diseñador, se
puede ver que ya no es visible porque lo
configuramos en oculto, y ese evento realmente se ejecuta cada vez que compilamos nuestro código. Ahora, nuestros widgets realmente pueden enfriar el código dentro de
nuestro gráfico de eventos. Entonces lo que podemos hacer es
volver con nuestro diseñador aquí. Voy a borrar la imagen
por ahora y vamos a tomar un botón y
arrastrarlo a nuestro Hud. Puedes
arrastrarlo directamente aquí o puedes arrastrarlo
hacia abajo a la jerarquía. Hace lo mismo. Por lo que sólo lo arrastraremos con nuestros botones seleccionados
en el panel Detalles. Si nos desplazamos hacia abajo, tenemos algunas de
estas opciones de eventos. Ahora si hacemos clic en
este botón más, en realidad nos creará un nuevo evento y el gráfico de eventos. Entonces tal vez quiero que este
botón ejecute algún código. Cuando se hace clic, podemos hacer clic en este pequeño botón
más aquí, y eso realmente nos crea un nuevo evento dentro
del gráfico de eventos. Ahora, este evento se ejecutará cada vez que presionemos ese
botón durante el juego. Ahora, algo a tener en
cuenta al codificar en widgets, es una buena práctica no
poner código de juego
dentro de un widget. En realidad, solo deberías
tener tu widget para mostrar información y
luego tomar entrada de,
digamos, cosas como pulsaciones de botones. Y luego ese widget debería
decirle a otros planos, como actores de blueprint o blueprint de
tu personaje
lo que se presionó, en realidad no
deberías
estar haciendo nada de tu código de juego
dentro de un widget . Entonces por ejemplo, si este
botón mató a mi personaje, por
ejemplo, podríamos
simplemente hacer clic con el botón derecho en la búsqueda, olvidar jugador, personaje, arrastrar desde aquí y
ejecutar Destroy Actor. Ahora, cuando presiono ese botón, destruiría mi personaje
y esto funcionaría bien. Pero no es particularmente
buena práctica hacer esto. Lo que realmente debes hacer
es que nosotros también deberíamos costar. O un personaje en tercera persona como este eliminará el nodo de actor
destruido. Y luego dentro de nuestro
ThirdPersonCharacter, en realidad
deberíamos tener
unos eventos separados. Entonces crearé un nuevo cliente. Entonces podemos llamar a
este jugador asesino. Entonces esto
correría Destruye Actor. Así. Volveríamos a nuestro HUD, arrastrábamos de nuestro
ThirdPersonCharacter y llamaríamos a que los eventos llamarían kill player. Entonces ahora nuestro widget no es en realidad el blueprint que está
ejecutando el código de juego. Es solo tomar la entrada
ButtonClicked. Es decirle al
ThirdPersonCharacter, Hey, necesitas dirigir este evento. Ahora, esto no
importa demasiado para codificar en juegos para
un solo jugador. Pero más adelante, si
quieres
ramificarte en la codificación multijugador, esta es una
práctica muy importante a seguir. No quieres que los widgets ejecuten
realmente ningún código de juego, solo para decirle al código de juego dentro de otros planos
lo que ha sucedido. Ahora. Por último, si
realmente compilamos nuestro HUD, verás que obtenemos algunos errores. Eso solo porque
eliminamos nuestra imagen en la Vista del Diseñador y la
reemplazamos con el botón. Y si subimos
aquí arriba, en realidad todavía tenemos una referencia
a esa vieja imagen. Entonces lo que podemos hacer es
simplemente eliminar estos nodos, compilar, y eso va a
deshacerse de las flechas. Ahora hemos terminado
para esta lección. En nuestra siguiente lección,
vamos a echar un vistazo más de cerca a la Vista del Diseñador
y luego cómo
podemos controlar el
diseño de nuestro widget.
40. Widgets (diseños): Oigan a todos. En esta lección vamos a
estar aprendiendo cómo podemos controlar
realmente
un diseño de widgets. Entonces, para empezar,
en nuestra última lección, creamos este BP HUD y agregamos algún código a
nuestro ThirdPersonCharacter, que básicamente crea
ese HUD y luego lo
agrega a la
pantalla de nuestros jugadores en Begin Play. Ahora también agregamos en nuestra última lección al
BP tiene un widget de botón. Ahora actualmente eso está
ocupando la totalidad de nuestro bp HUD. Entonces lo que vamos a
hacer es seleccionarlo en la jerarquía litro. Entonces vamos a compilar y eso nos va a dar una advertencia. Entonces nos dirigiremos
a la vista gráfica, que va a
eliminar este código aquí. Y la razón por la que estamos recibiendo
esta advertencia es porque se
supone que
este evento se ejecuta cuando se presiona
el botón que acabamos de eliminar y ya no existe. Entonces por eso ahora estamos
recibiendo esa advertencia, borraremos esto y compilaremos. Ahora vamos a dirigirnos
al diseño de vista y en realidad
vamos a echar un vistazo a algunos de
los tipos de panel de widgets. Entonces nos dirigiremos
al toque de paleta aquí, y voy a seleccionar panel. Y aquí tenemos algunos tipos
diferentes de paneles, y estos son útiles para controlar layouts
con widgets. Pero vamos a empezar
con el panel de lona. Así que sólo vamos a
arrastrar esto en la parte superior de nuestra jerarquía de widgets
aquí y simplemente liberar eso. Y ahora tenemos un panel de lona. Y se puede pensar en un panel
de lona. Es como una representación de toda la pantalla de los jugadores. Si tuviéramos que añadir algo
así como un botón aquí, y podemos simplemente arrastrarlo y
soltarlo en nuestro panel de lienzo. Si compilamos y pulsamos play, deberíamos ver nuestro botón
aquí en la pantalla de nuestros jugadores. Por lo que ahora vamos a X fuera de plano editor y nos dirigimos de
nuevo a nuestro hardware. Ahora bien, te
habrás dado cuenta que tenemos este botón
aquí abajo que podemos arrastrar y que nos permite
cambiar el tamaño de nuestra ventanilla aquí. Ahora bien, es importante tener en cuenta que todo lo que esto está
haciendo es cambiar la vista previa de nuestro widget para que
podamos la vista previa de nuestro widget para que
podamosver cómo se
vería nuestro HUD, digamos en esta resolución, o tal vez un
resolución como aquí abajo. Pero esto en realidad no está cambiando
el tamaño de nuestro widget. Todo esto está haciendo es
cambiar la vista previa. Podemos ver cómo se
ven realmente nuestros
widgets en tamaños de pantalla específicos. Otra forma de hacerlo es con la opción de
tamaño de pantalla aquí, y esto solo
te da un montón de previsualizaciones para diferentes dispositivos. Por lo tanto, si estás
trabajando en un dispositivo móvil, podrías elegir un
dispositivo aquí para obtener una vista previa de su resolución de
pantalla exacta. Pero para la mayoría de la gente, probablemente
vas a estar usando un monitor de diez ADP. Para que podamos dirigirnos a los
monitores y seleccionar el monitor de
21.5 a 24 pulgadas. Y eso en realidad va a
cambiarlo a diez ATP para nosotros. Y se puede ver esa
resolución aquí abajo. Ahora, nuestro panel de lona
es en realidad un poco especial en comparación con
nuestros otros paneles. Cuando arrastramos cosas como
botones o imágenes en él, realidad
podemos
arrastrarlos y moverlos a diferentes lugares con el
interior del panel del lienzo, también
podemos redimensionarlos. Entonces si quiero hacer
mi botón más grande, sólo
puedo arrastrarlo hacia fuera
y hacerlo más grande. Ahora porque tengo
mi botón seleccionado y es un hijo de
nuestro panel de lona. Y lo que quiero decir con niño es que está contenido
directamente
dentro de nuestro panel de lona. Como puedes ver aquí
debajo de nuestro panel de lona, tenemos nuestro botón, que es un hijo
del panel de lona. Ahora por eso, también
tenemos algunos ajustes
en nuestros botones, detalles que le son exclusivos cuando está dentro de
un panel de lona. Para empezar,
tenemos anclas y te
explicaré un poco
sobre eso en un momento. Pero también tenemos la posición x Entonces esta es una posesión lado a lado,
posesión y, que es es posición de arriba
y abajo, entonces tenemos su tamaño. Entonces este es su tamaño y ancho
y su tamaño y altura. Ahora, nuestro ancla es básicamente el punto central
para este widget. Entonces si yo fuera a poner esto a
0 en la x y 0 en la
y. verás que sube a nuestra esquina superior izquierda porque actualmente
ahí es donde está anclajes. Pero si iba a cambiar este
ancla para decir el centro, se
puede ver que es
posición x e y. en realidad ha subido. Y eso es porque ahora es 0 posición estaría en
el centro de la pantalla. Así que si fuera a establecer
esto a 0 de nuevo, verás que widget en realidad va al centro
de la pantalla. Ahora, la alineación
es algo así como la posición del punto de pivote
para nuestro widget. Por lo que actualmente 00 significa que va a estar en la esquina
superior izquierda. Si cambio esto a 0.50.5 o centro de nuestro widget ahora
está en su centro. Y es por eso que el
widget ahora
se ha movido a la posición central, pesar de que su posición x e
y sigue siendo 0. Entonces tenemos el
tamaño al contenido, que explicaré
más adelante en la lección. Tenemos el orden z, que básicamente
controla si tenemos dos widgets superpuestos
entre sí, el que tenga el orden de
ver más alto estará en la parte superior. Entonces si agarro otro
botón aquí, tendré que hacer zoom para verlo. Si arrasto esto sobre
la parte superior de nuestro widget, puedes ver
que en realidad está sobre la parte superior de nuestro widget inferior. Pero si selecciono mi widget inferior y aumento este a uno, se
puede ver que ahora
va por encima de esto. Somos jet porque
es el orden es 0. Ahora, bajando en
el panel Detalles, tenemos algunas opciones de apariencia, y estas van a
diferir dependiendo del widget
que tengas actualmente. Entonces porque estamos en un botón, si damos cuenta del estilo, verás que tenemos opciones para normal flotado y presionado. Ahora bien, así es
como se va a ver el
botón cuando simplemente es normal, no le está pasando nada. Luego cuando el mouse
se cierne sobre arriba y luego cuando en realidad
se está presionando hacia abajo. Y si abrimos una de estas, digamos la opción normal, podemos cambiar cosas
como la imagen o el tinte, o si se dibuja como una caja redondeada o simplemente una
caja normal. Y eso ya lo ves. Ya no tiene las esquinas
redondeadas, o podemos cambiarla como tensa. Para que pudiera cambiar
esto para decir ser rojo. Y ya puedes ver que ahora está
resaltado en rojo. Ahora como puedes ver, hay
muchas opciones diferentes y cada tipo de widget
tiene diferentes opciones. Entonces no voy a pasar por
todos estos escenarios. Si quieres
saber qué hacen, puedes pasar el ratón sobre ellos y te
da una pequeña punta de herramienta. O simplemente puedes tener
una jugada sobre cambiar colores y tamaños y
cosas por el estilo. Pero al igual que una visión general, cuando seleccionas un widget, aquí es donde encontrarás todos
sus ajustes de cómo
se ve realmente. Así que a continuación vamos a eliminar
realmente
estos botones aquí. Vamos a echar
un vistazo a algunas de las otras opciones de panel que tenemos. Entonces vamos a empezar
con una caja vertical. Entonces si sólo arrastramos eso adentro, voy a alejar
un poco más. Ahora, como pueden ver, esto
es sólo un widget vacío. No hay
apariencia visual para nosotros. Pero lo que podemos hacer es
agregarle otros widgets. Si me desplazo hacia arriba y
agarro, digamos el texto, puedo o bien simplemente arrastrarlo
encima del cuadro vertical aquí o podemos soltarlo
sobre él en la jerarquía. Para que podamos soltarlo. puede ver que ahora se
agregan nuestros textos para nosotros aquí. Ahora, porque no hemos agregado nuestros textos al panel de lienzo. Cuando lo selecciono, no puedo
moverlo ni redimensionarlo. Al igual que si agregué algunos textos
directamente al panel canvas. Y la razón de eso es nuestra caja
vertical es lo que toma el
control del tamaño de nuestro texto va
a ser su posición. Entonces si tuviéramos que añadir otro
texto a nuestro cuadro vertical, veamos que ahora empieza a
apilarlos verticalmente. Y esta es la
característica clave de una caja vertical. A medida que le añadamos nuevos widgets, los agregará en
una pila vertical. Ahora, si seleccionamos nuestro cuadro
vertical aquí, se
puede ver que
actualmente es de este tamaño. Si lo movemos, todavía
podemos moverlo en nuestro panel de lienzo
porque está unido
al panel de lienzo, mientras que el texto se adjunta dentro
del cuadro vertical. Pero si nos fijamos en una caja de herramientas, en realidad
no es del mismo
tamaño que nuestros textos. Textos como filtraciones fuera de ella. Ahora, aquí es donde se activa el tamaño de la opción de contenido. Si me llevo esto, se
puede ver que ahora mi caja
vertical se ha hecho más grande y ahora es del tamaño de
lo que metamos dentro de ella. Por lo que esta es la característica principal
del contenido del sitio. Cualquier widget que tenga widgets
hijos dentro de él. Si marca esta opción
para ese widget, se redimensionará a sí mismo para ser el tamaño de los
widgets que estén dentro de él, como nuestra caja vertical. Ahora, si seleccionamos
algunos de los textos que actualmente están dentro de
nuestro cuadro vertical y nos desplazamos hacia arriba aquí verás que ahora
tenemos configuraciones que
se llaman gráfica de caja vertical. Eso es en lugar de la ranura del panel
canvas que
teníamos cuando pusimos nuestro texto justo directamente dentro
del panel canvas. Ahora bien, estos son algunos de los
controles que podemos usar para ajustar nuestros textos mientras está
dentro de una caja vertical. Entonces, para empezar,
tenemos relleno. El relleno es básicamente
cuánto espacio hay entre nuestros textos y el exterior
de la caja vertical. Entonces si cambiamos esto por decir diez, lo que hará es que le dará a nuestros textos diez pixeles entre su borde y el borde de las cajas verticales
que puedes ver aquí. Ahora lo ha hecho en
todas las direcciones para este texto porque acabo de
poner diez en el hit superior. Pero si hacemos clic en la flecha hacia abajo, en realidad
podemos especificar izquierda, derecha, superior e inferior. A continuación tenemos el
tamaño y las alineaciones. Ahora actualmente, nuestra
caja vertical simplemente cambiará su tamaño a lo que
esté dentro de ella. Ahora, para
probar realmente la configuración, vamos
a tener que desactivar eso. Entonces vamos a
desactivar el tamaño del contenido y vamos a hacer
nuestro cuadro de texto más grande. Entonces ahora en realidad es
más grande de lo que nuestros textos necesitan. Entonces, si selecciono mi
texto aquí, actualmente, está configurado para ocupar
todo el espacio vertical y
horizontalmente que pueda. Entonces lo que podemos hacer es que si
quisiera que mi texto
estuviera centrado, podríamos configurarlo en
una alineación central, y ahora está centrado en el
medio de nuestra caja vertical. Si cambio el tamaño de mi caja, se
puede ver que
cambia de centro. O podemos seleccionar nuestro texto de nuevo y configurarlo para que esté alineado a la derecha. Y eso significará que el
texto ahora se adjunta
al lado derecho de
nuestra caja vertical. A continuación, también tenemos la alineación
vertical, y esto nos permite controlar la posición vertical
de nuestro texto. Ahora actualmente está configurado
para llenarse verticalmente, pero también tenemos su
tamaño establecido en auto. Por lo que el texto sólo va a usar tanto espacio como
necesite verticalmente. Pero digamos que quería que
mi texto estuviera más en el centro de
nuestra caja vertical. Lo que podemos hacer es
decirle a nuestro tamaño que se debe llenar. Y esto significa que nuestro
texto básicamente le está diciendo a
la caja vertical que quiere
usar tanto espacio como pueda. Entonces podemos usar nuestra alineación
vertical. Podríamos establecer esto para decir centro, y que estará centrado en el espacio que tiene disponible. Ahora, estos ajustes pueden ser un poco confusos
para empezar, y una gran parte del tiempo solo
tienes que
jugar con ellos para obtener el resultado que estás buscando. Pero pueden ser
realmente útiles cuando se trabaja en cosas
como cajas verticales. Y el comportamiento de estos
ajustes van a depender del widget
que haya seleccionado. Así que si tenemos que
agarrar un botón y soltar esto dentro de la caja
vertical aquí, se
puede ver que en
realidad
se está extendiendo al tamaño completo que
tiene disponible en el ancho. Y la razón de eso es
por nuestras alineaciones. Ahora, si tuviera que poner mi alineación
horizontal al centro, verás que mi botón
en realidad se vuelve mucho más pequeño. Y eso es porque
si vamos a Estilo en el desplegable normal aquí, nuestro tamaño de imagen se
establece en 32 por 32. Entonces si iba a aumentar esto, puede ver que mi botón
en realidad se hace más grande. O si iba a
aumentarlo en el valor X, puede ver que se alarga. Y si fuera a poner mi
talla aquí arriba para llenar, ves que mi botón
se hace mucho más grande. Ahora no está ocupando todo
el espacio disponible porque nuestro texto aquí arriba
también está configurado para llenar. Entonces si tuviera que configurar esto en auto y ver que ahora mi caja
está empujando todos estos textos fuera de su camino
y está ocupando tanto espacio como
pueda verticalmente. Y eso es porque nuestra
vertical está establecida para llenarse verticalmente para que nosotros tomemos
el relleno horizontalmente, verás ahora un botón
ocupa todo este espacio. Y al igual que una nota al
margen, si estás cambiando el tamaño de un botón en su estilo normal, probablemente
querrás hacer
lo mismo tanto para flotar para
presionar porque
tienes que recordar que al pasar
el cursor sobre un botón, comenzará a
usar estos ajustes. Y si tu talla es diferente
de tu tamaño normal, entonces tu botón
se va a encogerse cada vez que pases el cursor sobre él. No te preocupes demasiado si esos ajustes se te han
pasado por encima de
la cabeza, la mejor manera de aprender widgets
es simplemente jugar con ellos, tratar de hacer pequeñas cosas y conseguir que funcionen
y se presenten de la forma en que desea mediante el
uso de estos botones aquí. Y también los
ajustes de relleno
y alineación que
tienes disponibles
seleccionando el widget individual. Ahora hemos estado usando
el panel vertical, pero también hay unos paneles
horizontales. Entonces si vamos a nuestra opción de
paneles, puedes ver que tenemos
la caja horizontal. Y si arrastramos esto adentro,
esto se comporta
más o menos exactamente
igual que nuestra caja vertical, pero en cambio es horizontal. Entonces si agarro, digamos, un widget de texto, simplemente arrastramos
eso a nuestra caja horizontal. puede ver que lo ha añadido dentro de nuestra
caja horizontal aquí abajo. Si fuera a agregar
otra a nuestra caja horizontal, se
puede ver que la ha agregado,
pero ahora las está moviendo horizontalmente en lugar
de verticalmente. Ahora, lo genial
de estos paneles es que podemos usarlos juntos. Entonces si alejamos
un poco aquí, voy a borrar todos
estos en mi caja vertical. Y vamos a agregar una caja horizontal dentro de
la caja vertical. Entonces bajaremos dos paneles, buscaremos una caja horizontal. Y vamos a
meter esto dentro nuestra caja vertical así. Ahora, dentro de nuestra caja
horizontal podemos agregar algo así como textos,
agregaremos algunos textos. Y tal vez yo también quiero
una imagen. Entonces si imaginamos que esto era
tal vez una lista de artículos, querríamos los ítems Imagen y luego algunos textos
para su nombre. Por lo que añadiremos una imagen también a nuestra caja horizontal así. Ahora, podemos cambiar el
orden en que están estos, dentro de nuestra caja horizontal. Podemos seleccionarlas
y puedes usar estas pequeñas flechas solo
para moverlas. O en el panel de jerarquía, sólo
podemos arrastrarlo. Y obtenemos esta pequeña línea
azul que nos dice si la estamos moviendo para
poder moverla por encima de nuestro texto. Y ahora está por encima de
nuestro texto o
frente a nuestros textos para
la caja horizontal. Ahora di que en realidad no me
gustó la forma en que se ve esto. Quería algo de espacio
o tal vez quería mi caja de texto al otro
lado de nuestro panel aquí. Selecciono mi texto. Podríamos configurarlo para que se
llene y lo voy a
configurar para alinear a la derecha horizontalmente. Y ahora mi texto está por aquí y mis imágenes siguen
del lado izquierdo. Por lo que ahora podríamos copiar y
pegar o caja horizontal. Entonces
lo seleccionaremos, haremos Control C, luego seleccionaremos
nuestra caja vertical y haremos Control V. Y ahora podemos pegar en un par
de nuestras cajas verticales. Ya puedes ver ahora
tenemos una lista de caja
horizontal dentro de
nuestra caja vertical. Y entonces esas cajas horizontales tienen nuestras imágenes y nuestros textos. Para que podamos seleccionar nuestro
texto y cambiarlos. Podríamos cambiar
esto por decir espada, esto a oro, y esto a bebida
saludable, por ejemplo. Ahora tenemos una lista vertical de cajas
horizontales que luego
tienen esta información en su interior. Ahora, tal vez queríamos
cambiar la distancia desde el borde de
nuestra caja horizontal hasta el borde de la caja vertical. Podemos hacer eso
usando nuestro acolchado. Para que podamos configurar nuestros
acolchados, digamos diez. Y eso en realidad nos
dará algo de espacio entre nuestras diferentes entradas y también los bordes de nuestra caja vertical. Para que pudiéramos hacer esto
con cada uno. Podemos establecer esto a diez también. Y luego lo mismo con esto, sólo para ordenar un
poco así. Ahora si quisiéramos, podríamos
establecer una imagen para estos. Entonces si selecciono una
de las imágenes aquí, podemos establecer una imagen. Ahora sólo tengo las imágenes
que vienen con el motor. Entonces vamos,
usaremos, digamos éste. Eso en realidad es establecer nuestra
imagen que podríamos sentarnos y tener 12 aquí
para que podamos desplazarnos hacia abajo, encontrar una imagen diferente, tal vez este icono de Android, se puede ver. Ahora podemos establecer imágenes para
cada una de nuestras filas aquí. Otra forma en que podemos usar el
relleno es en realidad dentro, digamos, de una caja vertical aquí. A lo mejor quería que mi
texto fuera de este lado, pero quería un poco de espacio entre la imagen y el texto. Lo que podríamos hacer es
cambiar esto de nuevo a auto, así que está por este lado. Entonces podríamos
o bien usar relleno. Para que pudiera abrir relleno en
un acolchado izquierdo de digamos, 50. Y ya ven ahora nuestro
texto está a 50 centímetros, por lo que a 50 pixeles
de nuestra imagen. O si nos deshacemos
de esto rápidamente, podemos usar un widget espaciador. Entonces, si buscamos espacio, podemos usar un widget espaciador
y podemos caer esto en, entre nuestra imagen y
nuestros textos en la jerarquía. Simplemente, selecciona el espaciador
y aquí estableceremos su tamaño. Queremos que la x
sea la horizontal, entonces fuimos incrementos para decir 100, y eso nos da un 100 pixeles entre nuestra imagen y nuestra espada. Ahora, hasta ahora hemos estado
mirando paneles y
paneles en su mayor parte pueden
tener hijos ilimitados. Por lo que podemos agregar tantos
widgets como queramos a nuestro panel de lienzo o a nuestra caja vertical o a
la caja horizontal. Pero algunos widgets no
tienen esa libertad. Si nos deshacemos de nuestra búsqueda
aquí y agregamos, digamos, un botón, podemos agregar
un niño a un botón. Entonces si agarro, digamos, algunos textos, puedo arrastrar esto arriba
aquí para agregarlo como niño o simplemente soltarlo en el botón
en el panel de jerarquía. Y ya puedes ver ahora que tenemos el texto y eso es un
hijo de nuestro botón. Pero si yo fuera a agarrar,
digamos, algunos textos más, en realidad
ya no
puedo agregar
eso a nuestro botón porque nuestro botón sólo
puede tener un hijo. Entonces una buena manera de evitar esto es si quitamos los textos
de nuestro botón, podemos usar un panel como
nuestra caja horizontal. Podemos agregar eso a nuestro botón. Y ahora nuestra caja horizontal
como hijo del botón. Pero podemos agregar
tantos niños como queramos, la caja horizontal. Para que pudiéramos agarrar,
digamos, algún texto, agregarle eso a nuestro botón, también
podríamos agarrar una imagen. Por lo que podemos agregar eso
a nuestro botón. Ahora, actualmente se está
filtrando de un botón. Pero lo que podemos hacer es
seleccionar el botón, podemos redimensionarlo para que nuestro contenido
se quede dentro del botón. O si lo recuerdas, podemos
hacer clic en Tamaño al contenido. Button en realidad
solo se redimensionará a cualquier espacio que necesite
para el contenido dentro de él. Entonces esta es una manera realmente fácil. Puedes hacer widgets que solo
pueden tener un hijo, tener tantos hijos
como quieras con solo
usar las cajas del panel de aquí abajo. Ahora una cosa que puede ser
desafiante con trabajar con estas cajas de panel
es decir que quería que mis textos o esta entrada aquí en nuestra
caja vertical fueran más grandes. No hay opción de tamaño
que solo podamos controlar. Pero lo que podemos
hacer es envolver elementos
individuales
con una caja de tamaño. Entonces digamos, yo quería que esta imagen
fuera en realidad mucho más grande. Lo que podríamos hacer es
seleccionar nuestra imagen aquí. Podríamos envolverlo haciendo
clic derecho, hacer rap con. Y básicamente esto solo
significa que estamos diciendo que la imagen esté contenida
en otro widget. Entonces vamos a seleccionar,
digamos, la caja de tamaño. Y ahora nuestra imagen que puedes
ver está dentro de una caja de tamaño. Esa caja de tamaño todavía está
dentro de nuestra caja vertical es sólo una especie de poner nuestra imagen
en esa caja de tamaño para nosotros. Podemos hacer esto con
nuestras cajas también. Entonces si selecciono mi imagen
aquí, por ejemplo, podríamos envolver esto con digamos, una caja vertical si quisiéramos. Puedes ver que
tenemos caja vertical u horizontal o cualquiera de estas opciones
que tienes aquí. Volviendo a nuestra
caja de tamaño que acabamos de crear. Se puede ver que aquí tenemos
algunas opciones de tamaño. Entonces lo que podemos hacer es seleccionar estas opciones para
activar las anulaciones de tamaño. Si entro un texto aquí, así lo dicen 100 por 100. Se puede ver que ahora está forzando a esta imagen a ser de ese tamaño. Por lo que esto puede ser realmente útil cuando se trabaja con cajas verticales porque a veces
solo se quiere
forzar a un widget a
tener un cierto tamaño. Y los controles aquí pueden ser
un poco restrictivos. Entonces usando una caja de tamaño, podemos simplemente forzar
un tamaño específico. Aquí también hay algunas otras
opciones. Entonces si desmarcamos o
anulamos las opciones, y la razón por la que las estoy
tomando es porque estas básicamente solo obligan al
widget a ser de este tamaño. Ninguna de estas opciones será mejor si
tienes estas tectónicas. Entonces sólo vamos a
quitárselos por ahora. También podemos establecer un tamaño
mínimo y máximo. Y esto básicamente nos dice
que queremos que nuestro widget al menos sea decir, 50 por 50. Pero puede redimensionarse
hasta decir, otro sitio. Eso dicen 200 por 200. Ya ves actualmente
son 50 porque nuestras imágenes solo una imagen pequeña. Pero si nuestra imagen fuera más grande, en
realidad haría uso de ese espacio adicional de
hasta 200 pixeles. Y entonces la imagen no se
pondría más grande que 200 porque decimos tamaño máximo. Ahora por el momento
acabamos agregar widgets manualmente
arrastrando hombres a nuestro panel de lienzo o a nuestra
caja vertical, por ejemplo. Pero en nuestra siguiente lección, realidad
vamos
a estar aprendiendo cómo podemos crear
widgets usando código, agregarlos a estas cajas. También estaremos
mirando la caja de pergaminos, así que sólo traeré eso aquí. Y básicamente la forma en que funciona
la caja de desplazamiento es una vez que los widgets dentro de él, los niños dentro de él se hacen
más grandes que su tamaño actual, obtendrán una barra de desplazamiento aquí, en realidad podrán desplazarse
a través de el contenido dentro de
la caja de desplazamiento.
41. Widgets (creación de Widgets): Oigan a todos. En esta lección
vamos a estar aprendiendo cómo crear widgets usando código, en lugar de tener que arrastrar y
soltar
manualmente estos widgets
en nuestro panel aquí. También vamos a estar
mirando la caja de desplazamiento. Ahora, lo explicaría un
poco en nuestra última lección. Pero esencialmente,
cuando el contenido de nuestra caja de desplazamiento se hace
más grande de
lo que realmente es la caja, nos dará una pequeña barra de
desplazamiento que podemos usar para desplazarse por su contenido. Entonces, para empezar, lo que
vamos a hacer es crear una tabla de datos que va a contener alguna información
sobre algunos elementos. Y luego vamos a
tener nuestro código de widget crear un listado para
cada uno de esos artículos, y vamos a almacenarlos
dentro de nuestra caja de desplazamiento aquí. Entonces, para empezar,
vamos a ir
al Navegador de Contenido y
vamos a crear un nuevo widget. Y este va a
ser un widget personalizado que
en realidad
vamos a desovar y utilizado para mostrar
nuestros elementos de información. Por lo que haremos clic derecho, iremos a la opción de interfaz de usuario
y crearemos un nuevo widget. Vamos a
seleccionar widget de usuario. Y vamos a
llamar a este BP en el listado de artículos de
puntuación así. Y haremos doble clic en
él para abrir. Y yo sólo voy a arrastrar el mío hasta la cima aquí así. Ahora la diferencia con la creación este widget en comparación con nuestro HUD, que es que
en realidad no vamos a usar un panel de lienzo porque nuestro widget de listado de artículos se va a agregar
a otro panel . De manera similar a como hemos hecho
nuestras imágenes y nuestros textos, el listado de artículos no va a ocupar toda nuestra pantalla de
jugadores. Entonces no vamos a
usar un panel canvas, en realidad solo vamos a usar directamente una
caja horizontal para empezar. Entonces yo sólo voy a
agarrar una
caja horizontal , pon eso aquí. Eso nos va a permitir
trazar con las cosas en dirección horizontal. Podemos agarrar una imagen para que
encontremos la opción de imagen. Bueno, agregaré algunos textos para el
jugador o el nombre del ítem, y también agregaré otro texto. A lo mejor tendremos un valor de costo. En este momento esto se ve un poco extraño porque si te acuerdas, seguimos previsualizando esto
es si los widgets que se están agregando a una pantalla de 120
por diez ATP. Pero lo que podemos hacer para darnos
un poco de vista previa es ir al tamaño de pantalla o
a la pantalla
completa aquí a la costumbre. Y esto nos permite
en
realidad solo introducir manualmente un tamaño de píxel para nuestro widget. Ahora recuerden, esto es
sólo para previsualizar. Este no es en realidad el
tamaño de nuestro widget. Entonces esto solo nos da una
idea de cómo se
verá el widget en un cierto tamaño. Voy a poner el
mío para decir 350. Y el largo, o tal vez lo
hagamos 400 y el largo, tal vez AT, y el ancho. Así que ahora tenemos un poco mejor idea de cómo van a parecer
nuestros widgets una vez que lo
agreguemos a un cuadro de desplazamiento, como hicimos en el video de diseño, puedes pasar un poco
de tiempo moviendo estos alrededor, añadiendo espacios,
cambiando las fuentes o colores si lo deseas. Voy a poner mi costo para
que sea en contra de este lado, así que lo voy a
configurar para que se alinee
al lado derecho y
vamos a tomar en película. Por lo que ahora nuestro texto está de
este lado de nuestro widget. Ahora, también vamos
a necesitar cambiar estos valores de widgets en código. Entonces lo que vamos a hacer
es que vamos a seleccionar cada uno de nuestros widgets aquí y vamos
a renombrarlos. Por lo que voy a cambiar el nombre de
imagen a Ícono Elemento. Y tenemos es
variable activada, lo cual es bueno porque
necesitaremos acceder a nuestra imagen en el Event Graph. Ahora si seleccionamos nuestro libro de texto, puedes ver que
en realidad no tiene ese TikTok. Entonces vamos a asumir eso. Y voy a configurar
este al nombre del artículo. Y éste se
llevará esto también, y llamaremos a este artículo costo. Así que ahora si nos dirigimos a
nuestra vista gráfica y compilamos, verás que
ahora tenemos variables para cada uno de nuestros tipos de widgets. Usando estos,
en realidad podemos simplemente obtenerlos como variables y podemos establecer
información sobre ellos. Por lo que si quería cambiar
nuestro texto de costo de artículo, puedo hacer establecer texto. Podemos usar el nodo set text, y esto realmente me permite
cambiar el texto que está siendo mostrado por nuestro texto de costo de artículo. Ahora solo eliminaremos
estos nodos porque
en realidad necesitamos configurar nuestra tabla de datos. Por lo que guardaremos nuestro listado de
artículos por ahora y volveremos
al navegador de contenido. Antes de crear una tabla de datos, necesitamos crear una estructura primero
para que esa tabla de datos la use. Entonces haremos clic derecho
e iremos a planos Luego estructura. Y yo sólo voy a llamar al
mío S punto de subrayado. Y eso lo abriremos. Y aquí vamos a
añadir algunas variables nuevas. Entonces agregaré una nueva variable. Al primero, le llamaremos nombre. Cambiaremos esto
para que sea un valor de texto. Por lo que este será el
nombre de nuestro artículo. Podríamos establecer un costo, así que llamaremos a este costo, y lo establecemos en un entero. Y podríamos agregar otro valor, digamos para una textura, buscará textura 2D. Y queremos la textura 2D
aquí, referencia de objeto. Yo sólo voy a
llamar a este icono de esa manera. Y vamos a guardar esto. Ahora vamos a volver a
nuestro navegador de contenido y
vamos a crear una nueva tabla de datos utilizando nuestra estructura de elementos de
subrayado S. Así que haremos clic derecho, vamos a la opción miscelánea
aquí, seleccione la tabla de datos, y luego vamos
a seleccionar nuestro elemento S en el menú desplegable
aquí y presionar Ok, luego llamaremos a nuestra lista de elementos de
tabla de datos así. Por lo que ahora necesitamos abrir la lista de artículos y realmente
agregarle algunos elementos. Entonces eso lo abriremos. Y añadiremos algunas filas nuevas. Entonces agregaré una nueva fila. Llamaré a esto decir espada. Espada, espada. Y vamos a establecer el nombre para ordenar. Fijaremos el costo para decir cinco. Ahora no tengo ningún
íconos para los artículos, pero podemos usar algunas texturas
solo aleatorias. Entonces tal vez escoja la textura de la
cámara para esta. Bueno, no tuve una
fila. Llamaremos a esto decir deletreado que mal otra vez. Entonces esta es la ACS. A continuación, vamos a establecer el nombre para
nuestra fila AKS dos actos también. Establecemos el costo de decir, 20 establecerá otra textura. Entonces yo sólo escogeré
esta cara verde. Agregaremos otro, y
voy a configurar esto para que sea hola, bebe. Volví a deletrear
eso mal. Bebe así. Y de nuevo, fijaremos
el nombre para ayudar a beber, fijaremos el precio a decir,
o el costo a dos. Y escogeremos otra imagen. Entonces escogeré, digamos, el ícono de Android aquí.
Esoservirá por ahora. Agregaremos un poco más para que
podamos hacer que nuestro scroll box funcione
un poco más adelante. Pero por ahora eso hará eso. Regresaremos a nuestro widget de listado de
artículos. Ahora tenemos que crear una función que
en realidad va a configurar este listado y establecer nuestro icono de costo de artículo y
nombres para este widget. Entonces para hacer eso, voy
a crear una nueva función. Yo sólo voy a llamar a
este listado de configuración. Vamos a agregar una entrada, así que seleccionaremos el nodo
de entrada aquí. Y debajo de entradas
añadiremos una nueva entrada. Y voy a poner esto
a F punto de subrayado. Ahora, esa es la estructura que
usamos para nuestra tabla de datos. Si lo recuerdas,
podremos ingresar una struct item a esta función. Así que lo configuraremos a eso y
establecemos el nombre en elemento. Ahora, vamos a usar
la información de esta entrada de estructura para establecer
realmente nuestros widgets. Si arrastramos hacia fuera, podemos romper nuestra estructura de artículo y podemos
acceder al nombre costó un icono. Así que para empezar, vamos a
agarrar el nombre del elemento Widget, Obtener esa variable, y luego
arrastrar hacia fuera y hacer establecer el texto. Y haremos el nodo SetText. Conecta eso a nuestra entrada. Y vamos a
tomar el nombre y enchufar eso al texto. Entonces obtendremos el costo del artículo. Haz lo mismo. Así que establece texto, consigue ese nodo. Conecta eso a
nuestro SetText anterior, y tomamos el costo. Podemos enchufar eso
directamente a nuestros textos también. Nos dará este nodo
que acaba de convertir un entero en texto. Y luego, por último,
vamos a establecer el icono. Así que vamos a agarrar
icono de elemento y
vamos a arrastrar hacia fuera de
esto y hacer conjunto pincel. Queremos establecer pincel de
textura como esa. Y esto nos
permite básicamente simplemente decir cuál es nuestro widget de imagen, qué textura querías usar. Entonces yo sólo voy a
agarrar nuestro icono aquí, conectar hasta textura. Así que ahora cuando ejecutemos
esta función, vamos a establecer el costo del nombre del artículo y el icono o a donde sea struct
que proporcionamos a la entrada. Entonces ahora podemos compilar y guardar esto y
volveremos a nuestro HUD. Ahora, tengo la caja
de desplazamiento de nuestras lecciones anteriores. Entonces en realidad voy a
hacer esto un poco más grande porque es bastante
pequeño por el momento. Entonces es sólo un poco más grande ahí. Y también vamos a agregar una caja vertical a
nuestra caja de desplazamiento. Ahora, podríamos simplemente agregar nuestros widgets directamente
a la caja de desplazamiento. Pero el problema con
eso es que podrías obtener algunos problemas de escalado y también
hay algunas opciones
que te faltarán. Entonces si nos desplazamos hacia abajo, voy a agarrar una caja vertical y agregarle eso al cuadro de
desplazamiento aquí. Ahora, si yo fuera
sólo, por ejemplo, decir agarrar un botón y
agregarlo a la caja de desplazamiento. Si selecciono ese botón, se
puede ver que
en realidad nos faltan esas opciones de llenado y auto. En tanto que si agrego eso
a la caja vertical, se
puede ver que recuperamos
esas opciones. Entonces por eso
en realidad voy a estar agregando, podemos
eliminar este botón. Ahora. En realidad voy a
estar agregando nuestros widgets a la caja vertical en lugar de
directamente en el cuadro de desplazamiento. Pero no te preocupes, la
caja de desplazamiento seguirá
comportándose como debería una vez que nuestra caja
vertical dentro la caja de desplazamiento se vuelva demasiado
grande para que la caja desplazamiento
obtendrá una pequeña barra de desplazamiento y podremos desplazarnos
através del contenido. Por ahora, necesitamos poder
acceder a este
cuadro vertical en nuestro código. Por lo que vamos a hacer como lo hicimos antes en el listado de artículos, vamos a seleccionar
el cuadro vertical que hemos agregado
al cuadro de desplazamiento. Y vamos a decir
su nombre a la lista de artículos. Y tenemos que asumir es variable y luego vamos a compilar. Entonces vamos a dirigirnos
al modo gráfico y vamos a usar
el nodo constructo ahora, el tuyo podría estar en gris. El mío no es porque lo
moví antes, pero dije que está en gris. Eso está bien. Todavía se puede arrastrar hacia fuera de ella y funciona bien. Entonces, lo que haremos es
primero que tengamos que obtener todas las entradas de
nuestra lista de artículos. Por lo que vamos a hacer clic derecho
y hacer obtener la tabla de datos. Y queremos obtener los nombres de fila de
la tabla de datos. Y esto nos permite establecer
una tabla de datos y nos
dará todos los
nombres de fila de nuestra lista de elementos. Por lo que nos dará todos
estos nombres aquí. Así que a continuación nos dirigiremos de
nuevo al capó y vamos a establecer nuestra tabla de
datos a Lista de elementos, conectaremos esto hasta
nuestro Constructo de Eventos. Entonces desde los nombres outro,
vamos a hacer un bucle. Así que arrastraré hacia fuera y
buscaré bucle. Ahora, en realidad tuve
un bug mientras filmaba esta lección donde mi loop
nodos uno subiendo. Entonces si tienes ese problema
donde estos no están aquí, puedes ir al Navegador de
Contenido, buscar la carpeta del motor. Si no está ahí, puedes
mostrarlo yendo a ajustes. Da clic en Mostrar contenido del motor, luego ve al motor,
busca estándar. Y quieres
macros estándar, solo abre eso. Y luego si vuelves al widget
a
tu Bahía de Hudson, arrastra hacia fuera, deberías
poder encontrarlos. Esperemos que no te
llegue este bug, pero por si acaso lo haces, así es como lo arreglé. Entonces solo haz eso. Ahora, ojalá tengas
estos nodos de bucle apareciendo. Así que sólo voy a
buscar bucle y queremos hacer un bucle foreach. Y eso va a
recorrer todas
las diferentes entradas
de nuestra tabla de datos. Y usando el nombre de la fila, vamos a obtener los datos u obtener la estructura de
nuestra lista de elementos. Entonces vamos a hacer
conseguir tabla de datos. No obtendremos fila de tabla de datos. Pondremos la
tabla de datos a la lista de elementos. Y se puede ver que
tenemos el nombre de nuestro rol. Así que sólo vamos
a enchufar eso en elemento de
matriz porque
si recuerdas, esto nos está proporcionando
todos los nombres de fila. Por lo que cada vez
que esto se ejecute, nos dará uno de los nombres de
fila de nuestra lista de artículos. Conectaremos esto
hasta el cuerpo del bucle. Entonces vamos a crear
nuestro widget de listado de artículos. Entonces haremos crear widget. Vamos a configurar la clase a nuestro listado de artículos Jugador propietario. Podemos simplemente arrastrar hacia fuera y obtener Owning Player porque
estamos dentro de un widget, solo
podemos suministrar
nuestro nuevo widget. Tenemos nuestros
widgets actuales Owning Player. Después nos conectaremos hasta fila
encontrada para crear nodo widget. A continuación, desde el valor de retorno, queremos configurar este
nuevo widget de listado de artículos. Para ello, vamos a usar esa función de configuración que
acabamos de crear. Por lo que tal se montó. Y queremos la
función de lista de configuración entonces que
puede agarrar la fila o el outro de nuestra lista de artículos y conectar
eso hasta configurar el listado. Luego, por último, necesitamos
agregar realmente un nuevo widget que hemos creado
aquí a nuestra lista de artículos. Entonces voy a
agarrar la lista de artículos. Y vamos a arrastrar hacia fuera
de eso y hacer Agregar niño. Queremos que nuestro niño a la caja
vertical
conectará esto hasta nuestro listado de
configuración aquí. Y luego para el contenido necesitamos el widget que estamos
agregando a la lista de elementos. Así que solo agarraremos
el valor de retorno y nos conectaremos a
contenido como ese. Así que ahora solo para resumir el
código que acabamos de escribir, lo que sucede cuando se crea el
widget es que obtiene todos los nombres de fila
de nuestra lista de elementos. Entonces obtendré estas tres
filas de nuestra lista de artículos. Después recorrerá
cada uno de ellos. Entonces este código aquí que
tenemos resaltado 13 veces. Y cada vez que se ejecute,
se ejecutará con un nombre de
fila diferente de nuestra lista de artículos. Eso significa que
obtendremos la información de
estructura diferente de nuestra lista de artículos. Y eso configura o crea un nuevo
widget de listado y le da una información diferente para cada listado de widgets que creamos. Y luego para cada
uno, los agregamos
al widget de lista de elementos que
agregamos a nuestro
cuadro de desplazamiento y aquí. Entonces ahora en realidad podemos
probar esto en juego. Sólo voy a eliminar
estos viejos widgets así que agregamos en nuestra lección
anterior. Entonces solo seleccionaré
el cuadro vertical aquí, eliminaré eso, eliminaré el botón. Seleccionaremos este cuadro
horizontal aquí. Borra eso y eliminaremos
este cuadro de texto solo para que
podamos ver nuestro
cuadro de desplazamiento un poco más fácil. Voy a mover la caja de desplazamiento justo arriba a la esquina
superior izquierda de ahí. Por lo que compilará eso. Y ahora en realidad estamos listos para probar esto, así que le pegaremos a Play. Y ahora puedes
ver que en realidad
tenemos todos los artículos que
agregamos a nuestra
lista de artículos en nuestra pantalla. Y eso se está
haciendo todo vía código. Ahora actualmente no tenemos la pequeña barra de desplazamiento porque solo
hay tres entradas, por lo que no
ocupa suficiente espacio para que realmente la barra de
desplazamiento exista. Pero lo que podemos hacer es si
salimos de editor de avión, sólo
podemos ir a la Lista de Artículos. Podrías agregar
artículos individuales si quisieras. Pero yo sólo voy a tomar
decir el hacha aquí y vamos a duplicar eso un
par de veces y luego hacer lo mismo con
la bebida saludable, que es duplicar
eso unas cuantas veces. Ahora cuando golpeamos play,
esperemos que sí tengamos esa barra de desplazamiento. Ahora
actualmente no puedo interactuar
con la barra de desplazamiento. Y eso se debe a que nuestro mouse está bloqueado a la cámara de nuestros jugadores. Así que a continuación te
mostraré cómo podemos configurar un poco de
código que nos permita liberar nuestro mouse del control de
la cámara para que podamos interactuar realmente con
nuestros diferentes elementos de UI. Entonces, para empezar, iremos
al plano de nuestro personaje. Entonces solo iré a, nos desharemos de esta búsqueda, iremos a la carpeta de contenido para la persona, luego planos. E iremos al ThirdPersonCharacter
y abriremos eso. Ahora todavía tenemos algún
código de lecciones anteriores. Obviamente tenemos aquí el
código que en realidad crea nuestro HUD y
agrega eso a la pantalla. Entonces sí queremos quedarnos con eso. Y podemos borrar este código de kill player porque ya no
estoy usando eso. Entonces lo que vamos a
hacer es agregar una entrada, así que haré clic derecho y
buscaré el evento de entrada. Yo haría un turno.
Dejasteturno. Así que cada vez que presionemos Left
Shift alternará entre controlar la
cámara de nuestros personajes y luego tener nuestro mouse realmente
libre para interactuar con la interfaz de usuario. Entonces para empezar primero,
necesitamos llegar a donde sea que en nuestro mouse esté
controlando actualmente la cámara o no. Entonces sí conseguiremos controlador
de jugador. A partir de eso, arrastraremos hacia fuera y
obtendremos Mostrar cursor del ratón. Esto será verdadero o
falso independientemente de que el cursor
del ratón esté visible
actualmente o no . Entonces haremos una F. Eso nos
permitirá controlar qué código ejecutamos si el cursor del ratón está actualmente visible de lo que
queremos ocultarlo. Entonces haremos o copiaremos, conseguiré controlador de jugador. Vamos a arrastrar hacia fuera de eso
y hacer establecer el modo de entrada. Y queremos configurar
el modo de entrada al juego sólo porque
estamos cambiando. Si el cursor del ratón
está visible actualmente, estamos cambiando al modo de ganancia, por lo que solo queremos
controlar nuestra cámara. Entonces nos conectaremos hasta true. Y luego también queremos
ocultar nuestro cursor del ratón. Así que vamos a arrastrar hacia fuera y
hacer mostrar cursor del ratón. Y queremos que esto
sea falso así. Entonces si nuestro
cursor del ratón no es
visible actualmente de lo que
queremos establecer su visible. Pero primero queremos
configurarlo para ganar modo y UI. Así que vamos a hacer establecer el modo de entrada, juego y sabía por qué la razón por la
que estamos usando juego y UI y no solo UI es si tuviéramos
que configurarlo a solo UI, ninguna de nuestras entradas y nuestro
personaje funcionaría más. Entonces, si tuviéramos que pulsar de nuevo el turno
izquierdo, en realidad
no
seríamos capaces de salir del modo Y porque este
nodo no se ejecutaría. Entonces en su lugar usamos el modo set
input, game y gy. Y conectaremos
esto hasta falso. Y luego vamos
a obtener nuestra variable que realmente creamos
en una lección anterior. Se puede ver que
el código aquí abajo,
aquí es justo donde
creamos el HUD. Lo configuramos en una variable y
luego lo agregamos a nuestra ventana gráfica. Así que vamos a
usar esa variable para establecer el widget y
enfocar así. Luego, por último,
queremos mostrar nuestro cursor. Así que voy a arrastrar hacia fuera de
obtener controlador de jugador de nuevo para establecer mostrar cursor del ratón. Queremos tomar eso y conectar eso hasta
nuestra salida aquí. Entonces ahora todo esto está
configurado cuando presionamos Shift, liberará nuestro mouse del control
de la cámara y nos
permitirá controlar la IU. Y luego cuando lo presionemos de nuevo, recuperará el control
de la cámara de nuestros jugadores. Para que podamos compilar esto
y probar esto. Le pegaremos a play. Por lo
que actualmente estoy controlando mi cámara. Si le doy a Shift, se puede
ver que ahora tengo mi mouse. Ya no estoy
controlando la cámara. En realidad puedo usar nuestra pequeña
barra de desplazamiento aquí también para desplazarme por todas las
diferentes entradas. Ahora, en esta lección,
todo lo que hemos hecho es usar la caja horizontal para
agregar a nuestro cuadro de desplazamiento. Pero si quisiéramos,
podríamos editar el widget de
listado de artículos tanto
como tú quieras. Para que pudiéramos ir con el diseñador. A lo mejor quería que esto fuera
en realidad un botón. Lo que podemos hacer es hacer clic derecho
en el Boxer horizontal. Podríamos hacer rap con
y seleccionamos un botón. Entonces podríamos
tenerlo para que cuando se presiona
este botón,
ejecute algún código. Por lo que podemos seleccionar
el botón aquí, desplazarse hacia abajo a la
parte inferior, y hacer unclicked. Eso nos crea un nuevo evento. Así que cada vez que
se presiona este botón de anuncios , se
imprimirá
un. podríamos hacer una cadena de impresión, y podemos tener esta
cadena de impresión
imprimir el valor actual
del nombre del elemento por lo que podría obtener
ItemName, no obtener texto. Usaríamos el getText. Apúntalo. Por lo que ahora cada vez que
pinchemos en este botón, el nombre del artículo imprimiráel nombre del artículo
en el
que hemos pulsado. Entonces nos dirigiremos
al juego, dale a Play. Y ahora puedes ver que
estos son botones. Por lo que actualmente tengo el
control de mi cámara. Si presiono Shift, tengo mi mouse ahora, ahora cuando hago clic en estos, puedes ver que
en realidad está imprimiendo el nombre del artículo. Entonces eso es todo por esta lección. Esperemos que ahora entiendas
cómo puedes realmente crear widgets y luego agregar
esos widgets usando código.
42. Widgets (uniones): Oigan a todos. En esta lección
vamos a estar echando un
vistazo a los bindings de widgets ahora, que nos
permiten controlar ciertas propiedades
de nuestros widgets usando variables o funciones. Entonces, para ponerles un ejemplo, si arrastro
aquí una imagen y simplemente la
haré un poco más grande. Si miras en el lado derecho
del panel Detalles, verás esta opción de
enlace para
algunas de las diferentes
propiedades que tiene nuestra imagen. Ahora bien, estos son en realidad
ajustes que podemos controlar ya sea
con una variable
o una función. Entonces un buen ejemplo de esto es
la opción de visibilidad aquí. Ahora, esto básicamente
solo establece si el widget es
visible o no. Entonces si la dejamos como verdura, podemos pausarla y darle a play. Ya veremos que aquí tenemos
nuestra imagen. Y si volvemos al capó
y pongo la visibilidad a compilación oculta y
luego le pegamos a Play. puede ver que ya
no es visible. Pero también podemos controlar esa
configuración con una variable. Por lo que si volvemos a nuestro HUD, seleccionamos nuestra imagen aquí, pueden
ver que tenemos una
opción de enlace junto a la visibilidad. Y en este momento solo tenemos
la opción Crear Vinculante, y
eso lo explicaré en un minuto. Pero si vamos a nuestra vista gráfica aquí y creamos
una nueva variable, y esto solo se
va a llamar, lo
llamaremos visibilidad de imagen. Y vamos a establecer
su tipo a estado, perdón, visibilidad
pizarra. Por lo que queremos visibilidad de Eastlake. Este es el tipo de
variable que necesitamos
usar cuando estamos enlazando
a un ajuste de visibilidad. Entonces lo haré como componente. Y si ves aquí abajo, el valor por defecto es realidad la misma
configuración que tenemos en nuestra vista de diseño si hago clic el desplegable para
visibilidad aquí. Ahora que hemos creado
esa variable, en realidad
podemos vincularla a
esta imagen es visibilidad. Por lo que podemos golpear bind
y se ve que ahora
podemos ver esa
variable aquí. Si selecciono eso ahora, nuestra imagen ahora está usando esa configuración de variable para
determinar si es visible. Y se puede ver que esto
en realidad se ha desvanecido. Ahora, si vamos al Event Graph y seleccionamos esa
variable que creamos, Actualmente está configurado en Visible. Entonces si le damos a Play, verás que es visible. Y si retrocedemos y ponemos esa variable ahora
a escondida en C, eso ahora está oculta. Y eso nos permite controlar esa visibilidad de las imágenes con
solo usar esa variable. Y podemos cambiar esa variable, tenemos gusto, así que por ejemplo, podríamos configurarla, podríamos ponerla a decir, escondida después de cierta
cantidad de tiempo. Entonces podríamos agregar,
digamos un retraso aquí. Después de dos segundos, voy
a poner nuestra imagen a escondida. Y vamos a
establecer el valor predeterminado a
visibilidad para que sea
visible al inicio. Después de dos segundos
habrá configurado en oculto. Si le damos a Play,
verás que es visible ahora, y después de dos segundos
se oculta. Ahora también podemos controlar otras propiedades de nuestros
widgets usando variables. Entonces, si volvemos a nuestro HUD, diríjase a la Vista de Diseño y
tenemos seleccionada nuestra imagen. Se puede ver que también
podemos unir una variable al pincel. Así que podemos usar una variable para controlar todos estos
ajustes aquí. Entonces si vamos a la gráfica y
creo una nueva variable, voy a llamar a mi configuración de
pincel así. Vamos a cambiar
el tipo a pincel de pizarra. Y aquí vamos a escoger
la opción superior. Y si compilamos,
verás que estas opciones aquí
realmente coinciden con lo que
tenemos en el diseño de vista
para nuestra configuración de pincel de imagen. Y si hacemos clic en el enlace, también
podemos establecer esa variable de configuración del
pincel aquí también. Por lo que ahora podemos controlar nuestros ajustes de
pincel de imágenes usando esa
variable que acabamos de crear. Entonces si seleccionamos Ajustes de pincel y luego aquí podemos
escoger nueva imagen. Por ejemplo, voy
a escoger esta cara verde. Y si compilamos y
le pegamos a Play, verás que ahora estamos
usando esa cara verde. Y aún así fue desaparecer
apagado a dos segundos. Porque si lo recuerdas, aquí tenemos nuestra variable de visibilidad, y eso es lo que controla la visibilidad de
nuestras imágenes. Así que puedes tener múltiples enlaces para las
diferentes configuraciones aquí, para el mismo widget también. Ahora hasta ahora solo hemos estado usando variables para controlar
estos enlaces, pero en realidad puedes
usar funciones también. Así que si vamos a decir la opción de
visibilidad aquí, si simplemente hacemos clic en el enlace y si alguna vez quieres
eliminar un enlace, puedes simplemente hacer clic en esto
y hacer eliminar el enlace, y eso lo restablecerá de nuevo
a usar este ajuste aquí. Por lo que ahora solo está configurado en oculto. Entonces si fuera a golpear a Play, ya
verás que simplemente está escondido. E incluso después de dos segundos
no cambiará porque
ahora estamos usando esta
configuración de visibilidad aquí otra vez, y no la variable. Pero también podemos usar funciones. Así que si hacemos clic en la opción aquí
y hacemos clic en Crear enlace, esto realmente creará
una nueva función y todavía
estamos dentro de nuestro
bp HUD aquí se puede ver el valor de retorno
será cualquiera que sea el
enlace requiere. Porque estamos usando
la opción de visibilidad. Nos da una
salida de visibilidad de nuestro nodo. Si fuera a crear uno para
nuestro pincel, por ejemplo, si quito esta encuadernación, entonces crea una nueva encuadernación. Verás que ahora
el valor de retorno es un ligero valor de pincel
porque esa es la variable que
requiere para este enlace. Pero por ahora, sólo
voy a volver a ajustar eso a nuestra variable de ajuste del cepillo aquí. Por lo que va a utilizar
esa variable que hemos creado
anteriormente de nuevo por aquí y volviendo
a nuestra nueva función. Entonces, si vamos a funciones, verás que ahora tenemos
una opción de obtener visibilidad. Y esta es la función que
creamos cuando creamos
este enlace aquí. Ahora podemos agregar código
aquí como normal para controlar cuál va a ser la
visibilidad. Entonces por ejemplo, podríamos
hacer conseguir controlador de jugador. A partir de eso podríamos hacer conseguir ratón, obtendrá, Mostrar, cursor del ratón. Y podríamos alargar de nuestro valor de retorno,
te dan una bofetada. Clavija. Mostrar cursor del ratón
en el indexador. Entonces si el
cursor del ratón de la demostración es cierto, entonces voy a poner
nuestra imagen a visible. Y si es falso, entonces
vamos a configurarlo en oculto. Si recuerdas en
nuestra lección anterior en el ThirdPersonCharacter, configuramos aquí este código, que básicamente nos
permite cambiar control de la cámara o
controlar el mouse. Entonces ahora cuando golpeamos
play, se puede ver, no
puedo ver en absoluto al inmaduro, pero estoy tomando el
control de mi cámara. Pero si le doy a Shift, se
puede ver ahora que
tengo mi mouse y mi
imagen en realidad se muestra. Y si vuelvo a golpear Shift, se
puede ver
que ahora está oculto. Y la razón por la que está haciendo
eso, es porque en nuestro HUD, esta función se está ejecutando para determinar la visibilidad de nuestras imágenes. Eso es decir si
el cursor del ratón es visible o si esta
variable es verdadera, entonces la configuramos a visible. Y si es falso, lo
pone en oculto. Ahora hay otro
ejemplo que quería
darte y eso es
usar la barra de progreso. Ahora las barras de progreso se
usan típicamente para cosas como barras de
salud y barras de
hambre o
pantalla de carga y barras. Entonces lo que haremos es
dirigirnos a la vista de diseño y obtendremos la barra de progreso
de la tarima. Arrastrar eso en. Voy a hacer el mío un poco
más largo así. Ahora tenemos algunos
ajustes para cosas como el estilo que
controlan cómo se ve. Pero aquí sólo nos vamos a centrar
en el valor porcentual. Y si esto es 0, significa que la
barra de progreso está vacía. Y si es uno, se puede ver a medida que lo subo, ahora está lleno. Entonces nuestro porcentaje siempre
va a ser un valor entre 01 y eso determina
qué tan llena está realmente la
barra de progreso. Ahora también podemos usar un
bind para esta propiedad. Por lo que se puede ver que tenemos
la opción de enlace aquí, por lo que puede o bien
establecer una variable o función para controlar este valor. Ahora, actualmente
al momento de filmar, realidad
hay un bug en
el motor donde no puedes vincular esto a una variable
y darte un ejemplo. Normalmente sería capaz de vincular este valor a una variable flotante. Entonces si voy y creo una
nueva variable de flotación en C, dices cantidad y la
configuras en un flotador como ese. Y sólo vamos a compilar.
Sivuelvo a la vista de diseño y hago clic en
la opción de enlace aquí, se
puede ver que nuestro flujo
no está aquí y debería estar. Si tu variable está
aquí, entonces eso es genial. Estás usando una versión más nueva
del motor y el error ha sido corregido, por lo que no tienes que
preocuparte por esto. Pero si no lo tienes aquí y aún no
se ha arreglado, hay otra forma de
sortear esto, y eso es solo
usar la función. Así que en lugar de simplemente
seleccionar la variable, podemos simplemente hacer crear enlace. Y aquí se puede ver que
el valor de retorno es un flotador. Y sólo podemos tomar
nuestra variable de cantidad, enchufar eso en el valor de retorno. Y ahora podemos usar este
flotador para controlar la cantidad. Entonces puedo configurarlo para que diga 0.2. Podemos darle a Compile
y después darle a Play. puede ver que ahora está
en 0.2 en la barra de progreso. Ahora podemos
configurar otro widget que
controle la
variable de cantidad que acabamos de crear, y que en realidad actualizará
nuestra barra de progreso aquí. Entonces si salimos fuera de
juego, ve al HUD. Podemos agregar adentro, digamos
un slider aquí. Y haremos esto
un poco más grande. Voy a cambiar
este punto de anclaje a la parte superior derecha porque ese es
el punto al que está más cerca. Entonces cambiaré el
ancla a eso. Y podemos cambiar el estilo sólo para ser un poco más grandes. Entonces haré que el grosor de la bola diga por solo para que sea un poco
más fácil de ver en juego. Entonces compilaremos. Y aquí abajo se puede ver que
tenemos un valor propio cambiado. Y si hacemos clic en el botón Plus, eso nos creará un
evento que nos permita establecer una variable usando lo que sea que la diapositiva esté actualmente
establecida para ser simplemente agarrar nuestra variable de cantidad
aquí, conecte esto. Y ahora cuando
movemos nuestro slider en juego, se puede ver
que está por aquí. Si pulso Shift para
entrar al modo mouse aquí puedes ver que nuestra imagen
sigue apareciendo. No podemos arrastrar un slider
y se puede ver que nuestra barra de progreso en realidad se está
actualizando con nuestro deslizador. Eso es más o menos
por cómo puedes vincular variables y funciones
a las propiedades del widget. Si nos dirigimos de nuevo
al corazón aquí, sólo
voy a
salir de los planetas para ir a la vista de Gráfico si alguna vez
quieres encontrar alguna de
la función bind. Por lo que hemos creado, cuando hemos clic en la opción de enlace
y hecho crear enlace, usted puede encontrar aquellos bajo
la pestaña de funciones. Al igual que cualquier función normal. El motor simplemente da
automáticamente estos nombres para que puedas
renombrarlos si quieres. Y también puedes
eliminarlos si
no los estás usando, solo ten cuidado. Si eliminas uno que estás
usando en un enlace de widget, te
dará un error, así que solo ten cuidado con eso. Eso es todo por esta lección. Esperemos que ahora
entiendas un
poco más sobre cómo funcionan los enlaces y widgets y cómo puedes usarlos en tus
futuros proyectos.
43. Widgets (bordes, superposiciones y rejas): Oigan a todos. En esta lección
vamos a estar echando un vistazo a algunos tipos de widgets
más. Vamos a echar un
vistazo a la superposición de borde
y el panel de rejilla uniforme. Pero antes de empezar, solo
vamos a
limpiar un
poco nuestro proyecto de nuestra última lección. Así que solo voy a seleccionar
estos tres widgets aquí, eliminarlos, dirígete
al Event Graph. Voy a tomar
mi nodo constructo, conecta eso hasta
este nodo aquí. Entonces eliminaremos estos
nodos que no estamos usando también
borraremos este slider. Y si compilamos, todo
debería estar bien. Ahora volviendo
al diseño de vista, lo
primero que
vamos a ver es el panel de rejilla uniforme. Si arrastramos eso adentro. Y yo sólo voy a hacer el
mío un poco más grande aquí. Este panel funciona de manera similar
a la caja horizontal. La caja vertical. La única
diferencia es que puede tener hijos
tanto verticales como
horizontales. Entonces, para darles un ejemplo rápido, si solo agarro, digamos, una imagen aquí y la agrego
al panel de rejilla uniforme. Ya lo puedes ver. Está en
la esquina superior izquierda. Voy a agregar una imagen
adicional aquí. Ya ves que sigue, ambos siguen en esta esquina
superior izquierda. Pero dices que si
selecciono una de ellas, en realidad
obtengo estas
flechas y las puedo posicionar en
diferentes ubicaciones, ya sea hacia abajo u
horizontalmente así. Ahora también podemos
controlar esto encima en el panel Detalles
aquí puedes ver que actualmente este widget Fila está configurado uno y su
columna está establecida en 0. Pero si yo fuera a poner la
columna para decir tres, Se
puede ver que luego la
mueve a la tercera columna. Ahora, a diferencia de las cajas horizontales
y verticales, también se
puede cambiar
la alineación. Entonces aquí arriba en el panel Detalles, si quisiéramos decir B en la esquina
inferior derecha, podríamos hacerlo usando
estas opciones de alineación. Ahora también podemos agregar widgets a nuestro
panel de cuadrícula uniforme usando código. Y aquí es donde
se vuelven realmente poderosos porque podemos usar paneles de rejilla
uniformes para crear cosas como inventarios o listas más
avanzadas. Entonces, para darte un ejemplo
de cómo harías eso, voy a crear un nuevo
widget que también podemos usar el borde y overlay n Así que nos dirigiremos
al Navegador de Contenido. Sólo voy a
hacer clic en el botón Agregar, ir a Interfaz de usuario
que Widget Blueprint seleccionará usar un widget
y se irá hacia abajo. Y nos fuimos a casa y S2, BP y Scott ranura rejilla. Y eso lo abriremos. Yo sólo voy a arrastrar el mío
hasta la cima aquí así. Entonces, para empezar,
vamos a agregar el widget de borde a la
jerarquía, así como así. Con ella seleccionada, puede ver la configuración de nuestro borde
sobre en el panel Detalles. Y aquí es donde podemos establecer cosas como si quisiéramos usar una imagen y esto
básicamente solo convertirá nuestra frontera en una imagen. También podemos establecer el color. Entonces, por ejemplo, si
quisiera que fuera gris, simplemente podría convertir el color aquí a un gris más oscuro como ese. Y también nos da
opciones de acolchado. Por lo que esto afectará a cualquier niño que
agreguemos a esta frontera. Ahora las fronteras sólo pueden
tener un hijo. Hay bastante útiles
para actuar como una especie de fondos o contenedores
para otros widgets. Y uno de esos
widgets es el overlay. Entonces si agarramos el
overlay y añadimos eso a nuestra frontera así, ahora, si quisiera
agregar otro niño a la frontera, no puedo. Entonces si agarro la
imagen, puedes ver que no me deja
agregarla al borde, pero nuestra superposición puede tener
tantos hijos como queramos. Entonces vamos a agregar nuestra imagen
a nuestra superposición así. Ahora, con la superposición seleccionada, puedes ver
que realmente no tiene ninguna de sus propias configuraciones. Y eso es porque en
realidad no hace nada visual. Todo lo que hace es permitirnos
agregarle múltiples widgets. Y esos widgets se
superpondrán entre sí
para que no se moverán en una dirección horizontal
o vertical diferente. Estaban todos apilados uno
encima del otro. Así que antes de empezar a
diseñar este widget, vamos a cambiar el
tamaño de nuestra vista previa aquí porque actualmente es 1920 por 1080, que es demasiado grande. Entonces vamos a cambiar
la opción de pantalla completa aquí a deseada así. Ahora, lo que esto hace es básicamente simplemente
le dice al widget que ocupe tanto espacio como
el contenido dentro de él lo hace. Entonces en este momento es
muy pequeña porque nuestra imagen sólo ocupa una cantidad
muy pequeña de espacio. Pero si seleccionamos
nuestro widget de imagen y configuramos la imagen
a otra cosa. Entonces voy a escoger
esta carita verde. Se puede ver que se hace
más grande porque nuestra imagen es más grande de lo que podríamos aumentar
este tamaño si quisiéramos, digamos 128 por 128 así. Ahora puedes notar
si acercas que
la parte superior está más cerca
del borde y el lateral. Y eso porque si
volvemos a nuestra frontera, el acolchado se establece en 42. Y si hacemos clic en el desplegable, se
puede ver que los valores
izquierdo y derecho
o cuatro píxeles. Entonces están a cuatro pixeles
del borde para nuestra imagen. Y luego la parte superior
e inferior son dos. Entonces si quisiéramos
que todo esto fuera igual,
podríamos hacer eso. Entonces voy a poner el mío
a decir diez así. Entonces solo tenemos un
espacio de diez píxeles entre nuestro borde y ese widget de superposición que está
contenido dentro de nuestro borde. Por lo que ahora tenemos nuestra imagen
de icono aquí. Vamos a agregar
algunos textos también. Así que agarraremos un poco de texto y
agregaremos eso a nuestra superposición. Observa que solo se superpone
encima de nuestra imagen. Ahora, nuestro texto es bastante
grande por el momento, así que voy a
seleccionarlo y solo cambia el tamaño de la fuente hacia abajo para decir 16 o tal vez 40. Así. Voy
a cambiar el texto para sólo decir 99, por ejemplo. Y lo configuraremos para que se alinee con
la esquina superior derecha, así que usaremos la
línea derecha y luego lo haremos, en realidad solo lo
dejaremos como línea superior. Por lo que ahora está en la esquina
derecha. Ahora, tal vez
queríamos agregar, digamos, una barra de progreso a nuestra
ranura de cuadrícula. Podemos hacer eso. Así que agarraremos nuestra barra de progreso en eso a la superposición también. Ahora quiero esto en el centro de
abajo aquí. Entonces voy a seleccionar
la alineación central y luego la
alineación inferior, así. Ahora podemos cambiar el tamaño de nuestra
barra de progreso usando una caja de tamaño. Entonces si hacemos clic derecho en él
y podemos hacer rap con, entonces hacer rap con caja de tamaño. Esto
nos va a permitir definir realmente el tamaño exacto que queremos que supere
nuestra barra de progreso. Entonces podemos cambiar el
ancho y la altura, establecer el ancho a
algo así como 95, y la altura a tal vez diez. Y ahora tenemos una
barra de progreso añadida a nuestra superposición. Esos son los tamaños exactos
que queremos usar. Ahora, a lo mejor quiero empujarlo un poco hacia
arriba desde
abajo aquí. Podríamos usar el
relleno para hacer eso. Con nuestra caja de tamaño seleccionada. Podemos hacer clic en el
desplegable de relleno y
rellenarlo de las bombas, digamos, cinco pixeles así. Así que ahora tenemos nuestro widget de
ranura de cuadrícula todo diseñado usando una superposición
solo nos permite
superponer todos estos
diferentes widgets en el mismo espacio mientras nos da control del relleno
y la alineación ajustes. Así que ahora vamos a compilar y
vamos a agregar realmente estas ranuras de rejilla a nuestra rejilla uniforme dentro de
nuestra campana usando código. Entonces, antes de hacer eso,
vamos a eliminar estas imágenes que agregamos
a la cuadrícula uniforme. Con nuestra rejilla uniforme,
en realidad la vamos a seleccionar. Vamos a llamar a esta grilla. Ahora. Tenemos que
asumir es variable que podamos acceder a esta
cuadrícula en el código, compilaremos y nos
dirigiremos a la vista gráfica. Entonces, para empezar,
moveremos este código hacia arriba
y fuera del camino. Y vamos a agregar
una secuencia ahora solo para que podamos tener ambas
piezas de código uno. Así que esto ejecutará
este código primero y luego agregaremos el resto
de nuestro código aquí abajo. Entonces comenzaremos arrastrando hacia fuera y buscando for-loop. Queremos la
opción for-loop aquí abajo. Y esto nos
permite básicamente simplemente especificar el índice de inicio y fin, que controla cuántas veces se ejecutará realmente
el cuerpo del bucle. Entonces voy a
establecer mi último índice. ¿ Dices nueve? Entonces esto ahora se ejecutará diez veces porque 0 es uno esencialmente. Así que por cada vez que se ejecute
este bucle, queremos crear cualquier widget. Así que vamos a arrastrar fuera
del cuerpo del bucle y hacer Crear Widget así. Entonces, como antes necesitamos
conseguir un lugar dueño. Entonces simplemente arrastraré hacia fuera y
sí consigo Owning Player. Ahora solo proporcionaremos
el Jugador Propietario de HUD. Y luego tenemos que
establecer la clase, así que vamos a establecer esto
a la ranura de la rejilla. Entonces necesitamos
obtener nuestro panel de cuadrícula y vamos a agregar este
nuevo widget a nuestro panel de cuadrícula. Ahora porque los hijos de
una rejilla uniforme pueden tener una fila y una columna
que define qué tan lejos, vertical y
horizontalmente hay. Vamos a necesitar hacer
algunas matemáticas para determinar dónde
deben colocarse nuestras nuevas ranuras de cuadrícula. Por lo que se arrastrará hacia fuera
desde el panel de rejilla. ¿ Agregarías niño
a rejilla uniforme? Y conectaremos esto
hasta el widget create de ahí. Ahora el contenido solo va a ser el nuevo widget que creamos, pero también tenemos una n
fila y luego en columna, ahora queremos
regarme cómo funciona esto. Entonces lo que vamos a hacer es
primero almacenar el índice. Así que sólo voy
a arrastrar hacia fuera desde el valor del índice en nuestro for-loop
y hacer promover variable. Yo sólo lo voy a
mantener llamado índice. Y conectaremos esto
hasta nuestro bucle aquí así. Ahora también necesitamos
saber cuántas columnas de ancho va a estar nuestro
panel de rejilla. Entonces vamos a crear
una nueva variable para eso. Voy a llamar a mis
columnas así. Y va a ser un entero. Así que sólo establecerlo en entero,
luego vamos a compilar. Y luego tenemos que
decir valor predeterminado. Entonces voy a
poner el mío a tres. Entonces, para empezar, nuestro panel de cuadrícula tendrá
tres widgets de ancho. Ahora usando nuestros valores de índice
y columna, podemos determinar en qué
ranuras de cuadrícula de fila y columna deben estar. Agarrará nuestro índice
y vamos a dividir esto por nuestras columnas. Así que divide, conecta
en hasta n fila. Y queremos dividir esto
por nuestras columnas así. Ahora la razón por la que esto funciona es porque cuando dividimos
el índice por las columnas, si este valor de índice está por
debajo del valor de la columna. Entonces si esto es uno o dos, el retorno siempre será 0 porque dos divididos
por tres es 0, porque estos son enteros. Por lo que hay números enteros
sólo hasta que este índice esté libre. Esto, el valor de retorno del nodo
r divide será 0. Por lo que eso significa que nuestros
widgets permanecerán en la altura vertical 0 hasta que
este índice salga libre. Y entonces este nodo
en realidad devolverá uno porque tres dividido
por tres es uno. Entonces eso en realidad
moverá nuestro widget ahora hacia abajo en la
siguiente fila vertical. Entonces tenemos las columnas. Y esto en realidad funciona de
una manera similar. Entonces copiaremos estas dos
variables y arrastraremos fuera de mi índice y haremos
el símbolo de porcentaje. Entonces ese es el símbolo de
porcentaje, cadera. Ahora, este es el modo. Entonces lo que esto hace esencialmente es aún dividir estos dos
valores entre sí. Pero en lugar de
darnos el resultado, nos
da el resto. Entonces si conectamos
esto hasta columnas, si te imaginas que el índice es
uno y las columnas es libre. Bueno, si los estuviéramos
dividiendo, el resultado sería 0. Pero como estamos
consiguiendo el resto, el resto será uno. Si nuestro índice es dos y
nuestras columnas son tres, y nuestro resto será dos. Y esto es lo que
empuja nuestro widget a lo largo del eje horizontal. Ahora en realidad hemos
terminado nuestra configuración para desovar nuestras rejillas
y luego agregarlas al
widget de cuadrícula uniforme para que podamos compararlo y realmente ver
cómo se ve esto en el juego. Entonces le pegaremos a play. Vean que ahora tenemos nuestra grilla. Se puede ver que son tres web y luego está
agregando diez widgets. Entonces tenemos nueve y luego
diez en el fondo aquí. Ahora actualmente hay un
poco aplastada porque nuestra rejilla uniforme real es demasiado pequeña para caber todos
estos widgets sentido. Así que lo que podemos hacer es
simplemente volver a nuestro HUD, ir al diseño de vista, y con nuestra
cuadrícula uniforme seleccionada, podemos simplemente tomar el
tamaño al contenido en C, se ha vuelto muy pequeño porque actualmente no
tiene ningún contenido. Pero cuando compilamos,
le pegamos a Play. Verás que ahora todos nuestros widgets tienen
el tamaño correcto. Si quisiéramos, podríamos
volver a nuestro HUD. Podríamos cambiar
el valor de las columnas agradable y fácilmente con sólo
cambiar el valor, bueno decir cinco. Y luego cuando
compile y le pegue a Play, verás que ahora
es de cinco de ancho. Ahora quizás querías un
poco de espacio entre tus widgets que están dentro la cuadrícula. Podríamos
hacer eso también. Para que podamos regresar al HUD. A continuación, en el diseño de vista, seleccione el panel de rejilla. Y aquí en realidad podemos
establecer el relleno de ranura. Entonces podemos poner esto a decir cinco. Y tendremos cinco
pixeles ahora entre orden a hijos de
la cuadrícula uniforme. Entonces volveremos a golpear play. Se puede ver que ahora
tenemos un bonito hueco entre esos widgets. Si recuerdas, al igual que nuestra lista, podemos cambiar estos
para que sean botones. Actualmente son
solo imágenes estáticas, pero podemos cambiarlas
para que sean botones como
hicimos con nuestra
lista vertical aquí también. Así que si nos dirigimos de nuevo
a nuestra ranura de rejilla, podemos envolver nuestra superposición
aquí en un botón, así que iremos wrap with du button. Se puede ver que ahora
tenemos un botón y como seguimos usando el
borde como fondo, se
puede ver que
el botón en realidad tiene esa brecha de diez píxeles. Entonces, si queríamos
deshacernos de eso, solo
podemos seleccionar nuestro botón, hacer relleno y establecer esto en 0. Y ven que ahora
nuestro botón en realidad
va directo al
borde de nuestra frontera. Pero todavía tenemos un poco de relleno
extraño en los
lados de nuestro widget. Y eso porque si seleccionamos un botón aquí y
nos desplazamos hacia abajo, lo
encontrarás en el yo creo
que está instalado. Sí. Si abrimos el estilo, verás que tenemos acolchado
normal y relleno prensa ahora porque aquí
tenemos 12. Si abrimos esto, verás a la
izquierda y a la derecha, tenemos 12 patrón y eso es lo que
nos está dando esa gran brecha. Si queremos cambiar esto
para que sea parejo en todos los lados, solo
podemos cambiar
este número de arriba aquí, digamos cinco, y luego haremos lo mismo con el relleno de
prensa también. Cambia eso a cinco y
luego compilaremos. Verás que ahora
tenemos la cantidad correcta de
relleno de cada
borde de nuestro widget. Ahora hemos agregado un botón
a nuestro widget de ranura de cuadrícula. Podemos tener código corriendo
cuando
se presiona ese botón para que podamos desplazarnos
hacia abajo hasta la parte inferior aquí, tenemos nuestros botones seleccionados. Podemos agregar un onclick
eventos, así podemos agregar eso. Y cuando lo recogemos,
podemos ejecutar algún código. Por lo que sólo agregaré una cadena de
impresión aquí. Ahora, cuando compilemos
esto y presionemos Play, verás que
tenemos nuestras ranuras de cuadrícula que están resaltadas
como lo hace un botón. Y si los presiono, se
puede ver que
esa cadena de impresión se está ejecutando. Ahora, nuestro panel de rejilla uniforme
también puede funcionar en una caja de desplazamiento. Si salimos de los planetas para
golpear de cabeza hacia el hub, entonces si seleccionamos nuestro
panel de cuadrícula y hacemos clic derecho, hacemos rap con y queremos que
el cuadro de desplazamiento así. Ahora, nuestra caja de desplazamiento, en realidad
queremos establecer un tamaño, porque si tenemos hasta el tamaño, contenido en realidad
nunca traerá a colación esa pequeña
barra de desplazamiento porque simplemente
seguirá haciéndose más grande. Por lo que queremos desmarcar esto
y queremos escoger una talla. Entonces voy a hacer el mío un
poco más ancho así, pero voy a
hacerlo más corto. Así que conseguimos que nuestra barra de desplazamiento suban. Entonces compilaremos. Y solo queremos
asegurarnos de que nuestro panel de rejilla esté configurado
para que se llene horizontalmente
y se llene verticalmente. Entonces le pegaremos a play.
Deberíamosver que aquí
tenemos nuestra caja de
desplazamiento vertical. Y podemos, si presiono shift, podemos desplazarnos por
nuestra grilla así. Ahora, tal vez querías agregar un fondo a este cuadro de desplazamiento. Eso lo podemos hacer usando fronteras. Entonces, si salimos ahora
y volvemos a nuestro HUD, podemos seleccionar nuestra casilla de desplazamiento
y envolverla con un borde. Entonces haremos frontera. Por lo que ahora nuestra caja de desplazamiento está
contenida dentro del borde. Si nos acercamos, en
realidad se puede ver que tiene algo de ese
relleno raro pasando. Entonces si seleccionamos nuestra frontera
aquí y encontramos el relleno, yo sólo voy a establecer el
mío para que en realidad lo
venderá a decir diez. Ahora nos dará una
linda frontera grande. Y después cambiaremos el color. Entonces con nuestro borde seleccionado, podemos bajar a
la configuración del pincel. Y de nuevo, puedes establecer una
imagen aquí si quisieras. Yo sólo voy a
usar el color del pincel. Y podemos establecer esto para decir
sea este color rojo aquí. Ahora cuando compilemos
y golpeemos Play, verás que ahora tenemos ese bonito
color de fondo que
seleccionamos y aún podemos desplazarnos por nuestra lista muy bien. Entonces eso es todo por esta lección. Esperemos que ahora entiendas
un poco más acerca de los tres de
estos tipos de widgets.
44. Widgets (Arrastre y suelte): Oigan a todos. En esta lección vamos
a estar echando un vistazo a las operaciones de arrastrar y soltar
usando widgets. Ahora bien, si no seguiste
a lo largo de nuestra lección anterior, creamos esta grilla aquí. Tenemos estos diferentes widgets y lo ponemos dentro de una caja de Scroll. Recomiendo encarecidamente ir y seguir esa última lección, porque en realidad
vamos a estar usando estos widgets para
nuestro arrastrar y soltar. Así que solo para empezar, en realidad
voy a hacer
esto un poco más grande, así que tenemos un poco más de
espacio con el que trabajar. Entonces iremos al capó
y sólo voy a agarrar nuestra caja de pergaminos o
realmente lo siento, nuestra frontera aquí, lo que
va a hacer esto un poco más grande así. Entonces vamos a
entrar a la vista de Gráfico, y voy a agregar
algunas ranuras más también. Entonces vamos a establecer esto para decir 19. Por lo que tendremos 20 slots
esta vez en su lugar, podemos probar esto, pulsa Play. Puedes ver que tenemos
todas nuestras ranuras aquí y nuestra barra de desplazamiento también funciona
correctamente. Así que ahora podemos X fuera
del editor de plano y vamos a ir a
nuestro widget de ranura de cuadrícula, luego diríjase
al modo gráfico. Ahora por aquí en las funciones, realidad
tenemos algunas funciones
que podemos anular. Y estas son funciones son
todos los widgets tienen incorporados. Como puedes ver,
hay muchas. No vamos a pasar por
todas estas porque algunas de ellas están un
poco más avanzadas. Pero si pasas el cursor sobre ellos, obtienes un pequeño
tip de herramienta que dice de qué son
responsables
estas funciones. Y hay algunos que son útiles para familiarizarse. Entonces tenemos cosas
como el botón del ratón hacia abajo. Así que esto
se va a ejecutar si presionas el botón del ratón hacia abajo
mientras tu mouse se cierne sobre el
widget y el juego, tenemos cosas como las funciones de
arrastre por aquí. Los vamos a usar hoy para crear un sistema de
arrastrar y soltar. También hay funciones para en mouse enter and
or mouse leave. Y eso es, esos
se van a ejecutar cada vez que nuestro
mouse se cierne sobre nuestro widget y luego deja de flotar
sobre nuestro widget. Pero vamos a empezar
con el y arrastre detectado. Y esta va a
ser la función que detecte cuando mantenemos
pulsado el mouse mientras está sobre este widget y
empezamos a moverlo. Ahí es cuando detecta un arrastre y esta
función se equivocará. Así que vamos a hacer clic en esto para anular esa función. Y aquí tenemos
algunas entradas y salidas. Así que solo para
cubrir rápidamente estas entradas, tienes mi geometría y esto básicamente te da
información sobre posición de
tu mouse relativa a la ubicación de la pantalla
y cosas por el estilo. Probablemente no estarás
usando esto con demasiada frecuencia. Pero lo que puede estar usando mucho más a menudo es el evento puntero. Esto nos permite
conseguir cosas como
es el botón del ratón
hacia abajo por ejemplo. Y podemos usar esto ahora para
comprobar qué botón del ratón presionó realmente hacia abajo
cuando se detectó el medicamento, porque en realidad podemos
arrastrar con ambos botones de extremo izquierdo, derecho y medio del ratón. Entonces si sólo quisiéramos que
este código se ejecutara para, digamos, el botón izquierdo del ratón, entonces nos gustaría comprobar
es el botón de clics, el botón izquierdo del ratón. Y todo lo que hice fue hacer clic en el
botoncito allí y luego hacer clic en el botón izquierdo del mouse para configurarlo en el botón izquierdo del mouse. También podemos usar este evento
puntero para obtener el nombre del botón
que se presionó hacia abajo. Por lo que podríamos hacer conseguir el botón
que afecta. Y a partir de aquí podemos
hacer consigue mostrar, y podemos obtener el nombre
para mostrar la clave. Y esto sólo
nos dirá qué llave exactamente fue empujada hacia abajo cuando se detectó este
medicamento. Pero por hoy,
sólo vamos a estar usando el botón del ratón hacia abajo. Así que solo resalte estos
y elimine estos, y voy a
hacerlo para que este código sólo
se ejecute cuando
dejamos arrastrar el botón del ratón. Así que voy a agregar un si aquí, conecta esto hasta nuestro nodo de
inicio aquí. Y luego vamos a conectar el resto del código
hasta nuestro verdadero. Por lo que ahora estamos listos
para usar realmente las notas de
operación Crear arrastrar y soltar, vamos a
hacer clic derecho y
buscar Crear, Crear, arrastrar. Y queremos una
operación de arrastrar y soltar así. Y conectaremos esto
a lo verdadero así. Ahora, podemos usar un widget
existente, pero en realidad
voy a crear un nuevo widget que va a ser utilizado para básicamente seguir nuestro
mouse cuando arrastramos y soltamos. Entonces vamos a
crear un nuevo widget. Entonces compilaremos y
guardaremos esto por ahora. Y haremos clic derecho
en el Navegador de contenido, vaya a Interfaz de usuario. Hacer Widget Blueprint. Usa un widget y desplázate hacia abajo
y nombraremos este BP. Mover widget así. Y eso lo abriremos, lo que sea. Yo sólo voy a arrastrar el mío
hasta la cima aquí así. Ahora, cuando en realidad arrastramos
desde nuestro widget de ranura de cuadrícula, este va a ser el widget
que se creará y seguirá nuestro mouse a medida que
movemos el mouse. Entonces vamos a querer,
digamos, una imagen para esto. Entonces comenzaremos con una superposición. Por lo que va a agarrar una superposición, poner eso aquí, luego
voy a agarrar una imagen. El motivo por el que estoy empezando
con una superposición es sólo para que podamos tener
múltiples widgets, como una imagen y algún
texto por ejemplo. Por lo que vamos a agarrar algo de texto
también, que es zoom en aquí. Ahora voy a configurar mi tamaño de
vista previa al deseado para que podamos ver exactamente qué tan grande va a ser nuestro
widget. Voy a cambiar la
imagen para decir 64 por 64. Lo vamos a configurar para que sea,
que sea esta carita roja. En cambio, cambiaremos nuestros
textos para que sean un poco más pequeños, así que haremos como 14. Ahora nuestra imagen
sigue siendo bastante. Ahí vamos. Queremos volver a
cambiar su tamaño. Lo cambiamos a 64
por 64, así, y haremos nuestros
textos un poco más pequeños, aún así, como 12. Y lo configuraremos para que sólo esté
escribiendo, por ejemplo. Ahora quiero que mi texto
esté en la esquina derecha, por lo que usará la alineación correcta. Y eso me parece bien. De nuevo, esto es solo
un ejemplo rápido, solo mostrándote
cómo podemos configurar un widget y luego arrastrarlo. Ahora nos dirigiremos de nuevo
a nuestra ranura de rejilla. Y en el on drag detectado, en realidad
necesitamos crear ese widget que
acabamos de hacer. Y luego suministraremos eso
a nuestra operación de arrastrar y soltar. Por lo que moverá estos
a lo largo un poco. Y vamos a arrastrar hacia fuera y
buscar crear widget. Y queremos poner al
Jugador Propietario a la clase propietaria. Entonces
buscaremos poseer Player, conectaremos eso y
configuraremos la clase al widget de movimiento
que acabamos de crear. Luego, a continuación, tomaremos
nuestro valor de retorno de nuestra
nota Crear Widget y conectaremos eso al visual de arrastre predeterminado. Y conectaremos nuestra operación
Crear arrastrar y soltar
al nodo devuelto. Y queremos utilizar
el valor de retorno para proporcionar la operación
a la devolución. Nota aquí. Ahora sí tenemos algunos pines adicionales en nuestra
nota de operación de arrastrar y soltar aquí tenemos una clase. No voy a cubrir
eso porque eso es mayormente C plus plus cosas y prácticamente siempre estarás
usando la predeterminada de todos modos, puedes agregar algunas etiquetas. Por lo que al igual que en nuestra lección de etiquetas, podrías agregar un par de etiquetas
diferentes a esto. Y luego en el otro extremo, cuando en realidad
soltemos nuestro widget, digamos que otro widget
podrá leer esas etiquetas. Y luego tenemos carga útil. Ahora la carga útil puede ser
cualquier objeto que desee. Puede ser actor o lo que sea. Y ese objeto se puede usar para almacenar variables o funciones. Y de nuevo, tendremos
acceso a esto en
cualquier widget en el que
soltemos la operación. Entonces podrías, si
estás pasando información de este widget al widget en el
que lo soltamos. Podrías incluir algunas etiquetas o incluso un objeto que solo tenga una tonelada de información
que
luego puedes leer en ese otro widget. Ahora por ahora,
no vamos a estar usando estos porque están un
poco más avanzados. Pero también tenemos una opción de pivote. Ahora esto es básicamente justo donde se bloqueará
el widget
cuando esté en nuestro mouse. Entonces si su centro, significa que nuestro mouse, si se quedó quieto,
el widget estará alrededor de nuestro mouse con
el mouse en el centro. Y a medida que lo arrastramos,
el ratón
siempre se quedará en el
centro de nuestro movimiento, que a medida que nos movemos. Y
aquí hay algunas opciones
diferentes entre las que puedes elegir. Yo sólo voy a mantener
mi centro de salud centro. Y luego tienes
algunos offsets para que puedas agregar algunos offsets de píxeles. Entonces tal vez querías que el mouse estuviera en el centro
del widget de movimiento, pero querías agregar, digamos, un desplazamiento de diez píxeles a la izquierda. Podrías hacer eso
usando estos valores. Ahora actualmente este
código no se ejecutará nunca. Y eso es porque
en realidad necesitamos decirle
al widget cuando hay
algo siendo arrastrado. Entonces para hacer eso, en realidad
necesitamos ir a la
anulación y tenemos que bajar al
botón del mouse hacia abajo. Ahora, esto se ejecutará cada vez que se presione
el botón del ratón
hacia abajo en la parte superior de nuestro widget. Entonces, para empezar,
primero queremos comprobar qué botón del ratón
se ha pulsado. Por lo que vamos a arrastrar fuera de aquí
y hacer conseguir que afecte el botón. Y a partir de eso podemos realmente
arrastrar hacia fuera y hacer los iguales. Y esto nos permite comprobar es este botón igual
al botón que establecemos aquí. Así que sólo voy a hacer clic en
el pequeño botón del teclado aquí y luego el ratón izquierdo. Por lo que lo establece en el botón
izquierdo del ratón. Y añadiremos un nodo if. Por lo que va a hacer si así. Ahora podemos tener,
si quisieras, si agregas código para el que
quieres que se ejecute cuando el botón izquierdo del ratón
haga clic en nuestra ranura de cuadrícula. Y el diferente código que se ejecuta cuando escribimos clic con el ratón, querrías
agregar esto aquí que pudiéramos copiar y
pegar este nodo, conectarlo hasta
el botón de efectuar, y entonces podemos cambiar
esto a ratón blanco. Entonces podríamos
tener otro si,
si se pulsaba el
botón izquierdo del ratón que ejecutaría
el verdadero pin aquí. Y si se
apretó el botón derecho
del ratón y la tropa,
y aquí estamos borrachos. Y entonces podrías
tener un código diferente dependiendo de
cuál se presiona. Ahora porque solo quiero que mi operación de arrastrar y soltar se ejecute
cuando salgamos con el botón izquierdo del ratón, vamos a estar agregando
ese código aquí. Entonces vamos a arrastrar hacia fuera
de true y vamos a buscar drag detect. Queremos detectar
droga si se presiona, entonces necesitamos los eventos de puntero. Así que sólo vamos a
agarrar el evento del ratón y conectar hasta
el puntero de m. y luego la tecla de drogas, que va a hacer clic en
el teclado y luego haga clic izquierdo para configurarlo al botón izquierdo
del ratón como eso. Y este nodo es básicamente
sólo va a detectar, es el ratón
arrastrando actualmente nuestro widget. Y si lo es,
queremos pasar eso al nodo devuelto y
el valor de
retorno al valor de retorno. Y esto es en realidad lo que
va a causar están en arrastrar la función de texto
para ejecutar y luego tener todo el código que hemos
añadido aquí ejecutar también. Así que volviendo a usted con
el botón del mouse hacia abajo, siempre
queremos que todos
los pines devuelvan un valor aquí que es importante para manejo
del mouse y
cosas por el estilo. Entonces lo que haremos
es simplemente copiar una nota escrita,
pegarla aquí abajo. Y tal vez cuando hacemos clic derecho en mi mouse en el widget, lo siento, queremos que suceda
algo más, así que solo agregaré say,
print string aquí. Podemos enchufar esto
al valor de retorno, y luego copiará esto
y pegará esto aquí abajo. Entonces si no es ni el izquierdo ni
el botón derecho del ratón, tal vez sea el botón central
del mouse, por ejemplo. Simplemente no queremos que pase
nada. Ahora no queremos
dejar estos
pines de valor de retorno vacíos así. Tenemos que proporcionar
un manejado o no manejado. Entonces si arrastramos hacia fuera y
buscamos manejados, ahora, si devolvemos un handle que
básicamente le dice al motor, Hey, hemos manejado
la entrada del mouse. No dejes que otros
widgets lo manejen. Así que no corras más eventos porque se ha pulsado el
mouse. Así que podríamos usar eso para decir, este código en nuestro botón derecho
del ratón pulsado, pero tal vez no para
el nodo de aquí abajo. Para que podamos arrastrar
y hacer sin manejar. Y eso solo le dice
al motor, Hey, no
hemos hecho nada
con la entrada del mouse. Si algo más quiere
usar esa entrada que permitírselo. Por lo que usamos no manejados aquí. Por lo que debería verse así. Ahora en realidad hay un cambio que
necesitamos hacer diseñador. Entonces si nos dirigimos
allá atrás, si lo recuerdas, agregamos un botón que
básicamente estamos usando como
fondo que nos
permitió presionar este widget. Ahora necesitamos
quitar este botón. Y la razón de
eso es que los botones anulan el código
que hemos agregado aquí. Así que si tuviéramos que
estar presionando hacia abajo en este botón o en el botón
del ratón hacia abajo, realidad no
correríamos porque el widget de botón
maneja eso en su lugar. Entonces, para quitar ese botón, en realidad
es una forma muy
fácil de hacer esto. Podemos simplemente hacer
clic derecho en el widget de botón aquí y podemos
bajar para reemplazar con, y hay una opción
para reemplazar con niño. Y básicamente lo que hace eso es simplemente borra el botón y luego le decimos al
overlay que lo reemplace. Por lo que vamos a ir a reemplazar por reemplazado
con niño. Y puedes ver que nuestro botón
se ha ido y estamos de vuelta a la superposición con todos
sus widgets en su lugar. Ahora si lo desea, puede agregar un poco más de relleno de
nuevo a la superposición. Entonces sólo voy a sumar digamos un cinco o diez en realidad, se
ve un poco mejor. Tenemos un poco más de relleno ahora entre la superposición
en el borde. Así que ahora podemos compilarlo y en realidad podemos
probar esto. Acabamos de recibir una advertencia porque he eliminado
ese botón. Simplemente podemos ir al Event
Graph y se puede ver que todavía tenemos un
evento de ese botón, así que solo podemos
resaltarlo, eliminarlos, y ya no tendremos
una advertencia. Entonces ahora en realidad podemos ir a jugar a probar esto. Por lo que le
pegaremos a Play. Se puede ver que tenemos nuestros widgets están un
poco apretados
porque las cajas de desplazamiento un poco demasiado pequeñas, pero eso está bien. No tenemos que
preocuparnos por eso en este momento. Si hacemos clic y arrastramos
en uno de estos, se
puede ver que en realidad
nos aparece nuestro widget. Y tengo el control de
mi cámara en este momento. Pero si
le doy a Shift, se ve que puedo arrastrar y si lo dejo,
desaparece. Ahora, actualmente
no estamos haciendo nada con esta información de
operación de arrastrar y soltar, pero ahora en realidad podemos arrastrar fuera de cualquiera de estos widgets. Y nos da nuestro pequeño widget de
movimiento aquí también. Y si trato de arrastrar desde
mi botón derecho del ratón, se
puede ver que en realidad obtenemos
que hola textos imprimir. Por lo que se está imprimiendo hola porque agregamos
esa
cadena de impresión hola al evento de
botón de prensa. Entonces ahora tenemos configuración de arrastre. Queremos poder pasar información entre
estos diferentes widgets. Entonces lo que haremos es exhalar planetas y volver
a la cuadrícula de cadera lenta. Y vamos a
crear una nueva variable, y llamaremos a esto tiene ítem. Y lo vamos a
dejar como un
tipo booleano y vamos a compilar. Entonces vamos a dirigirnos
al diseñador y
vamos a poner nuestro ícono carita aquí para que se oculte si el booleano es falso. Entonces iremos a la visibilidad aquí abajo,
usaremos un aglutinante. Entonces sí crearemos encuadernación. Y aquí dentro
vamos a regresar, si el artículo es falso, devolvemos que está oculto. Por lo que vamos a arrastrar hacia fuera
desde el valor de giro. Hacer un selecto US tiene
artículo como el índice. Y si el artículo es falso,
queremos estar ocultos. Si es cierto, queremos
que sea visible. Entonces podemos compilar eso. Ahora, si volvemos
a jugar el juego, puedes ver que todos nuestros íconos de carita en realidad
faltan ahora porque todos ellos
por defecto no tienen ningún artículo. Entonces vamos a dirigirnos a nuestro HUD y en realidad
vamos a cambiar el código aquí que la primera ranura siempre tenga su
elemento tiene establecido en true. Por lo que vamos a arrastrar fuera de
aquí y hacer una F. Queremos comprobar es
el índice igual a 0. Y nos conectaremos
hasta condicionar. Y si es falso, que
conectan eso hasta aquí. Y si es cierto, queremos
obtener el valor
de retorno de nuestro nodo Crear Widget. Y queremos hacer set tiene artículo y vamos
a configurarlo a true. Después conectaremos
el extremo hasta de nuevo
al nodo Add child así. Entonces todo lo que estamos haciendo aquí
es que estamos revisando, ¿es este el primer
índice del bucle? Si lo es, entonces configuramos
que tiene item a true. Y si podemos tirar de
esto y darle a Play, verás que ahora
nuestra primera ranura tiene un ícono de carita,
pero los demás no. Ahora a continuación queremos comprobar antes de hacer la operación de arrastre, ¿la sal
de la que realmente
estamos arrastrando tiene el elemento. Entonces vamos a X fuera de la cadera, volveremos a nuestra ranura de cuadrícula, e iremos al
on mouse para tocar, arrastrar los textos,
agregaremos un nuevo cheque, solo
moveremos esto
fuera del camino. Vamos a arrastrar y hacer si queremos comprobar si
tiene artículo es cierto, entonces vamos a permitir que se cree la
cooperación seca. Y si no,
no haremos nada. Y podemos
probar esto rápidamente también. Entonces le pegaremos a play y le pegaré a
Shift para soltar mi mouse. Y se puede ver si
arrastro de este tipo, en
realidad no
crea una cooperación seca. Pero si arrasto de
este bazote, lo hace. A continuación, en realidad necesitamos
almacenar una referencia a la ranura original de la
que arrastramos. Porque cuando lo soltemos en otra ranura que
no tiene el artículo, vamos a
necesitar actualizar la ranura
anterior que sí tenía el artículo para decirle que
ya no tiene ese artículo. Por lo que necesitamos una referencia
a esta ranura original. Entonces para hacer eso, actuaremos fuera de juego y vamos a
pasar a la apuesta Move, luego al gráfico de eventos, y
vamos a crear una nueva variable. Llamaremos a este viejo widget. Y vamos a establecer su tipo para que sea el widget de ranura de cuadrícula
que creamos. Entonces ese es el mismo en el que
hemos estado trabajando. Y lo establecemos en
una referencia de objeto. Y vamos a tomar en
el pequeño ojo aquí sólo para que sea instancia editable
y vamos a compilar. Entonces vamos a
volver al slop de rejilla. Aquí en el arrastre detecta, queremos establecer esa variable para el nuevo widget de movimiento
que acabamos de crear. Entonces aquí podemos arrastrar hacia fuera, podemos hacer set viejo widget. Queremos configurar este
viejo widget para que sea uno mismo porque estamos configurando nuestro
yo para que sea el widget más antiguo. Entonces nos arrastraremos de
eso y nos haremos uno mismo. Y conectaremos esto así, y luego
compilaremos. Así que ahora necesitamos una función
que se va a ejecutar cuando en
realidad soltamos o arrastramos
en la parte superior de nuestra ranura de cuadrícula. Así que nos dirigiremos a la
anulación y queremos encontrar la función de caída aquí
y vamos a crear eso. Ahora puedes ver que tenemos
esas mismas entradas que
teníamos para nuestras funciones anteriores, pero tenemos una nueva
ahora llamada operación. Y esta es básicamente
toda la información que proporcionamos
desde el on drag detectamos toda la
información que
brindamos aquí podemos acceder
ahora en el on drop. Entonces si arrastro hacia fuera y
busco visual de arrastre, se
puede ver que puedo obtener una
referencia al visual de la droga, y esta es una referencia
al widget que
hemos enchufado aquí. Entonces usando eso,
en realidad podemos arrastrar el costo al widget de movimiento porque el
nuestro es un widget de movimiento. Si recuerdas cuando lo
pusimos en la droga, este es el widget de movimiento. Entonces vamos a costar a eso. Y usando ese costo, en realidad
podemos acceder al
viejo widget, consigue viejo widget. Y eso nos da una referencia
al widget del que
originalmente arrastramos. Ahora también podemos acceder a las
etiquetas y la carga útil para que podamos arrastrar fuera de la
operación y hacer obtener etiquetas. Y eso nos da
la variable tags y también las plaquetas. Si obtenemos carga útil, también
podemos agregar acceso a esa referencia de
objeto que
podemos proporcionar aquí en el nodo Crear
operación de arrastrar y soltar. Así que ahora volviendo a la función
On drop, podemos eliminar estas variables porque en realidad no
vamos a usarlas. Entonces se va a establecer
los viejos widgets tiene elemento. Por lo que
buscará set tiene item. Tenemos que
establecer que en false
porque ya no tiene el artículo que necesitamos para establecer R tiene item
a true, también tiene item. Vamos a poner eso
en verdad, así. Y conectaremos esto hasta que
el valor de retorno asuma el valor de retorno porque
hemos procesado nuestro código. Entonces qué vamos a hacer, cierto, y queremos conectar
esto hasta nuestro costo aquí. Entonces podemos compilar esto
y podemos probar esto. Entonces si vamos al mapa,
dale a Play, voy a darle a
Shift para soltar mi mouse. Si empiezo a arrastrar, pueden
ver que tenemos funcionando
nuestra operación de arrastrar y soltar. Si lo libero en otro calcetín y veo que ese slots ahora visible y tiene su elemento establecido true y el
anterior se establece en falso. Podemos hacer esto con
cualquiera de nuestras ranuras aquí, arrastrando esta nueva operación
a los demás widgets. Si agarro mi widget y lo
libero por aquí, digamos por ejemplo,
sobre estos otros widgets, puedes ver que en realidad no
pasa nada porque no hemos configurado funciones de caída
para estos otros widgets. Entonces no va a
pasar nada cuando en realidad
liberemos la
operación caída encima de ellos. Entonces eso
es más o menos para esta lección. Esperemos que ahora
entienda cómo puede crear
operaciones de arrastrar
y soltar con widgets y también cómo puede transferir información de un widget a otro usando el arrastre visual o la referencia del
objeto de carga útil.
45. Planes de animación (descripción general): Oigan a todos. En esta
sección del curso, vamos a estar echando un
vistazo a los planos de animación. Ahora, Animation Blueprint. Entonces, ¿cómo le decimos a una Malla Esquelética qué animaciones
queremos que reproduzca? Ahora, una malla esquelética
suele ser una malla que ha sido amañada a un esqueleto en
un programa de modelado 3D. Entonces una vez en el motor, podemos hacer que ese esqueleto
reproduzca una animación y eso a su vez provoca que
la malla se anime. Ahora en esta lección, solo te
voy a llevar a través un resumen rápido del editor de
Animation Blueprint, así
como de la configuración de animación que viene con la plantilla de
tercera persona. Ahora, antes de empezar, es posible que
algunos de ustedes
hayan estado
siguiendo en las lecciones anteriores. Todo lo que he hecho aquí es crear una nueva plantilla en tercera persona. Por lo que tenemos un inicio limpio para esta sección del curso. Entonces, para empezar,
vamos a
dirigirnos al Animation Blueprint, que está dentro de la carpeta del
personaje, luego maniquíes, animaciones. Se puede ver que tenemos un dinero y Quinn Animation Blueprint. Entonces en esta lección
vamos a estar usando el dinero Animation Blueprint. Y la razón de eso es que
el plano de animación de Quinn en realidad usa el dinero
como sus planos padre. Por lo que toda la
funcionalidad está en realidad dentro de nuestro dinero
Animation Blueprint. Entonces eso lo abriremos. Y yo sólo voy
a arrastrar el mío hasta la barra superior aquí así. Ahora ya puedes ver que
actualmente estoy jugando a un editor, así que solo voy
a dar clic en el pequeño botón de
parada de aquí para detener eso. Y ahora hemos abierto nuestro plano de
animación. Se puede ver que
tenemos el Event Graph. Si el tuyo no está abierto, siempre
puedes abrirlo aquí en
la pestaña de arriba. O puedes hacer doble clic
en el gráfico de eventos aquí para abrir nuestra animación. El gráfico de eventos es igual que cualquier otro gráfico de eventos que hayas
usado y otros planos. Tenemos nuestro código aquí
en nuestro gráfico de eventos. Tenemos nuestro
panel Mi Blueprint donde podemos crear y encontrar nuestras funciones,
variables, despachadores de eventos y macros. Ahora, el propósito principal de
nuestro Event Graph dentro del Art Animation Blueprint es establecer variables que luego
se usan dentro de nuestro gráfico Anim. Entonces para abrir eso, nos dirigiremos al
panel Mi Blueprint aquí y doble clic y soy gráfica y eso nos llevará
a nuestra gráfica Anim. Ahora bien, esto en realidad ha
cambiado bastante desde la versión cuatro de Unreal
Engine. Por lo que puede notar
algunas diferencias si has usado en el
motor ML para antes, pero vamos a empezar
con sólo ir a la máquina de
estado de locomoción aquí. Entonces haremos doble clic en eso. Se puede ver que
tenemos un estado y estos son donde podemos configurar
animaciones para que se reproduzca. Entonces tenemos un estado
ocioso y luego tenemos un estado walk
slash run. Si abrimos nuestro estado de inactividad, se
puede ver que tenemos
una animación aquí usando
un reproductor de secuencia de animación Eso es en realidad la salida de
una animación ociosa. Podemos ver qué animación
está jugando en realidad por el nombre del nodo
en la parte superior aquí. O si lo seleccionamos, podemos ir a secuencia
y pasar
el cursor sobre la entrada y se puede ver que
dice MM, subrayado inactivo. También podemos dar clic en este
pequeño navegar en el botón Navegador de
contenido que
nos llevará a la animación
que se está utilizando allí. Podemos ver que esta es la animación que
en realidad se está reproduciendo cada vez que nuestros personajes
en este estado ocioso. Ahora, volviendo a
nuestra máquina de locomoción, pueden
ver que podemos hacer clic en la locomoción
aquí arriba en la barra superior. Ahora en realidad llévanos allá atrás. También tenemos un estado walk
slash run. Ahora si hacemos doble clic en
eso para abrirlo, se
puede ver que en realidad
tenemos un tipo diferente de nodo que se está utilizando
para reproducir animación, señor. Este es un
nodo de espacio de mezcla y nos permite introducir una variable
como un flotador, por ejemplo, y tener
diferentes animaciones jugar dependiendo de ese valor de flujo
diferente. Así que si seleccionamos este
nodo y nos dirigimos a la secuencia o la opción de
espacio de mezcla, lo siento, podemos ver que actualmente está
configurado para BSIMM walk run, y este es el espacio de mezcla para nuestro caminar y
correr animaciones. Podemos ir a eso ahora haciendo clic en el botón
Browse to Content. Eso nos llevará
al espacio de mezcla. Y si abrimos eso aquí arriba, ahora los espacios de mezcla nos permiten agregar múltiples animaciones juntas y hacerlas transición sin problemas entre sí
usando una variable. Por lo que puedes ver
aquí abajo tenemos un valor de velocidad que comienza en 0. Esta es la animación que se
reproducirá cuando nuestro valor de velocidad sea 0. Y si sostengo Control y
empiezo a mover el mouse, se
puede ver que
la velocidad de vista previa en realidad aumenta y
empezamos a aumentar la velocidad de
caminata de nuestras animaciones hasta
llegar a este punto. Ahora este punto aquí está actualmente
fijado para el caminar hacia adelante. Por lo que se puede ver cuando muevo
el punto de vista previa aquí, nuestros personajes jugando una animación de
paseo hacia adelante. A medida que lo sigo incrementando, empezamos a obtener esta animación en
ejecución. Y a medida que lleguemos al
final, se puede ver actualmente está configurado para la carrera, y eso es lo que nos jugarán cuando estemos fuera a la velocidad 500. Por lo que podemos usar esto para una transición
sin problemas entre las animaciones de caminar y
correr. Cuando regresamos a nuestro Blueprint de
Animación, controlando qué animación
se está reproduciendo en nuestro lado, nuestro espacio de mezcla usando esta
variable de velocidad de desplazamiento que luego se
conecta a este espacio de
mezcla nodo. Y dependiendo de la
velocidad que tengamos,
saldrá una animación
diferente a nuestra pose de salida aquí. Volviendo a nuestra gráfica Anim. Y yo sólo voy a
dar clic en ellos. Agarra la barra superior aquí. Cualquier animación que salga
de nuestra locomoción es entonces ingresada en
este efectivo de locomoción. Ahora esto básicamente guarda la animación actual
que está siendo producida por nuestra locomoción, para que podamos usarla más adelante. Ahora volviendo a la máquina del estado de
locomoción, se
puede ver que
tenemos estas flechas que van entre nuestros dos estados. Ahora estas son
reglas de transición y así es como comprobamos si deberíamos
estar en estado ocioso. O el estado walk slash run. Así que si nos desplazamos sobre uno, se
puede ver que tenemos esta variable que
aparece en la punta de la herramienta. Y es básicamente sólo
decir que esta regla se establece en la variable debe
mover. Entonces, si esa variable es verdadera, entonces haremos la transición de nuestro estado ocioso a
walk slash run. Y luego si me pasa
el ratón por encima de la inferior aquí, es que
lo mismo debe mover
variable pero con un no. Entonces si esa variable es falsa, entonces haremos la transición de vuelta de Walk slash run al ídolo. Y podemos hacer doble clic en estos para ver realmente el código. puede ver que es sólo una variable conectada
al resultado. Y entonces podemos hacer lo mismo
con el código para el rol que va de andar
al estado ocioso. Entonces si hacemos doble clic en eso, puedes ver que tenemos
esa misma variable con un nodo de nudo y luego eso está
enchufado al resultado. Ahora esto debería mover
variable se establece dentro nuestro gráfico de eventos usando algún código y vamos a mirar en
eso un poco más adelante. Pero si nos dirigimos de nuevo
a la locomoción utilizando estos dos estados
y estas dos reglas, elegimos si nuestro
personaje debe o no estar jugando una animación ociosa o una animación
a pie o corriendo. A continuación, sacamos ese valor
del estado de locomoción
al cajero de locomoción. Para que podamos usar esa
animación más adelante. Ahora en nuestro gráfico Anim aquí, si pasamos al
lado derecho, tenemos este nodo pose de salida. Ahora bien, esta es la animación que realidad
veremos en el juego. Entonces cualquiera que sea la animación que se
conecte aquí es lo que veremos cuando
estemos jugando nuestro juego. Ahora, actualmente, estos dos
nodos de aquí arriba no están realmente conectados a ninguna
de esta cadena de aquí abajo. Pero si abrimos nuestra máquina de
estado principal aquí,
ahora nuestra máquina de estado
de estados principales es exactamente la
misma que nuestra máquina de estado de locomoción.
Hacenlo mismo. Es sólo que nuestros principales
estados, máquina de estado tiene diferentes estados insider. Y si echamos un vistazo
al estado de locomoción aquí, si hacemos doble clic en eso, se
puede ver que estamos usando una locomoción de pose de efectivo. Ahora esta es la pose de efectivo que
establecemos en nuestra gráfica Anim. Entonces, si miras aquí arriba, lo
estamos configurando aquí, y luego lo estamos usando en este estado de locomoción dentro nuestra máquina principal de estados. Así es como estos
nodos de aquí arriba están realmente conectados
al resto del código. Ahora, volviendo a la máquina
principal del estado, se
puede ver que tenemos
algunos estados aquí arriba que en realidad
no están conectados
a nuestro estado aquí abajo. Ahora, la razón de eso
está en Unreal Engine cinco, tenemos estos nuevos alias de estado,
nodos, y estos
nos permiten conectar estados sin tener realmente
reglas que se conecten a ellos. Ahora tenemos dos
alias aquí. Tenemos los dos cayendo
y los dos aterrizan. Ahora puedes decir
que es un alias por el pequeño ícono que hay en el
lado izquierdo. El modo en que funcionan estos
es si selecciono los dos
alias que caen, por ejemplo, se
puede ver por aquí en
el panel lateral derecho, tenemos la locomoción
en estados terrestres, tectónica. Ahora, tendrás una casilla para cada estado que exista
en tu máquina estatal. Entonces tenemos uno para
locomoción, que está aquí, salto que está aquí arriba, bucle
completo que está aquí, y luego tierra que tiene aquí. Ahora si tuviéramos estados adicionales, también
estarían
listados también. Ahora, porque la
locomoción y la tierra de ambos textos en este nodo correrán todas las reglas conectadas
a él mientras estemos en la locomoción o en
estos estados terrestres. Lo que significa que estas dos
reglas aquí se correrán cada cuadro si actualmente
estamos jugando el estado de locomoción
o el estado de tierra. Y es lo mismo para el nodo terrestre
R2 aquí. Este también es un alias
y se puede ver que tiene el salto
for-loop marcado,
lo que significa que si estamos
en el estado de salto o en el estado for-loop, entonces esta regla estará
ejecutando cada frame. Y si en algún momento esa regla se hace realidad mientras estamos en
cualquiera de estos estados. Entonces los dos terrenos nos
transitarán de cualquiera de estos
estados a nuestro paisaje. Y así es como estos estados de
aquí arriba están conectados con
los estados de aquí abajo. Ahora, sólo para cubrir las
reglas que están pasando aquí mientras
en estado de
locomoción se está ejecutando y esto estará
corriendo siempre que nuestro personaje esté ocioso o caminando o corriendo. Y eso porque
si recuerdas, estamos usando ese caché de
locomoción, que ha sido establecido por la máquina del estado de
locomoción. Y eso tiene nuestras
animaciones ociosas y nuestras caminatas slash run estando ahí sentadas. Entonces mientras ese
estado de locomoción aquí está corriendo, las dos caídas
estarán corriendo todas sus conexiones para ver si alguna de estas
reglas es cierta. Y si en algún momento
empezamos a caer, es caer se hace realidad, haremos la transición de
la locomoción al for-loop. Y si estamos cayendo y hay una velocidad
mayor a un 100 en la z. así que si estamos cayendo más
allá de cierta velocidad, realidad
usaremos el estado de animación de
salto en lugar de simplemente ir
al for-loop. Y entonces en realidad
tenemos una regla que va entre nuestro salto
y nuestro for-loop. Y esto solo comprueba, es nuestra animación de salto
casi terminada. Y si lo es, entonces
nos hará la transición de nuestro salto
a nuestro for-loop. Y la razón por la que
hace eso es porque tenemos esta opción
marcada aquí, que básicamente solo comprueba es la animación que
estamos comprobando. Casi terminado. Si lo es, entonces
haremos la transición al estado que lo
estamos comprobando. Ahora, en cualquier momento
cuando estamos jugando o saltando o una
animación for loop se queda. Esto a tierra
también estará corriendo. Estará comprobando es,
¿es falso caer? Si lo es, entonces eso nos hará la
transición de Eva, el for-loop, o salto a tierra, y luego de la tierra a
nuestra locomoción de nuevo. Así que esos son los fundamentos de
cómo funcionan en realidad nuestros principales estados, la máquina de
estado. Si nos dirigimos de nuevo a
nuestra gráfica Anim ahora. Salida donde sea la animación que estemos reproduciendo
actualmente en
nuestra máquina de estado. Entonces, si solo estamos en
nuestro estado de locomoción, esto dará salida a nuestra animación de
locomoción. Si dijéramos caer, jugaría nuestro for-loop. Entonces esa sería la salida
que entraría en esto, que es una ranura de montaje. Ahora, tendremos toda
una lección sobre montajes en el futuro. Pero esto es sólo una ranura que nos
permite jugar un montaje. El montaje nos permite superponer una animación encima de
nuestras animaciones de movimiento. Pero si
actualmente no se está reproduciendo ningún montaje, todo lo que sucederá es que
nuestras animaciones de movimiento irán a la ranura de montaje. Comprueba si se está reproduciendo un
montaje. Si no, entonces simplemente pasa y
no se hacen cambios. A menos que esté tocando un montaje. Entonces eso va de nuestra ranura de montaje a
nuestra plataforma de control. Ahora, no voy
a estar yendo
demasiado en la plataforma de control en este curso puramente porque es un sistema masivo por sí solo, que podría tener un curso
completamente separado, pero podemos ver que la plataforma de
control está funcionando. Entonces seleccionaremos el nodo. Y en el
panel Detalles desplácese hacia abajo, puede ver que tenemos
una clase de plataforma de control. Aquí. Está ajustado al pie básico del
maniquí IK. Y podemos encontrar esto haciendo clic en el navegador Browse to asset
and content. Y podemos abrir
ese control Rick, y se puede ver todo el código que está siendo manejado por
esa plataforma de control. Ahora otra vez, no voy a estar pasando por todos estos nodos
porque la plataforma de control es un sistema
bastante avanzado. Pero básicamente lo que hace esto
es que hace nuestra
colocación del pie por nosotros. Te puedo dar un
ejemplo rápido de lo que quiero decir. Entonces tocaremos a un editor. Y si atropello a esta rampa y me pongo uno en los pies en alto, se
puede ver que el pie
en realidad aumenta su altura porque la altura del
suelo es más alta en ese punto. Eso es solo una
visión general rápida de lo que hace la plataforma de
control en
este plano aquí. Y todo este
código está sucediendo
dentro de esta nota de
plataforma de control aquí. Por lo que toma en nuestras animaciones de
movimiento, aplica esas
nuevas posiciones de pie para la altura del suelo. Y luego eso lo saca en nuestros posts de salida aquí para nuestra animación final
que vemos en juego. Ahora que hemos estado
pasando por el gráfico Anim, es posible
que hayas notado
algunas variables como R está cayendo variable aquí, toda la velocidad de tierra dentro
del estado de carrera de barra de paseo. Estas son solo
variables normales que
luego se establecían dentro de
nuestro gráfico de eventos. Para que podamos usarlos
en nuestra gráfica Anim. Entonces si nos dirigimos
al Event Graph ahora con solo hacer clic en eso en el panel
Mi Blueprint, como pueden ver,
estamos diciendo algunas de esas variables que
usamos en la gráfica Anim. Entonces tenemos nuestra velocidad de
tierra aquí, eso es solo obtener la velocidad de nuestro componente de movimiento. Después convertimos eso en un flotador y lo ajustamos
a la velocidad del suelo. Tenemos otra variable
llamada should move, que determina
si debemos ser un estado de animación ídolo
o nuestro estado de animación walk slash
run. Y luego tenemos r está
cayendo variable aquí abajo, que sólo utiliza los componentes de
movimiento es variable descendente
que está incorporado. Y luego tomamos eso y lo ponemos a la variable is falling. Y estos están todos establecidos
por el evento de aquí llamado evento Blueprint
update animation. Esto ejecutará cada frame y actualizará estas variables
según sea necesario. Entonces aquí arriba tenemos el blueprint
inicializar animación. Ahora esto se correrá de forma similar
a un start play notas. Por lo que esto se ejecutará cuando
comience el juego o cuando se cree nuestro
blueprint de animación. Eso sólo consigue el actor propietario, que suele ser el plano del
personaje. Causamos a la variable de carácter del
blueprint del carácter. Y luego también obtenemos su componente en movimiento de
caracteres y lo establecemos como una variable para
que
podamos usarlo aquí
abajo para establecer
estas variables. Ahora te
mostraremos dónde establecemos en realidad qué Animation Blueprint usan
nuestros personajes. Nos dirigiremos al
ThirdPersonCharacter. Entonces para hacer eso, iremos
al Navegador de Contenido, luego a planos en tercera persona
se abrirá el Blueprint Third PersonCharacter. Después podemos seleccionar
el componente de malla por aquí en el panel
Componentes. Y si hacemos doble clic en
él, nos llevará a la ventanilla. Ahora sobrecalentamiento y
el panel Detalles. Siempre y cuando el modo de animación esté configurado para usar el blueprint de animación, debes tener esta opción
Anime Class. Y se puede ver aquí
que actualmente está configurado para el ocho BP Quinn
Animation Blueprint. Por lo que si querías
cambiar eso, solo
tienes que hacer clic en el
desplegable aquí y encontrar tu nuevo Blueprint de
Animación. Hay bastantes que
están integrados en el motor, pero normalmente no
estarás usando ninguno de estos. Usarías decir por ejemplo, nuestro plano de animación de dinero
o nuestro Quinn uno aquí. Entonces, por último, como nota al margen, tal vez en el futuro creas un personaje de PNJ que en
realidad no se mueve a ninguna parte, y solo quieres que
reproduzca una sola animación. Puedes hacerlo seleccionando
el modo de animación aquí
para usar el activo de animación. Y luego puedes establecer una sola animación
que quieras que reproduzca sin tener que tener
un plano de animación completo. Pero para los personajes de los jugadores, prácticamente siempre
vas a querer que esto se establezca para usar el blueprint de animación. Y quieres asegurarte de
que la Clase Anime esté definitivamente establecida en tu plan de
animación. Entonces para nosotros, esa es
la ABP Quinn aquí. Entonces eso es todo por esta lección. No te preocupes demasiado si
no lo entiendes todo. En nuestras próximas lecciones,
vamos a entrar en cada sistema con
mucho más detalle.
46. Planes de animación (Montages): Oigan a todos. En esta lección
vamos a estar echando un vistazo a los montajes de animación. Montajes de animación, o cómo le
decimos a nuestro blueprint de animación, la animación específica que
queremos que reproduzca. Entonces, por ejemplo, si
tu personaje fuera a recargar o balancear
un arma cuerpo a cuerpo, usarías montajes de animación para reproducir esas animaciones. Ahora en esta lección sobre algunas
de nuestras futuras lecciones, voy a estar usando
animaciones que en
realidad no están incluidas en la plantilla de
tercera persona. En la descripción de la clase, pondré un enlace para
descargar las animaciones que utilizo en esta lección y también
nuestras futuras lecciones. Una vez que hayas descargado y
extraído esos archivos, deberías terminar con una
carpeta que se vea así. Ahora vamos a agregar estos
archivos a nuestros proyectos. Por lo que vamos a hacer clic en
el editor aquí, haga clic derecho en nuestra carpeta de contenido e ir a mostrar en Explorer. Esto nos mostrará
una carpeta de contenido. Y queremos mover nuestras animaciones de lecciones aquí a la carpeta de contenido así. Ahora puedes ver que
eso se muestra dentro de nuestro navegador de contenido. Ahora, si lo abrimos, si las animaciones no están
ahí, no te preocupes. Todo lo que necesitas hacer es cerrar
y luego volver a abrir el proyecto. Por lo que ahora he reiniciado
mi proyecto. Y se puede ver dentro de
las animaciones de la lección, todas nuestras animaciones se están
mostrando correctamente ahora. Ahora sólo vamos
a estar usando una de estas animaciones en esta lección. Esa va a ser la animación de
recarga. Entonces si en la carpeta de
animaciones de lecciones buscas recargar, verás que
tenemos una animación de recarga. Ahora vamos a usar
esto para crear un montaje. Para ello, haremos clic derecho
y subiremos a Crear, luego seleccionaremos Crear
y un montaje. Y sólo vamos
a mantener el mismo nombre. Por lo que sólo voy
a presionar Enter. Ahora tenemos un nuevo montaje. Ahora bien, si abrimos nuestro montaje de
animación, se
puede ver que
en realidad se ve bastante similar a una secuencia de
animación. Yo sólo voy a arrastrar el mío
hasta aquí arriba así. Ahora la principal diferencia es
que tenemos esta ranura de montaje y una toma de montaje es cómo le decimos al Animation Blueprint qué
montaje queremos jugar. Entonces, si nos dirigimos a nuestro plano de animación de
dinero, si recuerdas
que está en los personajes, nos
desharemos de esta búsqueda, iremos a la animación de maniquíes
y abriremos un dinero de BP. Entonces dentro de nuestro
gráfico Anim, si te acuerdas, tenemos esta ranura y
actualmente está establecida en ranura predeterminada. Ahora bien, si echamos un
vistazo atrás a nuestro montaje de recarga, esto también está configurado
como swap predeterminado. Ahora esto significa que si
tuviéramos que jugar nuestro montaje de recarga, I Animation Blueprint lo
podría reproducir. Ahora actualmente nuestro montaje y nuestra ranura de montaje
dentro de nuestro plano, o ambos usando la misma pendiente. Pero si seleccionamos la ranura
aquí en el panel Detalles, puede hacer clic en el abajo
y ver que en realidad hay bastantes tipos diferentes incluidos con la plantilla de
tercera persona. Ahora bien, si tuviéramos que
cambiar esta ranura para usar una ranura diferente
y jugar, nuestro montaje. El montaje ya no se
jugaría porque
tendría una ranura diferente
a la ranura de aquí. Ahora la razón principal por la
que podemos tener múltiples slots es
porque
en realidad puedes tener un personaje jugando más de un montaje
al mismo tiempo. Pero cada ranura sólo puede
jugar un montaje. Entonces es por eso que podemos
tener múltiples slots y tener montajes asignados
a diferentes slots. Pero para esta lección, sólo
vamos a estar
apegándonos a las ranuras predeterminadas. Por lo tanto, asegúrese de mantener este
conjunto de diapositivas en la opción predeterminada hip. Y de vuelta en nuestro montaje se
asegura de que la ranura predeterminada y el nombre de la
ranura estén marcados aquí. Entonces ahora en realidad
vamos a escribir algún código para reproducir nuestro montaje. Así que nos dirigiremos
al Navegador de Contenido, iremos a la carpeta de
blueprint en tercera persona, luego abriremos el Blueprint de
ThirdPersonCharacter. Y aquí podemos agregar un
poco de código que le diga nuestra malla de personajes que
realmente reproduzca un montaje. Entonces haremos clic derecho. Voy a
buscar el evento de entrada uno, y crearemos
esa entrada de ellos. Entonces vamos a agarrar
nuestro componente de malla aquí, arrastrar fuera de eso y
buscar el montaje de juego. Y eso
nos va a crear este nuevo nodo aquí. Ahora te llevaré
a través de algunas de las entradas y
salidas de este nodo. Empezar con,
tenemos montaje para jugar. Aquí es donde le decimos qué
montaje queremos tocar. Entonces vamos a seleccionar
nuestro montaje de recarga aquí. Tenemos al dramaturgo. Entonces, si esto se establece en uno, la animación se reproducirá
a su velocidad normal. Pero si nos pusiéramos a decir a la animación se
reproduciría el doble de rápido. A continuación tenemos posición de inicio
ahora esto te permite establecer la hora exacta en la que quieres que el montaje
comience a reproducirse. Entonces, por ejemplo, si tuvieras un montaje largo de 10 segundos y quisieras
comenzar a los dos segundos, entonces pondrías la posición
inicial en dos. A continuación, tenemos la sección de
inicio. Ahora voy a explicar esto un
poco más adelante en la lección. Entonces nos saltaremos esto por ahora. Entonces para las salidas tenemos la salida de ejecución
normal. Esto se ejecutará tan pronto
como el nodo haya
terminado de ejecutarse. Entonces tenemos inconclusos. Ahora esto realmente se ejecutará
cuando termine la animación. Entonces tenemos en blend out. Ahora una cosa genial de
los montajes es que se mezclan dentro y fuera
cuando los tocamos. De modo que obtienes una
transición suave de la animación original que
estabas jugando al montaje. Y luego cuando el montaje
esté casi terminado, hará la transición hacia atrás
a tu animación original. Y este blend out se ejecutará cuando la animación comience la
transición hacia fuera. Cubre un poco más sobre las transiciones en un momento, pero siguiendo adelante,
nos hemos interrumpido. Y esto correrá si cancelamos o dejamos de tocar nuestro montaje. Y voy a explicar
cómo podemos hacer eso un poco más adelante
en la lección. Entonces, por último, tenemos algunas
salidas de ejecución de notificación y un nombre de notificación. No voy a estar
cubriendo notifica en esta lección porque en
realidad tendremos una
lección entera solo para notifica. Entonces vamos a
saltarnos esto por ahora. Así que ahora terminaremos de configurar nuestro código para
reproducir realmente tu animación. En realidad voy a
crear una nueva variable. A esto lo llamaremos recarga. Simplemente voy a
usar esto para que si enviamos spam a la entrada,
no reinicie nuestro
montaje una y otra vez. Entonces lo que haremos es que
primero comprobaremos que está recargando verdadero. Y si no es cierto, entonces configuraremos la recarga
en true así. Y conectaremos esto
hasta el montaje de la obra. Entonces queremos establecer la
recarga en false. Cuando IVR, se termina de reproducir la animación de recarga o
se interrumpe así. Ahora estamos listos para probar
realmente esto, así que compilaremos y le pegaremos a Play. Y ahora cuando presiono uno en mi teclado, en
realidad no pasa nada. Ahora la razón de
eso es cuando
importamos en nuestras animaciones de
lección, realidad
vinieron con
su propio esqueleto. Ahora bien, a pesar de que
ambos esqueletos son exactamente iguales, ahora
hay dos
activos de esqueleto en nuestro proyecto, uno que usan nuestros personajes, uno que nuestras nuevas
animaciones están usando. Si exhalamos, tenemos editor
llano y vamos a las animaciones de la lección, abrimos maniquí,
luego ir a mallas. Ya verás que
tenemos maniquí SK. Ahora este es el esqueleto
o menos que la animación. Entonces usando, pero si vamos a
la carpeta Characters, luego a mannequins mallas, verás que tenemos
otro maniquí SK. Ahora este es el esqueleto que son personajes que usan
mallas. Es por esto que nuestras
animaciones sobre el juego, pero hay una nueva característica
y ropa interior en Jim cinco llamados esqueletos
compatibles. Entonces si vamos al esqueleto aquí dentro de nuestra carpeta de
personajes, abrimos eso, vamos a
las ventanas y
queremos encontrar los
detalles del activo y asumir eso. Ahora aquí puedes encontrar esqueletos
compatibles. Entonces vamos a
agregar una nueva entrada. Aquí vamos a seleccionar
el desplegable. Vamos a encontrar el esqueleto que está en nuestra lección de animación. Entonces si pasas el cursor sobre, puedes ver que dice
menos que animaciones, maniquíes recortados cortan mallas. Entonces vamos a dar
clic en ese. Entonces vamos a ahorrar. Ahora todas las animaciones
que funcionan para nuestra lección. Esqueleto de animación
trabajará con nuestro personaje. Entonces si volvemos al
nivel aquí, dale a play. Ahora cuando presione uno,
verán nuestros montajes
tocando muy bien. Si me spam uno, se puede ver que en realidad
no va a volver a jugar el a montaje hasta que
terminamos de jugar el montaje
original. Y eso por
el booleano que montamos para
detener que eso sucediera. Ahora una cosa que podrías notar es mientras estamos
tocando el montaje, o los pies en realidad no
se mueven con nuestro cuerpo. Todo está tocando
ese montaje. Ahora, en nuestra siguiente lección, vamos a ver en la mezcla de
huesos y eso
nos permite separar partes del
cuerpo unas de otras. Entonces, por ejemplo, mientras jugamos
nuestra animación de recarga, podemos tener las piernas. Podrán reproducir
las animaciones de movimiento y estaremos cubriendo
eso en la siguiente lección. Ahora otra cosa
que podrías notar es que si nos acercamos
a la rampa aquí, puedes ver que mis
piernas arriba en la rampa. Y si presiono uno, se
puede ver que las piernas siguen
levantadas y la rampa, pesar de que ese montaje se está
apoderando de todo el cuerpo. Ahora la razón por la que esto
está sucediendo es porque nuestro montaje aquí se juega antes de que se aplique la plataforma de
control. Por lo que aquí se juega el montaje. Después aplicamos la plataforma de control, que se ocupa de
la colocación del pie, y luego sacamos
la pose final. Entonces es por eso que nuestras animaciones de
movimiento están siendo tomadas
por el montaje, pero la colocación del pie no lo es. Entonces si yo fuera a mover mi
ranura por defecto aquí por un momento, dos, frente a mi plataforma de
control así. Y conecta todo esto. Ahora cuando compilo, le pego a Play, si atropello a la rampa, se
puede ver que mi
colocación de pie sigue funcionando, pero si presiono uno,
se
puede ver que deja de funcionar mientras
estoy tocando un montaje. Por lo que sólo volverá a
nuestro Blueprint de Animación y establecerá esta copia de seguridad como fue. Entonces solo moverá
esto hacia adelante por aquí,
conectará esto y conectará
nuestro respaldo de montaje aquí. Así. Si alguna vez quiso agregar una nueva
ranura de montaje a su gráfico anim, puede simplemente hacer clic derecho en la
búsqueda de ranura, desplazarse hacia arriba aquí. Puede usar ranura predeterminada de
ranura, luego seleccionarla. Y si querías usar
un nombre de ranura diferente, puedes cambiarlo aquí arriba. Pero por ahora
sólo podemos eliminar ese nodo y compilar nuestro gráfico de animación. Ahora, los montajes también
tienen otras características. Podemos agregar múltiples
animaciones a un montaje. Entonces por aquí,
tenemos el navegador de activos. Si no tienes el tuyo que siempre
puedes subir a Window y asumir el navegador de
activos aquí. Ahora, usando el
navegador de activos podemos arrastrar en animaciones para usar
con nuestro montaje. Entonces por ejemplo, podríamos usar
el rifle son cadera ociosa lejos. Sólo arrastraremos eso. Ahora puedes ver que tenemos ambas
animaciones en nuestro montaje. Ahora actualmente ambos
están configurados para usar la sección por defecto. Entonces lo que va a pasar es
la recarga o el juego del rifle, y entonces nuestra
animación ociosa del rifle se jugará. Pero al usar secciones, en realidad
podemos dividir nuestro montaje en
diferentes secciones y reproducirlas de manera diferente. Entonces para hacer esto, podemos hacer
clic derecho en la barra en la parte superior aquí y hacer clic en
nueva selección de montaje. Y podríamos llamar a
esto una sección de bucle. Ahora obtenemos esta
línea morada y
en realidad podemos elegir dónde comienza
esta sección. Entonces si pongo esto decir aquí, nuestra sección ahora para la sección de bucle es toda
esta área aquí. Y entonces nuestra sección por defecto
es toda esta área aquí. Ahora actualmente todo lo
que sucederá es nuestra sección predeterminada se reproduzca y luego se reproduzca nuestra
sección de bucle. Pero si nos dirigimos a las secciones de
montaje aquí, se
puede ver que
tenemos algunos controles sobre cómo podemos jugar estas
diferentes secciones. Ahora de nuevo, si no
tienes estas secciones de montaje, puedes subir a Windows
y marcar eso aquí. En este momento, puedes ver
que actualmente está reproduciendo
la sección predeterminada. Después pasará
a la siguiente sección, que es nuestra sección de bucle. Yo sólo voy a hacer mi ventana un poco más grande aquí. Se puede ver que el botón en
realidad ahora está en el lugar correcto. Ahora bien, si
quisiéramos, podríamos tener estas secciones
completamente separadas. Si hacemos clic en esta flecha de
aquí y hacemos eliminar enlace, puedes ver que ahora estas
son dos secciones separadas, por lo que solo nuestra
sección por defecto la jugaremos ahora. Porque le hemos dicho que no
haga nada después de que
termine de tocar. Ahora si quisiéramos que volviera a reproducir
nuestra sección loop siendo click this little box
and do loop section. Y ahora se va a
reproducir nuestra sección de bucle después de que la
sección por defecto esté terminada. Ahora también podemos
hacer bucles de secciones. Así que si hacemos clic en este cuadro junto
a nuestra sección de bucle aquí, podemos seleccionar la
sección de bucle de nuevo, y eso hará que
nuestra sección de bucle aquí sólo bucle una
y otra vez. Así que una vez que nuestra sección de bucle por defecto
termine, vamos a jugar y esto sólo va seguir bucle una
y otra vez. Como puedes ver ahora. Ahora esto en realidad puede ser
útil para diferentes cosas. Digamos por ejemplo, que estabas haciendo una animación de recarga
para una escopeta. Ahora, por lo general se pueden cargar balas
individuales
en una escopeta. Entonces tal vez cuando estás
jugando recargas, sólo
faltan dos balas de la escopeta. Solo querrías que la sección de
bucle se ejecutara dos veces por poner
la bala dos veces. Pero tal vez a veces cuando
el personaje se recarga, necesitan meter seis balas. Por lo que ahora necesitas una
sección de bucle para correr seis veces. Ahora podemos hacer esto con
la sección de bucle y usando blueprints para controlar
cuántas veces se ejecuta. Así que si nos dirigimos de nuevo
al Third PersonCharacter, te
mostraré algunos de los nodos que podemos usar para
controlar realmente las diferentes secciones que son montaje
se va a reproducir. Entonces volveremos al personaje en
tercera persona aquí y empezaremos con, si lo recuerdas, tenemos
estas sección de inicio. Ahora, si quisiéramos, podríamos
simplemente tener nuestro montaje jugar esa sección de bucle de inmediato en lugar de jugar primero la sección
por defecto, podríamos bucle sección aquí. Ahora si lo compilamos y jugamos, ya ni siquiera reproduciría
la recarga. Por lo que presionará uno y
se puede ver que simplemente salta esa sección
por defecto e ir
directamente a nuestra sección de bucle. Entonces podemos regresar a nuestro
ThirdPersonCharacter aquí. Ahora para tener acceso a nuestras
diferentes funciones de montaje, necesitamos obtener una referencia
a nuestro blueprint de animación. Para ello, arrastraremos desde
los componentes de malla, buscaremos, por ejemplo, y usaremos el nodo
get anime instance. Ahora, esto nos da una referencia al
Blueprint de Animación que estamos usando. Entonces para nosotros ese es el dinero de la ABP. Ahora bien, si me arrasto, en realidad solo puedo
obtener variables que existen
en este blueprint. Para ello,
necesitaríamos costar a ello. Por lo que podríamos costar dinero a ABP. Entonces a partir de eso podríamos
obtener variables que
se almacenan dentro de eso o
funciones si quisiéramos. Por ejemplo, get debe moverse. Esa es una variable
que existe dentro nuestro plano de animación aquí. Pero para controlar nuestros montajes, en realidad no
necesitamos costar porque estas funciones están integradas en
todos los planos de animación. Por lo que podemos eliminar estas
funciones por ahora, y podemos arrastrar hacia fuera desde el valor de retorno y
buscar el montaje. Y esto
nos dará acceso a todas
las diferentes
funciones que se pueden utilizar para controlar los montajes. Ahora uno de los nodos más
utilizados con secciones es el
salto a la nota de sección. Entonces si creamos
eso, se puede ver que obtenemos una entrada de nombre de
sección. Entonces aquí es donde
pondríamos a qué sección queremos que cambie nuestro
montaje. También podemos especificar un montaje. Ahora bien, si aquí no
especificamos un montaje, lo que sucederá es si tienes varios montajes jugando
al mismo tiempo, y todos tienen los
mismos nombres de sección. Cambiará todos
sus montajes a esa sección que le ponemos. Ahora si solo quieres que le pase
a un montaje, digamos nuestra recarga de rifle, solo
especificaríamos
el montaje lo, queremos que suceda también, para
que podamos seleccionarlo aquí. Y ahora sólo cambiaremos esta sección para este montaje. Para que pudiéramos montar una demostración
rápida. Si hacemos clic con el botón derecho en
busca de entrada. Agregaremos eso y
llevaremos el enchufe presionado esto al montaje
saltó a sección. Y vamos a
cambiar esto a default. Por defecto así. Ahora cuando compilamos
y presionamos Play, si presiono uno para jugar, nuestro montaje puede
ver que solo está saltando directamente a
la sección de bucle. Pero si presiono también, tú en C, realidad ahora está reproduciendo
la sección por defecto. Ahora hay muchas
otras cosas que podemos hacer con estas funciones. Entonces si nos dirigimos de nuevo
al Third PersonCharacter y eliminamos este montaje,
saltamos a la sección. Podemos arrastrar hacia fuera y
buscar al tacto. No voy a estar
pasando por todas estas. La mayoría de ellos son bastante
autoexplicativos. Y si necesitas una punta de herramienta, simplemente pasa el cursor sobre y te da una explicación bastante buena
de lo que hacen. Pero uno importante
es detener el montaje. Y esto nos permite decirle a
un montaje que deje de tocar. Entonces si hacemos clic en
detener el montaje aquí, obtenemos un nodo que nos permite
establecer el tiempo de salida de mezcla. Entonces tal vez solo quieres que el montaje se detenga
al instante aquí. Podrías establecer esto en 0 y el montaje se detendrá
por completo al instante. O tal vez querías que se
difuminara lentamente. Podrías poner un tiempo
aquí y
poco a poco se irá mezclando
de ese montaje. Ahora otra vez, se puede
establecer un montaje aquí. Si no lo haces, simplemente
detendrá todos tus montajes que
se están reproduciendo actualmente. Si lo haces, solo puedes especificar qué montaje
quieres que se detenga. Entonces si conectamos esto
hasta nuestras dos entradas aquí, le
hemos dicho que detenga
el montaje de recarga. Entonces compilaremos, le pegaremos a Play, presionaremos uno para tocar ese montaje. Y si presiono para, it, al instante se detiene plan de montaje. Ahora, por último, quería
mostrarte cómo puedes ajustar los
tiempos de mezcla y mezcla para tus montajes. Para que podamos probar esto. Vamos a ir a nuestro montaje aquí, y en
realidad voy a eliminar nuestra sección de bucle y eliminar
esta animación también. Así que tenemos la recarga ahora jugando por aquí en
nuestros detalles de activos. Y de nuevo, si
no tienes esto, solo
puedes ir a Window y encontrar detalles de activos
para tomarlo. Tenemos los tiempos de mezcla
y mezcla. Ahora bien, cuanto más altos sean estos valores, más
tardará la animación en
mezclarlos completamente y
luego se difuminen completamente. Entonces si tuviera que configurar estos
para decir 00 así, volveremos a nuestra plantilla de tercera
persona aquí. Sólo me voy a deshacer
de esta sección de estilismo. Y no vamos
a detener el montaje, que es un poco dejar que
termine por sí solo. Entonces le pegaremos a play. Y si presiono uno,
verán que empieza al instante. No hay transición una herramienta, y termina al instante también. Entonces presionaremos uno
y verás que termina y empieza muy rápido. Pero si queremos
transiciones más suaves en nuestra animación, podemos aumentar estos valores. Así que diga 0.30.3 aquí también. Si retrocedemos, presionamos Play,
y ahora cuando presiono uno, verás que
transita mucho más suavemente hacia y
desde la animación. Entonces estas son configuraciones
que probablemente
usarás bastante con montajes, porque si tienes
un montaje rápido, posible
que desees que los tiempos de transición de entrada y salida sean más cortos. Y si tienes un montaje largo, tal vez
quieras unos más largos. Lo último que quería cubrir fue el gerente de la tienda de anime. Entonces si x fuera de plano editor aquí y abrimos
nuestro maniquí SK, luego ir a Windows y abrir el administrador de tragamonedas de anime que
traerá a colación el administrador de
tragamonedas de animación. Ahora, aquí es donde
podemos agregar nuevas ranuras o
eliminar o cambiar el nombre de las ranuras existentes. Ahora usted puede notar
que el nombre que se muestra aquí arriba son
en realidad el mismo nombre. Tan afilado cuando seleccionamos
el slop, sin punta. Estas son las ranuras que se
definen en nuestro esqueleto. Entonces aquí es donde en realidad
manejamos todas esas ranuras. Ahora algo a tener en cuenta
con slots y grupos es un grupo solo puede tener un montaje jugando a través de
todas sus ranuras a la vez. Entonces, por ejemplo, si la ranura de montaje de cuerpo completo
estaba jugando un montaje, y luego tocaba
otro montaje usando la ranura superior del cuerpo
que en realidad
cancelaría el montaje de cuerpo completo. Y la razón de ello es
que ambos en el mismo grupo. Entonces, si quisiera que mi montaje de cuerpo
completo y mi montaje de la parte superior del cuerpo pudieran jugar al mismo tiempo, necesitaría mover mi ranura superior del cuerpo a un grupo diferente. Por lo que podría o bien
crear un nuevo grupo o moverlo a uno existente. Si desea mover una ranura a un grupo existente,
puede simplemente
hacer clic derecho, configurar un grupo de cuerpos dos, y eso
le dará una lista de
todos los grupos existentes que
puede mover esa ranura dos. Ahora eso es todo por esta lección, pero estaremos usando montajes
mucho más en nuestras futuras
lecciones también.
47. Planes de animación (mezcla de nodos): Oigan a todos. En esta lección
vamos a estar echando un vistazo a los nodos de mezcla. Ahora los nodos de mezcla nos permiten reproducir múltiples animaciones en nuestro
personaje al mismo tiempo. También nos permiten utilizar variables
para controlar qué sección de
nuestra gráfica Anim se está reproduciendo. Así que antes de empezar, voy a estar reutilizando
algunas de las cosas que
montamos en nuestra última lección,
la lección de montajes. Y si recuerdas de
esa lección cuando golpeamos play y presionamos uno para
reproducir realmente nuestra animación, si empezamos a movernos,
nuestra mitad inferior de nuestro cuerpo no se mueve. Y eso es porque recargo animación en realidad está
ocupando todo el cuerpo. Así que hoy vamos a
estar usando un blend know para dividir nuestro cuerpo por la
mitad para que podamos tener nuestras animaciones de movimiento
reproduciéndose en la mitad inferior mientras la animación de recarga se
reproduce en la mitad superior. Entonces empezaremos
saliendo del editor de planes. Después nos dirigiremos a
nuestro gráfico de animación. Entonces iremos a personajes
que maniquíes, animaciones, y abriremos el plano de animación de
dinero ABP. Ahora mismo aquí en
nuestro gráfico de animación, lo que está sucediendo es que nuestra máquina de estado de
locomoción está emitiendo ya sea un
ídolo o animación de carrera. Estamos guardando en caché esa animación
en este nodo de pose de locomoción luego dentro de nuestra
máquina de estado principal o
estado de locomoción como jugando. Y eso es sólo jugar lo que
cacheamos en el efectivo de locomoción. Entonces si nos dirigimos de nuevo
a la gráfica Anim, esa locomoción guarda en
caché la salida de nuestra máquina de estados principales
en esta ranura de montaje. Y si recuerdas
del montaje es lección, esto es lo que en realidad está
jugando nuestro montaje. Ahora, una vez que se le
haya dicho que se reproduzca el montaje, esto en realidad solo
generará nuestra animación de montaje. Ya no se va a jugar son ociosos o ejecutando
animaciones. Luego, por último, entra en nuestro equipo de
control y es por eso que nuestra colocación del pie
en realidad todavía funciona cuando estamos
tocando el montaje, porque esto sucede después el montaje se ha
enseñado a jugar, y luego sacamos
la pose final. Así que básicamente lo que tenemos
que hacer es aquí que
necesitamos agregar un
modo de mezcla que
nos permita mezclar la mitad superior
del cuerpo tocando la bazoleta de montaje y
la mitad inferior
del cuerpo tocando el
locomoción en efectivo. Entonces para hacer eso,
vamos a hacer clic derecho y buscar la mezcla PER. Queremos una mezcla en capas
por hueso así. Entonces ahora necesitamos
conectar esto. Yo sólo voy a
mover estos nodos hacia atrás un poco así. Y arrastraremos este nodo aquí y desconectaremos
estos dos nodos. Yo sólo estoy sosteniendo Alt y
luego haciendo clic menos pluma aquí. Entonces primero tomaremos
el pin de salida y simplemente conectaremos esto a nuestra plataforma de
control así. Vamos a subir estos.
Ahorala entrada de pose base aquí va a
ser las animaciones que se reproducirán en la mitad
inferior de nuestro cuerpo. Entonces en realidad no
queremos que este sea el efectivo de locomoción porque eso no tendrá nuestras animaciones de
salto. Necesitamos un efectivo de
nuestros principales estados. Entonces para hacer eso,
vamos a desconectar la ranura aquí, mueve esto hacia abajo. Rastreamos desde pilares. Voy a buscar dinero en efectivo y clic en Nuevo, guardar pose de efectivo. Y podemos seleccionar este nodo y llamarlo como quieras. Voy a llamar al mío, dicen principales estados, efectivo así. Entonces los voy a
mover aquí arriba. Entonces están un poco más fuera
del camino. Entonces compilaremos. Ahora, no te preocupes
que hemos entrado en una T-Pose aquí o que
tenemos una nota aquí Eso es solo porque en realidad no
tenemos ninguna viñeta de
enchufe de animaciones. Entonces ahora estamos en caché
o pose de pilar. Podemos arrastrar hacia fuera de nuestro
cartel base, buscar principal. Y podemos usar la pose de
uso cacheada, pilar efectivo así. Entonces queremos copiar
esto, pegarlo. Y ahora queremos enchufar
eso a la fuente de nuestra ranura y enchufar eso
en la pose de mezcla es 0. Ahora la pose de mezcla es 0,
o van a ser las animaciones que se reproducen en
la mitad superior de nuestro cuerpo. Ahora, todo lo que estamos
haciendo aquí es que estamos recibiendo nuestra animación base. Por lo que nuestras principales animaciones de estado, esta es nuestra Idle run
and jump animaciones. Estos siempre se jugarán en la mitad inferior de nuestro cuerpo. Y luego para la mitad superior
de nuestro cuerpo, estamos diciendo, si estamos tocando un montaje, usa el montaje
para la mitad superior. Pero si no estamos
tocando un montaje, solo
queremos usar esas mismas animaciones
principales en efectivo del estado. Por lo que de nuevo, Idle ejecutar
y saltar animaciones. Por lo que ahora podemos compilar sólo
para deshacernos de esta nota aquí y se puede ver que nuestras
animaciones están planeando de nuevo. Pero en este momento, nuestra animación es en realidad no se va a
dividir como queremos. No se dividirán en el medio. En realidad necesitamos
configurar eso en la configuración de capas aquí. Entonces, si seleccionamos el nodo, vaya a Configuración de capas, luego haga clic en estos
pequeños desplegables. Se puede ver que
tenemos algunos filtros y aquí es donde en realidad
definimos en qué hueso
queremos que nuestro cuerpo se divida. Por lo que vamos a
agregar una nueva entrada aquí y dar clic en el menú desplegable
del índice. Y aquí es donde
en realidad fijamos el hueso que queremos que
la división suceda. Entonces para nosotros queremos
encender nuestros nombres óseos. Podemos encontrar exactamente qué
hueso queremos usar. Entonces iremos a Character, luego bajaremos a huesos y
queremos asumir nombres óseos de muestra. Entonces nos encargaremos de eso.
Yahora podemos hacer zoom y queremos que la división
suceda en la columna vertebral. Entonces vamos a acercar
un poco aquí. Y creo que la columna vertebral es
probablemente la mejor a la que ir. Nuestras animaciones de logotipo se
reproducirán debajo de la columna vertebral uno. Entonces nuestras animaciones de la parte superior del cuerpo
jugarán por encima de eso. Ahora, dependiendo de
tu personaje, podrías tener diferentes
nombres en el futuro, por lo que no siempre
pones columna vertebral uno. Tendrías que revisar cuáles son los huesos de
la columna vertebral para
tu personaje específico. Entonces por ahora, vamos a usar espina dorsal uno y necesitamos
asegurarnos de que
deletreamos el nombre exactamente igual que
como está en el esqueleto. Entonces columna vertebral subrayan
01, así. Ahora hay algunos
otros ajustes para esta nota que
entraré en un poco. Pero por ahora, sólo
vamos a compilar y vamos a probar este out and
game así que vamos a golpear play. Y si presiono uno para reproducir nuestra
recarga y empiezo a moverme, se puede ver que nuestra animación de
recarga se está reproduciendo y nuestras animaciones de la parte inferior
del cuerpo jugando. Y cuando no estamos jugando
esa animación de recarga o animaciones de la parte superior del cuerpo simplemente
se están reproduciendo normalmente. Ahora bien, esto es solo un
ejemplo sencillo de cómo podemos
configurar en realidad diferentes animaciones para que reproduzcan en diferentes
partes del cuerpo. Ahora, para explicar un
poco sobre la profundidad de la mezcla, esto es básicamente
como un efecto de mezcla. Por lo que actualmente es 0, lo que significa desde la columna vertebral uno e incluyendo
la columna vertebral un hueso, todos los huesos por encima de ella. Solo estaremos usando esta salida de
animación aquí. Cuando recargo el montaje está jugando un 100% de todos los huesos
de arriba. Estaremos usando ese montaje
y sólo ese montaje. Ahora bien, si pusiéramos
esto para decir tres, por
ejemplo, lo que
pasaría es nuestra columna vertebral. Uno estaría utilizando
alrededor del 33 por ciento de estas salidas de animación. Así que el 33% de nuestro montaje de recarga, luego la columna vertebral dos
estaría usando 66% de nuestro montaje de recarga y 33% de
solo nuestro caché de estado principal. Y luego por espina dorsal para
ello estaría utilizando completamente el montaje para recargar. Por lo que básicamente puedes usar
estos como una forma de mezclar los efectos del
nodo de mezcla entre múltiples huesos. Ahora bien, si quisiéramos excluir
parte de la parte superior del cuerpo reproducir
realmente el
montaje de recarga, podríamos hacerlo. Entonces si agregamos en
otro filtro de rama, abre esto y configura
esto para decir brazo inferior. Entonces diré subrayado más bajo. Establecí la profundidad ósea
de dos menos uno. Lo que esto significa es que le estamos diciendo la nota de mezcla que en realidad
no queremos el hueso inferior del brazo o cualquier hueso debajo de él use
nuestra pose de estado de mezcla 0, queremos que use nuestra pose base. Entonces si golpeamos compile
y probamos esto, si presiono Y y se puede
ver que mi brazo derecho ya
no se está moviendo con
nuestra animación de recarga. Es solo quedarse ahí. Ahora, el brazo, la
parte superior del brazo sigue moviéndose porque sólo estamos
afectando desde la parte inferior del brazo. Pero se puede ver que
en realidad ya no anima de la
forma en que debería. Entonces así es como
puedes excluir partes del cuerpo de
reproducir una animación. Ahora, no te preocupes
demasiado si no
entiendes completamente que cuando estás
comenzando con la animación, mayoría de las veces
tu profundidad ósea será 0 y
realmente no estarás usando esta menos
una opción muy a menudo tampoco. Entonces por ahora, solo eliminaremos
esta inferior en una solo haciendo clic en la pequeña
flecha hacia abajo aquí y haciendo Eliminar. Ahora podemos agregar múltiples poses
de mezcla de entrada. Por lo que si hacemos clic en Agregar pin, se
puede ver que se agrega
como un nuevo pin de mezcla postes. Y si vamos al detalle, que
puedan ver
que ahora tenemos un nuevo índice aquí en
la configuración de la capa. Esto solo tiene los mismos
ajustes que son índice 0 tiene su justo que estos
ajustes ahora para este lápiz. Entonces tal vez por ejemplo, querías que las
animaciones de recarga se reproduciran en la mitad superior del cuerpo, pero tenías una segunda animación que querías
reproducir en la cara, por ejemplo, podrías
luego agrega eso aquí, agrega un hueso nuevo al filtro
en los filtros de rama, y luego haz que la cabeza reproduzca
una animación diferente. A continuación tenemos
los pesos de mezcla. Ahora bien, esta es la cantidad que la pose de mezcla
afectará realmente a los postes base. Entonces, por ejemplo, actualmente solo
se establece en uno, lo que significa que si para cualquier hueso que quiera reproducir
la mezcla pose una animación, se reproducirá al 100%
de esa animación. Si tuviera que poner esto a 0.5, quitaremos esta
pose de mezcla una pluma por ahora. Entonces, ¿qué es hacer clic derecho
y eliminar pin de mezcla. Entonces compilaremos si
golpeamos play ahora y toco nuestra
animación de recarga presionando una, se
puede ver que no está reproduciendo
completamente la animación. Básicamente está usando la mitad
del efecto de eso
en nuestra pose base. Ahora también podemos usar esto para
desactivar una mezcla, por ejemplo. Entonces podríamos establecer esto
para decir 0 y compilar. Y ahora si le pegamos a
Play y presiono uno, se
puede ver que ya no se juega un montaje porque hemos
puesto ese Alfa aquí a 0. Esta es solo una entrada de flotación
normal. Así podríamos arrastrar hacia fuera, usar una opción remota para flotar, y eso solo
nos creará una variable de flotación que
podemos cambiar y controlar
dentro de nuestro Event Graph. Ahora, continuando, si
volvemos a la gráfica Anim y seleccionamos la mezcla de
capas por nodo óseo. Por aquí tenemos una opción para la mezcla de rotación basada en
malla. Esto básicamente significa que
la rotación de nuestros huesos o utilizar el espacio de malla
en lugar del espacio local. Ahora esta opción
puede ser útil si tus animaciones se ven un poco raras cuando las estás reproduciendo. La mayoría de las veces, me parece que en realidad tengo
esto encendido, pero va a depender tu personaje y de las
animaciones que estés jugando. Esto hace
lo mismo, pero hemos escalado por lo que
usará tus mallas, escala de
huesos en lugar
de la escala local. La mayoría de las veces
querrás que esto se apague. Ahora hay otros
tipos de nodos de mezcla. Entonces si eliminamos esta por ahora y borraremos esta
variable, ¿verdad? Porque puedo
buscar la herramienta Blend y hay una mezcla
poses de Boolean. Entonces si creamos eso, se
puede ver que tenemos una pluma verdadera y una falsa. Entonces conectará nuestra
fuente, así. Ahora bien, esto nos
permite controlar básicamente qué animaciones van a reproducir dependiendo de
un valor booleano. Entonces si este
valor activo aquí es cierto, que la animación está
conectada hasta true se ejecutará. Y si esto es
falso, la animación está conectada hasta que la
gente correrá. Y en realidad podemos ver
esto en la vista previa aquí. Por lo que se puede ver que
el valor es falso. Así que sólo las animaciones que
vienen de nuestra pluma de la gente aquí se están pasando a través de
nuestro equipo de control. Si yo fuera a tomar
esto y compilar. Diré ahora sólo la
animación de nuestra verdadera pluma, se está pasando
a través de nuestra plataforma de control. Y luego tenemos
algunos tiempos de mezcla. Por lo tanto, si cambiaras
este valor durante
el juego, cuanto más altos sean estos valores, más tiempo tardará
en
mezclarse suavemente de las verdaderas poses a las poses de la gente
y luego volver de falso a verdadero por
lo falso sido tiempo. Así que este nodo puede ser
muy útil para decir, si usted tenía un montón de animación, por lo que sólo jugar cuando sus
personajes nadan y luego otras animaciones
cuando el personaje está caminando por el suelo, es posible que tenga una variable llamada su natación que
se conecta a algo como esto. Y luego eso puede hacer
una transición sin problemas entre las
animaciones que caminas sobre el suelo y
estás nadando animaciones cada vez que ese booleano se
establece en verdadero o falso. Otro nodo similar
es el blending. Así que si buscamos
Blend y luego int, podemos usar las poses de
mezcla por int. Ahora esto funciona de manera similar, pero en lugar de un booleano, es un valor int. Por lo que podemos agregar múltiples entradas en este
momento sólo hay dos. Entonces, si tuviera que configurar esto en uno, entonces se usaría nuestro único post. Para que podamos conectar
estos así. Golpea Compilar y
verás que se usa el. Pero si cambio esto a
0 y compilamos de nuevo, verás que ahora se están utilizando las entradas
0. Y lo bueno de
esto es que
podemos tener más de dos entradas. Así que si hacemos clic derecho y hacemos, o hacemos
clic derecho en el nodo, lo siento, y añadimos mezcla PIM. Se puede ver que
agrega una nueva opción. Ahora bien, si yo fuera a simplemente copiar
y pegar estos nodos, pegarlos,
conectarlos hasta aquí. Y ahora vamos a poner esto
a dos, compilaremos. Ya ves que ahora se está utilizando el pin
dos. Nuevamente, acabamos de tener
estos tiempos pasados y
funcionan de la misma manera que
nuestro nodo booleano. Entonces, cualquiera que sea el valor que pongas aquí es el tiempo que tardará en
fundirlo en esa pose. Ahora también podemos usar un nodo de
mezcla usando una enumeración. Entonces si eliminamos esto y podemos sacar y simplemente
lo dejaremos así por un momento. Crearemos una nueva
enumeración, así que haremos clic derecho e iremos
a los planos, luego iremos a enumeración. Yo sólo voy a llamar a este E tipos de animación de
subrayado. Abriremos esto y
crearemos un nuevo anión. Y a
esto lo llamaremos decir natación. Y agregaremos otro para caminar y
otro para decir, auto. Ahora estos son solo ejemplos para que te pueda mostrar
cómo funciona el código, pero cerraremos esto por ahora. Vuelve a nuestro
gráfico de animación y luego
buscaremos la animación de
subrayado de EA. Ya ves en la parte superior
aquí tenemos
poses de mezcla E tipos de
animación de subrayado. Y eso es porque
eso es lo que llamamos un sindicato. Entonces crearemos eso. Ya ves que aquí obtenemos
este nodo. Y si hacemos clic derecho
en el nodo, se
puede ver que podemos
agregar alfileres para nadar, caminar, y en costo. Entonces haremos eso por
cada uno así. Y ahora tenemos una pluma aniónica en lugar de un booleano
o un entero. Por lo que conectaremos la salida
hasta nuestro recapitulación de control. Y
los conectaremos seguros para nadar, caminar y capos. Ahora actualmente esto se establece en 0. Entonces si compilamos,
solo escogerá el poste de natación porque
ese es el primero. Pero también podemos usar una
variable para controlar esto. Para que podamos crear un nuevo anión. Llamaremos a este
modo de animación por ejemplo. Y lo establecemos en E tipo de animación de
subrayado. Ese es el sindicato
que acabamos de crear. Vamos a compilar. Ahora podemos conectar esta
variable a nuestro nodo. En realidad podemos controlar
cuál
se va a usar usando esta variable. Entonces podemos decir, quiero en auto, compilarlo y ahora
está usando la tinta arriba. Y podemos cambiar esto durante el juego en nuestro gráfico de
eventos aquí para controlar qué animaciones
queremos que reproduzca nuestro gráfico. Y luego, por último, si eliminamos este nodo y
buscamos la tierra, solo
podemos usar un modo de mezcla. Ahora bien, este es un nodo simple
que básicamente solo toma una entrada
a y B y nos permite mezclarnos entre ellos
usando un valor alfa. Así que si esto es 0, será, la salida de este nodo sólo
será el 100% de a. y si este es uno, será a. 100% de B es 0.5, entonces será la mitad
y la mitad
de ambas animaciones de salida. Por ahora, solo eliminaremos este nodo y en realidad estamos simplemente sentados de nuevo nuestra
mezcla de capas por nodos óseos. Entonces buscaremos plomo
y podemos usar marca de plomo por hueso conectaremos
esto hasta aquí de nuevo, esto hasta nuestra plataforma de control. Eliminaremos estos nodos
porque ya no los están usando. Entonces en nuestra nota aquí, solo
establecemos la
copia de seguridad de la acera del campo de la
rama para la columna vertebral uno. Por lo que pondrá esto a
espina dorsal, subrayan uno. Y eliminaremos estas variables aquí
abajo también porque realidad no
estamos usando
esas y solo compilamos. Así que ahora cuando golpeamos play
y
corremos, podemos presionar uno
y
nos tocará una animación de recarga mientras nuestras
animaciones de movimiento siguen trabajando con ellos
para esta lección, espero que ahora
entiendas un poco más acerca de
mezclar animaciones juntas y cómo
podemos reproducir dos animaciones al mismo
tiempo en una malla de personaje.
48. Planes de animación (Notificaciones): Oigan a todos. En esta
lección vamos a estar echando un vistazo a la
animación notifica. Ahora la animación avisa a unas herramientas realmente útiles
porque nos
permiten ejecutar código un
tiempo específico en una animación. Ahora ya hemos mirado algunos notifica antes
en el curso. Miramos el
sonido de reproducción y los efectos de reproducción, notifica lo que nos permitió reproducir sonidos o reproducir efectos de
partículas en
puntos específicos de nuestras animaciones. Rápidamente
repasaré ésos de nuevo en esta lección solo para
refrescar tu memoria. Entonces, para empezar,
necesitamos ir
ya sea a una secuencia de animación
o a un montaje de animación. Podemos agregar notifica a ambos. Entonces voy a estar usando
el montaje de recarga que hemos estado jugando
en nuestras lecciones anteriores. Entonces nos dirigiremos a
las animaciones de las lecciones. Y si no
tienes esta carpeta, expliqué cómo agregar estos
en las lecciones de montaje. Por lo que tal vez quieras ir a
echar un vistazo a eso. Ahora, nos desplazaremos hacia abajo y encontraremos nuestro montaje de recarga, que
está aquí en la parte inferior. lo vamos a abrir. Ahora. Aquí abajo tenemos nuestra tiempo
notifica
y aquí es donde
veremos todos los notifica
para este montaje específico. Para agregar un nuevo notificado, simplemente
hacemos
clic derecho en esta barra aquí que dice uno y
podemos agregar una notificación. Ahora el motor tiene algunas notificaciones
incorporadas ya. Y así es como podemos
reproducir sonidos o reproducir efectos de
partículas o efectos de partículas del
Niágara. Ahora hay otros notifica, como puedes ver aquí para Simulación de
Ropa
y cosas por el estilo. No los voy a estar
cubriendo en esta lección porque
son bastante específicos y un poco más avanzados y lo que
vamos a estar cubriendo. Pero solo agregaremos una notificación de sonido de
reproducción. Y ahora con eso
añadido, podemos posicionar eso en cualquier punto
de la animación. Entonces digamos que queríamos sonar
para tocar en este mismo punto. Podríamos agregar nuestro
notificado a este punto. A continuación, en el panel Detalles, podemos establecer un sonido, volumen
y modificadores de tono. Podemos cambiar cuál es
el color de notificación, y esto es solo
para la organización. Para que puedas rápidamente, de un vistazo ver qué
es una notificación por su color. Otra configuración útil aquí
es la oportunidad de gatillo. Ahora, tal vez solo
querías que estos sonidos se reproduzcan a veces cuando esta
animación se reproduzca al azar. Entonces lo que podríamos hacer es
en lugar de enviarlo a uno, que significa que el
sonido siempre se reproducirá cuando se reproduzca la animación. Podríamos establecer esto para decir 0.1. Ahora bien, este sonido, sólo estamos tocando el diez por ciento de las veces
que se reproduce esta animación. Un ejemplo de cómo esto podría
ser útil es tal vez tienes una animación ociosa y
querías agregar un sonido de tos a
esa animación ociosa. Ahora, probablemente no
quieras que ese sonido se reproduzca cada vez que se reproduzca la animación
ociosa. Por lo que podría establecer la oportunidad de
disparo para que el sonido notifique a 0.1, y ese sonido se reproducirá 10% del tiempo que se reproduzca la
animación. Ahora, avanzando, podemos hacer lo mismo con
los efectos de
partículas. Por lo que voy a eliminar
el sonido notifique aquí, haga clic derecho y haga agregar notificar. Ahora bien podemos agregar un
nueve a cinco para el Niágara, los efectos
políticos caerán en cascada. Voy a seleccionar Niagara solo porque ese es
un sistema más nuevo. Por lo que haremos clic en eso y
seleccionaremos que notifique. Entonces arriba aquí en
nuestro panel Detalles, podemos configurar qué efectos de
partículas del Niágara queremos elegir. Actualmente no tengo
ninguno de mis proyectos, así que viene uno aquí arriba. Pero si lo hicieras, aquí es
donde aparecerían. Entonces podemos establecer la
ubicación y la rotación. Ahora bien, este es el
desplazamiento desde la raíz. Entonces el hueso raíz
de nuestro personaje aquí está justo donde está mi
ratón actualmente. Entonces si fuéramos a
sumar, digamos, 50, Hola, nuestro efecto de partícula se movería hasta aproximadamente esta
altura porque está aumentando la altura
del efecto
de partícula en 50 desde la raíz. Ahora, también podemos
decir si
nuestro hecho político está
apegado o no a algo. Por lo que actualmente está
unido y eso
significa que sólo se va a
unir a la raíz. Pero podemos especificar un nombre de
bot si queremos. Queríamos que los efectos de partículas
estuvieran unidos a la cabeza. Podríamos hacer eso
buscando cabeza. Y se puede ver que
nos da nuestro hueso de la cabeza aquí. Entonces ahora cuando engendramos
este efecto de partícula o en realidad se
unirá al hueso de la cabeza. A diferencia de antes, podemos
decir notificar color. Y también podemos
cambiar si
la notificación se ejecutará o no cada vez o decir la mitad del tiempo
si ponemos 0.5, por ejemplo. Ahora, usando este tipo de
Notificar para jugar efecto, básicamente solo
le dirá al efecto que se reproduzca una vez y luego el efecto
será destruido. Pero tal vez querías los
efectos que corres de decir aquí para acá en la animación.
Bueno, eso lo podemos hacer. Por lo que seleccionaremos esta
notificación, la eliminaremos, hacemos
clic con el botón derecho e iremos a notificar al estado y descenderemos a
tiempo a efecto Niagara. O si estás usando cascadas, tiempo para efecto de partículas. Por lo que seleccionará la opción
Niagara aquí. Y ya ves que
ahora tenemos un 12. En realidad podemos arrastrar
esto a valor aquí haciendo clic en el pequeño punto en
la parte inferior y arrastrando eso hacia fuera. Entonces podemos agregar esto a decir 50. Así que ahora los efectos de partículas
que establecemos para esto notifican empareja uno del
valor uno al valor verdadero. Ahora algo a tener
en cuenta con esto es su efecto Niágara
será, tendrá que ser configurado para bucle. Si solo está configurado para ejecutarse una vez, entonces los efectos de partículas
solo se ejecutarán una vez y luego ya no
lo hará. Entonces necesitarás efecto de partículas de
Niagara Eso en realidad está configurado para
bucle para que esto funcione. Entonces tenemos la
misma configuración que hicimos con nuestro tipo de
notificación anterior. Tenemos la plantilla
que queremos usar. Entonces aquí es donde fijamos
el efecto que queremos. Podemos elegir si se
adhiere o no a un hueso o alvéolo. Podemos establecer sus compensaciones de ubicación
y rotación. Podemos elegir si destruye o
no de inmediato. Y básicamente lo
que eso significa es, digamos tus efectores en bucle
mientras jugamos la animación. Una vez que llegue aquí, si destruir
inmediatamente se marca. No importa en qué etapa se inserte
el efecto de partícula a
mitad de carrera. Será destruida al instante. Mientras que si esto está ticked off, entonces una vez que llegamos a
este punto, si el, si el efecto de partícula
está a mitad de camino, entonces lo dejará terminar. Entonces tal vez tu maceta, un efecto fresco tarda dos
segundos más en terminar, entonces lo permitirá. Entonces depende de ti si tienes o
no este tectónico dependiendo del tipo de
efectos que estés usando. Ahora cuando se trabaja con notifica, podrías terminar con
una línea de tiempo bastante abarrotada si
tienes mucho que hacer en
una animación específica. Por lo que siempre puedes simplemente
agregar nuevas pistas de notificación. Por lo que podemos dar clic en este
pequeño desplegable aquí para agregar la pista de notificación. Y eso nos da una segunda pista que podemos agregar notifica dos, no cambia la forma en
que
corren ni nada por el estilo es puramente para la organización. Ahora, hasta ahora, hemos estado usando las notificaciones por defecto que vienen
incorporadas con el motor, pero en realidad podemos crear nuestras propias que nos permitan correr en eventos y ejecutar código cuando se ejecute una notificación de
animación. Entonces lo que haremos es seleccionar esta notificación
y eliminarla. Ahora, tal vez quería que
funcionara
un trozo de código cuando mi personaje diga agarra la revista o pose la revista
desde el arma de aquí. Bueno,
eso lo podemos hacer con notifica. Entonces lo que haremos es hacer
clic derecho y hacer agregar notificar. Entonces subiremos a nuevos notificados y eso nos dejará
nombrar los notifica para que podamos jalar llamar a esta
revista despegada así. Se puede ver que
ahora tenemos una notificación que se llama
la revista Touch. Podemos moverlo
como nuestros anteriores, pero me voy a quedar el mío aquí. Por lo que ahora este aviso
nos permitirá llamar a un evento dentro nuestro blueprint de animación cada vez que esta animación reproduzca este punto. Pero aquí nos vamos
a encontrar con un pequeño problema, y les mostraré por qué si nos
dirigimos a nuestro Blueprint de Animación, que si recuerdan,
es en personajes, animación
maniquíes. Y entonces abriremos dinero. Ahora, normalmente si
hago clic derecho y busco mi desprendimiento, debería encontrar un evento para nuestra
revista de desprendimiento, pero no lo soy. Y la razón por la que está
pasando es que si te acuerdas, son menos que animaciones
y esta carpeta aquí en realidad tienen
su propio esqueleto. Y entonces nuestro personaje
tiene un esqueleto diferente. Ahora esta es la razón por la que nuestros notifican. No es solo aparecer en
nuestro plan de animación. Podemos arreglar esto fácilmente. Entonces lo que tenemos que hacer es ir
a nuestra Carpeta de Personajes, luego a nuestros maniquíes, luego dos mallas y
abrir el maniquí SK. Y aquí, vamos a ir
a la pestaña de Avisos de Animación. Si no la tienes
abierta, puedes subir a Window y buscar
la animación, esas FISA y llevártela. Y sólo vamos a
hacer clic derecho y hacer nuevo. Voy a llamar a esta revista, oh perdón, desprender revista. Y necesita ser
deletreado exactamente
igual que el notifique
en nuestro montaje. Y ahora hemos agregado esa
nueva notificación a nuestro esqueleto. Por lo que ahora cuando vayamos a nuestro plano de
animación, podemos hacer clic derecho en la
búsqueda del toque. Y se puede ver que
ahora tenemos un anime entonces notificado para tocar revista
y podemos agregar eso. Ahora si fueras a
agregar una notificación a una animación que está usando el mismo esqueleto
es tu personaje. Entonces, para darles un ejemplo, vamos a ir a la Carpeta de
Personajes, maniquíes, animaciones. Entonces iremos al dinero
y solo encontraremos
el encontrara la animación de la tierra por ejemplo, abro esto. Ahora si hago clic derecho
en el notifica aquí para agregar notificar, nueva notificar. Y yo sólo voy
a llamar a este salto. Y ahora si vamos a nuestro Blueprint de
Animación, hago clic derecho y
busco salto. Y verás que eso
acaba de aparecer de inmediato. Y eso es porque me
saltaría la animación terrestre es en realidad solo usar el
mismo esqueleto que nuestro personaje. Ahora, en nuestro montaje de recarga, tenemos a nuestra
revista de desprendimiento notificar, y luego también dentro nuestro Animation Blueprint tenemos
ese evento aquí también. Ahora, este evento correrá
cada vez que este montaje sea interpretado por nuestro personaje y la animación
llegue a este punto. Entonces, para probar esto,
solo podemos agregar algún código a esto. Yo sólo voy a arrastrar hacia fuera
y hacer una cadena de impresión. Y sólo vamos a dejar
este cantado Hola. Y compilaremos, dale a Play. Y ahora cuando presione
uno, verán que obtenemos esa impresión hola cuando nuestra animación de recarga
llegue a ese punto específico. Y también podemos comprobar que
el extremo de salto también está funcionando. que podamos hacer clic derecho en la
búsqueda de salto, y eso nos crea un nuevo evento. Podemos arrastrar hacia fuera de eso y
hacer una cadena de impresión para eso. Y si compilamos,
saltamos cuando aterrizamos, se
puede ver que ese Notificar también
está funcionando también. Ahora, solo
regresamos al esqueleto de nuestros personajes por un segundo. Iremos a maniquíes
que mallas y abriremos el maniquí aquí en nuestra pestaña de notificaciones de
animación. Aquí es donde puedes
eliminar las notificaciones de animación. Puedes crear nuevos para que
podamos hacer clic derecho y hacer nuevos. También podemos renombrar también. Por lo que podemos hacer clic derecho y seleccionar Cambiar nombre para cambiar el
nombre de una notificación. Otra herramienta útil es
la búsqueda de referencias, y podemos usar esto
para encontrar todas
las animaciones que
tienen este aviso en él. Por lo que si hacemos clic en esto,
se puede ver que nos está dando la animación exacta que
utiliza el salto y notificar. Podemos hacer doble clic en
esto y se puede ver que es la animación
que tiene que notificada. lo que puede ser, por ejemplo, tienes una animación
que se está ejecutando y notifica que no quieres. Siempre puedes simplemente
venir al esqueleto,
haz clic con el botón derecho en Notificar y encontrar la animación que se está
reproduciendo que notifique. Si quieres deshacerte
de la búsqueda aquí, solo
podemos hacer clic con el botón derecho del ratón en
eliminar filtros y puedes ver que ahora está mostrando de nuevo
todas nuestras animaciones. Ahora también podemos
crear nuestra propia costumbre notifica el trabajo un
poco como el sonido de reproducción o el efecto de partículas de
reproducción notifica. Entonces si nos dirigimos de nuevo al navegador de
contenidos aquí, sólo
voy a ir a
la carpeta Blueprints. Entonces
planos en tercera persona, haremos
clic derecho y haremos clic en Clase
Blueprint. Entonces vamos a ir a todas las clases y
buscar notificar. Y queremos
avisar de animación aquí. Entonces, si hacemos clic en eso
y hacemos Select, eso nos creará
un nuevo blueprint. Yo sólo voy a
llamar al mío ejemplo. Notificar así. Y haremos doble clic
para abrir eso. Yo sólo voy a
arrastrar el mío hasta la barra superior de aquí así. Ahora tenemos un
nuevo diseño de editor. Se puede ver que en realidad
no tenemos un gráfico de eventos donde tenemos es nuestro Panel Mi Blueprint y luego el
panel Detalles por aquí. Ahora tenemos algunas
funciones
integradas en este blueprint
que podemos anular. Y estas son las funciones
que en realidad se
ejecutarán cuando se ejecute el Notificar aquí. Entonces lo que haremos
es en primer lugar ir a nuestro montaje de recarga. Si hacemos clic con el botón derecho en el Notificar, pero vamos a agregar notificar. Por aquí puedes
ver que ahora
tenemos ese ejemplo lo notifica. Por lo que si hacemos clic en esto, pueden ver que
tenemos un nuevo tipo de notificación. Eso es lo mismo que el nombre de nuestro
blueprint y lo podemos posicionar donde queremos
decir aquí, por ejemplo. Por lo que ahora cuando nuestra animación
llegue a este punto, se ejecutarán los eventos dentro de
nuestro ejemplo notificar aquí. Entonces usando esto, podemos ejecutar código
personalizado dentro de esta notificación. Siempre que esa notificación reciba ROM, podemos ir a sobrescribir
recibir notificación. Esta función se
ejecutará cada vez que notifique dentro de nuestra
animación se ejecute. Y nos proporciona
alguna información útil. Por lo que nos proporciona la
animación que en realidad llamó el Notify y
también el componente mesh. Y lo bueno de
esto es que podemos acceder, digamos, a nuestro blueprint de animación o incluso al personaje que interpretó
la animación usando esto. Para que podamos alargar y podemos
hacer consigue dueño, así. Ahora, el dueño de la malla del personaje
siempre será el
Character Blueprint. Entonces usando esto,
podríamos arrastrar hacia fuera y hacer costo al personaje, por ejemplo. Y ahora podemos acceder fácilmente a
nuestro plano de personajes. También podemos acceder a nuestro Animation Blueprint
simplemente arrastrando desde los componentes de malla,
buscando, por ejemplo. Y eso
nos dará una referencia a nuestro Blueprint de Animación. Así que solo para darte
un ejemplo de cómo funciona
esto en realidad,
eliminaremos esto por ahora. Yo sólo voy a agregar
una cadena de impresión aquí. Y vamos a poner decir hola. Esta es una prueba. Conectaremos esto
hasta el valor de retorno como ese compilará. Y ahora cuando golpeamos
play y presiono uno, verás que hola
y también se agota hola, Esta es una prueba y eso porque dentro
recargo animación, tenemos nuestro nuevo ejemplo notificar. Y dentro en ejemplo notificar. El aviso recibido de ellos corre y ejecuta nuestra cadena de
impresión aquí. Ahora un ejemplo común de lo que estos clientes o Pfizer
usaron para nuestros pasos. Ahora puede estar pensando
que solo puede usar el
sonido de reproducción para notificar que está
integrado en el motor. Pero el problema con
eso es que si tienes diferentes tipos de sonidos
para diferentes tipos de suelo, necesitarías detectar qué tipo de suelo
está caminando
tu personaje en
qué tipo de suelo
está caminando
tu personajey luego reproducir
el sonido apropiado. Usando un cliente
notificado así, podrías escribir el
código que tal vez haga un trazo de línea debajo tu personaje para detectar
el suelo y luego reproducir el sonido correcto
para ese tipo de suelo. Pero este es sólo un ejemplo. Podrías usar estos
para todo tipo de cosas en tus proyectos. También podemos agregar
ajustes de personalización a ellos también. Entonces si agregamos una nueva
variable aquí y
llamaremos a esto say
sounds, por ejemplo, bajaremos al
tipo de variable y buscaremos
una base de sonido y seleccionaremos la referencia del
objeto. Ahora, vamos a compilar y
sólo vamos a dar clic en el
ojito aquí. O puedes tomar
instancias editables aquí, hace lo mismo,
compilará. Y ahora cuando vamos a nuestro
montaje de recarga y
seleccionamos nuestro notifique, se
puede ver aquí arriba
en la configuración que
ahora tenemos esa variable de sonidos
que acabamos de crear. Podemos establecer un sonido y luego su interior se reciben la función de
notificación. Podríamos usar cualquier
sonido que se establezca dentro del montaje
y reproducirlo. Entonces para hacer eso,
solo arrastraremos de
nuestra nota de retorno aquí y
haremos un poco de espacio. Entonces nos arrastraremos y
buscaremos reproducir sonido. Usamos el sonido de reproducción en la ubicación. Agarraremos nuestro valor de sonido y conectaremos eso a la variable de
sonidos. Y para la ubicación obtendrá
la ubicación del componente de malla. Entonces sí obtenemos ubicación. No conseguiremos ubicación mundial. Enchufa eso en la ubicación. Entonces
lo compilaremos y te darás cuenta, voy a dejar mi
sonido aquí como ninguno, y usaremos el montaje para establecer
realmente que suena. Por lo que seleccionaremos el ejemplo notificar aquí y recogeremos
un sonido aquí. Entonces voy a escoger el sonido de
compilación fallida. Y en realidad notarás mientras la animación se reproduce aquí, en realidad reproduce
un sonido para ello. Entonces detendremos este avión
porque se está poniendo molesto. Y vamos a probar esto. Entonces le pegaremos a play y
al juego y
presionaremos uno para reproducir ese sonido,
tocará la animación. Se puede ver que nuestra notificación
se está ejecutando y está reproduciendo ese sonido que nos sentamos
dentro de nuestro montaje aquí. Esto lo puedes hacer con
todo tipo de ajustes. Entonces si
quisieras, podrías agregar un booleano, por ejemplo aquí. Y mientras tomes
instancia editable, eso será accesible
desde nuestro montaje. Se puede ver que ahora
tenemos esa nueva variable aquí, y puedo acceder a ella si
selecciono mi notificación. Y también podemos usar múltiples
de esta animación notifica. Para que pueda mover esto por
aquí, haga clic derecho. Añade suficiente un ejemplo. Ahora si selecciono esto y ahora
podemos escoger otro sonido. Para que pudiera escoger el
éxito del compilador, por ejemplo. Ahora, cuando golpeamos play y presiono uno
para reproducir la animación, deberías escuchar ambos sonidos. Por último, te mostré cómo crear nuevas notificaciones de animación, pero en realidad no
te mostré cómo reutilizarlas. Entonces si salimos de editor de
avión aquí, volver a nuestra animación de recarga. Ya ven que tenemos
una revista separada. Ahora, tal vez quiero que ese evento
también se ejecute por aquí, podemos hacer clic derecho, hacer agregar,
notificar, ir a Skeleton notifica. Y por aquí se puede
ver que tenemos todos nuestros notifica existentes
y están desapegados. La revista está justo en la parte de abajo aquí. Para que podamos crear eso. Ahora el evento dentro nuestro plano de animación aquí se ejecutará dos veces para
esta animación, una aquí, y otra aquí. Y también podemos usar esta revista de desprendimiento notificada
en que otras animaciones, no está bloqueada a
esta animación. Entonces si quisiéramos,
podemos dirigirnos a decir, la carpeta Animations debajo los maniquíes, entonces goto dinero. Y podríamos añadir esto a la animación
terrestre por ejemplo. Por lo que podemos hacer clic derecho y
notificar, esquelético notifica. Y entonces podemos bajar a
la revista desapegada aquí. Y ahora ese evento también
correrá cuando
toquemos esta tierra de salto
que animación también. Entonces eso es todo por esta lección. Esperemos que ahora entiendas
un poco más sobre notificaciones de
animación y cómo
puedes usarlas en tus
futuros proyectos.
49. Planes de animación (States): Oigan a todos. En esta lección vamos a
estar echando un vistazo
más de cerca los estados de animación dentro de
nuestro Blueprint de Animación. Ahora en nuestra primera lección, hicimos un resumen rápido de
estos estados de animación. Pero en esta,
vamos a echar
un vistazo mucho más de cerca de cómo funcionan y cómo
puedes agregar otras nuevas. Entonces, para empezar, solo abre
tu plano de animación
y dirígete al gráfico Anim. Por lo que sólo vamos a abrir eso. Entonces vamos a
empezar por ir a la máquina del
estado de locomoción aquí. Y si te acuerdas de antes, aquí es donde
tenemos nuestro estado ocioso y luego caminaré
slash run state. Y dentro de estos
estados es donde
en realidad tenemos nuestro lugar de
animaciones. Entonces en el estado ocioso tenemos la animación ociosa y
luego la corrida de barra de paseo. Tenemos nuestro walk slash
run, espacio londinense. Entonces, para empezar,
sólo vamos a agregar un nuevo estado a esta máquina de estado de
locomoción. Entonces, para hacer eso, solo haremos
clic derecho y haremos clic en estado. Y eso nos creará
un nuevo estado similar a nuestros estados ociosos y nuestro walk
slash run. Yo sólo voy a
llamar al mío
apuntado y hoy vamos a crear
un estado de puntería. Entonces, por qué ahora tenemos un
nuevo estado llamado apuntado, pero en realidad nunca
se llamará por el momento porque no tenemos ninguna regla
que vaya a transitar a él. Entonces, para crear una nueva regla, necesitamos arrastrar desde un estado diferente
hacia nuestros nuevos estribo. Entonces vamos a arrastrar
de ocioso a apuntado. Eso
nos va a dar una flecha que apunta de ocioso a apuntado. Porque esta regla determina
si estamos en estado ocioso, si debemos o no
movernos al estado apuntado. Ahora necesitamos agregar realmente algún código a nuestra
regla para determinar cuándo el estado inactivo debe
cambiar al estado apuntado. Entonces lo que podemos hacer es hacer doble clic en este
botoncito de aquí. Y eso nos llevará
dentro de esa regla. Y dependiendo de si
este valor de retorno es cierto o no , es si vamos a
pasar o no del ídolo
al estado final. Entonces comenzaremos con solo
crear una nueva variable. Voy a llamar al
mío apuntado, o perdón, no
podemos llamarlo apuntado porque
tenemos un nombre de estado, así que lo llamaremos está
apuntado así. Voy a cambiar el mío a un booleano así
y compilaremos. Ahora podría recibir
una advertencia aquí. Todo lo que está haciendo
es decirnos que nuestra regla aquí no tiene código en ella. Y vamos a añadir
algo de código a eso ahora. Entonces vamos a hacer doble clic en
esto para abrirlo. Y vamos a tomar nuestro
es apuntado y sólo conectamos eso hasta el resultado aquí. Entonces podemos compilar
así y deberíamos deshacernos
de esa advertencia ahora también. Después nos dirigiremos de nuevo
a la locomoción. Entonces ahora tenemos una regla que nos
permitirá transitar de ídolo a apuntar a si r es variable apuntada o no es verdadera. En realidad podemos probar esto. Entonces si me llevo esto
, se puede ver que nuestro personaje T
posa y está haciendo eso porque en realidad no
hemos establecido una animación en nuestro estado todavía. Entonces ahora abriremos nuestro estado
apuntado y en realidad añadimos una
animación para que se reproduzca. Por lo que arrastraremos y
buscaremos jugadores de juego, y usaremos al jugador de
Secuencia. Ahora bien, esto nos permite sólo establecer una animación que nuestro
objetivo denuncia estatal. Y podemos hacer eso por aquí en el panel Detalles configuraremos la secuencia a
algo así como el ADS. Y deberíamos encontrar
el rifle ocioso ADS. Si no tienes
esta animación, en realidad
pasamos por
cómo importarlas a tu proyecto en la lección de
montaje. Para que puedas echar un
vistazo a eso y eso te
mostrará cómo agregar
esas animaciones. Y así ahora hemos puesto la
animación si compilamos, porque nuestro apuntado o está
apuntado está ajustado a verdadero, puede ver
que ahora está jugando una animación apuntada con rifle. Pero el tema ahora es si nos dirigimos nuevo a nuestra máquina de
estado de locomoción, si yo iba a cambiar o
se apunta a falso, nuestra animación en realidad no
cambia de nuevo a ocioso. Eso se debe a que todavía
necesitamos crear una regla que vaya de nuestro apuntado a nuestro ocioso. Entonces vamos a arrastrar de
apuntado a ocioso, y esto se
comprobará cada vez que estemos dentro del estado apuntado. Por lo que ahora necesitamos agregar algún
código a esta regla que
nos haga cambiar de nuestro
estado interno a nuestro estado inactivo. Entonces vamos a abrir esto. Vamos a agarrar
la variable se apunta. Ahora queremos que esto devuelva
verdadero si esto es falso. Por lo que arrastraremos y
buscaremos nada, encontraremos el NO Booleano aquí y conectaremos eso
hasta los resultados. Entonces si es apuntado es verdadero, esto lo convertirá a un falso y luego devolverá
un valor falso. Y ahora podemos probar esto. Entonces regresaré a la vista de
locomoción aquí. Seleccionaremos está apuntado y lo
despegaremos y lo sacaremos. En primer lugar, necesitamos compilar. Entonces ahora cuando lo
tomamos y lo quitamos, puede ver que ahora está cambiando
entre nuestros dos estados. Ahora nuestros metales de transición
tienen algunos otros ajustes. No voy a
pasar por todas, pero pasaré por
algunas de las más importantes que hay aquí. Entonces, para empezar,
tenemos el orden de prioridad. Ahora cuanto más alto es el valor aquí, mayor prioridad tiene
ese rol. Entonces por ejemplo, si tienes múltiples reglas como
lo hacemos aquí para los ociosos, tenemos esta y
tenemos esta. Digamos que ambos iban a
ser verdad al mismo tiempo, entonces el motor
escogerá el que tenga la más alta prioridad aquí. Este ajuste puede ser
útil si tienes un sistema de
locomoción mucho más complicado con muchas reglas pasando
de decir, un estado. A continuación tenemos la duración de la
transición. Ahora bien, este es el tiempo que
toma para que la animación ociosa pase
sin problemas a la animación dirigida. Porque si te das cuenta, cuando
seleccionamos nuestro nombre para, no
se ajusta al instante. Obtenemos esa
transición suave entre ellos. Entonces si aumentamos ese tiempo de
duración aquí, digamos la regla
de transición de apuntado a ocioso, lo
cambiamos por decir uno. Ahora, cuando compilamos y seleccionamos como apuntado,
si lo apagamos, puede ver que se
obtiene una transición mucho más suave, más lenta de la animación
apuntada al inactivo. Podemos hacer lo mismo
para nuestro general también. Para que podamos seleccionar eso,
establecer la duración en uno. Y ahora cada vez que nos
enfrentemos a AMG
conseguirá esa transición sin problemas
después de compilar. Ahí vamos. Por lo que
todo combinado ahora. Y se puede ver que ahora obtenemos esa transición mucho más lenta
entre las dos animaciones. A continuación, seleccionando nuestra regla aquí. En los ajustes de mezcla
tenemos un modo. Ahora así es como
la animación hará transición a la nueva animación. Tendrías que
probarlas para ver cómo funcionan. Pero estos te dan
diferentes efectos de transición entre
los dos estados. A continuación, tenemos las notificaciones. Ahora estos en realidad
nos permiten ejecutar eventos en nuestro Event Graph cada vez que
esta regla hace algo. Para que podamos tener transición de inicio y podemos tener un evento en nuestro gráfico de eventos que se ejecutará cada vez que comience esta
transición aquí. Por lo que cada vez que la
regla se haga realidad, este evento que aquí
nombramos correrá. Tenemos transición final. Entonces cuando
termine la transición y nos
vayamos al nuevo
estado, esto correrá. Y entonces si se
interrumpe, esto correrá. Entonces si, por ejemplo, pasaremos 1 segundo a la
transición de ocioso a apuntado, y lo cancelamos. La regla se volvió falsa
y volvimos a ociosos que se interrumpen,
evento correría. Entonces, para darte un ejemplo rápido, podríamos simplemente escribir test aquí. Por ejemplo, compile, vaya
al Event Graph y
si hago clic derecho y busco prueba, o lo siento, prueba de
evento encontrará que nuevo anime notifique
prueba de guión bajo y este evento se ejecutará cada vez que nuestra regla aquí comienza su transición
de ídolo a MD. Y si no encuentras tu
evento y el gráfico de eventos, no olvides que
sí tienes que compilar tu blueprint después
de escribir un nombre aquí. Ahora tenemos
configuraciones similares para nuestro estado. Así que si en realidad selecciono
mi estado de objetivo aquí, se
puede ver que
tenemos esos mismos ajustes, por lo que tenemos un evento personalizado que podemos ejecutar en
nuestro gráfico de eventos para cuando nuestra estancia objetivo se introduce y también cuando se deja ese estado de
puntería. Por lo que de nuevo, como antes,
si agrego un nuevo evento, llamaré a esto apuntado iniciado. Vamos a compilar, ir
al Event Graph y buscaré evento dirigido. Y se puede ver que
tenemos nuestro evento dirigido comenzó aquí también. Así que ahora hemos añadido un nuevo
estado, por lo que nuestra locomoción, y hemos añadido las reglas para transición hacia y
desde ese estado, pero en realidad no hemos configurado ningún código para controlar
esta variable. Acabamos de
cambiarlo manualmente aquí. Así que te mostraré un par
de formas en las que podemos controlar variables en nuestro blueprint
de
animación desde el Character Blueprint. Entonces, para empezar, podemos
ir al Event Graph. Encontrará el blueprint, actualización de animación,
y esto ejecutará cada fotograma y actualizará las variables que
conectemos a él. Para que podamos agregar una nueva sucursal aquí. Entonces vamos a conseguir nuestro personaje porque queremos obtener
alguna información de nuestro personaje va a
arrastrar hacia fuera y podemos hacer costo a la persona, conectar hasta la secuencia de ella. Ahora en realidad necesitamos agregar un sistema de nomenclatura
a nuestro personaje. Entonces lo compilaremos e iremos
al plano de nuestro personaje, que está en los planos de tercera
persona que el personaje de tercera persona. Ahora bien, no te preocupes demasiado
si no tienes este código. Esto es de nuestra lección de
montajes. Entonces sólo nos desplazaremos hasta aquí. Voy a hacer clic derecho
y buscar el ratón izquierdo. Y vamos a usar el botón
izquierdo del ratón. Y vamos a crear una nueva
variable llamada se apunta. Así. Queremos sacar ese
arrastre de ella y hacer f. Y si nuestro apuntado
es actualmente cierto, queremos configurarlo en falso. Y si actualmente es falso y queremos
configurarlo en true. Así que solo copiaré y pegaré
eso y conectaré con gente y lo
llevaré aquí así. Y lo compilaremos, volvemos
a nuestro Blueprint de Animación. Y ahora sólo podemos conseguir que r se apunte desde nuestro plano de
personaje. Usar eso para establecer R está dirigido
en nuestro blueprint aquí. Entonces compilaremos,
y ahora podemos probar esto para que
le pegue a Play. Si dejé el botón del ratón, se
puede ver que
hacemos la transición a esa animación y todavía
tenemos ese tiempo de
transición de 1 segundo. Entonces va un poco lento. Entonces regresaremos
a nuestra locomoción. Es como la regla. Cambia la duración, di 0 para hacer lo mismo para
la otra regla. Entonces 0.2 aquí también. Entonces lo compilaremos, y
ahora podremos volver a probarlo. Y presionaré el botón izquierdo del ratón. Se puede ver que
ahora estamos haciendo la transición a esa animación. Ahora bien, esto sí funciona, pero tal vez tengas mucho código pasando en tu blueprint de
animación. Y no necesitas que este código se ejecute
en realidad
cada fotograma. Entonces lo que podríamos hacer
es si eliminamos esto, en realidad
podemos establecer el código de nuestro ThirdPersonCharacter. En su lugar. Iremos al
ThirdPersonCharacter. Obtendremos nuestro Componente Mesh, arrastraremos hacia fuera de
eso y obtendremos una instancia M. Si recuerdas, esto nos da una referencia a nuestro plan de
animación, pero aún tenemos que costar a nuestro ABP subrayado dinero porque ese es nuestro plan de
animación. Y vamos a tener ambos de estos nodos ejecutar este código. Entonces no importa
si apuntamos o sin nombre. Entonces queremos arrastrar hacia fuera y
queremos hacer set no es. Ahora nos permite establecer
nuestra variable apuntada. Ese es el Blueprint de Animación. Y solo queremos que r se
apunte a partir de este plano y
usar eso para configurarlo. Así que ahora podemos probar esto
si puedo tirar, golpear play, y cuando salí haciendo clic del mouse
y veo que sigue funcionando usando ese nuevo código
que acabamos de escribir. Ahora puedes notar si dejamos botón
del ratón y
empezamos a moverte, ya no
obtenemos ninguna
animación de movimiento. Ahora eso es porque en realidad
no establecimos ninguna regla para la transición
de nuestro apuntado. Si nos dirigimos de nuevo a la locomoción de nuestro apuntado a
nuestra caminata slash run. Por lo que sólo va a quedar
atascado en nuestro apuntado hasta que nos deshagamos del clic
izquierdo del mouse y luego
cambiará a inactivo. Y si nos estamos moviendo, entonces cambiará a caminar. Por lo que podríamos agregar
algunas reglas nuevas aquí que la transición de
apuntado a caminar a la grupa de corte. Por lo que vamos a arrastrar fuera de
apuntado e ir a caminar slash run así. Y vamos a usar
el mismo código que
usamos de nuestro ídolo aquí
donde dice debe moverse. Entonces abriremos esa regla. Obtendremos la variable
should move. Esto será cierto. Si nuestro personaje se está moviendo, entonces nos dirigiremos de nuevo a la
locomoción y compilaremos. Y ahora cuando presionamos Play, si me dejo el
botón del ratón, se puede ver apuntamos y si empiezo a moverme, nos volvemos a hacer la transición a nuestras animaciones de carrera de slash
walk. Y lo ven si salgo
de la caminata slash corriendo, volvemos a nuestras metas y
podemos desenganchar, como lo hicimos antes. Ahora, por último, solo quería
cubrir los alias de estancia. Así que si salimos del editor
de plano aquí y regresamos a
nuestro Animation Blueprint, alias de
estancia son
realmente útiles para mantener tus estados de animación un
poco más pequeños. Entonces montaremos un ejemplo
rápido de uno. Haremos clic derecho y
usaremos un alias de estado y simplemente
llamaremos a
esto comprobaciones dirigidas. Por ejemplo, aquí tenemos nuestra verificación de
puntería seleccionada. Nos vamos a
conectar a nuestro apuntado. Y vamos a
usar esta nueva regla para determinar si debemos o no entrar
al estado apuntado. Entonces nos apuntaremos y
conectaremos eso así. Entonces vamos a eliminar aquí
estas reglas que se conectan
a nuestro ocioso, a nuestros objetivos. También vamos a
eliminar la regla que lo
conecta a la carrera de banda de
paseo. Entonces ahora estos dos bloques
no están conectados. Pero si seleccionamos aquí nuestras comprobaciones de
puntería, podemos asumir para qué estados
queremos que se presente. Por lo que podríamos tomar en ocioso y podríamos llevar a
casa paseo slash run. Lo que esto significa es
que si estamos en nuestro estado ocioso o nuestro walk slash
ejecutamos este alias, ejecutaremos esta comprobación. Entonces en realidad no
necesitamos tener conexiones
directas de
ninguno de estos estados. Dos están apuntados porque ahora
estamos usando este alias con estos
dos estados tectónicos. Para que cuando estemos
en estos estados, esto ejecute cualquiera de las reglas
que estén conectadas a ella. Ahora necesitamos
establecer un camino para ir de nuestras animaciones apuntadas a
nuestro ocioso o nuestro paseo. Por lo que haremos clic con el botón derecho
Agregar un nuevo alias de estado. esto lo llamaremos chequeos de movimiento. Usando esto, vamos a
crear una regla a nuestro ocioso. Y esto será, está
apuntado, tiene que ser falso. Entonces nos arrastraremos de sus
objetivos y no lo haremos. Y nos desplazaremos hacia
arriba y no seamos extremidades y conectaremos aquí arriba. Y entonces para nuestro movimiento
se arrastrará hacia fuera y nos conectaremos hasta
nuestra caminata slash run. Y haremos lo
mismo que queremos. Está apuntado, es en realidad
vamos a utilizar debe moverse. Porque cuando empezamos a
movernos, queremos simplemente usar nuestras animaciones de
movimiento para querer debe pasar a verdadero. Ahora, una cosa que sí
necesitamos agregar a nuestra regla, entrar en nuestro
apuntado ya que también necesitamos agregar que no queremos
que se ejecute si nos estamos moviendo. Entonces voy a
abrir nuestro aquí. Nosotros sólo vamos a sumar un final. Entonces lo haremos y conectaremos
la salida a nuestros resultados. Por lo que queremos y debemos movernos, deben ser verdad o no
deben ser verdad. Queremos que esto sea un NO, NO Booleano así. Entonces nuestra regla aquí sólo
será verdadera si está apuntada, es verdadera y si debe
moverse es falsa. Entonces solo para darles
un resumen muy rápido de lo que hace esto cuando estamos en nuestro ocioso o nuestros estados walk
slash run están dirigidos a check run. Y lo hará
porque aquí tenemos a esos dos estados marcados. Y correrá todas las
reglas conectadas a ella. Entonces se va a ejecutar este chequeo. Se comprobará está apuntado a verdadero
y se debe mover falso. Y si lo es, entonces
ejecutaremos nuestras animaciones apuntadas. Y entonces mientras estamos
apuntando animaciones corriendo, este movimiento comprueba
correrá porque tenemos,
oh, se me olvidó tomar eso en
realidad. Seleccionaremos eso
y tick se nombran. Entonces, debido a que hemos marcado nuestro apuntado cada vez que estamos
en ese estado, se ejecutarán comprobaciones de
movimiento
y eso comprobará que
ambos roles aquí para
ver que FEV1 son ciertos. Por lo que ahora vamos a probar esto. Compilaremos, le pegaremos a Play,
y ahora podemos apuntar. Y si apunto y empiezo a moverme, se
puede ver que
empezamos a ejecutar esas
animaciones de movimiento en su lugar. Si nos detenemos, entramos de nuevo en las animaciones
apuntadas. Eso es sólo una breve
reseña de los alias. Realmente no tiene
mucho sentido cuando tenemos
una pequeña
máquina de estado de locomoción como esta. Pero si tienes algo que
se está volviendo más complicado, tal vez tengas muchas reglas
recorriendo todo el lugar. Puedes usar estos para ordenar
tus planos de animación. Entonces eso es todo por esta lección. Esperemos que ahora entiendas
un poco más acerca de
los estados y reglas de animación.
50. Planes de animación (mezcla espacios): Oigan a todos. En esta
lección vamos a echar un vistazo más de cerca a los espacios de mezcla de
animación. Ahora, si recuerdas de nuestra lección
general de Animation Blueprint, mezcla espacios que
yo iba a
pasar sin problemas de una
animación a otra. Y podemos echar un
vistazo a un ejemplo de esto
entrando en nuestro dinero
Animation Blueprint. Después iremos a la
gráfica Anim que a la locomoción, después caminaremos slash run. Y luego aquí tenemos
un espacio de mezcla por nodo. Ahora, este nodo toma un valor como nuestra velocidad de tierra
aquí y lo usa para determinar qué
animación debe reproducir desde nuestro espacio de mezcla. Si seleccionamos este nodo y
pasamos al panel Detalles, podemos encontrar qué
espacio de mezcla está configurado para usar aquí en la opción de espacio de
mezcla. Si pasas el cursor por encima, guarda el
nombre del espacio de mezcla. Entonces el nuestro es el MM walk run. También podemos dar clic en
este botón aquí para llevarnos a ese espacio de mezcla. Entonces haremos eso y
luego lo abriremos. Ahora como pueden ver, tenemos
esta vista gráfica aquí abajo,
y aquí es donde definimos nuestras animaciones para
las diferentes velocidades. Entonces aquí puedes ver
que la velocidad es 0, y aquí arriba la
velocidad es de 500 Para 0. Si colocamos el cursor sobre este punto, se
puede ver que la animación
actual es la animación walk-in place. Luego más adelante
en el valor 230, tenemos una
animación diferente y esa es nuestra animación de paseo
hacia adelante. Y luego por último al final, velocidad 500, jugamos
o ejecutamos animación. Si sostengo Control y muevo mi mouse a lo largo de la
línea de tiempo aquí se puede ver a medida que aumenta el valor,
nuestra animación cambia. Por lo que a medida que nos acercamos a
nuestra animación corrida aquí, puede ver que se
acerca más a esa animación. Así que esto es lo que nos permite transición
sin problemas entre digamos, una animación de paseo y yo ejecuto animación y usa
ese valor de velocidad, que nuestro
blueprint de animación aquí está suministrando, y eso es nuestro valor
de velocidad de desplazamiento. Ahora, caminaré corriendo. Blend space es un espacio de mezcla 1D, lo que significa que solo
tiene una variable que controla qué
animación se está reproduciendo. Ese es nuestro valor de velocidad aquí. Pero también podemos tener
espacios de mezcla que utilicen dos variables. Podemos tener una dirección
y la velocidad que controla qué animación
se va a reproducir. Es para esta lección,
vamos a
configurar un espacio de mezcla 2D. Entonces para hacer eso,
vamos a
dirigirnos al Navegador de Contenido. Yo sólo voy a ir a
la carpeta Animaciones. Dentro de la carpeta maniquíes, vamos a hacer clic derecho,
ir a animación. Y luego quieres encontrar la opción
de espacio de mezcla. Puedes ver que hay
la opción 1D aquí, o el espacio de mezcla
aquí, que es el 2D. Entonces vamos a
seleccionar esa. Entonces vamos a
escoger un esqueleto. Voy a usar
el esqueleto que viene con la plantilla de tercera
persona. Entonces ese es este de
arriba aquí se puede ver que el camino es de
cuatro personajes, maniquíes y luego mallas. Por lo que vamos a seleccionar
eso y que sin nombre a apuntado paseo mezcla espacio. Y eso lo abriremos. Ahora aquí
puedes ver que tenemos una
gráfica de aspecto similar a la de nuestra 1D. Pero en lugar de solo tener
el valor horizontal, también
tenemos un
valor vertical que
nos permite establecer animaciones en
cualquier lugar de esta gráfica. Y entonces podremos
controlarlos a ambos con una variable de dirección y
velocidad. Entonces, para empezar, necesitamos
renombrar y configurar estos ejes. Entonces comenzaremos con el eje
horizontal aquí. Puedes hacer clic en el desplegable
si no está abierto para ti, vamos a nombrar el
nuestro a dirección, pues este eje controlará la dirección que usen las
animaciones que queremos reproducir. Entonces queremos que el valor mínimo
del eje sea uno o menos uno AT y el valor
máximo sea 180. Y eso significa que podemos
establecer una animación para cada dirección posible
que vaya nuestro personaje. Entonces necesitamos establecer
el eje vertical que puedas simplemente abrir
eso aquí abajo. Y vamos a poner este a velocidad. Ahora, el valor máximo que
voy a establecer para decir 600, y dejaremos el valor
mínimo a 0. Por lo que cualquier animación que coloquemos aquí
abajo en la parte inferior de la gráfica se usará cuando nuestro personaje esté
inactivo o no se mueva. Y luego a medida que avanzamos, las animaciones se usarán para
velocidades de movimiento más rápidas aquí. Ahora algo que me gusta hacer
es asumir la opción de ajuste a rejilla en el eje
horizontal y luego el eje vertical. Y lo que esto va a hacer es cuando
arrastramos en nuestras animaciones, realidad se
encajarán
a estos puntos de cuadrícula. Ahora bien, esta es una preferencia
personal, pero recomiendo tener
estas encendidas. Simplemente hace que configurar tus
animaciones sea mucho más fácil. Ahora estamos listos para establecer
algunas animaciones en
nuestro espacio de mezcla. Vamos a empezar
con la animación se usa cuando estamos a 0 velocidad. Entonces para eso,
voy a buscar ociosos en nuestro navegador de activos aquí. Y voy a estar usando
el rifle ocioso ADS. Ahora si no tienes
estas animaciones, puedes ver el inicio de la lección de montaje y
te mostraré cómo agregar estas
animaciones a tu proyecto. Pero si lo haces,
podemos simplemente arrastrar esto y queremos que esto
esté
en el centro de abajo, así que solo voy a soltar eso aquí. También lo vamos a
añadir a la parte inferior izquierda y a la parte inferior derecha
así. Ahora la razón por la que hacemos esto es porque es cuando
nuestra velocidad es 0, entonces nuestro personaje no se está moviendo, por lo que nuestro valor de dirección en realidad no
importa. Todo lo que necesitamos hacer es tener
nuestro juego de animación ociosa. A continuación, necesitamos una animación de paseo
hacia adelante, y esta será la animación que se reproduzca cuando
nuestra dirección sea 0. Por lo que será en la parte superior aquí. Entonces para eso,
voy a buscar FWD y el navegador de activos, y vamos a usar la animación de caminata hacia adelante del
rifle. Así que arrastra eso y
suéltalo en la parte superior aquí. Ahora, si mantenemos el control, podemos arrastrar y realmente
podemos ver nuestra animación de caminata
ahora funcionando mientras arrastramos nuestro valor hasta la animación de
caminar hacia adelante. A continuación necesitamos nuestra animación
hacia atrás. Entonces para eso, vamos
a buscar será WD. Y vamos a usar
el rifle caminar hacia atrás. Y vamos
a enchufar eso en el punto de extrema izquierda aquí. Y también al punto de extrema
derecha aquí. Ahora la razón por la que hacemos eso es porque dondequiera que
nuestros personajes dirección
180 o menos uno AT endirección
180 o menos uno AT
ambos van
a ir hacia atrás. Entonces cualquiera de los dos queremos estar jugando esa animación
hacia atrás. A continuación queremos nuestra animación de izquierda. Entonces en nuestro buscador de activos, vamos a
buscar a la izquierda y
queremos que el rifle camine a la izquierda. Entonces voy a arrastrar eso
a este punto cadera. Y luego queremos la animación
adecuada. Entonces buscaremos el derecho. Y queremos que el
rifle camine, ¿no? Y eso va a
subir aquí arriba así. Ahora cuando mantenemos el control, podemos controlar qué animación
se va a reproducir
dependiendo de nuestra dirección y
también de nuestra velocidad también. Ahora vamos a usar
este nuevo espacio de mezcla dentro de nuestro blueprint de animación. Entonces, para hacer eso,
vamos a
dirigirnos a nuestro plano de dinero. Ahora vamos a agregar un nuevo estado que se va a usar cuándo, dónde apuntó y
mientras nos movemos. Entonces para hacer eso, vamos a hacer clic derecho y agregar un nuevo estado. Voy a llamar así a este movimiento
apuntado. Ahora vamos a necesitar
una regla que vaya de nuestro movimiento apuntado a nuestro apuntado. Y dentro de esta
fila, vamos a comprobar está apuntado a verdadero. Y también vamos a
revisar, ¿nos estamos moviendo? Entonces haremos un AND booleano
y queremos conseguir debemos movernos. Entonces si ambos son ciertos, entonces devolvemos el resultado. Y eso
nos permitirá pasar de
apuntado a nuestro movimiento apuntado. Ahora queremos hacer la
transición de nuevo a apuntado de nuestro movimiento apuntado. Dejamos de movernos.
Porlo que vamos a abrir esa regla va a conseguir está apuntada. Y queremos comprobar
es debe moverse falso. Por lo que se va a conseguir debe moverse. Queremos utilizar un
NOT nodos booleanos. Entonces NO booleano. Y luego de vuelta en la locomoción, necesitamos sumar una fila yendo
de nuestra puntería para comprobar dos son movimiento
apuntado porque si
ya nos estamos moviendo y
empezamos a apuntar, queremos transitar
al movimiento apuntado estado. Por lo que arrastraremos de la
verificación apuntada al movimiento apuntado. Y abriremos nuestro Rohit. Y otra vez, vamos
a conseguir está apuntado. Y también queremos comprobar es
debe moverse verdad también. Por lo que vamos a conseguir debe
moverse así. Después nos dirigiremos de
nuevo a la locomoción. Entonces, hasta el momento tenemos una puesta en marcha para que cuando se estén ejecutando las
comprobaciones apuntadas, se comprueben todo
lo que apuntamos. Y si lo estamos,
entraremos en nuestro estado de puntería. Y si estamos apuntados
y moviéndonos en su lugar, iremos a nuestro movimiento apuntado. Ahora si estamos en apuntado
y empezamos a movernos, pasará de apuntado
a apuntar a movimiento. Y si estamos en
movimiento apuntado y dejamos de
movernos, haremos la transición hacia
el estado apuntado. Ahora hay un par de
otros cambios que tenemos que hacer. Tenemos que seleccionar nuestros controles de
movimiento, permanecer alias. Tenemos que asumir el
movimiento apuntado cadera y
estamos haciendo eso. Entonces comprobamos si fueron
apuntados y si no lo estamos, entonces queremos hacer la
transición de nuevo a nuestras animaciones normales ociosas o normales de
ejecución desde
nuestros estados de puntería. Ahora, necesitamos cambiar
una de nuestras reglas conectadas hasta
nuestro control de movimiento aquí, y esa es esta de aquí. Entonces si abrimos eso actualmente, esto es sólo comprobar
si nos estamos moviendo. Queremos cambiar esto porque ahora tenemos un estado de movimiento. No queremos hacer la
transición a caminar slash run si sólo nos estamos moviendo. Por lo que necesitamos agregar
un cheque para
asegurarnos de que está apuntado es falso. Entonces queremos un
saber booleano para esto. Nos arrastraremos de nuevo y
devolveremos este valor aquí. Entonces ahora si nos dirigimos de
nuevo a la locomoción, si estamos en movimiento Ames
y dejamos de apuntar, hará la transición de
nuevo a nuestro paseo slash run porque
tenemos este cheque aquí que los cheques se apunta falso
y debe moverse verdadero. Y si lo es, entonces nos
hará la transición del movimiento apuntado o
apuntado a caminar slash run. A continuación, necesitamos realmente configurar nuestro espacio de mezcla y
somos movimiento apuntado. Entonces eso lo abriremos. Vamos a arrastrar hacia fuera desde el resultado
y voy a
buscar reproductor de espacio de mezcla. Y usaremos el espacio de mezcla. Toca una nota. Después
lo seleccionaremos y nos desplazaremos
hacia abajo hasta la
opción de espacio de mezcla en la parte inferior aquí. Tenemos que ajustar esto a
nuestro nuevo espacio de mezcla. Entonces ese es el espacio de mezcla de
caminata apuntado aquí. Usted ve que en realidad está
actualizado nuestras entradas para nuestra dirección y
nuestras variables de velocidad. Así que para la velocidad sólo se
arrastrará hacia fuera y no obtener velocidad de
tierra así. Ahora, para la dirección,
necesitamos una nueva variable. Para ello, nos dirigiremos
al Event Graph. Y aquí vamos
a crear una nueva variable. Entonces lo haremos ahora y
llamaremos a esta dirección. Y queremos que esto sea una carroza. Por lo que vamos a establecer que a
un flotador y compilar. Ahora necesitamos esto para
actualizar cada fotograma, así que vamos a agregarlo
al código de aquí abajo. Por lo que añadiremos un nuevo
lápiz a la secuencia, crearemos un nodo conjunto. Y conectaremos esto
a nuestra secuencia. Sólo voy a
hacer doble clic en la línea para crear un redireccionamiento. Ahora, sólo para mantener las cosas ordenadas. Entonces, para conseguir nuestra dirección,
necesitamos nuestras velocidades. Entonces vamos a hacer clic derecho
y buscar velocidad. Y si nos desplazamos hacia abajo, deberíamos encontrar la opción de
velocidad. Entonces necesitamos nuestra rotación
actual. Entonces hagámoslo. Vamos a hacer clic con el botón derecho
y hacer el carácter de brecha y utilizar la variable de
carácter de espacio. Arrastra hacia fuera de eso
y obtén rotación. Y usaremos la rotación activa de
gets. Entonces vamos
a hacer clic derecho y buscar calcular dirección. Y esta es una función
que en realidad está integrada en todo Animation Blueprint,
que es realmente útil. Simplemente nos permite
enchufar nuestra velocidad. Rotación y eso
nos da nuestra dirección que
podemos simplemente enchufar directamente
a nuestra nota de set aquí. Ahora podemos regresar
a nuestra gráfica Anim, luego a la locomoción. Y luego dos son movimiento apuntado. Y podemos agarrar esa variable de
dirección, enchufar eso en nuestro nodo aquí. Entonces ahora podemos compilar y podemos
probar esto. Entonces le pegaremos a Play. Si me fui del mouse,
se puede ver que
apuntamos correctamente y
si empiezo a moverme, realidad
estamos jugando en
nuevas animaciones de caminata apuntadas. Si hago clic izquierdo mientras me muevo, hacemos la transición de nuevo a nuestras animaciones
normales en ejecución. Ahora si el tuyo no está funcionando, puedes volver a la máquina del
estado de locomoción y simplemente asegurarte de que todas las reglas que has configurado nuestras correctas. Por lo que se ven como los míos lo hacen
ahora mismo. El de aquí abajo. Y asegúrate de que en los controles de
movimiento
sí tengas marcado el
movimiento apuntado. Ahora actualmente nuestro personaje no está usando nuestras animaciones a la izquierda, derecha o hacia atrás. Y eso es por
un escenario que hemos encendido en el
Character Blueprint. Entonces vamos a ir a la carpeta de
tercera persona,
planos, Then
Third PersonCharacter, y heredar. Vamos a seleccionar el Componente Movimiento de
Personajes. Después vamos a desplazarnos
hacia abajo hasta los ajustes de rotación y vamos a desmarcar
orientar la rotación al movimiento. Y esto detiene a nuestro personaje frente a la dirección en la
que nos movemos. Ahora podemos probar nuestras animaciones, compilaremos y pulsaremos Play. Y ahora cuando me
moví hacia la derecha, puede ver que aramos animaciones
derecha, animaciones izquierda o izquierda, y luego se reproducen animaciones hacia
atrás o hacia atrás. Ahora puedes notar si haces clic izquierdo y empezamos a
movernos hacia un lado, nuestro personaje en realidad ya no
se mueve hacia un lado. Simplemente está avanzando. Ahora la razón que está sucediendo está en nuestro plano de animación. El estado de ejecución de barra diagonal de paseo
solo utiliza un espacio de mezcla 1D, por lo que no tiene
una entrada de dirección. Todo lo que tiene es una entrada de velocidad. Y por eso el personaje en
tercera persona tiene encendido por defecto, la rotación de Oriente
al movimiento. Ahora, hay algunos ajustes
más en el espacio de mezcla de animación
que quería mostrarles. Entonces ahora tenemos las divisiones de la
grilla, esto controla cuántos
espacios tenemos en nuestra grilla. Entonces si incremento esto para decir, ocho a ocho aquí
también en nuestro eje vertical, ven
que ahora tenemos
más bloques en nuestra cuadrícula. Esto es útil para
si está utilizando el ajuste a la cuadrícula activado. Y esto solo te da más
puntos en la cuadrícula para ajustar para decir si querías una
animación en un lugar específico, puedes aumentar estos valores
para obtener un punto de ajuste allí. Entonces tenemos el tiempo de
suavizado. Ahora bien, este es el
tiempo que tarda una animación en transitar
a otra animación. Si tuviéramos que poner
esto realmente alto, digamos cinco segundos, por ejemplo. Ahora cuando golpeamos play y
me moví hacia la derecha, verás que me lleva cinco
segundos hacer la
transición en realidad a nuestra animación de
movimiento derecho. Por lo que normalmente querrías usar valores
más pequeños para esto. Digamos, por ejemplo, 0.250.25 aquí
abajo también, sólo para dar un poco de tiempo de transición entre
moverse entre animaciones. Pero por defecto
estos están configurados en 0, por lo que la animación
es solo transición instantáneamente entre sí. Por lo que sólo podemos establecer
esos en 0 por ahora. También hay algunos ajustes
dentro de nuestro Blueprint de Animación. Entonces si tuviéramos eso, entonces iremos a locomoción, movimiento apuntado. Y si seleccionamos este nodo
y nos desplazamos hasta la parte inferior, puedes ver que hay algunas configuraciones
adicionales aquí. Tenemos la jugada violación. Entonces así de rápido se reproducirán
las animaciones en nuestro espacio de mezcla. Uno es velocidad normal, dos sería el doble de velocidad normal. A continuación está el bucle. Por lo general quieres que esto
quede encendido para los espacios de mezcla, pero si alguna vez
quieres desactivar esto, puedes apagarlo aquí. También tenemos la posición de salida. Por lo que si querías que
las animaciones
comenzaran en un
momento diferente a 0, puedes cambiarlo aquí. Luego, por último, tenemos
nuestra configuración de espacio de mezcla. Así es como cambiamos
qué espacio de botones estamos usando
realmente en este nodo. Entonces eso es todo por esta lección, pero estaremos usando
espacios de mezcla en nuestras lecciones futuras.
51. Planes de animación (Apunta offsets): Oigan a todos. En esta lección
vamos a echar
un vistazo a las compensaciones de puntería. Ahora, el objetivo de los conjuntos
nos permite realmente tener nuestro personaje mirar en
una dirección específica. Esto puede ser útil para si
tienes un arma y realmente
quieres que el personaje mire en
la dirección a la que apunta tu
cámara. Ahora, el objetivo de los conjuntos en realidad funciona muy similar a los espacios de mezcla. Tenemos una gráfica en la que
podemos colocar animaciones, y luego usamos dos
variables
que controlan qué animaciones
queremos reproducir. Ahora hagamos esto.
Vamosa necesitar algo de animación, así que voy a X fuera de
jugar NetTutor aquí, voy a estar usando algunas
animaciones que se incluyen con la carpeta
Animaciones de la lección. Si no tienes esto
en tus proyectos, muestro cómo agregar estos
al inicio de
la lección de montaje. Entonces si vas a echar
un vistazo a eso, eso te explicará
cómo puedes meter estas animaciones
en tu proyecto. Ahora si nos desplazamos
hacia abajo, encontraremos las animaciones EO. Ahora esto significa AIM offset, y se puede ver que
tenemos bastantes de ellos. Y estas son animaciones para cada dirección a la que el
personaje puede estar enfrentando. Si abrimos esta animación
hacia abajo aquí, por ejemplo, puedes ver que es una animación de un
solo fotograma, lo que
significa que en realidad no
anima al personaje, es solo un fotograma de
nuestro personaje mirando hacia abajo. Entonces si cerramos esto
y vamos a otro, digamos nuestra animación aquí. Esta es una animación
que es solo un fotograma, pero nuestro personaje
está mirando a la izquierda. Ahora, usando nuestro offset de puntería, vamos a recombinar todas estas animaciones
y luego controlar cuál
queremos reproducir
dependiendo de las dos entradas variables. Y esas entradas van a ser la rotación de nuestra cámara. Y eso
nos permitirá controlar en qué
dirección se enfrentan nuestros personajes usando nuestra cámara. Para empezar,
cerraremos esto y vamos a crear
un nuevo offset AME. Voy a hacer esto dentro de los
maniquíes, luego animaciones. Así que haremos clic en el botón
Agregar aquí, luego diríjase a la
animación y
desea encontrar un desplazamiento más ahora, similar a los espacios de mezcla, que es una opción 1D que
le permite controlar el objetivo de
establececon una sola variable, pero vamos a usar
solo el desplazamiento normal de puntería, por lo que creará uno de esos. Y ahora necesitamos
seleccionar nuestro esqueleto. Voy a seleccionar
el esqueleto que viene con la plantilla de tercera
persona. Así que ese es éste aquí en
CSS path maniquíes mallas. Entonces sabemos que esa es la correcta. Eso va a crear
un nuevo A-Master. Entonces yo sólo voy a
llamar a esto apuntado A0. Por lo que sabemos que este es el
dirigido a la animación offset. Y entonces eso lo abriremos. Yo sólo voy a arrastrar el mío
hasta la barra superior aquí. Entonces ahora estamos dentro de
nuestro desplazamiento de puntería. puede ver que se ve muy
similar a un espacio de mezcla. Tenemos nuestra gráfica aquí abajo. Tenemos los mismos ajustes de eje horizontal y vertical aquí, y obtenemos nuestra vista previa
en la parte superior aquí. Así que para empezar,
necesitamos configurar nuestra gráfica nombrando nuestras
variables aquí abajo. Entonces nuestra superior para
horizontal, queremos York. Vamos a establecer
el mínimo cinco, U2 menos 90, y el
valor máximo a positivo 90. Así que eso le dará a nuestro personaje
la capacidad de reproducir una animación cuando
estamos mirando todo el
camino a la derecha y todo el camino a la izquierda. Entonces hacemos lo mismo para el pitch. Entonces vamos a nombrar
nuestro eje vertical pitch. Y el valor mínimo
será menos 90, y el valor máximo
será positivo 90. Y esto significa que
podremos establecer una animación para todo el camino hacia arriba y
todo el camino mirando hacia abajo. Siguiente diapositiva, nuestro espacio de mezcla es, me gustaría tomar en
la
opción snap to grid aquí y también aquí abajo, sólo para que cuando arrastramos nuestras
animaciones y sabemos que se están encajando
a valores exactos. Ahora antes de empezar a agregar
animaciones a nuestro offset de puntería, solo
quería
explicar un poco sobre lo que realmente hace. Ahora, objetivo de los sets usan animaciones
aditivas, lo que significa que las animaciones
que jugamos usando nuestro
offset de puntería no reemplazan a
la animación actual que
se está reproduciendo
en el personaje. En realidad se suman a
esas animaciones. Esto significa que podemos tener nuestro offset de puntería jugando
con nuestro personaje, mirando en una dirección
mientras tocamos también,
digamos, una animación ociosa para que
el personaje respire. Pero para que hagamos esto, en realidad
necesitamos
cambiar la animación. Entonces vamos a estar
usando un offset en animaciones aditivas. Ahora, tenemos que hacer esto todos modos porque en
realidad no podremos
colocar esas animaciones aquí hasta que estén
configuradas como aditivas. Y te puedo mostrar que si nos
desplazamos hacia abajo, deberíamos encontrar nuestras
animaciones A0 aquí abajo. Si intento arrastrar uno,
verás que en realidad no me deja, y dice tipo de animación
aditiva no válido. Eso es porque actualmente todas nuestras animaciones A0 aquí no
son aditivas todavía. Tenemos que entrar en
ellos y
cambiarlos para usar ajustes aditivos. Entonces hay un par de
formas en que podemos hacer esto. Te voy a mostrar
cómo cambiar estos ajustes en una animación. Y luego
en realidad vamos a usar el editor de matrices para cambiar todos ellos a la
misma configuración. Comenzará con
el de arriba aquí. Esta es la A0, C, C. Así que esta es nuestra animación de centro. Sólo voy a hacer doble clic en
eso para abrirlo. Ahora, en nuestros detalles de activos, vamos a desplazarnos
hacia abajo hasta que encontremos la configuración aditiva aquí. Y actualmente se puede ver
que está configurado en ningún aditivo, lo que significa que esto es sólo
una animación normal, no configurado como una animación
aditiva todavía. Ahora, para las compensaciones de AIM, en realidad
necesitamos cambiar
esto al espacio de malla, lo que significa que esta animación calculará los cambios. Por lo que se debe hacer
al carácter y al espacio de malla en lugar
del espacio local para los desplazamientos de AIM, siempre se desea utilizar el espacio MSS porque ese es el
único que soporta. Después vamos a cambiar
el tipo de pose base a la animación seleccionada
escalada aquí así. Ahora esto nos permite establecer una animación que
consideramos como
el punto de partida por defecto
para esta animación aditiva. Entonces para esta animación, estamos en el centro, y esa es la real que queremos
usar como su referencia. Así que en realidad
vamos a establecer esto a la animación que
estamos dentro en este momento. Buscaremos
CC y usaremos el rifle MM cadera ociosa, FAI, AOC. Mira, esto es sólo nuestra animación de fotograma
único centro. Ahora, esa es la animación que
en realidad vamos a usar para todos nuestros objetivos fuera
de las animaciones de set aquí, porque ese es el
punto central y ahí es donde
queremos que nuestras
animaciones aditivas se sumen. Así que ahora hemos configurado
esta animación como aditivo y podremos añadir esto
a nuestro offset de
puntería ahora, pero todavía tenemos que
hacer esto para todas estas animaciones
de aquí abajo. Ahora podríamos ir
a través de cada uno
a la vez y configurar estos
ajustes de la misma manera, pero hay una
manera más rápida de hacer esto. Entonces lo que haremos es guardar y
pasar a la carpeta de
animación de la lección. Nos desplazaremos hacia abajo
hasta cerca de la parte inferior, y solo vamos a
seleccionar todas nuestras animaciones de
desplazamiento de objetivo aparte de nuestra central porque ya
acabamos de configurar
eso para que mantendremos el control
y selecciona todas estas aquí y sigue bajando
hasta que las tengamos todas. Después haremos clic derecho y
queremos ir a acciones de activos, luego a editar en bloque
vía matriz de propiedades. Y eso
abrirá esta ventana de aquí. Ahora bien, si no has
usado esta herramienta
antes, básicamente te permite
seleccionar múltiples activos en el Navegador de contenido y cambiar todos sus ajustes
al mismo tiempo. Entonces para hacer esto, solo voy a clic en los activos
y hacer Control a, y eso seleccionará todos
nuestros activos aquí. Después en el editor de propiedades, se
puede ver que
tenemos los mismos ajustes que
teníamos cuando estábamos
dentro de la animación. Aquí sólo vamos a desplazarnos
hacia abajo hasta la parte inferior. Queremos encontrar los ajustes
aditivos. Entonces vamos a cambiar
esto de no aditivo al espacio de malla
como lo hicimos antes. Después cambiaremos esto a la animación
seleccionada a escala. Entonces queremos seleccionar la
animación y el fin de semana. Queremos establecer esto
en la animación CC para nuestro offset de puntería,
así que seleccionaremos eso. Y ahora podemos cerrar esto y todas nuestras animaciones
ahora estarán usando esos ajustes. Entonces si elegimos uno al azar
como nuestra izquierda aquí abajo, se
puede ver si me desplazo hacia abajo, encontramos la configuración aditiva. Se puede ver que ahora
hay configurados para nosotros. Así que ahora todas nuestras animaciones
offset de objetivo están configuradas como aditivos. Podemos volver a
nuestro desplazamiento de puntería. Entonces solo voy a cerrar
estas dos animaciones por ahora. Y iremos a los maniquíes que a la carpeta Animaciones
y abriremos nuestro apuntado. Simplemente voy a arrastrar
esto hasta la cima otra vez. Entonces, lo último que debemos hacer antes de empezar
a agregar animaciones a nuestro offset de puntería
es establecer una animación de vista previa. Y esto solo nos da
una animación que se
previsualizará encima de nuestro
offset de puntería para que podamos ver
cómo se ve. Por lo que se desplazará hacia abajo
hasta la parte inferior aquí. Ahora para la pose base de vista previa, no
queremos usar
una animación aditiva, lo contrario, simplemente
no veremos una vista previa. Entonces vamos a
buscar ociosos. Y vamos a encontrar el, voy a usar el
rifle cadera ociosa FAI aquí porque nuestras
compensaciones de puntería son en realidad para la cadera rápido, así que
seleccionaremos eso. Entonces. Yo sólo voy a ahorrar
y luego cerrar y reabrir nuestra puntería compensada así. Ahora estamos listos para empezar a agregar animaciones a nuestra
gráfica aquí abajo. En la barra de búsqueda,
voy a buscar la animación del centro porque esa es la animación
que queremos usar. Cuando son tu pitch es 0, porque ese va a
ser el punto central. Voy a buscar CC y vamos a
arrastrarlo al centro así. Ahora podrías obtener este tema donde desaparezca la vista previa. Parece haber un error si te desplazas hacia abajo
y simplemente restablecemos el valor para nuestra vista previa y luego seleccionamos, digamos una animación
diferente. Sólo volveremos a
buscar ociosos. Seleccionaré MFA ocioso, y luego volveré a
buscar ocioso. Seleccionaremos nuestro
rifle, cadera ociosa, FAI, como hicimos antes y ya
puedes ver que ahora está funcionando. No sé por qué pasa eso. Creo que es un bug del motor, así que ojalá se arregle pronto. A continuación necesitamos agregar
cualquier otra animación. Entonces por aquí en la barra de búsqueda, voy a buscar CU, y eso significa Centro arriba. Entonces vamos a sumar esa
animación aquí arriba porque
queremos que para nuestros personajes
centrados en tu trasero,
sean 90 en el terreno de juego. Entonces agregaré eso aquí. Pueden ver nuestros avances
rotos de nuevo, eso está bien. Lo arreglaremos una vez que hayamos
terminado de agregar o animaciones. Y así haremos otra búsqueda y
vamos a buscar c, d. y eso significa
Centro abajo. Entonces agregaremos eso al
centro en la parte inferior aquí. Y de nuevo, esto es para cuando R es 0 y nuestros lanzamientos menos 90. A continuación haremos el lado
izquierdo. Entonces buscaré L, C, que significa centro izquierdo. Entonces agregaremos eso por aquí. Esto será para nuestro
pitch, o lo siento, estás siendo menos 90
y nuestro pitch siendo 0. Entonces queremos izquierda arriba, así que LU, y vamos a sumar esto
la parte de arriba aquí, luego Aldi y añadimos
eso al fondo. Entonces haremos el
lado derecho. Entonces haremos LC, RC, Eso es justo al centro
de lo que queremos. Justo arriba. Y eso es que un
golpe hacia abajo se suman a la esquina superior
derecha. Y luego queremos nuestra D, que está justo abajo,
y lo agregaremos a la esquina inferior
derecha así. Y ahora podemos salvar esto. A continuación, podemos arreglar nuestra vista previa, así que haremos lo que hicimos antes, que restablece el valor. Entonces buscaremos ociosos. Pondré esto en
nuestra animación ociosa, y luego volveremos a
buscar ociosos. Y usaremos el
fuego de cadera ideal así. Ahora este error no afectará cómo funciona
nuestro offset de puntería en el juego. Es sólo un tema de vista previa, así que no te preocupes
demasiado por eso. Pero ahora en realidad podemos
probar esto. Así que mantenemos el control y movemos nuestro mouse y
ahora
puedes ver a nuestros personajes usando esos offsets de puntería
que acabamos de configurar. También puedes ver que nuestra animación
ociosa todavía se está reproduciendo, pesar de que estamos
agregando encima de esa animación nuestro offset de puntería. Y así es como funcionan
las animaciones aditivas. Agregan la información
adicional a la animación que se está
reproduciendo actualmente. Ahora estamos listos para configurar
esto dentro de Art Animation Blueprint. Entonces lo que haremos es guardar
esto y salir de eso. Entonces se
abrirá con el dinero Animation Blueprint y
queremos ir al Event Graph. Entonces, si no estás ahí,
puedes simplemente hacer doble clic en eso e ingresarás
al gráfico de eventos. Y vamos a necesitar
dos nuevas variables. Entonces vamos a necesitar una
variable para nuestro pitch y guiñada. Entonces añadiremos una nueva variable, voy a llamar a este pitch. Y queremos que esto sea una carroza. Entonces vamos a cambiar
eso al tipo de flotación. Y haremos lo mismo para
tu tema súper cool. Y ya está puesta en
una carroza para nosotros. Entonces solo podemos compilar. A continuación, necesitamos algún código para establecer
realmente estas variables. Entonces bajará por aquí y vamos a empezar
con el personaje. Así que consigue carácter. Y queremos que obtengan variable de
carácter. Y necesitamos conseguir
la rotación de control. Así que obtén rotación controlada. Y esta es la
rotación de nuestra cámara. Y luego queremos la rotación de nuestros
personajes, así que obtén
rotación de actores así. Entonces desde nuestra rotación de control arrastramos hacia fuera y vamos
a buscar a Delta. Queremos que el Delta gire una nota, y queremos conectar b en
nuestro eje de rotación así. Ahora, el nodo delta básicamente
solo obtiene la diferencia entre nuestra rotación de control
y la rotación de nuestro eje. Y esta es la
dirección que queremos que realmente enfrente
nuestro personaje. Ahora del valor de retorno, vamos a
buscar nuestra intercepción. Y queremos nuestro interp2. Y queremos que este sea
el objetivo porque esa es la dirección del objetivo que queremos que
nuestro personaje mire. Y luego para corriente,
vamos a usar nuestro pitch en sus valores. Ahora, podemos hacer clic con el botón derecho y hacer dividir la pluma golpeada así. Podemos enchufar los
valores indirectamente. O si recombinas estos, podemos arrastrar y hacer y usar un
nodo rotador make así. Podemos enchufar esos
en aquí también. Entonces voy a conseguir el tuyo, enchufa eso a tu
entrada y luego echaré, enchufa eso en el pitch
y pondré así. Entonces para el tiempo delta, queremos usar el tiempo deltas del mundo. Entonces sólo vamos a arrastrar y
buscar mundo. Y queremos conseguir los ajustes de
Delta del mundo. Y luego para la velocidad de internet, esta es la rapidez con la que el valor, el valor
devuelto pasará de actual al objetivo. Entonces cuanto más alto
sea esto, más rápido a o B, voy a poner el mío a 20. Podemos volver y
ajustar eso si queremos. A continuación, necesitamos sujetar
los ángulos de inclinación y guiñada. Entonces para hacer eso, vamos
a alargar y hacer descanso. El rotador de nuestro pitch se arrastrará hacia fuera y
buscará la abrazadera. Queremos ángulo de sujeción. Ahora la razón por la que estamos
haciendo esto es si recuerdas en nuestro offset de puntería, tenemos un valor mínimo de menos 90 y un valor positivo de 90. No queremos nuestro
pitch o
vas por encima o por
debajo de esos valores. Entonces para ellos,
vamos a establecer menos 90 para el máximo que queremos 90. Y luego copiaremos
y pegaremos esto y conectaremos los grados de ángulo a la Z o a la
salida aquí así. Ahora vamos a usar
estos para establecer nuestras variables. Entonces para el de arriba, para el pitch, queremos poner pitch. Y cuando usamos nuestro nodo
set pitch, y luego para el inferior, queremos establecer tu usará
el conjunto de tu nodo así. Conecta estos juntos. Y luego vamos
a conectar estos
hasta nuestras secuencias. Entonces agrega un bolígrafo nuevo, arrastra desde eso y
conecta eso hasta nuestro pitch. Sólo vas a hacer doble clic en
él para agregar un nodo raíz. Y sólo arrastraremos eso por aquí sólo para mantener
las cosas ordenadas así. Así que ahora estamos realmente
listos para agregar nuestro offset de puntería a
nuestra gráfica Anim. Entonces nos dirigimos para allá ahora. Solo queremos que nuestro desplazamiento de puntería
afecte a la mitad superior de nuestro cuerpo, no a la mitad inferior debido a
los efectos la mitad inferior, estropeará nuestras animaciones de
movimiento. Ahora bien, si recuerdas de
nuestra lección de nodos de mezcla, establecemos aquí una
nota de mezcla por hueso que separará nuestro
cuerpo inferior y superior y nos permite tener animaciones que solo se
reproduzcan en la mitad superior. Y eso es lo que estamos haciendo
aquí con nuestra ranura de montaje. Entonces vamos a agregar nuestro puntería, el offset a este
código de aquí porque ese va a ser el código que se
juega para la mitad superior. Entonces vamos a arrastrar esto solo para hacer un poco más de espacio. Ahora voy a
tener mi offset de puntería jugado antes de mi ranura Montage. El motivo por el que hacemos esto es
si tocamos un montaje, no
quiero que lo haga, o no
quiero que nuestra puntería compensada afecte
al montaje. Entonces, si lo hacemos antes, entonces cuando toquemos un montaje, sobrescribirá nuestro
offset de
puntería de nuestro cajero principal. Vamos a arrastrar hacia fuera
y buscar offset AIM. Y queremos el plano de desplazamiento de
puntería. Entonces simplemente crearemos
eso así. Ahora tenemos que establecer qué objetivo fuera de set que realmente queremos usar. Y esto es lo mismo que
establecer espacios de mezcla. Así que aquí en
el panel Detalles con las notas seleccionadas,
nos desplazaremos hacia abajo. Se puede ver que en realidad
dice espacio de mezcla, pero se entiende decir offset. Pero podemos dar clic en
esto y se puede ver están apuntadas A0 está ahí. Entonces seleccionaremos eso. Al igual que una
nota al margen, podría decir un offset para ti
si Epic soluciona esto. Entonces para mí dice
mezcla espacio para ti. Podría decir un offset, pero de todos modos puedes simplemente establecer tu compensación de
puntería aquí. Después podrás ver
nuestro aviso actualizado. Tenemos nuestras
propias entradas de pitch, así que tomaremos esas
variables y las
conectaremos a nuestro nodo de compensación de objetivo. Así que agarraremos tu pitch y conectaremos eso al
pitch así. Y ahora podemos compilar
y probar esto. Por lo que nos dirigiremos a
nuestro nivel presione Play. Se puede ver que ahora cuando estoy y miro a nuestro personaje realidad mira en la
dirección que mi cámara está mirando. Si empezamos a movernos, puedes ver que nuestro espacio de
mezcla sigue funcionando con las animaciones de
movimiento de nuestro personaje, mientras que también nuestro objetivo
compensa el trabajo. Y si miras de cerca o animación
ociosa sigue reproduciéndose, pesar de que estamos apuntando en una dirección diferente
con nuestro objetivo de SAP. Pero ahora si salgo de mi vista de apuntamiento con solo
hacer clic izquierdo, se
puede ver que mi animación
normal por no sostener un arma
es un poco rara. Y eso es porque estamos
jugando ese offset apuntado. Incluso cuando no estamos apuntando, podemos cambiar esto en nuestro plano de animación
con bastante facilidad, así que nos
dirigiremos hacia allí. Ahora, aquí puedes ver que nuestro offset de puntería tiene
un valor Alfa. Ahora, uno significa que
el desplazamiento de puntería está activado y
0 significa que está apagado. Entonces, si es 0.5, se necesitaría la
mitad de la influencia
de nuestro desplazamiento de puntería. Ahora en realidad podemos
cambiar esto a un booleano para simplemente
encenderlo o apagarlo. Así que seleccionaremos nuestra nota, pasaremos al
valor Alfa en C Valor Alfa,
lo siento, el tipo de entrada alfa está
actualmente establecido en valor flotante. Pero si cambio esto
a valor booleano y veo que ahora tenemos
este total habilitado casilla de garrapata. Y ahora sólo podemos
agarrar barra es de ocho. Conecta eso al habilitado aquí. Y ahora cuando compilamos
y le pegamos a Play, se
puede ver ahora que no estoy apuntado. Verás son, la animación ociosa
se está comportando correctamente. Pero cuando empiezo a apuntar, se
puede ver que nuestra puntería compensada entonces
comienza a funcionar de nuevo. Ahora hay otra
forma en la que podemos encender y apagar nuestro desplazamiento de puntería. Así que si salimos de aquí y
volver a nuestro Blueprint de Animación, en lugar de simplemente encender o
apagar este nodo específicamente, realidad
podríamos tener toda
una sección de código ejecutar sólo cuando
está dirigido como verdadero . Entonces, para hacer eso, podemos
buscar la herramienta Blend, y podemos usar la biblia de poses de
mezcla. Y usamos esto en nuestra lección de nodos de
mezcla. Entonces si recuerdas,
podemos tomar esto,
enchufar esto en nuestra ranura
por defecto aquí, y luego tomaremos corazón de
desconexión está apuntado. Conecta esto al valor activo. Entonces si está apuntado como verdadero que el
código verdadero aquí se ejecutará. Y si es falso, entonces se ejecutará el código de la gente. Entonces cuando no lo estamos, queremos que
nuestros códigos apuntados grupa. Entonces conectaremos
esto a true. Voy a dar clic
en Habilitar pruebas. Por lo que siempre está habilitado. Si no estamos apuntados, solo
podemos copiar pegar dinero en efectivo de nuestros principales estados. Enchufa eso aquí. Esto funcionará exactamente
igual que antes. Para que podamos compilar hit Play. Verás cuando
apunte a nuestros personajes haciendo nuestro puntería o nombre de archivo
separado, puedes ver que nuestra animación
está funcionando correctamente. Por lo que como puedes ver,
ambas formas funcionan. Cuál uses, depende
completamente de ti. De esta manera puede ser un
poco más fácil si tuvieras, digamos, otros nodos que quieres que ejecute cuando se apunte como cierto, pues
solo podrías conectar esos
hasta aquí y tenerlos corriendo. ¿ Cuándo es esto cierto? Entonces eso es todo por esta lección. Esperemos que ahora entiendas
cómo puedes configurar un
offset de nombre y cómo puedes
usarlos en tus proyectos.
52. Planes de animación (curvas y metadatos): Oigan a todos. En esta lección
vamos a echar un vistazo a curvas de
animación y metadatos. Ahora, esencialmente,
las curvas y los metadatos nos
permiten agregar información
adicional a nuestras animaciones que luego
podemos leer dentro de nuestro
blueprint de animación cuando se reproducen. Entonces, para empezar, te
mostraré cómo realmente
creamos una nueva curva. Entonces iremos a una animación. Voy a elegir la animación
run forward. Entonces para nosotros eso va a estar en la carpeta Quinn
luego debajo de la r14. Y la razón por la que está en
la carpeta Quinn y no en el dinero es
si te acuerdas, nuestro
blueprint de personajes en realidad está usando el Quinn
Animation Blueprint. Y en eso tenemos el conjunto de animación
Run 4D. Eso lo abriremos. Y aquí se puede ver que
tenemos una línea de tiempo de curvas. Ahora para agregar una nueva curva, solo
puede hacer clic en el desplegable aquí y podemos ir a la curva AD. Ahora como puedes ver, la plantilla de
tercera persona viene con un montón
de curvas incorporadas. Estos en realidad no
hacen nada por defecto hasta que los usamos
y realmente los configuramos. Pero por ahora sólo vamos
a crear nuestras propias curvas. Entonces vamos a subir a Create curve, y
vamos a ponerle un nombre. Voy a llamar al mío curva de
ejemplo así. Y ves que
eso ahora ha añadido nuestra curva de ejemplo
a nuestra animación. Ahora esta curva permite que
nuestra animación produzca un valor dependiendo de la hora
en la animación en la que estemos. Por lo que actualmente puedes
ver que solo está ajustado a 0. Entonces cuando toquemos esta animación, todo lo que nuestra curva va a
hacer es generar un valor 0. Pero en realidad podemos editar
esta curva para generar un valor diferente dependiendo qué punto de la animación
que se esté reproduciendo actualmente. Para ello, nos dirigiremos
al
desplegable de curva para la curva de ejemplo, luego queremos
seleccionar Editar curva. Y si recuerdas de
nuestra lección de líneas de tiempo, esto en realidad funciona
muy similar a eso. Por lo que actualmente, este
valor sólo va a ser 0 todo el tiempo que se reproducen las
animaciones, pero podemos sumar en nuevos puntos. Entonces si hago clic en medio del ratón que se suma en un nuevo punto para nosotros. Y entonces aquí arriba en la parte superior,
tenemos el tiempo que ese punto se encuentra
actualmente y su valor. Así que si configuro esto a 0 o 0 está actualmente en 0
tiempo y tiene valor 0. Ahora si añado otro punto, digamos a un segundo. Entonces por aquí, haremos clic
en medio del ratón. Ahora con eso seleccionado, se puede ver que el tiempo es uno y
podemos establecer el valor a
algo más como diez, por ejemplo, puede ver mi punto
se ha ido de la gráfica, pero si hacemos clic en este
pequeño aquí, en
realidad traerá todos
nuestros puntos de nuevo a la vista. Ahora cuando esta animación se reproduzca en 0 veces el valor será 0. Pero a medida que avanza el tiempo, el valor aumentará
a lo largo de esta línea hasta que lleguemos a 1 segundo
y será diez. Entonces a medida que el tiempo vuelva a
aumentar, el valor se quedará
diez porque
no tenemos puntos
adicionales. Así que ahora podemos leer
este valor dentro nuestro
plano de animación yendo
al mapa en tercera persona aquí. Entonces queremos ir a
nuestro Blueprint de Animación. Por lo que las animaciones luego van al
dinero Animation Blueprint. Y en la gráfica de eventos, vamos a agregar un nuevo nodo. Vamos a hacer clic derecho
y buscar curva. Vamos a utilizar
obtener valle curvado. Se puede ver que podemos
poner un nombre de curva. Entonces este tiene que ser el nombre exacto que estamos
usando para nuestras curvas. Así que esta es curva de ejemplo deletreada exactamente igual con las
letras mayúsculas también. Ahora bien, si
se reproduce una animación que usa
esa curva que hemos configurado, esta salida
será valor actual. Entonces agregaremos un nuevo bolígrafo y solo añadimos en una
cadena de impresión por ejemplo. Y conectaremos el
valor de retorno a nuestra cadena de impresión. Y vamos a compilar. Y podemos
probar esto. Entonces le pegaremos a play. Y se puede ver
actualmente no se están ejecutando animaciones que usen esa curva. Por lo que nuestro valor es sólo 0. Pero si empiezo a correr hacia adelante, se
puede ver que nuestro valor
aumenta a diez. Ahora se está restableciendo de nuevo a 0 cada vez que la
animación se repite. Porque si recuerdas
al inicio de nuestra animación, es 0, entonces va a diez. Y luego una vez que llegue al final de nuestra animación
se va a bucle. Se iniciará de nuevo de nuevo en
0 y el valor r será 0. Ahora de nuevo, similar
a nuestra línea de tiempo, podemos destacar
estos puntos aquí. Podemos cambiar la forma en que
transitan unos de otros. Por lo que aquí arriba podemos elegir qué tipos de caída
serán para el punto. Por ejemplo, podemos seleccionar el automático y ya ves que ahora obtenemos más de un efecto curvo
a nuestro aumento de valor. Y podemos usar estos
pequeños mangos para ajustar
realmente cómo cambia
nuestra línea. También podemos mover nuestros puntos con solo seleccionarlos y
arrastrarlos. Ahora, tengo a ambos seleccionados,
así que está moviendo a los dos. Pero si destaco
solo el de aquí, pueden
ver que puedo mover ese
punto alrededor para cambiar cuál va a ser nuestro valor en ese punto específico en el tiempo. Si alguna vez quieres
ver ese valor, puedes pasar el ratón por encima o
puedes encontrarlo aquí. Y entonces el valor del tiempo está aquí. Ahora actualmente estamos
en el editor de curvas, como puedes ver aquí. Pero si quieres
volver a la vista normal, solo
puedes dar clic en esta
pestaña y eso nos trae vuelta a la pestaña que normalmente
vemos. Ahora si alguna vez quieres
volver al Editor de Curvas, di que
lo has cerrado por accidente, puedes hacer clic en curva
y simplemente editar curva. Eso nos traerá de vuelta aquí. Si quieres eliminar una curva, puedes simplemente dar clic en
eso y hacer clic en Eliminar curva y
eso realmente nos
librará de nuestra curva. Ahora puedes tener múltiples
curvas y una animación. Simplemente puedes golpear la
curva y otra curva, puedes crear o reutilizar una de las curvas
que hay aquí. Ahora podemos añadir esta misma
curva a otra animación. Entonces si salimos y
vamos al dinero y nos abrimos, digamos la animación de salto. Podríamos tener esa misma
curva para aquí también. Podemos ir a la curva AD. Y en lugar de
crear una nueva curva, sólo
podemos buscar el nombre. Entonces buscaremos por ejemplo. Y se puede ver nuestra
curva de ejemplo ya está ahí porque la hemos creado
ya existe. Para que podamos reutilizarla,
crearemos eso. Y se puede ver que comienza con los valores por defecto de 0. Ahora bien, tal vez en esta
animación queremos que una curva oscura tenga valores
totalmente diferentes. Entonces, por ejemplo, podríamos hacer clic en el
medio del ratón,
establecer esto a 0. Podríamos establecer el valor
inicial algo así como menos 100. Y haremos clic en la cajita solo para traerla de
vuelta a nuestra vista. Entonces podemos hacer clic en
el medio del ratón en, digamos, 2.5th y tener este
valor ir a 500. Y volveremos a recoger
la caja solo para sacar ambos a nuestra vista. Y ahora cuando esta
animación reproduce o produce valores
totalmente diferentes a nuestra curva. Entonces en la prueba esto hacia fuera, golpear play
y ver si corro hacia adelante eso sigue reproduciendo nuestra
curva desde esa animación. Pero si salto,
verás que
sube dos valores completamente
diferentes. A continuación tenemos metadatos, que es básicamente una curva
que acaba de obtener un valor. te muestre lo que quiero decir
podemos sumar al salto aquí y volveremos
a la ficha aquí arriba. Ahora podemos eliminar esta curva de
ejemplo por ahora. Entonces sólo vamos a hacer eliminar curva, subir a curvas y se puede
ver que tenemos metadatos. Ahora aquí puedes ver, de nuevo, hay muchos
por defecto que
vienen con la plantilla de tercera
persona. Pero si buscamos, por ejemplo, curva de nuevo, verás
que eso también está ahí. A pesar de que es una curva, también son solo metadatos también. Entonces podemos
buscar curva y
podemos agregar nuestra
curva de ejemplo así. Ahora como puedes ver, su valor
por defecto es uno. Y si vamos al desplegable de la
curva, no
hay opción para editar esto. Ahora eso es porque
los metadatos tipo de actúa como agregar un booleano
a tu animación. Si se agrega a la animación que el booleano es el
equivalente a ser verdadero. Y si no está en la
animación, entonces es falso. En nuestro blueprint de animación, este valor de retorno será
uno o 0, dependiendo de si
la animación tiene este metadato con este nombre. Ahora cuando le peguemos a Play,
verás cuando salto aumenta a uno y luego
disminuye de nuevo a 0. Ahora las curvas de animación
se utilizan para todo tipo
de cosas como controlar animaciones faciales o propiedades dentro de los materiales. No vamos a
estar cubriendo eso en esta lección puramente
porque está un poco más avanzada. Pero lo que también podemos hacer
con las curvas de animación es leerlas dentro de nuestro Blueprint de
Animación, como hemos estado haciendo con
nuestras curvas en metadatos. Un ejemplo de lo que podrías
hacer con curvas en el futuro es
que tal vez tengas un proyecto que tenga rodaje, pero ciertas animaciones
no quieres que el jugador
pueda disparar. Bueno, podrías crear
una curva de disparo en bloque. Ésas son las animaciones en las que
quieres bloquear el rodaje. Entonces dentro de tu plano de
animación, podrías leer esa curva. Y si el valor está por encima de 0, sabes que debes
bloquear el disparo en tu código. Ahora una cosa a
tener en cuenta es si nos dirigimos de nuevo a nuestra animación de
salto, porque tenemos
nuestra curva de ejemplo aquí agregada como metadatos. No podemos entonces ir y agregar curva de
ejemplo
como curva también. Si tuviéramos que agregar curva, buscamos por ejemplo, en C, No va a aparecer
hasta que eliminemos
esta curva de ejemplo. Entonces vamos a quitar
eso, luego ir a Agregar curva de búsqueda por ejemplo. Ahora, se puede ver que está apareciendo y podemos
agregarlo como una curva. Ahora, si quieres
saber dónde están realmente
configuradas todas estas curvas y puedes manejarlas, renombrarlas o eliminarlas. Nos dirigiremos al Navegador
de Contenido. Entonces vamos a ir a
la carpeta del maniquí, después mallas y vamos
a abrir maniquí SK. Ahora este es el esqueleto de nuestros
personajes. Y por aquí puedes
encontrar las curvas de anime. Si el tuyo no está abierto,
puedes subir a ventana y seleccionar en curvas
de anime aquí. Ahora, encima en las curvas de
anime también, podemos eliminar curvas para que puedas hacer clic derecho en la columna, pulsa Eliminar. Puede cambiarles el nombre, o
puede agregar nuevas curvas simplemente seleccionando Agregar nueva
curva e ingresar un nombre. Ahora, por último, si intentamos
agregar nuestra curva de ejemplo a las animaciones de las lecciones de aquí y a la carpeta de animación de la lección. En realidad no podremos
encontrar nuestras curvas de ejemplo. Entonces si nos abrimos, digamos
el rifle, caminamos hacia adelante, voy a curvas y voy curva
AD y
busqué por ejemplo, ver que
en realidad no aparezca. Ahora bien, si recuerdas
estas animaciones en nuestra carpeta Animaciones de la lección o usando un esqueleto diferente, ellas de nuestro personaje. Así que en realidad tenemos que añadir
manualmente nuestra curva a este esqueleto para que estas
animaciones lo encuentren. Entonces para hacer eso, sólo vamos a
ir a maniquí que dos mallas luego a maniquí SK. Y aquí vamos a
ir a curvas de anime, que va a
hacer clic derecho agregar una curva. Voy a llamar a
esta curva de ejemplo exactamente el mismo que el nombre
que le dimos a nuestra curva antes. Golpearemos Enter,
y ahora hemos agregado esa curva a nuestro esqueleto. Entonces ahora podemos cerrar esto
y regresar a nuestro rifle, caminar hacia adelante, después dos curvas. Y podemos o bien agregar una curva o metadatos, y podemos buscar, por ejemplo, y podemos
encontrar nuestra curva ahora. Así que sólo voy a
añadir nuestra curva de ejemplo. Lo editaré para agregar algunos valores. Será media palabra del ratón clic y un valor en decir 0 para diez. Y luego volveremos
a escribir la gráfica. No tengo un valor, digamos
uno por 500, así. Lo volveremos a escribir sólo para asegurarnos de que todo esté correcto. Ahora podemos probar esto. Golpearé play y
apuntaré y caminaré hacia adelante. Y ves que nuestro valor está
aumentando eso así. Ahora si el tuyo no lo hace y solo sigue leyendo 0
cuando caminas hacia adelante, intenta simplemente ahorrarlo todo
desde reiniciar el motor. Este es un error por el momento
con esqueletos compatibles. Si te acuerdas, es por eso que nuestro personaje puede reproducir las
animaciones de nuestras lecciones. Vimos esqueleto compatible de pago
en la lección de montajes, pero es un poco buggy
ya que es una característica nueva. Entonces a veces
solo necesitas guardar y reabrir el proyecto y
debería funcionar correctamente, entonces eso es todo por esta lección. Esperemos que ahora entiendas cómo agregar metadatos y curvas a las animaciones y luego leer esos valores en su interior y
Animation Blueprint.
53. Sistemas de juego (interacción): Oigan a todos. En esta
sección del curso, vamos a estar usando todo lo
que hemos aprendido en nuestras lecciones anteriores para crear algunas mecánicas de
juego comunes. Ahora, en esta lección,
vamos a estar creando un sistema básico de interacción. Esto nos permitirá
ejecutar código dentro de otros objetos cuando nuestro
jugador interactúe con ellos. Ahora para aquellos de
ustedes que han estado siguiendo en lecciones
anteriores, he creado una nueva plantilla de
tercera persona solo para que tengamos un nuevo comienzo para esta sección del curso. Así que para empezar,
vamos a entrar en el
plano de la tercera personaPersonaje y eso es justo dentro de la
carpeta en tercera persona, luego planos. Por lo que eso lo abrirá. E inhalar,
vamos a crear una nueva función y
vamos a llamar a esa mirada al actor compilará. Ahora bien, esta es una función
que en realidad va a
detectar a qué actor estamos viendo
actualmente. Y para ello,
vamos a usar un trazo de línea, por lo que se arrastrará hacia fuera y
buscaremos trazo de línea. Y queremos
trazo de línea por canal. Si recuerda de
nuestra lección de trazas de líneas, un trazado de líneas nos permite detectar objetos entre las ubicaciones de
inicio y final. Entonces esto lo hace
ideal para cosas como un sistema de interacción
porque podemos detectar, es el jugador
que actualmente está mirando un objeto. Entonces, para hacer eso, vamos a necesitar un
poco de matemáticas para determinar dónde debe comenzar y terminar nuestra
bandeja de líneas. Entonces vamos a hacer
clic derecho y sí obtener control de rotación. Y eso nos da
la rotación actual de la cámara de nuestros jugadores. A partir de eso, queremos sacar
la dirección hacia adelante. Por lo que queremos buscar
obtener rotación x vector. Entonces queremos arrastrar hacia
fuera de eso y hacer un nodo de veces o multiplicar. Y vamos a cambiar
la entrada aquí a una carroza. Por lo que sólo vamos a hacer
clic derecho hacer
convertir lápiz y luego seleccionar el flujo y
queremos doble precisión. Entonces haremos eso. Los va a mover un poco
hacia atrás. Ahora, el valor que
establecemos aquí es cuán
lejos de la ubicación de inicio puede interactuar nuestro
personaje. Entonces dicen que quería
Es interactúa y distancia sea de cuatro metros. Voy a poner 400 aquí y podremos
cambiar esto más adelante, pero por ahora, sólo
dejaremos esto en 400. Ahora necesitamos una ubicación de inicio
para nuestro trazado de línea. Ahora sólo podríamos usar la ubicación de los
personajes actor, pero si vamos a Viewport, los actos de
personajes o la ubicación
estarán en el centro. Y preferiría que mi trazo
de línea saliera de la cabeza. Entonces volveremos
a mirar al actor y vamos a conseguir la localización de los huesos de
la cabeza. Entonces para hacer eso, podemos agarrar el componente de malla desde
el panel Componentes, Arrastrar hacia fuera y buscar
obtendrá la ubicación del socket. Podemos usar este nodo
tanto con nombres de socket como con nombres
óseos y nos dará la ubicación de ese
alvéolo o hueso. Voy a poner el hueso de la cabeza nombrando que
sólo la cabeza así. Y sólo voy a mover
esto un poco hacia atrás. Entonces conectaremos el valor de
retorno a la acción porque
ahí es donde vivo. Trace va a
estar partiendo de. Entonces vamos a
necesitar un nodo impar. Entonces vamos a arrastrar hacia fuera
del valor de retorno, ¿agrego nodo? Y vamos a
agregar el valor
de salida de r veces notarlo al Add Node desde
el nodo de la aplicación dos y la
entrada en nuestro trazado de línea. Así que solo para explicar, nuestro trazado de línea
va a comenzar en la ubicación del hueso de la cabeza y luego el final de nuestra
traza de línea va a estar nuevo en la ubicación de los auriculares, pero estamos agregando cuatro metros en la dirección hacia la que está mirando
nuestra cámara. Entonces ahora podemos probar esto. Establecemos el Draw Debug
Type dos para un fotograma, por lo que el trazado de línea será
visible para un fotograma. Y entonces en realidad necesitamos
ejecutar esta función. Por lo que sólo nos dirigiremos
al Event Graph, haga clic derecho y buscaremos tecnología. Y agregaremos una tecnología de eventos, que va a
hacer esto temporalmente para probar que todo está funcionando. Entonces agarraremos
al actor vigía y conectaremos eso a
aquí y compilaremos. Ahora ya podemos
probar esto así que le pegaremos a play. Y es algo
difícil ver
la línea traza porque
nuestras cabezas se interponen en el camino. Si presionamos F8 para rechazarlo nuestro
mouse y nos movemos alrededor, se
puede ver que
la traza de línea está comenzando nuestra cabeza y él va cuatro metros adelante en la dirección que nuestra
cámara está apuntando. Entonces a continuación queremos almacenar lo que realmente
está golpeando la traza de línea. Así que saldremos
de los planetas hasta aquí, volveremos a nuestro
Third PersonCharacter, y luego volveremos a nuestra función de actor de
búsqueda. Y nos moveremos por
aquí hasta el final. Ahora queremos agregar
una nueva variable que las tiendas sean golpeadas resultado
de nuestra traza de línea. Por lo que sólo vamos a arrastrar desde
aquí y hacer promover a variable. Y vamos a nombrar esto,
mira resultado hit así. Ahora, podemos usar esa
variable más adelante para detectar lo que nuestro personaje
está mirando actualmente. Ahora también voy
a crear una variable para este valor 400 aquí. Por lo que vamos a arrastrar hacia fuera y hacer de
nuevo promueve variable. Y eso sólo
creará un flotador para nosotros. Y voy a llamar a
esto interactúan distancia. Ahora, haremos esto
solo para que podamos
cambiar fácilmente nuestra distancia de Interact
para nuestro trazado de línea. Por lo que se puede ver que
en realidad se acaba de establecer en 400. Y si quisiéramos más adelante, podríamos ajustar esto en
la configuración de clase aquí. Entonces en lugar de tener que
entrar en función para
cambiar la distancia, sólo
podemos entrar aquí
y cambiarlo fácilmente. Y para mantener las cosas organizadas, podríamos darle una
categoría también,
así que la seleccionaré y
vamos a cambiar el nombre de la categoría a
interacción así. Ya ves ahora tiene una
pequeña categoría de interacción que podemos mantener todas
esas variables. Y si vamos a los valores predeterminados de clase, deberíamos tener una
categoría de interacción, si podemos bombear, compilaremos primero, luego iremos a valores predeterminados de
clase y
verás que tenemos ahora una categoría de interacción y nuestras
variables de distancia de interacción allí. A continuación, vamos a cambiar a
nuestro actor de vigía para correr con un temporizador en lugar
de hacerlo en tecnología. Y si lo recuerdas, on tech
correrá cada fotograma. Entonces, si estás recibiendo, digamos, 200 fotogramas por segundo, esto estará funcionando 200 veces. Lo cual es un poco excesivo
para nuestro actor de taquilla. Entonces en cambio
vamos a usar un temporizador. Entonces yo sólo voy a
conseguir el planeta de inicio. A partir de eso, vamos a arrastrar hacia fuera y
hacer func función por temporizador. Queremos establecer temporizador
por nombre de función. Ahora podemos eliminar a nuestro actor
local aquí. Y esto nos permite tener una función ejecutada en
un momento determinado. Por lo que vamos a establecer ese
nombre de función para mirar a AXA. Ahora el nombre necesita ser deletreado exactamente igual con capiteles, lo contrario esto no funcionará. Entonces vamos a
asumir el looping. Entonces vamos a
fijar el tiempo a 0.03. Ahora esto significa que nuestra función de actor de
vigía correrá 30 veces por segundo. Ahora eso podría parecer mucho, pero para un solo rastro, no
es gran cosa. Y significa que cuando estamos mirando alrededor con nuestra cámara, obtenemos la información más
actualizada. Ahora, otra cosa que
podemos hacer es almacenar este valor de retorno y
ese es nuestro mango de temporizador, si
acaso alguna vez
queremos detener este temporizador, tal vez por nuestro personaje muere. Ya no queremos que el acto
de vigía rastree el funcionamiento, así que podemos usar el
controlador del temporizador para detenerlo. Así que sólo vamos a arrastrar
hacia fuera para promover la variable, y sólo vamos a llamar a este
look actor timer así. Entonces ahora si alguna vez
quisimos detenerlo, podemos usar esa
variable para hacer eso. Así que ahora tenemos nuestro
vistazo a la configuración funcional activa. Necesitamos ahora agregar una nueva
interfaz que podamos agregar otros
dos blueprints
para ejecutar
eventos y codificar cuando se interactúen con ellos
. Entonces lo que
haremos es simplemente compilar y
guardar esto e ir al Navegador
de Contenido. Y haremos clic derecho
y vamos a agregar una nueva Interfaz de Blueprint. Así que vamos a ir a planos
y luego queremos la Interfaz Blueprint aquí, y
vamos a nombrar esto, voy a llamar a la
mía BP subrayado interacción,
interfaz así. Y lo abriremos. Y yo sólo voy a añadir el
mío a la barra superior aquí. Ahora si recuerdas de
nuestro video de interfaz, en realidad no
hacemos
ninguna codificación aquí. Todo lo que hacemos es agregar nuevas funciones y darles
entradas y salidas. Ya tenemos una nueva función que inicia con la interfaz. Así que solo haremos clic derecho
y renombraremos esto. Voy a llamar al mío
interactuar así. Y vamos a compilar y
podemos agregar nuevos insumos ahora. Y esta es información que
vamos a enviar desde nuestro plano de personaje de jugador a cualquier modelo con el
que estemos interactuando. Entonces lo que me gusta hacer es agregar una referencia de carácter
solo para que podamos acceder a la
información del personaje que interactuó con el blueprint que estamos ejecutando este código. Por lo que buscaremos carácter, usaremos la referencia de objeto
tipo carácter. Yo sólo voy a
nombrar a este personaje. Ahora por supuesto en el futuro, si quisieras
enviarles información
del personaje al plano con el
que está interactuando. Podrías agregar nuevos insumos aquí. Entonces ahora tenemos nuestra
función que se ejecutará cada vez que nuestro jugador
interactúe con un blueprint, pero también podemos agregar algunas funciones
adicionales. Entonces voy a agregar
uno. Y vamos a llamar a esto permitir interacción. Y en realidad vamos a
agregar una salida para este. Por lo que añadiremos una nueva salida. Y vamos a establecer esto
para ser un booleano, y sólo vamos a nombrar este valor de
retorno así. Así que ahora esto
nos da una nueva función que podemos comprobar antes de ejecutar la función Interact solo para asegurarnos de que el blueprint con el que
estamos interactuando
tiene su interacción activada. Ahora vamos a agregar
una función más. Así que vamos a ir a agregar función, y luego vamos a
llamar a este nombre de interacción. Después agregaremos una nueva salida. Y esto se va
a llamar nombre. Y vamos a
establecer la variable tipo dos textos así,
y luego vamos a compilar. Ahora esto nos permite
establecer un nombre personalizado en cualquier blueprint que agreguemos nuestro tubo de interfaz de
interacción. Y luego vamos a agregar
un poco de textos a nuestra pantalla para que cuando nuestro
jugador mire un objeto, se va a mostrar
el nombre que proporcionamos usando esta función. Por lo que ahora todo esto se ha sumado. Podemos compilarlo y guardarlo. Ahora, volviendo al personaje en
tercera persona, necesitamos algunos eventos de entrada para ejecutar
realmente nuestro código
interactivo. Ahora podríamos simplemente
hacer clic derecho y buscar los eventos de entrada temporales
que hemos usado antes. Pero en cambio, en
realidad vamos a ir a la configuración de
nuestro proyecto y agregar
correctamente una entrada. Por lo que iremos a Editar configuración
del proyecto. Y aquí queremos ir
a la categoría Entrada. Y ahora queremos agregar
un mapping de acción. Entonces iremos a Action Mappings. Haremos clic en el botón Agregar mapeo de
acciones. Y vamos a llamar a
esto interactuar así. Después haremos clic en el
teclado y
podrás escoger cualquiera que sea tu tecla una, voy a presionar E, para
que se establezca en E. Ahora que está configurado,
nos dirigiremos de nuevo a nuestro personaje clic derecho
y buscaremos interactúan. Y queremos que la
interacción debajo los eventos de acción aquí
agregue nuestro aporte. Así que ahora vamos
a agregar el código que en realidad le dice
al objeto que estamos buscando para ejecutar
su interfaz de interacción. Entonces para hacer eso,
subimos al vigía, golpeamos resuelto, y nos
arrastraremos de eso
y lo vamos a romper. Y haremos clic en la pequeña flecha
hacia abajo aquí para obtener todas
las variables o arrastrar
hacia fuera desde Hit Actor. Y vamos a
buscar a Interact. Y queremos el mensaje de
Interact aquí. Ahora voy a dar
clic en esta flecha otra vez solo para hacer esto más pequeño. Y podemos
atar un poco esto. Ahora antes de ejecutar esto, primero
vamos a querer comprobar es el acto de violeta. Entonces lo haremos es válido. Conectaremos esto
a prensado. Y también queremos comprobar
es permitir que la interacción sea verdadera. Por lo que nos arrastraremos de nuevo
y buscaremos Permitir. Y podemos usar el par
permitir interacción. Enchufe que en es válido. Y luego queremos
ejecutar un nodo de rama. Por lo que vamos a arrastrar hacia fuera desde el valor de
retorno y hacer IF. Y luego a partir de eso, si nuestro valor de retorno es verdadero y
permitir que la interacción sea cierto, queremos ejecutar nuestro Interact
para poder conectarlo así. Entonces para nuestra
entrada de carácter porque estamos dentro de nuestro
Third PersonCharacter, podemos simplemente arrastrar
hacia fuera y hacer uno mismo. Y eso pasará
una referencia a
este personaje a través de
la función Interact. Ahora mantengamos las cosas ordenadas. En realidad podemos
destacar todos estos. Obsérvelo, no el evento de entrada, solo el código que
tenemos resaltado haga clic derecho y podemos
hacer la función colapsada. Y yo sólo voy a llamar a
esto interactuar así. Podemos simplemente mover esto aquí. Ahora, todo ese código está justo dentro de nuestra nueva función de
interacción. Entonces si hacemos doble clic en eso,
lo puedes ver aquí. Podemos simplemente mover esto
aquí arriba, así que está un poco ordenado. Ahora necesitamos
configurar un actor con el que nuestro personaje pueda interactuar
en realidad. Por lo que compilará e
irá al Navegador de Contenido, solo va a crear una
nueva clase de blueprint. Se lo pondremos a un actor. Yo sólo voy a llamar a este BP subrayan ejemplo de interacción. Así. Lo abriremos y
añadiremos un nuevo componente. Sólo voy a agregar
un componente de cubo. Así. Simplemente nos da algo que la traza de
línea puede golpear. Pero podrías usar
una malla esquelética o un componente de malla estática y tener una medida personalizada
si quisieras. Ahora una cosa a tener
en cuenta es que si usas una malla estática
o Malla Esquelética, debe tener
colisión
porque si no se alinea,
trace no la golpeará. Entonces, para comprobar si tu
malla estática tiene colisión, solo
puedes ir a su
malla de pila en el Navegador de contenido. Entonces, por ejemplo, ¿qué son Coupa? Simplemente podemos hacer clic en el Browse to y el navegador de contenido para ir allí. Podemos abrir esto. Ahora aquí, puedes ir a mostrar y luego bajar a donde
dice simple colisión. Y luego si cuando
te encargas de eso, obtienes este contorno verde claro aquí, eso significa que
estás todo bien. Tiene colisión. Si no tienes eso, puedes subir al
desplegable de colisión aquí, y puedes probar estas
diferentes opciones para agregar alguna colisión
a tu objeto. Entonces estamos usando este
cubo para que sepamos que sí tiene colisión simple,
así que todos estamos bien. Podemos agregar de nuevo a nuestro modelo de ejemplo de
interacción. Ahora aquí necesitamos agregar
nuestra interfaz de interacción. Entonces iremos a
Configuración de clase luego a implementarlo interfaces,
y añadiremos una nueva. Vamos a
buscar interacción. Y queremos la interfaz de
interacción BP. Y luego compilaremos. Ahora, si vamos a nuestro panel
Mi Blueprint, haga clic en el desplegable
para interfaces, puede ver que
tenemos todas
nuestras nuevas
funciones de interfaz que agregamos dentro de nuestra
interfaz de interacción. Ahora puedes notar que éste es amarillo, pero
estos son geniales. Ahora eso es porque
si lo recuerdas, nuestro Interact en realidad no
tiene un valor de retorno. Si hago clic en esto, solo
creará un evento en
nuestro Event Graph. Pero si hago clic o
permito la interacción, por ejemplo, si recuerdas que sí tenía un valor de retorno. Por lo que abre esto
en un editor de funciones. Entonces esa es la principal diferencia o interactuar en realidad no
tiene un valor de retorno. Si recuerdas
dentro de la interfaz, si seleccionamos nuestro Interact, ves que no tiene salidas, pero ambas nuestras
otras sí tienen salidas. Y por eso son colores
diferentes. Y si hacemos clic en interactuar
, crea un evento. Y si damos clic en
Permitir interacción, se le ocurre una función. Entonces, para empezar, solo queremos habilitar, permitir la interacción. Entonces sólo vamos
a asumir esto. Pero en tus futuros proyectos o funciones como esta es
útil porque es posible que
tengas un objeto
que quieras que sea interactable parte del tiempo y algunas de las
veces quieras desactivarlo. Por lo que solo podrías devolver
un valor diferente cuando quieras desactivar
su interacción. A continuación tenemos el nombre de la
interacción, así que solo haremos doble clic en
eso para abrirlo. Ahora podemos simplemente
introducir manualmente un nombre aquí
si quisiéramos, pero voy a arrastrarlo y
promoverlo a una variable. Por lo que haremos promueve una variable. Voy a llamar a mi nombre
y dejarlo como textos. Entonces vamos a compilar y
yo sólo voy a añadir un valor por defecto
como por defecto. Nombre. No será capaz de
cambiar esto más adelante. Por lo que sólo vamos a componente. Así que ahora en realidad podemos agregar algún código a nuestro evento interactuar. Por lo que nos dirigiremos de nuevo
a nuestra gráfica de eventos. Y ahora debido a que hicimos
doble clic en interactuar, en realidad solo se agrega
esto a nuestro gráfico de eventos. Pero si no tuviéramos esto, también
podríamos hacer clic con el botón derecho en la
búsqueda de evento interactuar. Y podríamos crear
eso de esta manera también. Ahora este es el evento que
correrá cuando nuestro personaje
mire este objeto y
presione el jabón a-z. Por ahora, sólo arrastraremos
hacia fuera y haremos una cadena de impresión. Podemos imprimir string el valor
del nombre por ejemplo, y simplemente enchufar eso así. Ahora
lo bueno de este evento es que
tenemos acceso a nuestro blueprint de
personajes. Entonces tal vez tenías un componente
en el plano de tu personaje que era un inventario
o un sistema de salud. Puedes simplemente arrastrarte
desde el personaje aquí. Nos vendría bien obtener
componente por clase. Y podríamos usar
esto para comprobar ¿ nuestro personaje tiene un componente
específico? Si lo hace, entonces podemos
usar el valor de retorno para acceder a cualquiera de esas variables de
componentes. O simplemente podríamos costar
a nuestro personaje. Por lo que podríamos hacer costo a
ThirdPersonCharacter. Y luego usando esto, podríamos obtener variables o
funciones de nuestro personaje. Entonces podríamos conseguir, digamos, la distancia de interacción
si quisiéramos por alguna razón o si agregas variables de
salud, son. Cualquier otra cosa, podrías
usar esto para acceder a esos. Pero por ahora sólo vamos
a ejecutar nuestra cadena de impresión. Así que voy a eliminar
estos y conectar esta copia de seguridad a la cadena de
impresión así. Ahora una de las cosas que queremos hacer es con nuestra variable de nombre. Nosotros sólo queremos tomar
en instancia editable. Y si eres miembro,
eso solo significa que cuando arrastramos nuestro
cubo a nuestro nivel, podremos cambiar este nombre por cada
cubo que arrastremos. Así que ahora nuestro sistema de interacción en realidad
está prácticamente configurado. Pero sí quería agregar
en un HUD que diremos el nombre de interacción de actores cada vez que nuestro jugador
mire a ese actor. Entonces para hacer eso, solo
volveremos a la carpeta en tercera persona aquí, luego a los planos
y vamos a crear un nuevo widget de HUD. Por lo que haremos clic derecho,
ir a Interfaz de usuario. Haremos un Widget Blueprint. Voy a seleccionar
usar un widget. Y llamaremos a esto BP
subrayar HUD, así. Y lo abriremos. Ahora
porque este es nuestro HUD principal. Vamos a agregar
unos paneles de lona. Entonces solo busca
Canvas y lo
agregaremos a nuestra jerarquía aquí. Entonces voy a querer algún texto realmente muestre el nombre de la
interacción. Entonces buscaremos
texto aquí también. Y eso lo agregaremos
a nuestro panel de lona. Y lo vamos a tener para
que esté arriba en el centro. Entonces voy a cambiar el ancla para que el texto
se centren así. Y se puede ver que nuestra
posición está en mal estado. Entonces lo que haremos es seleccionar
esto a 000 así. Por lo que ahora se puede ver
dónde centrado. En realidad quiero que
el centro del texto esté en el
centro del texto. Entonces lo que vamos a
hacer es hacer alineación, hacer 0.50.5 así. Por lo que se puede ver que el
texto ahora está centrado. Ahora quiero que mi texto
sea un poco más alto, así que voy a sostener
Shift y arrastrar hacia arriba. Y eso en realidad
me permitirá mover nuestros textos y una dirección y bloquearlo en
esa dirección para que puedan
ver que puedo moverlo hacia arriba. Di aquí. Ahora voy a cambiar la fuente solo para
hacerla un poco más pequeña. Entonces haremos que diga 20. Y vamos a compilar. Ahora, puedes pasar el tiempo
que quieras configurando esto para que
el texto se vea bien. Simplemente estoy haciendo esto rápido
para que podamos hacerlo funcionar. Entonces primero necesitamos ocultar nuestros textos cuando en
realidad no estamos mirando un objeto. Entonces lo que vamos a
hacer es que vamos a usar la visibilidad aquí. Vamos a
crear un nuevo binds. Por lo que vamos a hacer o hacer clic en
enlazar y hacer crear vinculante. Con eso abierto, tenemos
que determinar cuándo
debemos poner este texto
visible y luego oculto. Entonces para hacer eso,
vamos a necesitar algunas variables de nuestro
Third PersonCharacter. Entonces vamos a necesitar
una referencia a eso. Por lo que comenzaremos yendo
al Event Graph. Vamos a eliminar este
nodo y este nodo aquí. Vamos a conseguir
el personaje del jugador. Y a partir de eso
queremos comprobar ¿es válido? Por lo que hacer es válido. Y conectaremos
esto hasta construir. Después arrastraremos hacia fuera otra vez y haremos Cast to ThirdPersonCharacter. Entonces podemos usar la salida de este para
almacenar como una variable. Por lo que haremos promociona variable. Yo sólo voy a llamar así a
mi personaje. Entonces en realidad voy
a resaltar estos nodos. Y haremos clic derecho y solo
haremos colapsado para funcionar. Y llamaremos a esto
establecer referencias así y en realidad
mantiene las cosas bonitas y ordenadas. Y podemos reutilizar
esto más adelante también. Por lo que ahora estamos listos para volver a nuestra función de obtener visibilidad. Y queremos conseguir
nuestro carácter. Y solo queremos
asegurarnos de que esto sea válido antes de ejecutar cualquier código. Conectará esto hasta aquí. Y si no es válido,
entonces en realidad podemos ejecutar nuestras referencias de configuración así. Y usaremos este
nodo de retorno, enchufa eso aquí. Simplemente pondremos esto en oculto. Entonces, si nuestro carácter no es
válido cuando esto se ejecuta, intentará establecer la variable de
carácter nuevamente. Ahora bien, si la variable de carácter es válida, queremos volver a obtenerla. Entonces a partir de eso queremos arrastrar
hacia fuera y conseguir mirada en hit result. Nos arrastraríamos
y haríamos un descanso. Extenderemos este nodo
y queremos Hit Actor. Nosotros hacemos es válido. Y si es válido volverá a
hacer esto más pequeño. Entonces tenemos un poco más de espacio, que arreglan esto así. Entonces si esto es válido, entonces
queremos comprobar ¿
es interactable? Entonces vamos a arrastrar hacia fuera y vamos a
permitir la interacción como esa. Y si eso es cierto, entonces queremos poner nuestra
visibilidad en visible. Entonces copiaremos esto y lo pegaremos aquí. Entonces esto demasiado visible. Lo enchufaremos así. Entonces una vez que termines,
debería verse un poco así. Ahora
en realidad hay un par de uno o más nodos que necesitamos. Entonces lo que haremos es
copiar nuestro valor de retorno, pegarlo aquí, y lo
configuraremos en oculto. Ahora bien, si permitir
la interacción es falso, queremos ocultar nuestros
textos, así que lo haremos. Y también si el
actor hit no es válido, también
queremos ocultar nuestros textos, así que conectaremos eso así. Así que eso abarca establecer la visibilidad de
nuestros textos, pero también queremos
cambiar lo que dice al nombre de la interacción. Entonces lo que haremos
es que en realidad
copiaremos este código porque
habrá lo mismo. Para que podamos copiar todo
esto y esto también. Y así se asegura de que tengas todos los nodos resaltados
aquí haz Control C. Luego iremos al diseñador, selecciona aquí nuestro texto. Y queremos ir al texto y enlazar, luego crear encuadernación. Y aquí dentro vamos
a pegar en esas notas. Y voy a conseguir el nodo de
inicio conectar hasta r es válido así. Ahora tenemos que devolver algo de sexo. Entonces este
solo se enchufaría aquí. Y no queremos
devolver ningún texto para esto, así que sólo dejaremos ese vacío. Copiaremos esto y
pegaremos esto por aquí. Así que ahora, una vez que sabemos que permitir
la interacción es cierto, queremos realmente obtener
el nombre de la interacción. Por lo que vamos a arrastrar hacia fuera desde el
reactor hacer interacción nombre. Y conectaremos
esto a verdadero. Ahora bien, si la
interacción es falsa, solo
queremos devolver
un valor vacío. Hagamos eso. Después copiaremos y pegaremos
esto de nuevo, pegaremos esto aquí, y conectaremos el nombre hasta el valor de retorno
así. Entonces podemos compilar. Y una vez hecho
esto, debería verse un poco así. Ahora lo último que
hay que hacer es en realidad agregar nuestro hard to play a screen. Entonces para hacer eso, iremos
al ThirdPersonCharacter
Blueprint, ese gráfico de eventos. Vamos a añadir esto
a nuestro Begin Play. Haremos clic derecho y
haremos Crear Widget. Conecta esto a nuestras notas. Y siendo dueño de Player, solo
haremos Control, obtendremos el controlador
del jugador. Así. Tenemos que configurar la clase
al hub que acabamos de crear. Por lo que BP HUD. Ahora,
siempre es una buena idea almacenar este valor de retorno cuando estás creando tu HUD principal. Así que vamos a arrastrar hacia fuera
y probablemente vamos a
esto a una variable,
vamos a llamar a este HUD. Y eso es sólo eso si
queremos usarlo más adelante. Y luego desde la salida
de este nodo conjunto, o simplemente busque Add
to Viewport así. Y eso en realidad
agregará nuestro widget a la pantalla de nuestros jugadores. Entonces ahora estamos listos
para probar esto. Vamos a compilar y
dirigirnos a nuestro mapa. Queremos agregar algunos de nuestros ejemplos de
interacción
al nivel. Entonces agregaré una aquí
y otra por aquí. Y si recuerdas, porque
ponemos nuestro nombre a instancia editable dentro de nuestro ejemplo
interactable, tenemos ese valor aquí. Entonces para esta,
voy a poner esto para decir espada. Para éste. Consíguelo para que sea algo así
como pipa. Por lo que ahora podemos golpear play. Y si atropellamos a este cubo aquí se puede ver que está
imprimiendo espada. Y si presiono C, se puede ver
que está imprimiendo el nombre de nuestro ejemplo de
interacción espada, y hará lo mismo con el ejemplo
var pi de aquí. Ahora podríamos pasar un
poco más de tiempo ordenando nuestros textos HOD x, es un poco difícil de ver. Entonces, si salimos y
abrimos nuestro capó, aquí
podemos seleccionar nuestros textos
en la jerarquía. Y primero podríamos
centrarlo así nuestro texto bonito y centrado y podríamos
agregar un fondo también. Entonces lo que haré es hacer
clic derecho hacer rap con, y haremos rap con una frontera. Y luego para nuestro
borde, seleccionaremos eso y vamos a
establecer tamaño al contenido, por lo que cambiará de tamaño
al tamaño de nuestro texto. Podemos cambiar el color, así que cambiaré el
color del pincel para decir un gris. Entonces es sólo un poco
más fácil de ver así. Y también podríamos
agregar algo de relleno. Por lo que vamos a seleccionar nuestro texto
y vamos a establecer el relleno, parecen decir ocho. Por lo que nos da un poco
de acolchado alrededor de los bordes. Y ahora hemos añadido
un nuevo widget. En realidad necesitamos establecer
su visibilidad también. Y podemos reutilizar nuestra función de
visibilidad que utilizamos para nuestros textos. Entonces nos desplazaremos hacia abajo, ve a la
opción de visibilidad aquí. Simplemente haremos clic en enlazar
y podrás ver que nuestra función de visibilidad de antes es que podemos configurarla. Y ahora nuestro borde de texto
aquí cambiará su visibilidad cada vez que estemos mirando un objeto con el
que podamos interactuar. Para que podamos probar esto. Vamos a compilar y
volver a la cabeza y golpear play. Y ahora podemos ver nuestro texto está centrado
y es un poco más fácil de ver porque tenemos nuestra caja gris cuando
no estamos mirando algo, se
puede ver que nuestras casillas
ocultas junto con nuestro texto. Ahora actualmente lo que estamos
haciendo cuando presi y seleccionando uno de nuestros
ejemplos de interacción es imprimir un nombre. Pero por supuesto esto
es sólo un ejemplo. Podrías cambiar esto
a lo que quieras. Entonces podemos ir a nuestra
interacción en ejemplo aquí y hacer que el actor diga destruir
cuando interactuamos con él. Para que pudiéramos agregar Destroy Actor. Ahora, cuando
lo compilamos y le pegamos a Play, si interactúo con
los cubos ahora, se
puede ver que
ambos se destruyen. Entonces eso es todo por esta lección. Esperemos que ahora
entiendas cómo podemos usar Blueprint Interfaces para ejecutar
código en otros blueprints, como por ejemplo, cuando
necesitamos un sistema de interacción. Y en nuestras próximas lecciones, vamos a estar
agregando más
características de juego a este proyecto.
54. Sistemas de juego (daños): Oigan a todos. En esta lección
vamos a estar
configurando un sistema de salud
y también
vamos a estar usando
el sistema de daños que está integrado en Unreal Engine. Entonces, para empezar,
podríamos simplemente agregar nuestras variables
y funciones de salud directamente a nuestro personaje en
tercera persona. Pero en cambio vamos a
crear un componente de salud. Y la razón por la que
vamos a hacer eso es porque podemos
reutilizarla y otros planos si quisiéramos más
adelante . Entonces comencemos. Daremos clic en el botón Agregar
en nuestro navegador de contenido, iremos a la clase Blueprint y
vamos a seleccionar un componente de
actor. Estamos eligiendo componente acto en lugar de ver
componente porque nuestro componente de salud no
necesita existir en el mundo. Solo necesita código, por lo que usaremos componente activo. Voy a nombrar el
mío BP subrayan componente de
salud así. Ahora vamos a abrir esto y voy a arrastrar el mío
hasta la barra superior así. Entonces empezaremos por crear
algunas variables de salud. Entonces agregaré una nueva variable. Voy a llamar así a esta salud
actual. Y voy a poner el
mío a un entero. Te vendría bien un flotador
si quisieras. Personalmente, prefiero usar enteros para la salud
porque es un número entero. Entonces empezaremos con salud
actual y eso
va a ser un entero. Entonces vamos a
crear otro. Esto se va a
llamar comenzar la salud. Y queremos otro, y esto se
llamará salud máxima. Entonces por último, queremos
otra variable llamada y recibir daños. Y vamos a
cambiar esto a un brillante porque
eso es verdadero o falso. Entonces para estas tres variables, vamos a tomar
una instancia editable. Entonces eso lo haremos ahora. Eso solo significa que cuando agregamos nuestro componente de salud
a otro blueprint, cuando seleccionemos el componente de
salud en su panel de componentes
podremos editar estos valores. Así que ahora vamos a compilar y vamos a
establecer algún valor de partida. Entonces para comenzar la salud,
voy a poner esto a 100. Para máximo saludable establecer
esto a 100, así y puede tomar daños se
llevará a cabo, así,
y luego compilar. A continuación vamos a
crear algunas funciones
en realidad van a cambiar
nuestra variable de salud. Por lo que añadiremos una nueva
función y
llamaremos a esto aumentar la salud. Así. Agregaremos un nuevo insumo y
llamaremos a esta cantidad de aumento. Y vamos a establecer esto
a un entero como ese. Y luego compilaremos. Lo primero que
queremos hacer es asegurarnos de que nuestra salud actual no va a ser mayor que r max salud. Entonces obtenemos nuestra
salud actual y comprobamos es esto menos que r max self? Entonces conseguiremos mapas, salud. Y sólo queremos ejecutar este código si lo es,
si esto es cierto. Entonces moverá
esto aquí abajo y agregará esto a nuestro
nodo de entrada así. A continuación queremos comprobar
sumando la cantidad, la cantidad de aumento
a nuestra salud actual la hacen más de r max salud. Entonces para hacer eso, obtendremos salud
actual agregaremos nuestra montaña incrementada ahora que podríamos simplemente arrastrarnos desde aquí
y enchufar esto así. O podemos arrastrarnos desde aquí
y sí conseguir aumentar la cantidad. Y se puede ver que
en realidad podemos obtener ese valor de nuestro nodo de entrada sin
tener que crear una variable. Simplemente nos deja usar eso aquí. Y si eso no aparece,
solo asegúrate de poder
sacar dividido la entrada y
deberías poder encontrarla. A continuación que queremos
comprobar es este valor menor o igual a max out. Por lo que obtendrá máxima salud. Y si lo es, entonces podemos fijar esa cantidad
a nuestra salud actual. Entonces haremos esto y
luego podremos copiar y pegar estos nodos
empanadas por aquí. Haremos establecer salud actual. Eso. Entonces si es falso, lo que
significa que el aumento y los valores actuales de salud van a ser mayores que r max. Con qué frecuencia solo queremos
copiar y pegar esto y decir, ayudaré a máximo así. Podríamos agregar una nota de redireccionamiento
aquí, solo mantén las cosas ordenadas. Por lo que una vez que termines, debería verse así. Por lo que a continuación queremos una
disminución de la función de salud. Entonces voy a
buscarlo, o voy
a crear una nueva
función y llamar a esto la grasa, así. Y de nuevo, vamos
a agregar una entrada a esto, así que voy a hacer mi
ventana más grande aquí. Por qué el nuevo insumo, y vamos a
llamar a esta cantidad de disminución. Y vamos a establecer esto a
un entero también. Y luego compilaremos. Ahora, queremos
comprobar ¿nuestra
salud actual es mayor a 0? Por lo que la salud actual
mayor a 0. Y si lo es, entonces permitirá o disminuirá
la salud correr así. A continuación que queremos comprobar es nuestra salud actual menos r disminuir cantidad mayor a 0. Entonces sí conseguiremos salud actual y queremos hacer
menos o restar. Queremos restar
nuestra disminución a cabo. Ahora otra vez, podríamos
enchufar esto
así o podemos arrastrar hacia fuera sexual obtener disminución cantidad
y podemos agregar eso aquí. Y luego queremos comprobar, ¿esto
es mayor que 0? Si lo es, entonces podemos permitir que esa cantidad sea disminuida
de nuestra salud actual. Entonces haremos esto. Copiaremos esto,
pegue esto por aquí. Haremos establecer salud actual. Y si la cantidad
es menor a 0, solo
queremos establecer
nuestra salud actual 0 porque no queremos que
nuestra salud vaya por debajo de 0. Entonces solo agregará una nota aquí, solo ordene esto,
y una vez que
termines, debería verse así. Ahora una cosa que sí se me olvidó
agregar es que queremos comprobar puede sufrir daños antes
de aumentar la salud. Por lo que vamos a arrastrar esto más lejos, que va a agarrar
nuestra puede sufrir daños. Y si esto es cierto, entonces vamos a permitir
esta función Trump. Por lo que sólo conectará esto
aquí y verdadero en aquí. Ahora también vamos a agregar algunos despachadores de
eventos
y estos pueden ser útiles para si agregamos nuestro componente de salud a
diferentes planos, podemos querer que algo diferente suceda en una
queotro cuando nuestra salud aumenta o disminuye cuando la
salud llega a 0. Por lo que comenzaremos creando
un despachador de eventos. Y yo sólo voy a llamar a
esto en aumento de salud. Así. Crearemos otro
llamado a disminuir la salud. Entonces queremos en salud 0. Así. Podríamos agregar algunos insumos para aumentar y disminuir
nuestra propia salud. Por lo que iremos
al panel Detalles aquí
y agregaremos una nueva entrada. Voy a llamar a
esta cantidad de aumento. Y lo establecemos en un entero. Y haremos lo mismo
para la disminución insalubre. Entonces agregaremos una nueva entrada y
llamaremos a esto el pliegue. Hechizo correctamente,
disminuya la cantidad. Ahí vamos. Y vamos a establecer
que a un entero también. Por lo que dentro o disminuir
cómo la función
podemos ejecutar nuestra propia disminución de
salud aquí. Entonces lo haremos cool. Enchufa esto aquí, y luego
queremos obtener una cantidad disminuida. Entonces solo voy
a copiar y pegar esto y enchufar eso aquí. Entonces para la salud 0,
queremos la no salud 0. Entonces vamos a llamar a eso,
enchufa eso aquí. Y no agregamos
una entrada para esto, así que no necesitamos
enchufar nada más. Y luego iremos a
nuestro aumento de salud. Y por aquí, queremos aumento
poco saludable. Vamos a enchufar eso aquí. Y obtendremos la
cantidad de aumento así. Vamos a enchufar esto aquí
también porque cuando
fijemos nuestra salud máxima, estaremos
incrementando también. Y eso creará
una función más. Y yo sólo voy a llamar a
esto aplicar empezando salud. Entonces aquí lo que
vamos a hacer es ir nuestra salud actual y poner
esto a nuestra salud inicial. Después ejecutaremos esta función en nuestro Event Graph en Begin Play. Entonces agarraremos eso
aplica comenzar salud y enchufarlo
aquí así. Y luego compilaremos
y guardaremos esto. Ahora podemos seguir adelante y agregar nuestro componente de salud
a nuestro carácter. Por lo que nos dirigiremos al plano del
personaje Third Personal. Entonces haré que esta ventana sea un
poco más grande así. Y vamos a
agregar un nuevo componente o búsqueda de salud. Agregaremos el componente de salud de BP
y luego compilaremos. Y con nuestros componentes de salud seleccionados en el panel Detalles, puede ver que podemos configurar nuestra salud
inicial o
salud máxima y si
el componente de salud
puede sufrir daños o no . Ahora como puedes ver, nuestra salud
actual está establecida en 0, pero no te preocupes,
eso se establecerá 100 o donde sea
que estés empezando. El valor de salud es cuando comienza
el juego. Y podemos acceder fácilmente a
estas variables así como nuestras funciones simplemente arrastrando adentro o arrastrando componentes hacia fuera, podemos hacer llegar actual, por ejemplo, que nos da acceso a esa
podemos llamar a nuestra función para aumentar la salud que
ejecutará nuestras funciones. Y también podemos, si quisiéramos
vincular eventos a esos despachador de
eventos. Entonces creamos, para que
pudiéramos hacer una señal, podríamos asignar en salud
incrementada por ejemplo. Y eso nos da un evento y
el evento de compra para eso. Y esto correrá siempre que
nuestra salud aumente. Y también nos da la cantidad de
aumento aquí
también si ejecutamos nuestro evento
Bind en la parte superior. Pero por ahora, eliminaremos estos. Siguiente. Necesitamos configurar
nuestro evento de daño en nuestro personaje en tercera persona. Entonces, para hacer eso, haremos clic derecho y buscaremos cualquier daño. Utilizará evento y los daños. Y vamos a agarrar nuestro componente de salud
y queremos disminuir nuestra salud por la cantidad de daños
cada vez que se ejecute este evento. Entonces nos arrastraremos y
buscaremos disminuir la salud. Y conectaremos esto
hasta el cualquier daño. Entonces queremos daños y
lo enchufamos para disminuir la cantidad. Y verás que
nos da este nodo que convierte el flotador
en un entero. Esto redondeará el valor a la baja. Entonces, por ejemplo,
si el daño fuera 1.5, esto lo redondearía a uno. Pero podríamos arrastrar y hacer
redondear y usar un nodo redondo. Y esto en realidad
lo redondeará al entero más cercano. Entonces si es 1.5, creo que lo
redondeará hasta dos. Si se dijera 1.2, lo
redondearía hacia abajo a uno. Por lo que vamos a utilizar alrededor de nodo para
esto sólo porque es un poco más intuitivo. Y ahora, siempre que
otro plano llame al evento de aplicar daño
para nuestro personaje, este evento se ejecutará y
disminuirá nuestra salud y
nuestro componente de salud. Ahora establecemos
una zona dañada en nuestro nivel que cuando nuestro
personaje entre en ella, nuestro personaje
en realidad perderá salud. Por lo que compilará esto. Pero primero en realidad, solo
agregaremos una cadena de impresión aquí porque actualmente
no
tenemos una barra de salud. Por lo que sólo agregamos una cadena de impresión. Y cada vez que
sufrimos daños, solo queremos obtener
nuestra salud actual. Entonces sí obtenemos salud actual, imprimiremos el valor de salud
actual para que cuando recibamos daños, sepamos exactamente
cuánta salud tenemos. Voy a hacer que el texto se quede un poco más tiempo. Entonces sólo voy a fijar
duración a cinco así. Y luego compilaremos. Ahora nos dirigiremos al Navegador
de Contenido. Vamos a agregar
un nuevo blueprint, el actor de la clase blueprint. Y me desplazaré hacia abajo y sólo
vamos a llamar a esta BP subrayan zona de daños. Así. Arrastraremos esto a
nivel y lo abriremos. Para esto, sólo vamos
a agregar una colisión de caja para saber cuándo
algo se superpone. Entonces agregaremos una colisión de caja. Lo arrastraré un poco para que
quede al ras con el suelo. Después nos adentraremos en
el Event Graph y vamos a eliminar la jugada inicial y la tecnología. Y vamos a utilizar el
evento actor comenzó solapamiento. Y vamos a arrastrar fuera
de otro actor, que va a llamar
el daño Aplicar. Este es el evento que en realidad
llamará al daño dentro de nuestro personaje en
tercera persona, podemos establecer la cantidad del daño. Entonces le voy
a decir así. Ahora podemos proporcionar
un instigador de eventos, y este es un controlador de jugador. No vamos a estar usando esto
para zona dañada puramente porque No hay ningún jugador
que esté causando este daño. Es sólo un efecto
ambiental. Entonces nos hemos dañado más gruesos. Y para ello nos
arrastraremos y nos haremos uno mismo. Y esto básicamente
solo nos permite
saber qué actor
aplica realmente el daño
a nuestro personaje o no cualquier daño que
puedas ver causar daño. También tenemos eso
instigado por pluma también. A continuación tenemos la clase de daños. Ahora bien, esto es un
poco más avanzado. No lo voy a estar
cubriendo en esta lección, pero básicamente puedes crear nuevos tipos de daño y
agregarles variables. Entonces, por ejemplo, podrías tener una clase de daño por incendio
en la clase de daño por hielo, y luego puedes establecer
esa clase aquí, luego en el extremo receptor. Entonces en tu cualquier daño de evento, podrías arrastrarte
del tipo de daño y en realidad podrías
obtener esas variables, digamos que el es daño por hielo o es daño por
fuego por ejemplo. Pero por ahora, sólo
vamos a dejar eso como la clase EMT. Pero por ahora, una última cosa
que haremos antes de que diga, es seleccionar los componentes de la caja,
buscar ocultos. Y queremos desmarcar Endgame
oculto solo para que pueda
ver o zona dañada. Entonces ahora estamos listos
para probar esto. Vamos a compilar de cabeza a
nuestro mapa en tercera persona. Y sólo voy a
hacer la zona de daños un poco más grande y
moverla por aquí. Y ahora cuando golpeamos play, podemos toparnos con la
caja de daños y se puede ver yo, salud está disminuyendo en diez cada vez que realmente entramos a esa caja. Entonces básicamente así es
como podemos configurar un sistema de salud y
podemos usar esa casa los
enumera en otros
planos también. Ahora quería darles
un ejemplo rápido de cómo
podemos configurar esos
eventos de vinculación en nuestro personaje. Así que digamos por ejemplo, cada vez que tu
personaje recibió daño, querías tocar
un sonido crecido. Se podría hacer eso agradable y
fácilmente con los eventos bind. Entonces iremos al
TerceroPersonaPersonaje, buscaremos el principio, los tocaremos. Al final de aquí,
podemos agregar algún código nuevo. Entonces, para que nuestros eventos bind se ejecuten, en realidad
necesitamos vincularlos. Entonces vamos a hacer
eso en Begin Play. Y vamos a agarrar
nuestro componente de salud se arrastrará hacia fuera y buscaremos enlazar en la disminución de Salud. Y queremos este golpe. Así conectará esto hasta nuestra ventana gráfica. Y ahora necesitamos un
evento que
realmente se enfríe
cuando disminuya la salud. Entonces vamos a arrastrar hacia fuera
y vamos a hacer costumbre. Y queremos agregar cliente. Entonces llamaremos a esto
el pliegue, así. Ahora, este evento se ejecutará cada vez que la salud disminuya
y sólo podemos agregar un sonido para que podamos hacer
reproducir ubicación de sonido. Lo voy a hacer en la ubicación de mis
personajes, así que sólo
volverá a la ubicación. Y podemos configurar esto
a un sonido que no
tengo como sonidos crecidos
o desconocidos, así que solo escogeremos compilados
fallidos por ejemplo. Simplemente compilaremos. Ahora cuando golpeamos play, nos topamos con son caja dañada. En realidad conseguimos ese juego de sonido. Y se jugará cada
vez que recibamos daños. Ahora, tocar un sonido
es sólo un ejemplo. Podrías tener
efectos de partículas que sucedan. Podrías ejecutar
código totalmente diferente completamente a tu medida. Así es como
ejecutarías código en tu personaje o
cualquier otro blueprint que estés usando el componente de
salud. Cuando la salud disminuye, podemos hacer exactamente lo
mismo con aumento de
salud y
con salud 0 también. Entonces ahora lo que
vamos a hacer es agregar un componente de
salud a nuestro cubo o
ejemplo de interacción que creamos
en nuestra última lección. Entonces iremos a ese
plano, ábrelo. Voy a agregar aquí el componente de
salud. Y al igual que hicimos antes
en nuestro blueprint de personajes, vamos a agregar
el aplique o lo siento, Sería cualquier daño, el evento cualquier nodo de daño. Agarraremos nuestro
componente de salud. A partir de ahí. Queremos hacer disminuir la salud. Nos vamos a arrastrar desde DynamesH y solo
buscar por ahí. Y usaremos el nodo redondo. Enchufa eso para disminuir la cantidad
y conecta esto aquí arriba. Justo así. Ahora, nuestro
cubo puede sufrir daños, igual que nuestro personaje. Y lo que haremos es volver a
tener nuestra salud actual como lo hicimos en el personaje. Y agregaremos una cadena de impresión. Yo sólo voy a
agregar un append aquí. Entonces sí anexaremos
y pondremos un cubo. Salud Es así. Y luego conectaremos nuestra salud
aquí solo para que sepamos la diferencia entre la salud de
nuestro personaje
y la salud de nuestro cubo cuando se
imprima en la pantalla. Así como así, r
cubed ahora tiene salud. Podemos usar esos eventos
bind si
quisiéramos gustarnos que
acabamos de hacer en nuestro personaje. Entonces podemos hacer atar, disminuir
la salud y podríamos
tener algo totalmente diferente sucedió en nuestro cubo cuando se disminuye su salud. Entonces este es el poder
de los componentes. Puedes agregarlos a
otros planos. Y suponiendo que
los has configurado de manera modular, puedes simplemente agregarlos y hacer
que funcionen muy rápido. En lugar de tener que crear nuevas variables de salud en
cada blueprint que desea tener salud y luego nuevas funciones para
afectar esas variables. Solo podemos agregar un componente y podemos hacer todo
eso de inmediato. Entonces a continuación vamos
a estar montando un proyectil que nuestro
personaje va a disparar en la dirección
que miramos cuando
ese proyecto le pegue a algo que tiene este nodo de daño. Vamos a aplicar algún
daño a ese objeto. Entonces, para ello, nos dirigiremos
al navegador de contenidos. Haremos clic en Agregar y crearemos
una nueva clase de blueprint. Voy a seleccionar Actor. Y nos desplazaremos
hacia abajo y llamaremos a este BP subrayan
proyectil así. Y lo abriremos. Ahora lo primero que
añadiremos es una colisión de esfera, y esto será lo que realmente detecte cuál es nuestra configuración de
proyectil. Entonces sí agregará,
buscará esfera, y usaremos estas
justas colisiones. En realidad voy a
seleccionarlo y arrastrarlo encima de la D para ruta vista por defecto. Y esto nos hará temer
la raíz de nuestro plano. Ahora, a continuación queremos
agregar un nuevo componente. Voy a agregar una esfera
y hablé correctamente. Ahí vamos, esfera. Y esto es justo
lo que
verán los jugadores durante el juego. Esta es nuestra representación visual
de nuestro proyectil. Podrías usar un componente
de malla estática. Si quisieras decir que
tenías una bala o un cohete, podrías usar eso en su lugar. Yo sólo voy a estar
usando la esfera aquí, así que lo haremos. Y voy a hacer el mío
un poco más pequeño. Entonces sólo voy a
reducirlo un poco así. También voy a hacer mi
esfera un poco más pequeña. Entonces seleccionaré el componente de
esfera y cambiaremos el radio de
la esfera, solo arrastrémoslo hacia abajo un
poco así. Y ahora, debido a que nuestra
esfera aquí va a estar lidiando con la esfera de
colisión, Static Mesh en realidad no necesita tener ninguna colisión
y no queremos que lo haga. Así que seleccionaremos la medida de pila de
esferas, desplazaremos hacia abajo, y
encontraremos los presets de colisión. Vamos a poner esto a no colisión y
vamos a desactivar Can character step
on know y
vamos a despegar
generar eventos de solapamiento. Por lo que ahora nuestra malla estática de esfera no
tiene colisión en absoluto. Y toda la colisión
va a ser manejada por la colisión de esfera que
agregamos al principio. Sólo para hacer las cosas un
poco menos confusas, voy a seleccionar
estos miedos Static Mesh, y solo voy a renombrar
esto a mesh así. Y luego renombraremos nuestro componente de colisión de
esfera por colisión de esa manera. Por lo que sabemos la diferencia
entre los dos componentes ahora. Ahora también necesitamos configurar algunos ajustes de colisión
para nuestro proyectil. Entonces lo que haremos es
ir a la colisión,
seleccionaremos, él, iremos
a Presets de Colisión. Entonces, para nuestra
colisión de proyectiles, en realidad
vamos a
convertir esto a la costumbre. Entonces vamos a
asegurarnos de que Collision Enhabilitado
esté configurado para consultar solamente. Entonces para el tipo de objeto, en realidad no tenemos un tipo de objeto
proyectil, por lo que vamos a agregar uno
en la configuración de nuestro proyecto. Entonces hagámoslo. Subiremos
a Editar configuración del proyecto, y queremos ir a la categoría de
colisión aquí. Después en los canales de objetos, vamos a agregar un
nuevo canal de objetos. Voy a llamar título a este
proyecto. Así. Queremos que se bloquee
la respuesta predeterminada porque mayoría de los objetos en el mundo van a bloquear
nuestro proyectil. Entonces queremos empezar a bloquear
y luego le pegaremos a Aceptar. Ahora la razón por la que estamos haciendo
esto es porque queremos que
ciertas cosas
ignoren nuestro proyectil. Entonces en nuestro personaje,
por ejemplo, si vamos a la ventanilla, no
queremos que nuestra
cápsula aquí bloquee proyectiles porque en realidad
es más grande que nuestro personaje. Queremos que nuestra malla de personaje bloquee la del proyectil en su lugar. Entonces estamos agregando un nuevo canal de
objeto proyectil porque entonces podemos decirle a nuestro Componente
Cápsula aquí que ignore eso. Y luego queremos que nuestra
malla bloquee eso. Así que volviendo a nuestro proyecto, nuestro plan, seleccionaremos
nuestro componente de colisión. Por aquí. Queremos seleccionar el tipo de objeto y queremos
cambiar esto para proteger. Se ve que el mío
no se presenta. Podemos intentar compilar y
ver si aparece ahí arriba. Lo hace. Si todavía no lo hace, puede intentar simplemente guardar todo y
reiniciar el motor. A veces sí tardan
un poco en aparecer. Entonces puedes probar eso si el tuyo
no es eso, pero el mío sí. Entonces seleccionaremos eso y
luego volveremos a compilar. Y luego queremos configurar
esto para bloquear todo. Entonces tomaremos la
opción Block en la parte superior. Y luego queremos que esto
realmente ignore ****. Entonces haremos caso omiso del punto. Y la razón por la que estamos haciendo
eso está en nuestro personaje, esta cápsula aquí se considera
el tipo de objeto ****. Queremos que nuestro proyectil
ignore por completo la cápsula y
sólo golpee la malla. Entonces por eso nos encargamos
de ignorar para ****. Ahora la última
colisión diciendo que
queremos configurar para
ignorar su cámara, solo
estamos haciendo eso
porque no queremos nuestro proyectil
afecte el boom de nuestra cámara. Porque si un proyectil
pasara por el boom de la cámara, podría hacer que tus
cámaras se acerquen muy rápido y luego alejar el zoom y no
se vería muy bien. Así que solo asegúrate de configurar
esto para ignorar para cámara. También queremos establecer Can
character step on,
saber que vamos a detener a nuestro
personaje tipo de
tratar de pararse sobre este objeto si se acerca demasiado
a nuestro personaje. Ahora estamos listos para
escribir realmente algún código para
nuestro proyectil. Por lo que nos dirigiremos
al Event Graph. Si no tienes esta pestaña,
puedes simplemente abrirla aquí. Ahora inherente,
vamos a hacer clic derecho y buscar golpe de evento. Ahora, este evento se ejecutará
siempre que nuestros objetos sean nuestro proyectil aquí
o golpeen otro objeto. Y eso nos da algo de salida. Entonces cuando sí golpeamos algo, nos
da una referencia
al componente dentro de nuestro blueprint que
en realidad golpea a los otros objetos. Entonces para nosotros este será el componente de colisión porque ese es el único
que tiene colisión. Entonces tenemos otro, y
esto te da una referencia
al otro actor al que
golpeamos y estaremos usando esto
para aplicar daño. Entonces tenemos otro componente. Esto nos da una referencia al componente en el
otro actor al que golpeamos. Y tenemos ubicación golpeada. Esto solo nos da la
ubicación de donde golpeamos. Tenemos golpeado Normal, que
es la dirección que la superficie que golpeamos, no
vamos a estar usando esto. Es un poco más avanzado. Y luego en realidad tenemos aquí
abajo unos resultados de cadera. Entonces, si arrastramos hacia fuera y hacemos
break hit resultado en C, este es en realidad el mismo
resultado de pista que obtenemos para los trazadores. Para que podamos acceder a toda esta información
sobre el objeto que golpeamos con nuestro proyectil. Ahora, de nuevo, esto es un
poco más avanzado. Sólo vamos a estar
usando la otra pluma aquí para aplicar daño
al acto de eso vamos a
arrastrar fuera de evento aquí, lo
buscaremos, aplicaremos, daño usaremos ese nodo. Queremos que el actor dañado
sea el otro pin aquí. Entonces estamos diciendo que queremos aplicar una dimensión al
actor que hemos escuchado. Podemos fijar los montos de los daños. Entonces sólo voy a
establecer diez causa de daño. Como dije antes, este será el actor que en realidad
esté haciendo el daño. Entonces estamos en el proyectil, este es nuestro yo, así que nos
arrastraremos y nos haremos uno mismo. Y luego instigador de eventos. En realidad vamos a
enchufar esto porque un personaje va a estar
luciendo nuestro proyectil. Entonces lo que podemos hacer
es conseguir instigador. No conseguiremos controlador
instigador. Y podemos enchufar eso al instigador de
eventos así. Y la forma en que esto
está funcionando es cuando en realidad desove nuestro proyectil tendrá una opción para proporcionar
un instigador, y lo haremos y
ese será el personaje. Y ahora cuando aplicamos
daño a otro objeto, estamos obteniendo ese valor
instigador que establecemos cuando
engendramos nuestro proyectil. Estamos proporcionando eso
al otro plano que estaba
dañando si quieren acceder a
quien realmente los dañó. Ahora, agregaremos la
cadena de impresión aquí es solo para que tengamos un poco más de
información sobre a quién golpeamos. Por lo que vamos a añadir la cadena de impresión y vamos a arrastrar hacia fuera
de que hacer anexar. Y sólo pondremos en
la parte superior golpe de proyectil. Y luego en la segunda línea, conectaremos nuestra práctica. Entonces vamos a superar actor
y enchufar eso aquí. Sólo voy a agregar un
espacio al final de un hit. Entonces son dos
palabras separadas así. Ahora lo siguiente que tenemos que
hacer es no queremos que nuestro proyectil golpee
al personaje que
engendró el proyectil. Entonces para hacer eso,
vamos a crear una nota de inicio como esa. Um, vamos a conseguir nuestro componente de
colisión, arrastrarnos de eso y hacer
caso omiso del actor mientras se mueve. Ahora esto básicamente solo
nos dice componente de colisión, un actor que queremos
ignorar cuando el
componente se está moviendo. Entonces conectaremos esto.
Queremosproporcionar un actor. Vamos a usar get owner. Y vamos a enchufar eso aquí. Y vamos a
asumir debemos ignorar. Ahora, obtener propietario es
otra variable que establecemos cuando en realidad
engendramos proyectil. Y luego estamos accediendo a eso y estamos contando la colisión, Oye, queremos que
ignores golpear al dueño. A continuación vamos a
agregar un nuevo componente. Entonces iremos a Agregar, y vamos a
buscar proyector. Y vamos a añadir el componente de movimiento de
proyectiles. Este es un componente
que está integrado en el motor y
va a hacer todos
los cálculos para
nosotros que permitirán que nuestro proyectil bp se
mueva realmente como un proyectil. Entonces, para empezar,
vamos a fijar la velocidad inicial en 3 mil. Esta es la
velocidad de inicio de un objeto. Entonces estableceremos la velocidad
máxima en ese mismo valor también. Por supuesto, si quieres que
el objeto se mueva más lento o más rápido, puedes aumentar o
disminuir estos valores. Probablemente querrás
mantener estos iguales. Y luego aquí abajo
también tenemos velocidad. Voy a fijar aquí el
primer valor para liberar mil también. Entonces, si cambiaras
las velocidades aquí arriba, querrías asegurarte de
hacer lo mismo por ella también. Ahora mismo si tuviéramos que
engendrar nuestro proyecto, cómo en realidad no
se destruiría una vez que golpea algo. Entonces vamos a agregar un destroy al final de nuestro código aquí. Entonces sólo voy
a destruir actor. Y eso sólo
significaría que cuando nuestro proyectil golpee algo, se convertirá en donde
será destruido. Así que ahora podemos compilar
y guardar esto, y hemos configurado nuestro proyectil, y ahora necesitamos
realmente desovar. Entonces para hacer eso, vamos a ir
al Third PersonCharacter, luego de vuelta al Event Graph, agregaremos en un nuevo evento de entrada. Entonces, para hacer eso, pasaré
a Editar configuración del proyecto. Después iremos a
la categoría de entradas y añadiremos un nuevo mapeo de
acciones. Por lo que sólo añadiremos una nueva opción. Y voy a llamar fuego mío. Y luego nos dirigiremos de nuevo
al Third PersonCharacter
haría evento de fuego. Y eso lo encontraremos bajo la
acción, eventos como ese. Ahora tenemos que engendrar son actores. Entonces sólo voy a mover esto por aquí para que
les tengamos más espacio. Nos arrastraremos desde Pressado. Haremos engendrar actor. Queremos los
actos de desove de clase. Fijaremos la clase al proyectil de
nuestro proyectil
en protector CPP. Ahora, la transformación de desove la
vamos a arrastrar y hacer, hacer transformar. Ahora la ubicación, sólo
voy a estar usando la ubicación de mis actores. Pero más adelante, si estás
haciendo un arma, probablemente
querrías usarla como su toma de hocico por ejemplo. Pero por ahora
sólo vamos a usar la ubicación de los personajes actor. Entonces se pone, se
mapea a la ubicación. Y lo conectaremos
a la ubicación. Y luego para la rotación, vamos a utilizar las
cámaras de rotación de corriente. Así que obtén control de rotación. Por lo que nuestro protege qué tan lejos
está en la dirección que estamos buscando actualmente
para el manejo de colisiones. Queremos establecer esto para que siempre
desove ignorar colisiones. Y luego si recuerdas,
estamos usando tanto al propietario como al instigador dentro de
nuestro proyector para. Este nodo aquí y también
para este nodo aquí. Por lo que necesitamos establecer esos. Y sólo vamos
a usar una referencia a nuestro propio personaje. Entonces solo usaremos uno mismo. Y queremos enchufar
esto a los
dos aquí y aquí así. Ahora en realidad estamos
listos para probar esto. Y hay una
cosa que olvidé
hacer dentro de la configuración de nuestro proyecto. Entonces, si volvemos allá,
creé un nuevo mapping de acción, pero en realidad no puse una clave. Por lo que tenemos que
asegurarnos de que hacemos eso. Yo sólo voy a hacer clic en
el botón del teclado aquí y luego clic con el botón izquierdo
del ratón, y eso asignará
eso a eso. Ahora en realidad podemos
probar esto, así que vamos a golpear play y
vamos a botón izquierdo del ratón. Se puede ver que
nuestro proyectil está desovando y está
fluyendo y la dirección en la
que miramos. Y si le disparamos a nuestro cubo, se puede ver que nuestro cubo de
salud está bajando. Ahora, asegúrate de que estás golpeando el cubo y no el
suelo, por ejemplo. Por lo que debería decir proyectil golpeó ejemplo de interacción
BP
como lo hace el mío. Lo mismo con R1. Por aquí se puede ver que
tiene un valor
de salud diferente al de éste y va a
bajar también cuando lo golpeamos. Ahora, hay algunos otros eventos
de daños
incorporados en el motor. Entonces si nos dirigimos al
Third PersonCharacter, sólo
les explicaremos esos. Si hacemos clic derecho
y podemos
buscar puntos puntos daño, usted puede encontrar el daño del punto del
evento. Ahora bien, esto funciona de manera similar
a nuestro cualquier daño. Si lo movemos por aquí, se
puede ver que tenemos
algunos insumos adicionales. Ahora la razón de eso es que si
llamamos al daño Aplicar puntos, se
puede ver que esto funciona
mucho como el nodo de
daño aplicado, pero nos da
algunas entradas extra. Entonces tenemos una entrada para la dirección y
también para info de cadera. Por lo que
este entonces se ejecutará este evento y nos
proporcionará hit Info. Nos proporcionará un nombre
de hueso y esto está integrado en la Info de golpe y cosas
como la dirección de golpe. Entonces este nodo es un
poco más avanzado que el daño aplicado
y el daño MD, simplemente
porque nos proporciona un poco más de
información que podemos recibir sobre el actor
que llega hasta aquí. Y luego proporcionamos
esa información utilizando el nodo de daño de punto de aplicación y podemos ingresar
esos valores aquí. Ahora hay algunos
otros nodos de daño, por lo que borrará estos si hacemos
clic derecho y buscamos daño
radial en encontrar
el evento daño radial. Ahora esto correrá
siempre que nuestro personaje reciba un tipo de daño radial. Y si hacemos clic derecho y
buscamos Aplicar radio, puedes ver que aquí hay
dos opciones. Empezaremos por el de arriba. Entonces tenemos aplicar daño
radial. Ahora este es un nodo realmente
genial
porque hace todo el trabajo por nosotros, por cosas como explosiones. Entonces lo que hacemos es proporcionar
un origen y esto es algo así como el centro de
explosiones. Podemos establecer un
daño base y podemos establecer qué tan grande es la zona de daños. Por lo que todos los objetos dentro de los, digamos, 300 centímetros del origen tomarán en realidad
el daño base. Y podemos proporcionar
actores para ignorar como un trazo de línea por ejemplo. Entonces si solo hacemos re, podemos enchufar actores
que queremos ignorar teniendo tomar
cualquier daño radial. También podemos
asumir hacer daño completo. Eso solo significa
que no importa dónde estén los objetos que están en nuestros rangos dañados que
tomarán el valor de daño base completo. Entonces tenemos los canales de
prevención de daños. Por lo que es posible que tengas una explosión
estallar y haya un muro entre tú y
el origen de las explosiones, probablemente
querrías que el
daño se bloqueara. Entonces aquí es donde establecemos qué canal de colisión realmente bloquea el daño que hace
nuestro daño radial. Pero por ejemplo, tal vez
tenías una ventana entre tú y la explosión. No querrías que el cristal
bloqueara todos los daños. Tendrías tu cristal de opinión, ignoras el
canal de Visibilidad y el daño de explosión
pasaría y golpearía a tu personaje. Y luego tenemos otro
tipo de daño de radio que podamos hacer clic derecho en la
búsqueda de daño radial. Nuevamente. Utilizaremos aplicar
daño radial con caída. Ahora esto funciona
más o menos igual. Simplemente nos permite tener
un radio interior y exterior. Ahora, los objetos dentro del valor del
radio interior desde el origen, tomaremos el daño de la
base completa y luego los objetos dentro
del radio exterior, pero fuera del radio interior tomarán una reducción
cantidadde daños. Esa cantidad de daños
dependerá de la caída del daño. Entonces cuanto mayor sea este valor, menos daño te llevarás, más lejos estarás
del origen. Si todavía estás dentro
del valor del radio exterior, entonces puedes establecer
un daño mínimo. Entonces digamos que esto fue 600 y
nuestro jugador decía, 590 centímetros del origen, probablemente
tendrías un daño
mínimo, digamos cinco. Y no importa lo lejos
que estés del origen, si estás dentro
del radio exterior, siempre
sufrirás
al menos cinco daños. Y luego
acabamos de obtener las mismas entradas de nuestro
nodo anterior aquí abajo. Ahora, ambos de nuestros nodos de daño
radial o aplicar nodos de daño radial, llamaremos a este evento de daño
radial. Para que puedas usar este
evento y que será llamado por ambos de estos
nodos que te acabo de mostrar. Esos son todos los eventos de
daños adicionales que puedes usar en el motor y están
integrados en el motor también Así que
siempre puedes acceder a ellos. Ahora una cosa a tener en cuenta es este evento y el daño correrá sin importar qué tipo de nodo de
daño aplicado utilices. Aunque utilicemos, digamos
aplicar daño radial, llamará a este evento para que se ejecute, y esto se ejecutará, pero esto también
se ejecutará también. Por lo que si tienes ambos
eventos en tu plano, ambos se ejecutarán cada vez
que apliques un daño radial. Y esto es lo mismo
para el daño puntual. Por lo que si utiliza el nodo de aplicación de
daño de punto, llamará al evento de daño de
punto de evento. Si encontramos que el evento de daño de
punto evento, este correrá, este evento, cualquier daño también correrá. Por lo que ambos correrán. Esto es sólo algo
a tener en cuenta. Si tienes, digamos, ambos,
tienes todos estos eventos en tu proyecto, esto se ejecutará siempre que
tomes cualquier tipo de daño. Entonces solo ten cuidado con eso. Si tienes salud
siendo disminuida aquí, y luego otra vez en
estos dos eventos, podrías terminar con que tu
salud sea disminuida dos veces. Por lo que sólo podemos eliminar est
55. Sistemas de juego (barra de salud): Oigan a todos. En esta
lección vamos a estar agregando un widget de barra de salud que va a usar
los valores que hemos configurado en nuestro componente de salud. Y luego vamos a
agregar nuestra Barra de Salud
al HUD BP que creamos
en la lección de interacción. Entonces, para empezar,
vamos a crear un nuevo widget. Entonces iremos a Agregar luego
a la interfaz de usuario, y vamos a
seleccionar Widget Blueprint. A continuación, seleccione el widget habitual. Y nos desplazaremos hacia abajo y yo
sólo voy a llamar al mío BP subrayar salud, así. Lo abriremos. Yo sólo voy a arrastrar el
mío hasta el pico superior. Para nuestra Barra de Salud. Voy a crear algunos textos que
sólo dice salud. Entonces debajo
vamos a tener una barra de progreso que va a mostrar cuánta ayuda tenemos. También vamos a
agregar algún texto a eso, eso dirá nuestra
salud actual y también en Mac auto. Ahora, para empezar, no
vamos a usar un panel de lona porque recuerda que vamos a agregar
nuestra Health Bar a nuestro HUD. Por lo que usaremos eso para elegir dónde está
posicionada nuestra Health Bar en la pantalla. Por lo que aquí solo necesitamos
agregar nuestros widgets de Health Bar. Entonces comenzaremos con
una caja vertical. Entonces iré al panel
y luego agarraremos la caja vertical y solo
agregaré eso a la jerarquía. Agarraremos algunos textos, así que solo busco texto. Eso lo pondremos en
la caja vertical. Entonces voy a
conseguir una superposición. Entonces buscaremos superposición y añadiremos eso al cuadro
vertical también. Y la razón por la que estoy
usando una superposición es porque quiero tener una barra de progreso y
luego quiero
superponer algo de texto encima
de esa barra de progreso. Entonces vamos a usar
la superposición para eso. Ahora agarraremos nuestra barra de progreso, así que solo buscaré progreso y agregaré eso a nuestra superposición. Y luego también voy
a conseguir un poco más de texto y agregarle eso a la
superposición también. Por lo que comenzaremos seleccionando
nuestro texto principal aquí. Y
sólo voy a cambiar esto para decir salud así. Podemos cambiar la configuración.
Entoncessi quieres, voy a hacer el
mío un poco más pequeño, como tal vez 20. Eso entonces a continuación quiero establecer
el tamaño de mi barra de progreso, pero no tenemos una caja de tamaño. Entonces, para ello, vamos a seleccionar nuestra
superposición con el botón derecho del ratón Envolver con. Y luego queremos
encontrar la caja de tallas aquí. Entonces eso se acaba de agregar
en una caja de tamaño para nosotros. Ahora podemos elegir qué tamaño va a ser
nuestra barra de progreso. Así que voy a activar anular ancho y
anular altura. Y voy a fijar
la altura para ahorrar 30. Y luego estableceremos el ancho para decir tres quintas partes. Por ahora. Ahora vamos a
seleccionar nuestra barra de progreso y simplemente decirle
que use todo el espacio disponible para
que lo rellenemos horizontalmente y
también verticalmente. Ahora actualmente estamos
previsualizando para una pantalla de tamaño
1280 por 720. Así que vamos a
cambiar esto a de Phil pantalla para simplemente agregar el
tamaño deseado en pantalla así. Sólo para que podamos tener
una mejor idea de qué tan grande o cuál
es actualmente. A continuación, vamos a
seleccionar nuestro libro de texto aquí que está sobre
nuestra barra de progreso. Y voy a cambiar
esto sólo por decir 50 slash 100s para que podamos ver
cómo se verá. Voy a cambiar el
tamaño para que sea mucho más pequeño. Entonces comenzaremos con, digamos, del 14 al 16. Y alinearemos esto en
el lado derecho. Y también queremos alinearnos
al centro así. Entonces ahora vamos a estar
editando este texto usando código. Entonces para hacer eso, vamos
a necesitar que sea una variable. Entonces voy a asumir es variable y voy a cambiar el nombre a texto de salud. Así. También vamos a estar
cambiando nuestra barra de progreso. Entonces voy a
simplemente renombrar esto. Se puede ver que ya está
marcado como es variable. Entonces yo sólo voy a llamar así a
esta barra de salud. Ahora también voy a
agregar un poco de relleno al
lado derecho porque no
quiero que el
texto esté justo en el borde de
esta barra de progreso, abrirá el relleno y configurará el derecho a decir cinco pixeles. Oh, lo siento, tenemos que
seleccionar nuestros textos allí, así que asegúrate de tener texto seleccionado. Y luego estableceremos
el lado derecho unos cinco pixeles,
o tal vez cuatro. Y eso solo nos da
un poco de espacio entre el borde de nuestra barra de
progreso y nuestro texto. Ahora podemos compilar
y guardar esto. Y estamos listos para escribir
realmente el código que va a controlar
nuestra Barra de Salud. Entonces nos dirigiremos
a la vista gráfica. Ahora para actualizar nuestra
Barra de Salud y nuestros textos de salud, vamos
a necesitar obtener una referencia
al componente de salud que
agregamos a nuestro personaje. Entonces para ello,
vamos a agregar
algún código a nuestro Event Construct que empiezan con solo borrar estas dos notas porque
no las vamos a estar usando. Y luego conseguiremos
nuestro lugar de posesión o obtienes Owning Player? Y esto nos da el controlador
que posee este widget. Entonces a partir de eso podemos hacer
se controla ****. Y esto nos da una
referencia a nuestro personaje, pero como punto de referencia objeto. Y luego a partir de eso podemos
hacer conseguir componentes por clase. Y entonces podemos comprobar, ¿tiene nuestro **** el componente de
salud? Si lo hace, entonces
queremos establecer eso. Vamos a arrastrar hacia fuera
del valor de retorno. ¿ Promocionas una variable? Y llamamos así a este
componente de salud. Ahora, antes de poner esto,
queremos hacer algunas comprobaciones. Entonces primero queremos comprobar que estamos controlando algo. Entonces vamos a hacer es válido
aquí así. Y si es válido, entonces permitiremos configurar así el
componente de salud. Por lo que ahora estamos listos para
crear nuestra función bind. Entonces compilaremos y
volveremos a la vista del diseñador. Y comenzaremos seleccionando
nuestra barra de salud aquí. Y pasaremos
al panel Detalles y
encontraremos el valor presente. Entonces queremos usar
la opción bind y hacer Create Binding. Entonces, para empezar,
queremos comprobar ¿ es válido nuestro componente de salud? Entonces vamos a conseguir el componente de
salud y hacer es válido así. Eso sólo nos
impediría obtener algún error. Entonces necesitamos obtener
nuestra salud actual y también nuestra oferta máxima. Por lo que se va a arrastrar y
sí obtener la salud actual y obtener la máxima salud, como aplaudir. Y entonces necesitamos dividir nuestra salud actual
por r max salud. Y esto nos dará
un valor de 0 a uno. Eso entonces podemos usar
para nuestra barra de progreso. Pero primero necesitamos
convertir estos para que sean carrozas. Entonces haremos para flotar. Eso nos
dará esta nota. Simplemente copiará
y pegará eso aquí. Enchufa toda la aleta o la salud de
imax aquí. Entonces usaremos nuestra
salud actual y sí dividiremos. Dividimos, y dividimos nuestra salud
actual por r max out. Y esto nos dará
un valor de 0 a uno. Y eso le dirá a nuestra barra de
progreso qué tan lejos debe estar. Y entonces sólo podemos enchufar
esto aquí así. Entonces si nuestro
componente de salud no es válido, podemos simplemente copiar y
pegar este valor de retorno y conectarlo a no válido
y simplemente devolveremos 0. A continuación, necesitamos una
carpeta para nuestros textos. Entonces volveremos al diseñador y
seleccionaremos
el texto dentro de
nuestra barra de progreso aquí. A continuación, para el valor de texto
seleccionaremos bind y haremos
Create Binding. Y haremos lo mismo
con nuestros componentes de salud. Entonces lo conseguiremos y
comprobaremos que es válido. Y conecta esto hasta nuestro nodo de
inicio así. Entonces queremos conseguir
nuestra salud actual. Entonces consigue salud actual y consigue
la salud máxima así,
que es línea, estos
son un poco mejores. Ahora, en realidad necesitamos
devolver algunos textos. Así que arrastraremos hacia fuera de
nuestro valor de retorno y usaremos el nodo de texto de formato así. Entonces necesitamos una entrada
para nuestra salud actual. Entonces usaremos corchete abierto, lo
llamaremos salud actual. Y luego cierre el corchete. Y vamos a golpear Enter
y se puede ver que agrega un nuevo valor para nosotros. Entonces voy a enchufar nuestra
salud actual a ahí. Y luego en nuestro formato
texto valor aquí, vamos a hacer una barra y luego
vamos a hacer soporte abierto, salud
máxima, y luego cerrar
corchete y luego entrar ahora. Y eso nos crea un
nuevo Max sanamente. Y vamos a
enchufar eso aquí así. Entonces si no es válido, solo
estamos copiando, pegando o devolviendo el
nodo y lo
conectaremos y simplemente dejaremos
ese valor vacío. Por lo que ahora todo nuestro
código está configurado. Si volvemos al diseñador, puedes pasar todo el
tiempo que quieras editando esto y haciendo
que se vea como quieras. Voy a hacer una
cosa y eso ha cambiado el color
de nuestra Health Bar. Entonces lo voy a seleccionar
y voy a
bajar al Relleno,
Color y Opacidad. Y sólo voy a seleccionar esto y lo voy a cambiar
a un bonito color verde solo
para destacar la salud. Y luego le pegaré OK,
compilaré y guardaré esto. Ahora podemos agregar esto a nuestra cabaña, así que volveremos
al navegador de contenido y abriremos el HUD de BP. En la paleta,
buscaremos salud, y arrastraremos así en nuestra BP
Health Bar. Y yo sólo voy a poner el mío en la esquina de abajo ahí. También voy a
cambiar el ancla. Entonces porque este es el punto de anclaje
más cercano, ahí es donde voy a usar. Entonces lo pondremos al
lado inferior izquierdo así. Ahora, puedes cambiar
el tamaño del switch it. Entonces si lo arrastro hacia fuera, se puede ver nuestra Barra de Salud se hace cada vez
más grande y más pequeña. O puedes tomar el
tamaño al contenido. Y eso solo se asegurará de
que el widget siempre tenga el mismo tamaño que estaba dentro de
este editor de widgets aquí. Así que ahora podemos compilar
y probar esto. Entonces le pegaremos a play. Y pueden ver que nuestro valor
está apareciendo al decir un 100 de 100 si me topo con esta caja de aquí, pueden ver que nuestra salud disminuye cada vez que
entré a la caja. Si exhalamos
editor de planes y vamos a
nuestro plan de personajes y cambiamos nuestra configuración de salud aquí. Entonces si seleccionamos el componente de
salud, digamos que pongo la salud máxima a 500 y establecemos la mitad
inicial en 250. Verás que cuando
compilemos y golpeemos play, espero por solo actualizaciones
automáticamente, dice 250 fuera 500 y nuestra barra de progreso también está a
mitad de camino. Así que ahora voy a sólo X fuera
y sólo voy a establecer esos valores de nuevo
a su defecto. Entonces un 100100. Ahora si quieres hacer
más personalizaciones, solo
tienes que ir a
tu barra de salud aquí y hacer
los cambios que desees. Si desea cambiar el
tamaño de la barra de progreso, puede seleccionar la caja de tamaño y podemos cambiar estos valores aquí. Si desea cambiar
el tamaño del texto, solo
puede seleccionarlos y puede
cambiar
los tamaños de fuente aquí. Y también aquí. Ya terminamos para esta lección. Esperemos que ahora
entiendas un
poco más sobre cómo podemos obtener valores de otros planos y luego
mostrarlos en un widget.
56. Sistemas de juego (reanudación): Oigan a todos, En esta
lección vamos a estar configurando un sistema de respuesta. Y eso va
a incluir un HUD que se mostrará cuando
muramos, podremos hacer
clic en botón responder, y eso
nos creará un nuevo personaje que tomará el control. Entonces, para empezar,
crearemos a nuestros encuestados. Entonces vamos a ir
al Navegador de Contenido, sí agregar, y queremos agregar una interfaz de
usuario y un Widget. Blueprint va a
ser un uso de widget. Y nos desplazaremos
hacia abajo hasta el fondo. Y voy a llamar a
mi BP subrayado, responder HUD así. Y eso lo abriremos. Yo sólo voy a arrastrar el mío
a la barra superior así. Esto va a
reemplazar nuestro HUD normal. Entonces vamos a usar un panel
canvas para esto. Por lo que buscará Canvas y agregará eso a la
jerarquía así. Ahora, sólo voy a
agregar un simple botón a esto que podamos
recoger una respuesta. Entonces agarraremos un botón. Yo
sólo voy a arrastrar esto. Voy a cambiar
el punto de anclaje
al centro porque quiero
mi botón cerca del centro. También voy a cambiar
la alineación a 0.50.5, solo para que nuestra ubicación esté en
el centro de nuestro widget hip. Y voy a poner
esto a 0 y a la x Y sólo voy a
mantener shift y arrastrarlo un poco
hacia abajo para que
sea por aquí. Y ahora puedo agregar algunos textos, mis botones, por lo que
buscará texto. Sólo voy a arrastrar hacia
fuera en la parte superior de mi botón. Y vamos a tener esto decir
re, deporte así. Ahora voy a detener mi botón
otra vez y solo hacer tamaño al
contenido para que se haga más grande
para que quepa el texto aquí. Voy a cambiar
el color del texto para que sea negro solo para que sea un
poco más fácil de ver. Botón de inicio de nuevo.
Ahorapodrías pasar todo el tiempo
que quieras aquí haciendo que este
luzca como quieras. Simplemente me alegra un poco de texto, voy a tener de
nuevo ancla en el centro va a cambiar su
alineación de nuevo a 0.50.5. Y vamos a establecer la x a 0. Y voy a mantener Shift
otra vez y simplemente moverlo hacia abajo. Y yo sólo voy a
tener estos textos dicen que
tienes así. Y tendremos esto alineado en el centro y tamaño al contenido. Ahora estamos listos para agregar algún código a nuestro personaje en
tercera persona. Entonces iremos al
navegador de contenidos y abriremos eso. Ahorita aquí conectado
hasta que empiezo a jugar, tenemos algún código que enlaza un sonido de play
cada vez que recibamos daños, solo
voy a borrar esto porque es un
poco molesto. Entonces borraremos eso por ahora. Y vamos a crear un
nuevo bind para cuando golpee 0. Entonces agarraremos nuestro componente de
salud, arrastraremos de eso y
sí nos ataremos a la salud. Y queremos Bind Event a en
salud 0 aquí, así. Entonces desde evento, vamos a arrastrar
hacia fuera y hacer costumbre. Y queremos agregar un cliente. Entonces llamaremos a este
personaje muerto. Así. A continuación vamos a
agregar un due once notas, así que vamos a arrastrar hacia fuera
y hacer, hacer una vez. Y esto sólo significará que
este código sólo se ejecuta una vez. Entonces queremos comprobar, ¿
nuestro HUD actualmente es válido? Debería ser, pero
queremos comprobar de todos modos. Por lo que vamos a hacer es válido. Y
conectaremos esto hasta aquí. Y vamos a
retirar nuestro hub ahora. Por lo que vamos a arrastrar y
hacer quitar de los padres. Y esto actúa como una forma
de destruir un widget. Por lo que agregaremos esto como válido. Y luego queremos realmente
engendrar nuestra respuesta. Así que vamos a arrastrar desde aquí, hacer crear widget, y vamos a
establecer la clase para responder. Queremos que sea responder HUD, jugador
ganador sí obtendrá controlador de
jugador así. Entonces queremos establecer realmente
nuestro respondido a una variable. Por lo que vamos a arrastrar hacia fuera desde
el valor de retorno, hacer promover la variable. Llamaré a esto responder. Entonces necesitamos agregar esto
a la pantalla del jugador. Entonces arrastraremos hacia fuera y haremos
Add to Viewport así. Entonces queremos asegurarnos de
que el
PIN no es válido esté conectado a nuestro nodo
Crear Widget. Y ahora para mantener las cosas ordenadas, vamos a resaltar todo esto y derrumbarlo
a una función. Así que vamos a
hacer clic derecho y hacer colapsado función, y vamos a llamar a esto crear
reaparición, HUD así. Entonces todo ese código ahora está contenido dentro de
esta función aquí. Y podemos mover esto para que
sea un poco más pequeñito. Podemos agregar algunos nodos de reencaminamiento. Dos no son válidos. Alambre aquí así. Sólo para arreglar las cosas. Entonces compilaremos
y guardaremos esto. A continuación, regresaremos
al Event Graph. Ahora después de que hayamos creado
nuestra respuesta aquí, queremos desactivar cualquier
entrada de movimiento para nuestro personaje. Por lo que haremos clic derecho y
buscaremos discapacitados. Queremos desactivar la entrada. Y luego sí conseguiremos controlador de
jugador y conectaremos esto hasta el
mando del jugador y la pondremos. Ahora si
quisiéramos, podríamos tener aquí
una obra de animación sorda. Ahora no tengo ninguna, pero lo que vamos a hacer
en su lugar es armar una muñeca de trapo. Entonces cuando morimos, nuestro
personaje
tocaría como un efecto rabdo. Entonces, para hacer eso, obtendremos
nuestros componentes de malla. Entonces queremos el
componente de malla
del panel Componentes
vamos a arrastrar hacia fuera y vamos a hacer set simular. Queremos establecer simular física. Y conectaremos esto
hasta para desactivar la entrada. Nosotros queremos asumir esto. Entonces vamos a arrastrar fuera de
Michigan y lo que queremos
hacer es poner todos los cuerpos. Hechizo correctamente, Cuerpos
Simulan Física aquí. Nosotros también queremos asumir eso. Entonces queremos cambiar
su perfil de colisión. Entonces para eso vamos a
arrastrar y hacer Set collision. Y queremos Set
Collision profile name. Conecta esto aquí arriba. Queremos configurar esto en nombre de perfil de
colisión a muñeca de trapo. Tan R mayúscula y luego muñeca de trapo
deletreada exactamente así. Este código es en realidad
lo que va a hacer que nuestro personaje muñeco de
trapo cuando muramos. Entonces vamos a colapsar
esto a una función también. Entonces haremos clic derecho y
haremos colapsar la función. Y a esto lo llamaremos
Greg, sin embargo, así. Y de nuevo, vamos a mantener
las cosas bonitas y ordenadas y todo ese código sólo está
contenido en esa función. Ahora, así,
también podríamos agregar una nota aquí para nuestro Componente de
Movimiento de Personajes. Para que pudiéramos agarrar eso
y hacer detener el movimiento. Y podríamos hacer detener el
movimiento de inmediato. Esto sólo significa que
nuestro personaje no seguirá recibiendo
ninguna entrada de movimiento. Por lo que una vez que termines,
debería verse así. Ahora de vuelta en nuestro Event Graph, podríamos querer que el cadáver
de nuestro
personaje desaparezca después de una
cierta cantidad de tiempo. Entonces, para hacer eso, podemos
alargar y hacer vida útil. Queremos establecer vida útil. Y esto es cuántos segundos
después de ejecutar este nodo, el actor existirá para
antes de que lo destruyamos. Entonces si pongo esto a
decir diez segundos, después de diez segundos, el cuerpo de nuestro
personaje desaparecerá. Ahora tal vez quieras una variable muerta que sea solo un booleano que sea cierto cuando el personaje está muerto. No lo estaremos usando
en este ejemplo. Pero si lo hicieras, podríamos crear una nueva variable, llamar a esto muerto. Podríamos establecer esto aquí también, solo para que tengamos
una variable que nos
dice que estamos muertos. Y podrías usar eso en
otro código si quisieras. A continuación, en realidad vamos a
configurar un controlador personalizado. Y la razón por la
que estamos haciendo esto es cuerpo de
nuestro personaje
podría desaparecer después diez segundos y entonces tal vez
empecemos inactivo en la pantalla de
respuesta. Ahora bien, si nuestro código de respuesta estuviera en el carácter y
hubiera sido destruido, si pinchamos en el botón de responder, no pasaría nada porque nuestro personaje
habría sido destruido, pero el el controlador
de lugar siempre existirá. Por lo que queremos poner nuestro código de
respuesta en eso. Entonces para hacer eso,
vamos a crear un nuevo controlador personalizado, iremos al Navegador de contenido,
luego agregaremos la clase Blueprint, y luego queremos el controlador del
reproductor. Y eso
nos creará un nuevo anteproyecto. Llamaremos a este controlador de
ejemplo de subrayado BP. Al igual que ahora. Eso
lo abriremos y sólo voy a
arrastrar el mío al bar de aquí. Después iremos al
Event Graph. Y luego aquí
vamos a crear una nueva función para realmente encontrar la ubicación donde
vamos a responder nuestro personaje. Por lo que crearemos una nueva función. Voy a llamar a este punto de respuesta
aleatoria. Así. Vamos a agregar una salida. Esta será una ubicación. Entonces queremos que esto sea
un vector y
llamaremos a esta ubicación así. Entonces vamos a hacer o trabajar desconectar esta nota de
retorno por ahora. Vamos a arrastrar fuera de esto y
sí conseguir o actores de clase. Y con eso, vamos
a usar el inicio del jugador. Ahora, este es un activo que está
integrado en el motor. Entonces no hemos creado eso en realidad solo viene
con el motor. Entonces a partir de eso queremos
arrastrar hacia fuera y hacer longitud. Lo haremos es mayor que 0. Entonces solo estamos comprobando
que haya al
menos una estrella en nuestro
nivel. Entonces haremos f. Y si es cierto correrá
en nuestro chequeo aleatorio. Y si es falso, sólo
tendremos que llegar a una ubicación. Entonces para esto, podemos
hacer algo así como 300 y la Z solo para asegurarnos de no
caer por el suelo. Pero esto sólo se usará si
no tenemos ningún jugador
inicia y el nivel, idealmente siempre quieres tener
al menos
uno en tu nivel. Entonces a partir de eso, en realidad
podemos hacer una variable local para almacenar esto
solo para mantener las cosas ordenadas. Por lo que vamos a arrastrar desde aquí, hacer promover una variable local. Simplemente llamaremos a
este jugador Scott. Me gustaría poner una
L al final de las variables
locales solo para que sea fácil decir que
son locales. Entonces haré que los jugadores inicien L
capital así. Conecta eso hasta aquí. Y tomaré la salida
y enchufaré eso aquí. Sólo mantén las cosas ordenadas. Y después conseguiremos el yeso. Queremos
recoger al azar una de las entradas en este array para nuestro
jugador, spawn up. Para eso, vamos
a alargar y vamos a hacer volver a conseguir longitud. Y luego queremos entero aleatorio. Queremos entero aleatorio de
un entero aleatorio en rango. Y luego para mínimo,
queremos que este sea 0, y luego máximo queremos que este
sea el largo menos uno. Entonces resta uno. Este será nuestro máximo así. Por lo que esto
nos dará un número aleatorio entre 0 y cualquiera que sea el número máximo actual de entradas que están en
nuestro jugador comienza. Y luego a partir de eso podemos hacer, podemos copiar y
pegar esta variable, hacer gap y obtener una copia. Y luego conectaremos
esto al entero. Esto nos dice qué jugadores
comienzan queremos conseguir. Entonces solo obtenemos su ubicación. Por lo que sí volvemos a
ubicación, volveremos esto. Entonces sólo copiaré y pegaré. Vuelvo nodo,
enchufar la ubicación a la ubicación y
enchufar esto de aquí en verdadero así. Podemos hacer esto
un poco más recto, atar esto, y luego
compilaremos y guardaremos esto. Ahora esta función
obtendrá un inicio de jugador aleatorio para que nuestro personaje responda
que nos dirigiremos
al Event Graph ahora. Y vamos a borrar ambos porque no los
vamos a estar usando. Entonces vamos a crear
un nuevo eventos personalizados o hacer clic derecho y hacer personalizado. Y queremos agregar un cliente. Entonces voy a llamar así a
este personaje de reaparición. Y vamos a empezar con
nuestro punto de respuesta aleatoria. Entonces vamos a conseguir eso así. Entonces queremos
responder a nuestro carácter. Así que vamos a arrastrar
desde aquí y hacer engendrar actor de clase. Ahora, para la clase
queremos que esto
sea lo que nuestro **** predeterminado
esté en nuestro modo de juego. Entonces lo que haremos es
buscar conseguir el modo de juego. A partir de eso, sí podemos
obtener poema por defecto. Y esto será lo que sea
Default Pawn Class que hayamos establecido en nuestro modo de juego. Entonces conectaremos eso a clase. Entonces para spawn transform, vamos a arrastrar hacia fuera y
hacer un make transform. Simplemente voy a retroceder un poco
esto para que tengamos un poco más de espacio. Después tomaremos
la ubicación de nuestro
punto de respuesta aleatoria y la conectaremos a una ubicación así. Y estableceremos el manejo de
colisiones predeterminado para intentar ajustar la ubicación, pero siempre generar porque
siempre queremos que nuestro
personaje se genere. Después haremos clic en
la flecha hacia abajo aquí y configuraremos al propietario
para que sea nuestro controlador. Así que solo usaremos uno mismo y conectaremos eso
al dueño también. Ahora, porque estamos
en el controlador, solo
queremos poseer este nuevo personaje que
hemos respondido. Entonces voy a arrastrar fuera del
valor de retorno, ¿posees usted? Y podemos poseer ese
personaje y podemos dejar el propio objetivo porque
estamos dentro de un controlador. Entonces ahora compilaremos
y guardaremos eso. Y vamos a volver a nuestro responder duro porque aquí
necesitamos agregar algún
código que se va a ejecutar cuando presionemos el botón
R responder, seleccionará el botón
aquí y bajaremos al desclic en
el panel Detalles. Haga clic en eso. Y luego aquí
necesitamos esto para ejecutar nuestro evento de respuesta dentro de
nuestro controlador de ejemplo. Entonces, para hacer eso, haremos
clic derecho y
buscaremos Get Owning Player. Y esto nos da una
referencia a nuestro controlador. Entonces todo lo que tenemos
que hacer entonces es costar al controlador de ejemplo. Conecta eso hasta aquí. Y eso nos permitirá llamar a nuestro carácter de respuesta evento. Ahora cuando sumamos todos responden
duro para tocar un grito, queremos que suelte
nuestro mouse para que podamos realmente
recoger nuestro botón de respuesta. Entonces para hacer eso,
vamos a agregar algún código al
Event Construct, solo vamos a eliminar
el tick del evento y el evento preconstruido. Entonces sí vamos a volver a conseguir controlador de
jugador. Entonces sí conseguiremos Owning Player. Y a partir de eso,
podemos usar show mouse. Queremos establecer show cursor
del ratón en true. Entonces queremos establecer el modo
de entrada a juego y gy. Entonces vamos a enchufar eso aquí. Y queremos que el
pelo widget sea auto, así que te buscaremos. Y esto solo nos está diciendo
que nuestro cursor del ratón ahora está visible y estamos usando
este widget como nuestro enfoque. Voy a desmarcar ocultar mouse durante la captura porque
todo lo que hace es cuando
mantienes pulsado el botón
izquierdo del ratón y arrastra mientras
los widgets visibles, ocultará nuestro mouse. Entonces en lo personal, eso
no me gusta, así que voy a desmarcar eso. Ahora una vez que hayamos hecho clic,
responderé botón. Queremos que nuestro ratón
se oculte de nuevo. Entonces copiaremos este código aquí, y pegará eso aquí. Y vamos a establecer nuestro
cursor del ratón para que no sea visible. Y luego queremos configurar
el modo de entrada al juego. Por lo que haremos configurar el modo
de entrada a juego solamente,
se conectará aquí arriba. Y luego, por último, queremos ocultar nuestra respuesta con fuerza una vez
que hemos recopilado responder. Por lo que vamos a arrastrar y
vamos a hacer destruir o lo siento,
no destruir, quitar a los padres
movidos de los padres. Y eso actúa como
un nodo de destrucción. Por lo que cuando hacemos clic en nuestra respuesta, berm le dirá a nuestro código de
caracteres en el controlador para responder
u ocultar nuestro mouse. Y entraremos solamente al modo de juego, y luego quitaremos nuestra
respuesta escuchada desde la pantalla. Ahora, en realidad no estamos usando
nuestro controlador de ejemplo todavía, así que necesitamos ir
a nuestro modo de juego. Por lo que nos dirigiremos al navegador de
contenido y encontraremos el modo de juego en tercera persona. Abre eso, puedes encontrar
el controlador de jugador
o la clase de
controlador de jugador por defecto aquí. Y podemos cambiar eso para que sea
el controlador de ejemplo de BP. Entonces compilaremos
y guardaremos esto. Ahora otra cosa
que debemos agregar es colisión de
nuestros personajes
para cuando hayan muerto. Ahora, no queremos que
nuestro personaje siga bloqueando las cosas
una vez que están muertas. Por lo que vamos a agregar un
nuevo perfil de colisión. Por lo que subiremos a Edit
Project Settings. Y luego aquí queremos
bajar a colisión. Y luego presets. Vamos a agregar un nuevo preset. Voy a llamar a
esto muerto ****. Vamos a Establecer Colisión
Habilitada para consultar únicamente. Vamos a establecer el tipo de
objeto a **** ellos para todo lo demás que se va
a tomar ignorar. Y luego vamos
a tomar bloque
tanto para estático como dinámico. Vamos a usar
este perfil de colisión para nuestra cápsula. Entonces cuando el jugador
muera, muñeco de trapo talón, pero su cápsula seguirá
siendo donde morimos. Ahora no queremos, si
respondemos que nos
atropellen a nuestro cuerpo y nos
peguen a la cápsula. Entonces lo que esto hará
es hacer que nuestra cápsula no interfiera con la colisión de nuestro
jugador. Pero evitará que nuestra cápsula
caiga por el suelo porque no tenemos
estática salvaje y dinámica bloqueada. Nuestra cápsula podría caer
directamente por el suelo. Y ahora en realidad necesitamos
configurar nuestra cápsula para usar esto. Entonces le pegaremos a Aceptar y
luego iremos a tercera persona. Y podríamos añadir esto
a nuestro código aquí, pero en realidad voy a agregar el
mío a la muñeca de trapo start. Entonces vamos a
abrir eso y vamos a conseguir nuestros componentes de la cápsula. Entonces eso es todo desde nuestro panel
de componentes. Arrastra hacia fuera y haz Set collision. Y queremos el nombre del perfil de
circulación. Y sólo añadiremos
esto a la anterior. Esto va a estar muerto ****, deletreado exactamente así. Ahora otra cosa que
vamos a cambiar en
nuestro personaje en el Event Graph es que este código aquí está
siendo todo dirigido por nuestro
evento empieza a jugar. Pero ahora tenemos un sistema de
respuesta. Queremos cambiar esto para que
sólo se ejecute cuando
poseemos el personaje. Por lo que podemos hacer clic derecho y
buscar evento poseer. Y podemos usar Event poseído
y enchufar esto aquí. Y entonces en realidad podemos
borrar la jugada inicial. Y ahora cada vez que
este personaje es poseído por un controlador, entonces ejecutará este código. Ahora otra cosa que podemos
agregar es que si te acuerdas, nuestro actor de lockout
Tracy va a estar corriendo 30 veces por segundo, pero queremos parar eso
cuando buceemos porque ya
no vamos a ser
interactuando con las cosas. Entonces, si recuerdas,
creamos nuestra mirada a Act a timer y podemos
usar esto para detenerlo. Así que por aquí, sólo podemos
añadir esto al final. Obtendremos nuestro vistazo al temporizador, arrastramos fuera de eso y haremos claro e invalidar el
tiempo que compro asa. Y esto en realidad
detendrá nuestro rastro así. Y vamos a compilar esto. Ahora una última cosa que necesitamos cambios en nuestro bus de salud, así que nos dirigimos hacia allá y nuestro navegador de contenido lo
encontrará en la parte superior aquí. Abre eso. Después nos dirigiremos
al Event Graph. Y si lo recuerdas,
hereda donde
obtenemos nuestro componente salud peones. El problema con esto
ahora mismo es que ahora tenemos un
sistema de respuesta o control o puede que no hayamos tomado el control del **** cuando se ejecute este código. Entonces todo lo que tenemos que hacer es
agregar un retardo de un fotograma. Por lo que buscaremos retraso y usaremos delay
hasta el próximo técnico. Y todo lo que hace esto es agregar un solo retardo de fotograma a
cuando se ejecutará este código. Y para entonces, nuestro controlador habrá tomado el control de nuestro ****. Ahora estamos listos
para probar esto. Compilaremos y volveremos
al Navegador de Contenido. Voy a cambiar
los daños que se
dañan zona hace por lo que
voy a abrir eso. Voy a incrementar esto
para decir 40 compilarán. Y ahora podemos golpear play
y probar esto. Entonces si me topo con
la zona de daños, pueden
ver que estamos
recibiendo 40 daños. Y ahora cuando corra
por última vez, verás que nuestro personaje muere. Muñecas de trapo en el piso. Podemos golpear responder para
engendrar un nuevo personaje. Se puede ver que nuestra
interacción sigue funcionando. Si presiono E, eso está
funcionando correctamente. Si volvemos a encontrarnos con la zona, también
podemos matar a este
personaje. Ahora tenemos un sistema de respuesta en pleno
funcionamiento. Ahora es posible que quieras agregar nuevos puntos de spawn
para tu personaje. Entonces para hacer eso, podemos salir y vamos a ir al
desplegable aquí, luego dos básicos y podemos agregar un nuevo inicio de jugador con solo
arrastrar esto adentro. Podemos agregar en un segundo, por lo que volverá a pasar a Básico, luego Player Start y
agregaremos uno por aquí. Ahora cuando golpeamos play
para jugar en ese paso, podemos desovar o incluso uno de estos nuevos puntos.
Entoncesle pegaremos a Play. Se puede ver que en realidad hemos
engendrado en el original, pero si nos topamos con
la zona de daño para matarnos,
podemos responder. Y se puede ver que es
responderme en el original otra vez. Pero si lo hacemos de nuevo, hemos respondido en diferentes puntos de
spawn. Entonces eso es todo por esta lección. Ojalá encontraras
útil
la información y ahora sepas
cómo configurar un sistema de respuesta
para tus futuros proyectos.
57. Sistemas de juego (enrutamiento): Oigan a todos. En esta lección
voy a estar mostrándote cómo configurar un
sistema de agachamiento para tus personajes. Ahora, puedes usar cualquier
animación agachada que te guste. Voy a estar usando
las animaciones de las lecciones que usamos antes
en el curso. Y para
descargarlos, basta con ir
al enlace en la descripción del
curso. Puedes descargar ese archivo, después extraerlos,
y deberías
terminar con una carpeta que
se vea así. Ahora vamos a sumar
estos a nuestro proyecto. Entonces todo lo que hacemos es hacer
clic derecho y hacer copia. Después vuelve al motor. Después haremos clic derecho
en la carpeta de contenido aquí. Y queremos ir
espectáculo en Explorer. Y eso sacará a colación aquí
nuestros archivos de proyecto. Y sólo vamos a
pegar estos en eso. Ahora puedes ver que se muestra
en el motor aquí. Ahora, el tuyo puede o no
tener firewalls dentro. Entonces si lo abrimos,
puedes ver que el mío está funcionando, pero si el tuyo no tiene
ninguna animación dentro, simplemente cierra el motor y luego vuelve a
abrirlo y debería aparecer. Ahora lo primero
que debes hacer es crear un nuevo espacio de mezcla porque las animaciones de las lecciones en realidad
no incluyen un espacio de mezcla pre-hecho
para nuestro agacharse, pero sí incluye todos los las animaciones que
necesitamos para crear una. Por lo que creará
un nuevo espacio de mezcla. Ahora, sólo voy
a hacer clic en Agregar, luego ir a animación. Y queremos encontrar aquí la opción de espacio de
mezcla. Y necesitamos seleccionar
nuestro esqueleto de personaje. Entonces ese es éste de aquí. Se puede ver que dice juego de ruta, personajes, maniquíes,
y luego mallas. Entonces seleccionaremos ese. Y vamos a
nombrar este espacio de mezcla, agacharse así. Y eso lo abriremos. Yo sólo voy a arrastrar el mío
a la barra superior así. Entonces, para empezar,
necesitamos configurar nuestro eje para que empecemos
con lo horizontal. Esto va a
ser toda dirección. Por lo que busca dirección. Vamos a establecer el valor
mínimo a menos 180 y luego el
valor positivo a positivo 180. Y si recuerdas de nuestro espacio de
mezcla es menor
que, Eso es porque necesitamos
ser capaces de establecer una animación para todas las
diferentes direcciones que nuestro personaje puede estar yendo. A continuación, necesitamos el eje vertical, así que abriremos eso y
estableceremos que esta sea la velocidad. Y dejaremos el valor
mínimo del eje en 0. Y entonces nuestro
valor máximo de eje estará donde esté tu velocidad de caminata
cuando estés agachado. Entonces si estamos planeando a 300, entonces vamos a
poner esto en 300. Ahora esto es importante porque
si configuro esto para decir 600 y establecemos animaciones para nuestro caminar agachado
en este valor 600. Si nuestro personaje caminaba
por ahí cuando se agachó a los 300, entonces las animaciones que se reproducirán estarán en
la parte central aquí. Entonces, si tuviéramos animaciones en
la parte inferior y en la parte superior, obtendríamos la mitad de las animaciones de arriba y la mitad
de la inferior. Y entonces nuestras animaciones
no se verían muy bien. Por lo que queremos que nuestro
valor máximo de acceso en la parte superior aquí sea cual sea nuestra velocidad máxima de
caminata en cuchada va a ser. Para mí, voy
a configurar hasta 300, así que pondré esto a 300 también. También voy a tomar
Snap to Grid
tanto para el eje vertical
como para el horizontal. Ahora bien, si recuerdas de
nuestras lecciones de animación, en realidad no
podemos usar nuestro chat de animación
agachada porque necesitamos configurar nuestros
esqueletos para que sean compatibles. Entonces para hacer eso, vamos
a ir a personajes, luego a maniquíes, mallas. Vamos a
abrir maniquí SK. Y luego aquí queremos
ir a Windows y luego queremos encontrar
detalles de activos y marcar eso apagado. Para esqueletos compatibles,
queremos agregar una nueva opción. Y queremos que este
sea el esqueleto que vino con las animaciones de las lecciones. Entonces ese va a ser
este de aquí se puede ver que dice camino
menos que animaciones. Entonces vamos a dar clic en ese. Y entonces
salvaremos nuestro esqueleto. Y podemos cerrar
estos detalles de activos y regresar a
nuestro espacio de mezcla. Ahora, para que nuestras animaciones se
muestren en el navegador de activos, es posible que
necesitemos reiniciar
nuestro espacio de mezcla, así que simplemente lo guardaremos y cerraremos, y luego lo volveré a abrir. Entonces eso está en mis animaciones de
lección. Y vamos a abrir
el espacio de mezcla agacharse. Y ahora deberíamos
poder encontrar todas nuestras animaciones aquí
en el navegador de activos. Por lo que comenzará con solo
buscar agacharse. Y eso debería mostrar todas nuestras animaciones agachadas aquí. Entonces comenzaremos con
la animación ociosa. Entonces voy a poner estos en
la parte inferior para la velocidad 0. Entonces agarrará el
rifle, se agachará, ocioso, y tapará eso aquí, aquí
y aquí así. A continuación necesitamos la animación de caminar
hacia adelante, y eso va a
estar en el centro porque eso es para la dirección 0. Entonces vamos a
agarrar la opción ford aquí y arrastrar eso al medio
superior, así. Entonces queremos el hacia atrás, así que agarraremos ese
y eso va a ser
tanto en la dirección
menos uno AT la dirección positiva 180. Entonces queremos la izquierda. Entonces tomaremos la animación de la izquierda
y conectaremos eso aquí. Y luego justo por aquí. Ahora, cuando mantenemos el control, podemos previsualizar nuestra animación y asegurarnos de que todas se
estén reproduciendo correctamente, lo
cual parece que lo son. Ahora podemos guardar y cerrar esto. También estamos cerca de nuestro
esqueleto también. Y vamos a dirigirnos al Plan de Personajes TercerosPersonajes. Entonces eso va a estar en
la carpeta de tercera persona, planos, y luego
encontraremos al personaje en tercera persona. Ahora, nuestro
plano de personaje en realidad tiene un
sistema agachado incorporado que podemos usar. Entonces todo lo que necesitamos
hacer es agregar una entrada. Entonces voy a
buscar entrada y luego lo deletreamos y ponemos el evento de entrada
que vamos control. Voy a usar
el control de izquierda. Entonces vamos a hacer clic derecho
y buscar agacharnos. Y queremos la función agacharse. Y voy a enchufar
esto en presionado y luego hacer clic derecho y
buscar en agacharse. Y queremos que los agachados conectados hasta
el lanzamiento así. Ahora actualmente este
realmente funcionó porque nuestro personaje no
tiene puede agacharse habilitado. Por lo que irá al Movimiento de
Personajes aquí y buscará can agacharse. Y queremos
asumir puede agacharse bajo
capacidades de movimiento como esa. Entonces ahora podemos probar esto. compilaremos y le pegaremos a Play. Y ahora si presiono Control, se
puede ver que mi
cámara se mueve hacia abajo. Y cuando me muevo,
estoy caminando más lento porque estamos usando
nuestra velocidad de caminata agachada, pero nuestras animaciones en realidad cambiando porque aún no las hemos
enganchado. Entonces vamos a dirigirnos
al Blueprint de Animación. Por lo que en realidad
saldrá editor de plan, ir a personajes
que maniquíes, que animaciones y abrir el dinero Animation Blueprint. Y yo sólo voy a arrastrar el
mío hasta el par superior. Ahora, como hicimos en la
sección de animación de este curso, tenemos nuestra lección de estados. Vamos a agregar un nuevo estado
para nuestras animaciones Crunch. Entonces nos dirigiremos a la
gráfica Anim luego a la locomoción. Ahora hay bastantes
formas diferentes en las que podrías configurar esto. Si miras aquí,
tenemos un estado para todo lo
que haces animación y luego
caminaré slash run. Ahora, nuestro espacio de mezcla en realidad tiene las
animaciones ociosas incorporadas. Entonces solo podemos usar un
estado para agacharnos. Y se actualizará
si estamos o no movimiento o ociosos para nosotros. Pero si estás usando
un espacio de mezcla que no tenía esas animaciones
ociosas. Y entonces necesitarías
un estado inactivo agachado
y un estado de movimiento agachado, como hacemos para nuestro ocioso normal. Y entonces caminaré cortando a correr. Para nosotros. Sólo vamos a
hacer clic derecho y usar el estado. Y vamos a llamar así a
esto agacharse. Lo abriremos y conectaremos
nuestro espacio de mezcla para que
se arrastre y
tal mezclará el espacio. Y queremos a Linspace
Claire aquí. Y luego en el panel Detalles, queremos establecer el espacio de mezcla
a nuestro espacio de mezcla agachado. puede ver que está actualizado
para la dirección y la velocidad. Simplemente compilaremos y
obtendremos nuestra velocidad. Entonces nos arrastraremos
y sí conseguiremos velocidad. Y usaremos la velocidad
get ground. Ahora, necesitamos establecer
una variable de dirección. Entonces lo haremos ahora adelante
al Event Graph y
crearemos una nueva variable. Llamaremos a esta dirección. Tenemos que poner esto
en una carroza como esa. Ahora también vamos a
agregar otra variable para si el carácter
está agachado. Entonces crearemos uno
nuevo y
llamaremos a esto es agacharse. Y vamos a establecer esto también. Necesitamos que esto sea un
booleano así. Entonces ahora para conseguir nuestra dirección, necesitamos nuestra velocidad. Entonces haremos clic derecho
y sí obtenemos velocidad. Y eso debería estar
en la parte de abajo aquí. Después de eso
arrastraremos hacia fuera y buscaremos calcular dirección. Esto tomará nuestra velocidad
y nuestros personajes rotación y retorno
y dirección para nosotros. Entonces vamos a necesitar
la variable de carácter. Entonces sí conseguiremos carácter. Y luego a partir de eso
queremos hacer obtener rotación. Queremos el acto de
rotación del get y enchufar eso
a la rotación de base. Y luego desde nuestra dirección
Calcular, podemos establecer nuestra dirección. Por lo que haremos establecer dirección. Podemos enganchar esto
a nuestras secuencias. Entonces agregaré un pin nuevo,
enchufa esto aquí, y agregaré a
redirigir saber solo para mantener las cosas ordenadas así. Ahora tenemos que establecer R es
agacharse variables, así que vamos a arrastrar eso en
y crear un nodo conjunto. Entonces sí conseguiremos movimiento. Y queremos el componente de
movimiento gap. A partir de eso
vamos a hacer agacharnos. Hechizo agacharse correctamente. Y queremos el nodo está
agachado aquí. Y simplemente
conectaremos eso a nuestro agachado y luego agregaremos un nuevo bolígrafo para secuenciar y
conectaremos eso aquí arriba. De nuevo, sólo voy a
agregar un redireccionamiento ahora solo para que las cosas sigan luciendo
un poco demasiado idea. Por lo que ahora podemos regresar
a nuestro estado agachado. Y aquí tenemos que enchufar
en dirección r así. Y entonces podemos compilar. Y ahora tenemos que
establecer las reglas que realmente
interesen en el estribo de la multitud. Entonces iremos a la locomoción. Después arrastraremos de
ocioso a agacharse, y también arrastraremos desde Walk, slash run to agacharse también. Y abriremos la regla
ociosa para agacharse. Entonces aquí solo
queremos conseguir el es agacharse y conectarlo
a la cadera variable. Y después haremos lo
mismo en nuestro paseo slash ron. Y vamos a enchufar eso aquí. Entonces necesitamos reglas
para volver de nuestra agachada a nuestra carrera ociosa
o a pie. Entonces arrastraremos de Crouch a ocioso y luego
abriremos esa regla. Y entonces aquí sólo queremos
conseguir es agacharse, no es cierto. Entonces vamos a arrastrar y no hacer berilio y tapar eso aquí. Y luego queremos
hacer lo mismo. Hemos arrastrado de Crouch
para caminar slash run. Abre esa regla. Y aquí queremos hacer
lo mismo es agacharse,
no es cierto, así que lo probaremos y no lo
haremos booleano. Pero también queremos
comprobar, ¿nos estamos moviendo? Entonces nos arrastraremos de aquí
y haremos y enchufaremos eso aquí. Y luego queremos
conseguir debe moverse, así que debe moverse,
enchufa eso aquí. Por lo que debería verse así. Ahora compilaremos y
en realidad podemos probar esto. Entonces seleccionaremos la
variable es agacharse, asumir esto. puede ver que va hacia arriba
y hacia abajo como debería. Entonces compilaremos y en
realidad probaremos esto en juego. Por lo que se dirigirá a
nuestro mapa, golpeó Play. Y ahora cuando presiono Control, puede ver que en realidad nos agachamos, estamos agachados, se está reproduciendo
animación ociosa. Si camino hacia adelante
y de lado a lado, también
se están reproduciendo animaciones de
movimiento. Ahora actualmente nuestro personaje solo se enfrenta a la dirección en la
que nos estamos moviendo. Y la razón por la
que hace eso es que si te acuerdas, caminé slash run
blend space es un 1D, así que solo tiene hacia adelante
y hacia atrás. No tiene animaciones
laterales como lo hace nuestro agacharse. Entonces, si quisiéramos que nuestras animaciones laterales se
jugaran mientras estamos agachados, necesitaríamos cambiar configuración de
movimientos de
nuestro personaje. Entonces para hacer eso
exhalará planetas a, y si nos dirigimos de nuevo a
nuestro TercerPersonaje
PersonaPodemos seleccionar el movimiento del
personaje. Y aquí
vamos a buscar
orientar la rotación al movimiento. puede ver que
actualmente está encendido, lo que significa que cada vez que nuestro
personaje se mueva en una dirección, el actor se enfrentará a
esa dirección. Apaga esto y
compile el hit Play. Verás que si me
muevo de lado a lado, nuestro personaje ya no mira hacia la dirección en la
que nos movemos. Y la razón por la que la animación
está haciendo esto es porque sólo tenemos animaciones hacia adelante
y hacia atrás. Pero si nos agachamos y
nos movemos de lado a lado, se
puede ver que nuestro personaje en realidad coloca las animaciones
correctas. Y eso es porque nuestro se agacha un espacio de mezcla 2D con
animaciones para cada dirección. este momento, si miro la cámara
en una dirección diferente, no
importa dónde mire. Nuestro personaje siempre
va a enfrentar de la misma manera. Entonces lo que podríamos hacer para cambiar esto es ir al
Third PersonCharacter aquí, luego seleccionar el componente superior aquí para obtener nuestros valores por defecto de costos. Y entonces aquí podemos buscar York y podemos asumir la rotación del controlador de
uso. Estás ahora cuando le pegamos a
Compile y
le pegamos a Play, se puede ver que puedo
moverme de lado a lado y caminar slash run no juega muy bien, pero nuestra agachada sí. Y si miro en una dirección
diferente, se
puede ver que nuestro
personaje realmente mira en esa dirección. Para que podamos cambiar la dirección
que estamos viendo ahora. Ahora, por supuesto, todas estas
configuraciones las puedes cambiar durante el tiempo de ejecución cuando suceden
ciertas cosas. Entonces, por ejemplo, tal vez
solo querías habilitar o deshabilitar orientar la rotación
al movimiento cuando te agacharas, podrías hacer eso con solo conseguir el
movimiento del personaje aquí, arrastrando y
buscando orientarse, desplácese hacia abajo hasta la parte inferior. Y se puede hacer establecer orientar la
rotación al movimiento. Podemos poner esto en verdad cuando nos agachamos y falso
cuando nos agachamos. O podríamos cambiar eso. Estás configurando que activamos
dentro de los valores predeterminados de nuestra clase aquí. Podríamos cambiar esto. Entonces podríamos hacer set, usar
control de rotación. Lo eres, y podemos
encender o apagar esto cuando queramos. Todos estos ajustes son de preferencia
personal. Depende totalmente de cómo
quieras que tu personaje se mueva y cómo quieras que el jugador
pueda controlarlo. Ahora bien, si querías cambiar velocidad de
movimiento agachada de
tus personajes, podemos hacerlo en el movimiento de
personajes aquí, que nos deshacemos de esta búsqueda. Podemos simplemente
buscar agacharse y aquí
encontrarás la
velocidad máxima de caminata agachada. También puedes cambiar tu media altura
agachada. Entonces así de grande
será
el componente de la cápsula dentro del personaje mientras estás agachado. Y también se puede girar
si el personaje
puede o no caminar por una cornisa, agacharse
salvaje. Nuevamente, estas cosas
se pueden cambiar en código. Puedes simplemente agarrar el componente de
movimiento del personaje , arrastrar hacia fuera, establecer el máximo agacharse, y puedes cambiar
esa velocidad máxima de caminata agachada en código
si quieres. Ahora, por último, tal vez
quieras configurar agacharse para que sea toggle
en lugar de hold. Podemos hacer eso. Entonces
eliminaremos este código aquí y desconectaremos estos
por ahora y los moveremos hacia atrás. Usaremos presionado y
haremos un nodo de rama. Y aquí queremos comprobar es el personaje
actualmente agachado. Entonces para hacer eso, vamos a
conseguir movimiento del personaje, conseguir el agachado o está agachado va a
enchufar eso en aquí. Y si actualmente estamos agachados de lo
que queremos agacharnos, y si no estamos
agachados actualmente, queremos agacharnos. Por lo que reordenará
estos así. Ahora cuando le pegue a Play, verás si presiono agacharme. Yo me quedo agachado. Y
si me agacho sin precio, salimos de Crouch y no
tenemos que
aguantarlo más. Entonces ese es el final
de esta lección. Esperemos que ahora
entiendas cómo configurar un sistema simple de agacharse para
tus futuros personajes.