Algunos de los obstáculos más sencillos simplemente se mueven hacia adelante y hacia atrás. A menudo, los encontrarás en los desafíos de plataforma, donde debes medir tus saltos y moverte con cuidado para no caer.
A la acción de mover una plataforma de esta manera se le llama translación, o cambiar la posición de la transformación de un objeto. En esta sección, aprenderás a crear plataformas que no solo se mueven hacia atrás y hacia adelante, sino que pueden moverse hacia múltiples puntos en el entorno, y luego aprenderás a usarlas para crear tu primer obstáculo.
Cómo hacer utilerías que se trasladen
Sigue estos pasos para escribir el código que trasladará tus plataformas:
Crea una nueva clase de Verse llamada
translating_propque herede demovable_propusando el explorador de Verse. Añade el especificador<concrete>a esta clase para exponer sus propiedades a UEFN.Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):Agrega las instrucciones
que usen { /Fortnite.com/Devices/CreativeAnimation }yque usen { /UnrealEngine.com/Temporary/SpatialMath }en la parte superior del archivo para importar estos módulos. Los necesitarás para animar tu utilería. Los textos emergentes que se usan en esta sección también se incluyen aquí.Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget." # A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):En la parte superior de la definición de la clase
translating_prop, añade los siguientes campos:Una matriz editable de
creative_propdenominadaMoveTargets. Estas son las utilerías del modo Creativo a las que tuRootPropse moverá durante el juego. Usar otra utilería en lugar de una transformación como el objetivo del movimiento facilita ver hacia dónde se dirigen tus utilerías. Las harás invisibles luego durante el juego en el editor.Verse# The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{}Una variable
vector3opcional y editable llamadaMovePosition. Si no asignas una utileríaMoveTarget, tu utilería raíz usará esto para saber adónde moverse.Verse# The position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget. @editable {ToolTip := MovePositionTip} var MovePosition:?vector3 = falseUna variable
vector3llamadaTargetPosition. Esta es la posición hacia la que se moverá tu utilería realmente y tendrá el valor ya sea de la posición del objetivo del movimiento o de laMovePosition.Verse# The position the prop is currently targeting. var TargetPosition:vector3 = vector3{}La definición de la clase debería verse así:
Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop): # The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{} # The optional position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget.
Dado que ya estableciste la función
Move()que mueve tu utilería enmovable_prop, puedes sobrescribirla en esta clase. Anula la funciónMove()en tu clasetranslating_prop.Verse# Translate toward the MovePosition, or MoveTarget if one is set. Move<override>()<suspends>:void=En
Move(), en una expresiónif, verifica si laMovePositionestá establecida y almacenada en un valorNewPosition. De ser así, establece laTargetPositionen laNewPosition.Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPositionTu función
MoveToEase()necesita recibir unanimation_mode. Tu animación se reproduce una vez todas las veces que se llama aMove(), y elanimation_modecontrola qué sucede cuando termina la animación. Llama aMoveToEase()para pasar laTargetPosition, laMoveDuration, elMoveEaseTypeyanimation_mode.OneShot. Si usas este modo de animación tu animación se detendrá una vez que el objeto alcance su objetivo. Esta es la funciónMoveToEase()sobrecargada que estableciste antes que no recibe una rotación o una escala.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once. RootProp.MoveToEase(TargetPosition, MoveDuration, MoveEaseType, animation_mode.OneShot)Aunque el modo de animación de una toma es útil si quieres restablecer tu objeto o mantenerlo moviéndose, ¿qué pasa si quieres reproducirlo al revés? En este caso, puedes usar el modo de animación
PingPong. Esto reproducirá tu animación y luego la reproducirá al revés para mover la utilería de vuelta a donde comenzó. También hay un modo de animaciónLoop, que reproduce tu animación en bucle, pero necesita que la animación termine en el mismo lugar donde comenzó. Escoge el modo de animación adecuado para tu experiencia.Al configurar tus utilerías, si no estableciste una
MovePositionen el editor, deberás establecer uno o másMoveTargetspara que tu utilería raíz se mueva hacia ellos. Para manejar losMoveTargetsen una expresiónfor, itera a través de cada objetivo enMoveTargets. Verifica siMoveTargetestá establecido llamando aIsValid[]. De ser así, establece laTargetPositionen la traslación delMoveTarget.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition else: for: MoveTarget:MoveTargets do: # Set the TargetPosition to the MoveTarget's position if theFinalmente, llama a
MoveToEase(), de nuevo conanimation_mode.OneShotcomo el modo de animación. Hacer esto en una expresiónformoverá tu utilería hacia cada uno de los objetivos en secuencia; al final se restablecerá o continuará en función de los parámetros que estableciste. La funciónMove()completa debería verse de la siguiente manera:Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once.
Cómo crear el dispositivo de Verse
Ahora que tu código de Verse está completo, necesitas una manera de llamarlo en el nivel. Utilizarás otro dispositivo de Verse para coordinar tus utilerías y configurarlas a todas cuando comience el juego. Sigue estos pasos para coordinar tus obstáculos y mover tus plataformas.
Crea un nuevo dispositivo de Verse llamado
prop_animatorusando el explorador de Verse. Este es el dispositivo que coordinará el movimiento de tus utilerías.En
prop_animator, añade una matriz editable detranslating_propllamadaTranslatingProps. Luego, enOnBegin(), en una expresiónfor, llama aSetup()en cada utilería. El archivoprop_animatorcompleto debería verse así:Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation." # Coordinates moving props through animation by calling each moveable_prop's Setup() method. prop_animator := class(creative_device): # Array of moveable_props that translate using animation.Guarda tu código y compílalo.
Arrastra tu dispositivo
prop_animatorhacia el nivel.
Cómo vincular utilerías a dispositivos
En el editor, elimina algunas de las utilerías cerca del comienzo para crear una brecha. Añade dos utilerías FG01 Hover Platform M a tu nivel. Dado que estas son las plataformas que animarás, llámalas TranslatingPlatform. Luego, añade varias utilerías FG01 Button Bulb, que serán los objetivos hacia los que se moverá cada plataforma. Llama a estos PlatformTarget. Pon las plataformas sobre la brecha y asegúrate de poner los objetivos adonde quieres que vayan las plataformas. Puedes especificar múltiples objetivos para cada plataforma.
Configuración de las utilerías de traslación. Cada plataforma se mueve hacia adelante y hacia atrás entre los dos objetivos de movimiento como lo indican las flechas.
Si quieres ocultar las utilerías objetivo durante el juego, asegúrate de configurar Actor oculto en el juego dentro de Renderización en Verdadero para cada objetivo.
Arrastra tu dispositivo prop_animator hacia el nivel y selecciónalo. En el esquematizador, añade un elemento de matriz a TranslatingProps para cada plataforma. Asígnale a cada utilería los siguientes valores:
| Opción | Value | Explicación |
|---|---|---|
MoveTargets | Asígnalo a los objetivos hacia los que quieres que se mueva tu utilería. | Estos son los objetivos de utilería del modo Creativo hacia los que se moverá tu utilería, en orden. |
RootProp | Asígnalos a la utilería que estás animando. | Esta es la utilería que estás animando. |
Haz clic en Comenzar sesión y ve cómo se animan tus plataformas. Prueba variando la MoveDuration, el MoveEaseType y los retrasos de inicio y finalización para crear diferentes escenarios.
Estamos listos con la traslación, en la próxima sección, crearás utilerías que rotan en diferentes direcciones.
Siguiente
Código completo
Esa es la versión completa del código en esta sección:
translating_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget."
# A prop that moves (translates) toward either a Creative prop target
# or a position in world space.
translating_prop<public> := class<concrete>(movable_prop):
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation."
# Coordinates moving props through animation by calling each moveable_prop's Setup() method.
prop_animator := class(creative_device):
# Array of moveable_props that translate using animation.