Às vezes, durante jogos de plataforma, você encontrará obstáculos que mudam de tamanho. Podem ser plataformas que aumentam e diminuem de tamanho, ou que ficam mais altas e mais baixas em determinado eixo. Quando as dimensões de um objeto são modificadas dessa forma, isso é chamado de modificar sua escala.
A escala de um objeto informa por que valor multiplicar cada uma de suas dimensões, em relação a ele próprio. Normalmente, os objetos tem uma escala de {X := 1.0, Y := 1.0, Z := 1.0}. Se você duplicar o valor de Z da escala de um objeto, ele fica duas vezes mais alto. Se reduzir pela metade, fica com metade da altura.
A escala é a parte final do quebra-cabeças do transformar. Nesta seção, você aprenderá a manipular a escala para criar objetos que crescem e encolhem a diferentes tamanhos.
Como criar adereços que escalam
Siga os passos abaixo para criar o código que escala seus adereços:
-
Crie uma nova classe Verse chamada
scaling_propque herda demovable_propusando o Explorador do Verse. Adicione o especificador<concrete>a essa classe para expor suas propriedades ao UEFN.~~~(verse) # Um adereço que escala em direção a uma determinada escala ou à escala de um adereço de Modo Criativo. scaling_prop
:= class (movable_prop): ~~~ -
Adicione as declarações
using { /Fortnite.com/Devices/CreativeAnimation }eusing { /UnrealEngine.com/Temporary/SpatialMath }ao topo do arquivo para importar esses módulos. Você precisará delas para animar seu adereço. Todas as dicas usadas nesta seção estão inclusas abaixo.~~~(verse) using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip
:message = "A posição opcional para se mover no Espaço do Mundo. Use isto se não quiser definir um MoveTarget." # Um adereço que escala em direção a uma determinada escala ou à escala de um adereço de Modo Criativo. scaling_prop
:= class (movable_prop): ~~~ -
No topo da definição de classe
scaling_prop, adicione os seguintes campos:-
Uma matriz
vector3editável chamadaScaleTargets. Estas são as escalas que o seu adereço alcançará crescendo e encolhendo. Após a conclusão deMove(), a escala do adereço será multiplicada por este valor.~~~(verse) # A matriz de alvos vector3 para os quais o RootProp escala. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} ~~~
-
Um
creative_propeditável opcional chamadoMatchScaleTarget. Se você quiser que seu adereço escale para se alinhar à escala de outro adereço, você pode definir este valor em vez de usarScaleTargets. Por exemplo, você poderia usar isto se quisesse criar uma série de plataformas que crescem até o mesmo tamanho antes de serem restauradas.~~~(verse) # O adereço de Modo Criativo opcional para o RootProp corresponder a escala. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false ~~~
-
Uma variável
rotationchamadaTargetScale. Esta é a escala para a qual o adereço está atualmente escalando para chegar.~~~(verse) # A escala para a qual o adereço está atualmente indo. var TargetScale:vector3 = vector3{} ~~~
-
-
A sua definição de classe final deve ficar assim:
using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "A posição opcional para se mover no Espaço do Mundo. Use isto se não quiser definir um MoveTarget." # Um adereço que escala em direção a uma determinada escala ou à escala de um adereço de Modo Criativo. scaling_prop<public> := class<concrete>(movable_prop): # A matriz de alvos vector3 para os quais o RootProp escala. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # O adereço de Modo Criativo opcional para o RootProp corresponder a escala. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # A escala para a qual o adereço está atualmente indo. var TargetScale:vector3 = vector3{} -
Como você á definiu a função
Move()que move o seu adereço emmovable_prop, você pode sobrescrevê-la nesta classe. Sobrescreva a funçãoMove()na sua classescaling_prop. EmMove(), verifique se oMatchScaleTargetestá definido e salve-o em uma variávelScaleToMatch. Caso esteja, definaTargetScalecomo aScaleToMatch, em seguida, chameMoveToEase(), passandoTargetScale,MoveDuration,MoveEaseTypeeanimation_mode.OneShot. Esta é a funçãoMoveToEase()que você sobrecarregou anteriormente que modifica apenas a escala.~~~(verse) # Escale o RootProp em direção a ScaleTarget, ou MatchScaleTarget se um estiver definido. Move
() :void= # Defina a TargetScale como o MatchScaleTarget se um estiver definido. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Chame MoveToEase para começar a escalar o adereço. O modo de animação OneShot reproduzirá a animação uma vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) ~~~
-
Se você não definiu um
MatchScaleTarget, então precisa iterar por cada elemento da sua matrizScaleTargets. Em uma expressãofor, itere por cadaScaleTargetna matrizScaleTargetse defina aTargetScalecomo oScaleTarget. Em seguida, chameMoveToEase(), passando os mesmos valores que anteriormente. Sua funçãoMove()completa deve ficar assim:~~~(verse) # Escale o RootProp em direção a ScaleTarget, ou MatchScaleTarget se um estiver definido. Move
() :void= # Defina a TargetScale como o MatchScaleTarget se um estiver definido. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch
# Chame MoveToEase para começar a escalar o adereço. O modo de animação OneShot reproduzirá a animação uma vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # Caso contrário, escale até cada alvo na matriz ScaleTargets. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget
# Chame MoveToEase para começar a escalar o adereço. O modo de animação OneShot reproduzirá a animação uma vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) ~~~
-
Em sua classe de dispositivo
prop_animator, adicione uma nova matriz editável descaling_propchamadaScalingProps. Adicione outra expressãoforaOnBegin()que faz um loop que percorre todos os adereços de escala e chamaSetup()neles. Sua classeprop_animatoratualizada deve ficar assim:~~~(verse) using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip
:message = "Os adereços que transladam (se movem) usando animação." RotatingPropsTip :message = "Os adereços que giram usando animação." RotatingPropsTip :message = "Os adereços que escalam usando animação." # Coordena a movimentação de adereços por meio de animação chamando o método Setup() de cada adereço. prop_animator := class(creative_device):
# Matriz dos movable_props que transladam usando animação. @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{}
# Matriz dos movable_props que giram usando animação. @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{}
# Matriz dos movable_props que escalam usando animação. @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{}
# É executado quando o dispositivo é iniciado em um jogo em execução OnBegin
() :void= # Para cada adereço, chame Setup() para começar a animar. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() ~~~
-
Salve o código e compile-o.
Como vincular adereços a dispositivos
De volta ao editor, exclua alguns dos adereços que estão depois da seção de adereços de rotação, mas antes dos blocos elevados, para criar outro espaço vazio. Adicione uma FG01 Luva de Boxe ao seu nível. Chame a luva de ScalingGlove. Posicione a luva no meio do espaço vazio e a gire para que fique virada para cima.
Configuração da luva de boxe. A luva aumenta de tamanho para criar um elevador que leva os jogadores para cima.
Selecione o seu animador de adereços no Organizador e adicione um elemento de matriz a ScalingProps para sua luva. Atribua ao adereço os seguintes valores:
| Opção | Valor | Explicação |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | Este adereço escalará e duplicará suas dimensões no eixo Y, em seguida, retornará suas dimensões para os valores iniciais. Observe que, como este adereço está girado, o eixo Y é agora o "para cima" local do adereço. |
| RootProp | Atribua ao adereço que você está animando. | Este é o adereço que você está animando. |
Submeta suas alterações e, em seguida, confira seus adereços! Experimente variar as diferentes escalas para obter dimensões variadas e experimente escalar outros adereços para criar cenários distintos!
Próximo passo
Na próxima seção, você combinará movimento, rotação e escala para criar adereços que podem fazer os três!
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
Código completo
Aqui está o código completo feito nesta seção:
scaling_prop.verse
~~~(verse) using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip
Um adereço que escala em direção a uma determinada escala ou à escala de um adereço de Modo Criativo.
scaling_prop
# A matriz de alvos vector3 para os quais o RootProp escala. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{}
# O adereço de Modo Criativo opcional para o RootProp corresponder a escala. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false
# A escala para a qual o adereço está atualmente indo. var TargetScale:vector3 = vector3{}
# Escale o RootProp em direção a ScaleTarget, ou MatchScaleTarget se um estiver definido.
Move
# Defina a TargetScale como o MatchScaleTarget se um estiver definido. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch
# Chame MoveToEase para começar a escalar o adereço. O modo de animação OneShot reproduzirá a animação uma vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # Caso contrário, escale até cada alvo na matriz ScaleTargets. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget
# Chame MoveToEase para começar a escalar o adereço. O modo de animação OneShot reproduzirá a animação uma vez. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
### prop_animator.verse
~~~(verse)
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "Os adereços que transladam (se movem) usando animação."
RotatingPropsTip<localizes>:message = "Os adereços que giram usando animação."
RotatingPropsTip<localizes>:message = "Os adereços que escalam usando animação."
# Coordena a movimentação de adereços por meio de animação chamando o método Setup() de cada adereço.
prop_animator := class(creative_device):
# Matriz dos movable_props que transladam usando animação.
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# Matriz dos movable_props que giram usando animação.
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# Matriz dos movable_props que escalam usando animação.
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# É executado quando o dispositivo é iniciado em um jogo em execução
OnBegin<override>()<suspends>:void=
# Para cada adereço, chame Setup() para começar a animar.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()