A veces, durante los juegos de plataformas, encontrarás obstáculos que cambian sus dimensiones. Estos podrían ser plataformas que aumentan o reducen su tamaño o se hacen más altas o bajas en cierto eje. Cuando se modifican las dimensiones de un objeto de esta manera se dice que se está modificando su escala.
La escala de un objeto te indica por cuánto multiplicar cada una de sus dimensiones respecto a sí 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, se duplica su altura. Si lo reduces a la mitad, pasa lo mismo con su altura.
La escala es la parte final del proceso de transformación. En esta sección, aprenderás a manipular la escala para crear objetos que se agrandan o encogen a diferentes tamaños.
Cómo hacer utilerías que se escalan
Sigue estos pasos para crear el código que escala tus utilerías:
-
Crea una nueva clase de Verse llamada
scaling_propque herede demovable_propusando el explorador de Verse. Añade el especificador<concrete>a esta clase para exponer sus propiedades a UEFN.# Una utilería que se escala hacia una escala dada o a la escala de una utilería del modo Creativo. scaling_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. Los necesitarás para animar tu utilería. Los textos emergentes que se usan en esta sección también se incluyen aquí.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 entorno. Usa esto si no quieres establecer un MoveTarget." # Una utilería que se escala hacia una escala dada o a la escala de una utilería 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
vector3llamadaScaleTargets. Estas son las escalas con las que tu utilería se agrandará o encogerá. Después de que se completeMove(), la escala de la utilería se multiplicará por este valor.# La matriz de objetivos de vector3 con los que se escalará la RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} -
Una
creative_propopcional y editable llamadaMatchScaleTarget. Si quieres que tu utilería se escale para ajustarse a la escala de otra utilería, puedes establecer este valor en lugar de usar laScaleTargets. Por ejemplo, puedes utilizar esto si quieres crear una serie de plataformas que se agranden al mismo tamaño antes de restablecerse.# La utilería del modo Creativo opcional cuya escala igualará la RootProp. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false -
Una variable
rotationllamadaTargetScale. Esta es la escala hacia la que la utilería se está escalando actualmente.# La escala a la que se dirige actualmente la utilería. var TargetScale:vector3 = vector3{}
-
-
La definición final de la clase debería verse así:
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 entorno. Usa esto si no quieres establecer un MoveTarget." # Una utilería que se escala hacia una escala dada o a la escala de una utilería del modo Creativo. scaling_prop<public> := class<concrete>(movable_prop): # La matriz de objetivos de vector3 con los que se escalará la RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # La utilería del modo Creativo opcional cuya escala igualará la RootProp. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # La escala a la que se dirige actualmente la utilería. var TargetScale:vector3 = vector3{} -
Dado que ya estableciste la función
Move()que mueve tu utilería enmovable_prop, puedes sobrescribirla en esta clase. Sobrescribe la funciónMove()en tu clasescaling_prop. EnMove(), primero, verifica siMatchScaleTargetestá establecido y guárdalo en una variableScaleToMatch. De ser así, establece laTargetScaleen laScaleToMatch, luego llama aMoveToEase()y pásale laTargetScale, laMoveDuration, elMoveEaseTypeyanimation_mode.OneShot. Esta es la funciónMoveToEase()que sobrecargaste antes y que solo modifica la escala.# Escala la RootProp hacia el ScaleTarget o el MatchScaleTarget si se estableció uno. Move<override>()<suspends>:void= # Establece la TargetScale en la MatchScaleTarget si está establecido. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Llama a MoveToEase para comenzar a escalar la utilería. El modo de animación OneShot reproducirá la animación una vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Si no estableciste un
MatchScaleTarget, entonces debes recorrer tu matrizScaleTargets. En una expresiónfor, recorre cadaScaleTargetenScaleTargetsy establece laTargetScaleen elScaleTarget. Luego, llama aMoveToEase()y pásale los mismos valores que antes. La funciónMove()completa debería verse así:# Escala la RootProp hacia el ScaleTarget o el MatchScaleTarget si se estableció uno. Move<override>()<suspends>:void= # Establece la TargetScale en la MatchScaleTarget si está establecido. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Llama a MoveToEase para comenzar a escalar la utilería. El modo de animación OneShot reproducirá la animación una vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # De lo contrario, escala a cada objetivo en la matriz ScaleTargets. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget # Llama a MoveToEase para comenzar a escalar la utilería. 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_propllamadaScalingProps. Añade otra expresiónforaOnBegin()que recorra todas las utilerías que se escalarán y que llame aSetup()en ellas. Tu claseprop_animatoractualizada debería verse así:using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "Las utilerías que se trasladan (mueven) usando animación." RotatingPropsTip<localizes>:message = "Las utilerías que rotan usando animación." ScalingPropsTip<localizes>:message = "Las utilerías que se escalan usando animación." # Coordina el movimiento de las utilerías a través de animación llamando al método Setup() de cada utilería. prop_animator := class(creative_device): # Matriz de movable_props que se trasladan usando animación. @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # Matriz de movable_props que rotan usando animación. @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # Matriz de movable_props que se escalan usando animación. @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{} # Se ejecuta cuando el dispositivo se inicia en un juego en ejecución OnBegin<override>()<suspends>:void= # Por cada utilería, llama a Setup() para comenzar a animar. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() -
Guarda tu código y compílalo.
Cómo conectar las utilerías a los dispositivos
En el editor, elimina algunas de las utilerías después de la sección de las utilerías rotatorias, pero antes de los bloques elevados, para crear otra brecha. Añade otro FG01 Punch Glove a tu nivel. Ponle el nombre ScalingGlove al guante. Pon el guante en medio de la brecha y rótalo de modo que quede mirando hacia arriba.
Configura el guante de boxeo. El guante aumenta la escala para crear un elevador para subir a los jugadores.
Selecciona tu animador de utilería en el esquematizador y añade un elemento de matriz a ScalingProps para tu guante. Asígnale los siguientes valores a la utilería:
| Opción | Valor | Explicación |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | Esta utilería duplicará la escala de sus dimensiones en el eje Y, luego, la reducirá de vuelta a sus dimensiones iniciales. Ten en cuenta que, dado que la utilería está rotada, el eje Y se convierte en la dirección "superior" de la utilería. |
| RootProp | Asígnala a la utilería que estás animando. | Esta es la utilería que estás animando. |
Sube tus cambios y luego revisa tus utilerías. Prueba variando las diferentes escalas para obtener diferentes dimensiones, y prueba escalando otras utilerías para crear diferentes escenarios.
Próximo paso
En la próxima sección, combinarás movimiento, rotación y escala para crear utilerías que pueden hacer las tres cosas.
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
Código completo
Esa es la versión completa del código 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 entorno. Usa esto si no quieres establecer un MoveTarget."
# Una utilería que se escala hacia una escala dada o a la escala de una utilería del modo Creativo.
scaling_prop<public> := class<concrete>(movable_prop):
# La matriz de objetivos de vector3 con los que se escalará la RootProp.
@editable {ToolTip := MoveTargetsTip}
var ScaleTargets:[]vector3= array{}
# La utilería del modo Creativo opcional cuya escala igualará la RootProp.
@editable {ToolTip := MatchScaleTargetTip}
var MatchScaleTarget:?creative_prop = false
# La escala a la que se dirige actualmente la utilería.
var TargetScale:vector3 = vector3{}
# Escala la RootProp hacia el ScaleTarget o hacia el MatchScaleTarget si se estableció uno.
Move<override>()<suspends>:void=
# Establece la TargetScale en la MatchScaleTarget si está establecido.
if:
ScaleToMatch := MatchScaleTarget?.GetTransform().Scale
then:
set TargetScale = ScaleToMatch
# Llama a MoveToEase para comenzar a escalar la utilería. El modo de animación OneShot reproducirá la animación una vez.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
else:
# De lo contrario, escala a cada objetivo en la matriz ScaleTargets.
for:
ScaleTarget:ScaleTargets
do:
set TargetScale = ScaleTarget
# Llama a MoveToEase para comenzar a escalar la utilería. 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 = "Las utilerías que se trasladan (mueven) usando animación."
RotatingPropsTip<localizes>:message = "Las utilerías que rotan usando animación."
ScalingPropsTip<localizes>:message = "Las utilerías que se escalan usando animación."
# Coordina el movimiento de las utilerías a través de animación llamando al método Setup() de cada utilería.
prop_animator := class(creative_device):
# Matriz de movable_props que se trasladan usando animación.
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# Matriz de movable_props que rotan usando animación.
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# Matriz de movable_props que se escalan usando animación.
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
OnBegin<override>()<suspends>:void=
# Por cada utilería, llama a Setup() para comenzar a animar.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()