Algunos de los obstáculos más fáciles se mueven simplemente hacia adelante y hacia atrás. A menudo te encontrarás con ellos en los desafíos de plataformas, donde tendrás que calcular el tiempo de los saltos y moverte con cuidado para no caerte.
El movimiento de una plataforma de este modo se denomina traslación, o cambio de posición de la transformación de un objeto. En esta sección, aprenderás a crear plataformas que no solo se mueven hacia delante y hacia atrás, sino que pueden desplazarse a múltiples puntos del mundo, ¡y a utilizarlas para crear tu primer obstáculo!
Cómo crear elementos que se pueden trasladar
Sigue los pasos que se indican a continuación para construir el código con el que podrás trasladar tus plataformas:
Crea una nueva clase de Verse con el nombre
translating_propque herede demovable_propmediante 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):Añade las declaraciones
using { /Fortnite.com/Devices/CreativeAnimation }yusing { /UnrealEngine.com/Temporary/SpatialMath }en la parte superior del archivo para importar estos módulos. Necesitarás estos módulos para animar el elemento. También se incluyen aquí los consejos utilizados en esta sección.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_propcon el nombreMoveTargets. Estos son los elementos del modo Creativo a los que se moverá tuRootPropdurante el juego. El uso de otro elemento en lugar de una transformación como objetivo hace que sea más fácil visualizar hacia dónde se dirigen los elementos. Más adelante los harás invisibles 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 opcional editable
vector3con el nombreMovePosition. Si no asignas un elementoMoveTarget, el elemento raíz lo utilizará para saber hacia dó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
vector3con el nombreTargetPosition. Esta es la posición a la que se moverá tu elemento y se establecerá como la posición del objetivo de movimiento oMovePosition.Verse# The position the prop is currently targeting. var TargetPosition:vector3 = vector3{}La definición de la clase debería tener este aspecto:
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 configuraste la función
Move()que mueve tu elemento demovable_prop, puedes anularla 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, comprueba siMovePositionestá definida y almacenada en un valorNewPosition. Si es así, estableceTargetPositioncomoNewPosition.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()necesitará que le pases unanimation_mode. La animación se reproduce una vez cada vez que se llama aMove()yanimation_modecontrola lo que sucede cuando la animación finaliza. Llama aMoveToEase()para pasarTargetPosition,MoveDuration,MoveEaseTypeyanimation_mode.OneShot. Al utilizar este modo de animación, la animación se detendrá una vez que el objeto alcance el objetivo. Esta es la función sobrecargadaMoveToEase()que has configurado anteriormente y que no recibe rotación ni 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)Si bien el modo de animación de una sola vez (OneShot) es útil si quieres restablecer tu objeto o mantenerlo en movimiento, ¿qué ocurre si quieres reproducirla en sentido inverso? En este caso, puedes utilizar el modo de animación
PingPong. Esta opción reproducirá tu animación, después la reproducirá en sentido contrario y así el elemento volverá al lugar donde empezó. También existe el modo de animaciónLoopque hace un bucle en tu animación pero requiere que tu animación termine en el mismo lugar donde empieza. Elige el modo de animación que mejor se adapte a las necesidades de tu experiencia.Al configurar tus elementos, si no has establecido una
MovePositionen el editor, tendrás que establecer uno o másMoveTargetspara que tu elemento raíz se mueva. Para gestionar losMoveTargetsen una expresiónfor, deberás recorrer cada objetivo enMoveTargets. Comprueba siMoveTargetestá definido llamando aIsValid[]. Si es así, estableceTargetPositioncomo la traslación deMoveTarget.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 thePor último, llama a
MoveToEase(), de nuevo conanimation_mode.OneShotcomo modo de animación. Al hacerlo en una expresiónfor, moverás tu elemento a cada uno de los objetivos en secuencia, reiniciando al final o continuando en función de los parámetros que hayas establecido. Tu funciónMove()completa debería tener este aspecto: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 construir el dispositivo de Verse
Ahora que tu código de Verse está completo, necesitas una forma de llamarlo dentro del nivel. Utilizarás otro dispositivo de Verse para coordinar tus elementos y colocarlos todos cuando empiece el juego. Sigue los pasos que se indican a continuación para coordinar los obstáculos y mover las plataformas.
Crea un nuevo dispositivo de Verse llamado
prop_animatormediante el explorador de Verse. Este es el dispositivo que coordinará el movimiento de tus elementos.En
prop_animator, añade una matriz editable detranslating_propcon el nombreTranslatingProps. Después, enOnBegin(), en una expresiónfor, llama aSetup()en cada elemento. Tu archivoprop_animatorcompleto debería tener el siguiente aspecto: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 el código y compílalo.
Arrastra tu dispositivo
prop_animatoral nivel.
Cómo vincular elementos a dispositivos
De vuelta en el editor, elimina algunos de los elementos cerca del principio para crear un espacio. Añade dos elementos FG01 Hover Platform M (plataforma flotante M) a tu nivel. Puesto que estas son las plataformas que vas a animar, nómbralas TranslatingPlatform. Luego añade varios elementos FG01 Button Bulb (bombilla de botón), que serán los objetivos a los que se moverá cada plataforma. Dales el nombre PlatformTarget. Coloca las plataformas sobre el espacio y asegúrate de colocar los objetivos donde quieres que vayan las plataformas. Puedes especificar múltiples objetivos para cada plataforma.
Configuración de la traslación de los elementos. Cada plataforma se mueve hacia delante y hacia atrás entre dos objetivos de movimiento, tal como indican las flechas.
Si quieres ocultar los elementos objetivo durante el juego, asegúrate de activar la opción Actor oculto en el juego en Renderizado para cada objetivo.
Arrastra tu dispositivo prop_animator al nivel y selecciónalo. En el Esquematizador, añade un elemento de matriz a TranslatingProps para cada plataforma. Asigna a cada elemento los siguientes valores:
| Opción | Valor | Explicación |
|---|---|---|
MoveTargets | Asigna a los objetivos hacia los que quieres que se mueva tu elemento. | Estos son los objetivos de los elementos del modo Creativo a los que se moverá tu elemento, por orden. |
RootProp | Asigna al elemento que estás animando. | Este es el elemento que estás animando. |
Haz clic en Abrir sesión y observa cómo se animan tus plataformas. Intenta modificar MoveDuration, MoveEaseType y los retrasos de inicio y fin para crear diferentes escenarios.
Esto es todo en cuanto a la traslación. En la siguiente sección, crearás elementos que giran en distintas direcciones.
Siguiente
Código completo
A continuación encontrarás el código completo creado 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.