A veces, durante los juegos de plataformas, te encontrarás con obstáculos que cambian sus tamaños. Estas podrían ser plataformas que aumentan y disminuyen de tamaño, o se hacen más altas o más bajas a lo largo de un eje determinado. Cuando se modifica la dimensión de un objeto de esta forma, se llama modificar su escala.
La escala de un objeto indica cuánto hay que multiplicar cada una de sus dimensiones en relación consigo mismo. Por lo general, los objetos tienen una escala de {X := 1.0, Y := 1.0, Z := 1.0}. Si duplicas el valor Z de la escala de un objeto, este pasa a ser el doble de alto. Si lo reduces a la mitad, medirá la mitad.
La escala es la última pieza del rompecabezas de la transformación. En esta sección aprenderás a manipular la escala para crear objetos que aumentan y disminuyen de tamaño.
Cómo crear elementos que cambian de escala
Sigue los pasos que se indican a continuación para crear un código capaz de escalar tus elementos:
-
Crea una nueva clase de Verse con el nombre
scaling_propque herede demovable_propmediante el explorador de Verse. Añade el especificador<concrete>a esta clase para exponer sus propiedades a UEFN.# Un elemento que escala hacia una escala determinada o hacia la escala de un elemento del modo Creativo. scaling_prop<public> := class<concrete>(movable_prop): -
Añade las sentencias
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.using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "La posición opcional para moverse al espacio del mundo. Utilízala si no quieres establecer un MoveTarget." # Un elemento que escala hacia una escala determinada o hacia la escala de un elemento del modo Creativo. scaling_prop<public> := class<concrete>(movable_prop): -
En la parte superior de la definición de la clase
scaling_prop, añade los siguientes campos.-
Una matriz editable
vector3con el nombreScaleTargets. Estas son las escalas a las que crecerá y se encogerá tu elemento. Una vez que se completaMove(), la escala del elemento se multiplicará por este valora.# La matriz de vector3 de objetivos para la escala de RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} -
Un editable opcional
creative_propcon el nombreMatchScaleTarget. Si quieres que tu elemento se escale para coincidir con la escala de otro elemento, puedes establecer este valor en vez de utilizarScaleTargets. Por ejemplo, podrías utilizar esto si quisieras crear una serie de plataformas que crecieran todas al mismo tamaño antes de reiniciarse.# El elemento del modo Creativo opcional para que el RootProp haga coincidir la escala. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false -
Una
rotationvariable con el nombreTargetScale. Es la escala a la que se está escalando actualmente el elemento.# La escala que el elemento tiene actualmente como objetivo. var TargetScale:vector3 = vector3{}
-
-
La definición final de la clase debería tener este aspecto:
using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "La posición opcional para moverse al espacio del mundo. Utilízala si no quieres establecer un MoveTarget." # Un elemento que escala hacia una escala determinada o hacia la escala de un elemento del modo Creativo. scaling_prop<public> := class<concrete>(movable_prop): # La matriz de vector3 de objetivos para la escala de RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # El elemento del modo Creativo opcional para que el RootProp haga coincidir la escala. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # La escala que el elemento tiene actualmente como objetivo. var TargetScale:vector3 = vector3{} -
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 clasescaling_prop. EnMove(), primero comprueba si se ha establecido elMatchScaleTargety guárdalo en una variableScaleToMatch. Si es así, establece laTargetScalea laScaleToMatch, después llama aMoveToEase(), pasando laTargetScale, laMoveDuration, elMoveEaseTypeyanimation_mode.OneShot. Esta es la funciónMoveToEase()que sobrecargaste antes y que únicamente modifica la escala.# Escala el RootProp hacia el ScaleTarget o MatchScaleTarget, si se ha establecido. Move<override>()<suspends>:void= # Establece la TargetScale a la MatchScaleTarget, si se ha definido. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Llama a MoveToEase para iniciar el escalado del elemento. El modo de animación OneShot reproducirá la animación una vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Si no has establecido un
MatchScaleTarget, entonces necesitas recorrer la matrizScaleTargets. En una expresiónfor, recorre cadaScaleTargetenScaleTargetsy establece elTargetScaleen elScaleTarget. A continuación, llama aMoveToEase(), pasando los mismos valores que antes. Tu función completaMove()debería tener este aspecto:# Escala el RootProp hacia el ScaleTarget o MatchScaleTarget, si se ha establecido. Move<override>()<suspends>:void= # Establece la TargetScale a la MatchScaleTarget, si se ha definido. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Llama a MoveToEase para iniciar el escalado del elemento. El modo de animación OneShot reproducirá la animación una vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # En caso contrario, escala a cada objetivo de la matriz ScaleTargets. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget # Llama a MoveToEase para iniciar el escalado del elemento. El modo de animación OneShot reproducirá la animación una vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
En tu clase de dispositivo
prop_animator, añade una nueva matriz editable descaling_propcon el nombreScalingProps. Añade otra expresiónforenOnBegin()que recorra todos los elementos que escalan y llama aSetup()en ellos. Tu claseprop_animatoractualizada debería tener el siguiente aspecto:using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "Los elementos que se trasladan (mueven) con animación." RotatingPropsTip<localizes>:message = "Los elementos que giran con animación." ScalingPropsTip<localizes>:message = "Los elementos que se escalan con animación." # Coordina los elementos móviles a lo largo de la animación llamando al método Setup() de cada elemento. prop_animator := class(creative_device): # Matriz de movable_props que se trasladan con la animación. @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # Matriz de movable_props que rotan con la animación. @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # Matriz de movable_props que escalan con la animación. @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{} # Se ejecuta cuando se inicia el dispositivo en un juego en ejecución OnBegin<override>()<suspends>:void= # Para cada elemento, llama a Setup() para iniciar la animación. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() -
Guarda el código y compílalo.
Cómo vincular elementos a dispositivos
De vuelta en el editor, elimina algunos de los elementos que se encuentran después de la sección de elementos que giran pero antes de los bloques elevados para crear otro espacio. Añade un FG01 Punch Glove (guante de boxeo) a tu nivel. Nombra el guante ScalingGlove. Coloca el guante en el centro del espacio y gíralo para que quede hacia arriba.
Configuración del guante de boxeo. El guante se escala para crear un ascensor para elevar a los jugadores.
Selecciona el prop animator en el Esquematizador y añade un elemento de matriz a ScalingProps para tu guante. Asigna los siguientes valores al elemento:
| Opción | Valor | Explicación |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | Este elemento se escalará al doble de sus dimensiones en el eje Y, y después volverá a sus dimensiones iniciales. Ten en cuenta que, como el elemento está girado, el eje Y es ahora el "hacia arriba" local del elemento. |
| RootProp | Asigna al elemento que estás animando. | Este es el elemento que estás animando. |
Aplica los cambios y comprueba los elementos. Intenta variar las diferentes escalas para obtener distintas dimensiones, e intenta escalar otros elementos para crear diferentes escenarios.
A continuación
En la siguiente sección combinarás movimiento, rotación y escala para crear elementos que puedan hacer las tres cosas.
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
Código completo
A continuación encontrarás el código completo creado en esta sección:
scaling_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip<localizes>:message = "La posición opcional para moverse al espacio del mundo. Utilízala si no quieres establecer un MoveTarget."
# Un elemento que escala hacia una escala determinada o hacia la escala de un elemento del modo Creativo.
scaling_prop<public> := class<concrete>(movable_prop):
# La matriz de vector3 de objetivos para la escala de RootProp.
@editable {ToolTip := MoveTargetsTip}
var ScaleTargets:[]vector3= array{}
# El elemento del modo Creativo opcional para que el RootProp haga coincidir la escala.
@editable {ToolTip := MatchScaleTargetTip}
var MatchScaleTarget:?creative_prop = false
# La escala que el elemento tiene actualmente como objetivo.
var TargetScale:vector3 = vector3{}
# Escala el RootProp hacia el ScaleTarget o MatchScaleTarget, si se ha establecido.
Move<override>()<suspends>:void=
# Establece la TargetScale a la MatchScaleTarget, si se ha definido.
if:
ScaleToMatch := MatchScaleTarget?.GetTransform().Scale
then:
set TargetScale = ScaleToMatch
# Llama a MoveToEase para iniciar el escalado del elemento. El modo de animación OneShot reproducirá la animación una vez.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
else:
# En caso contrario, escala a cada objetivo de la matriz ScaleTargets.
for:
ScaleTarget:ScaleTargets
do:
set TargetScale = ScaleTarget
# Llama a MoveToEase para iniciar el escalado del elemento. El modo de animación OneShot reproducirá la animación una vez.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "Los elementos que se trasladan (mueven) con animación."
RotatingPropsTip<localizes>:message = "Los elementos que giran con animación."
ScalingPropsTip<localizes>:message = "Los elementos que se escalan con animación."
# Coordina los elementos móviles a lo largo de la animación llamando al método Setup() de cada elemento.
prop_animator := class(creative_device):
# Matriz de movable_props que se trasladan con la animación.
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# Matriz de movable_props que rotan con la animación.
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# Matriz de movable_props que escalan con la animación.
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# Se ejecuta cuando se inicia el dispositivo en un juego en ejecución
OnBegin<override>()<suspends>:void=
# Para cada elemento, llama a Setup() para iniciar la animación.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()