Alguns dos obstáculos mais fáceis se movem apenas para frente e para trás. Você geralmente os encontrará em desafios de plataforma, nos quais você precisa sincronizar seus saltos e fazer movimentos precisos para evitar cair.
Mover uma plataforma dessa maneira é chamado de translação, ou alteração da posição do transformar de um objeto. Neste seção, você aprenderá a criar plataformas que não só se movem para frente e para trás, como também se movem para vários pontos no mundo e, depois disso, usará elas para criar seu primeiro obstáculo!
Como criar adereços que transladam
Siga os passos abaixo para criar o código que translada suas plataformas:
Crie uma nova classe Verse chamada
translating_propque herda demovable_propusando o Explorador do Verse. Adicione o especificador<concrete>a essa classe para expor suas propriedades ao 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):Adicione as declarações
using { /Fortnite.com/Devices/CreativeAnimation }eusing { /UnrealEngine.com/Temporary/SpatialMath }à parte superior 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.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):No topo da definição da classe
translating_prop, adicione os seguintes campos:Uma matriz editável de
creative_propchamadaMoveTargets. Estes são os adereços de Modo Criativo para os quais seuRootPropse moverá durante o jogo. A utilização de outro adereço ao invés de um transformar como o alvo do movimento facilita a visualização de onde seus adereços estão indo. Você os tornará invisíveis durante o jogo no editor mais tarde.Verse# The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{}Uma variável
vector3editável opcional chamadaMovePosition. Se você não atribuir um adereçoMoveTarget, seu adereço raiz usará isso para saber para onde se mover.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 = falseUma variável
vector3chamadaTargetPosition. Esta é a posição para a qual seu adereço de fato se moverá e será definida como a posição-alvo do movimento ouMovePosition.Verse# The position the prop is currently targeting. var TargetPosition:vector3 = vector3{}Sua definição de classe deve ficar assim:
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.
Como você já configurou a função
Move()que move seu adereço emmovable_prop, pode substituí-la nessa classe. Substitua a funçãoMove()na classetranslating_prop.Verse# Translate toward the MovePosition, or MoveTarget if one is set. Move<override>()<suspends>:void=Em
Move(), em uma expressãoif, verifique seMovePositionestá definida e armazenada como um valorNewPosition. Caso esteja, definaTargetPositioncomoNewPosition.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 = NewPositionSua função
MoveToEase()precisa de umanimation_modea ser passado para ela. Sua animação é reproduzida uma vez toda vez queMove()é chamada, eanimation_modecontrola o que acontece quando sua animação termina. ChameMoveToEase()para passarTargetPosition,MoveDuration,MoveEaseTypeeanimation_mode.OneShot. Usar esse modo de animação significa que sua animação será interrompida assim que o seu objeto chega ao alvo. Esta é a funçãoMoveToEase()sobrecarregada que você configurou anteriormente e que não usa uma rotação ou 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)Embora o modo de animação one-shot seja útil se você quiser restaurar seu objeto ou mantê-lo em movimento, e se você quiser reproduzi-lo ao contrário? Nesse caso, você pode usar o modo de animação
PingPong. Isso reproduzirá sua animação primeiro no sentido normal e depois no sentido inverso, movendo seu adereço de volta até onde começou. Há também o modo de animaçãoLoop, que faz um loop da sua animação, mas necessita que ela termine no mesmo local que começou. Escolha o modo de animação certo que seja adequado para a sua experiência.Ao configurar seus adereços, se você não tiver definido
MovePositionno editor, precisará definir um ou maisMoveTargetspara os quais seu adereço raiz se moverá. Para lidar comMoveTargetsem uma expressãofor, itere por cada alvo emMoveTargets. Verifique seMoveTargetestá definido chamandoIsValid[]. Caso esteja, definaTargetPositioncomo a translação 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 fim, chame
MoveToEase(), novamente comanimation_mode.OneShotcomo modo de animação. Ao fazer isso em uma expressãofor, você moverá seu adereço para cada um dos alvos em sequência, restaurando ao final ou continuando com base nos parâmetros definidos por você. A função completaMove()deve ficar assim: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.
Como criar o dispositivo Verse
Agora que o seu código Verse está completo, você precisa de uma forma de chamá-lo dentro do nível. Você usará outro dispositivo Verse para coordenar seus adereços e configurar todos eles quando o jogo iniciar. Siga os passos abaixo para coordenar seus obstáculos e mover suas plataformas!
Crie um novo dispositivo Verse chamado
prop_animatorusando o Explorador do Verse. Este é o dispositivo que coordenará a movimentação dos seus adereços.Em
prop_animator, adicione uma matriz editável detranslating_propchamadaTranslatingProps. Em seguida, emOnBegin(), utilizando uma expressãofor, chameSetup()em cada adereço. Seu arquivoprop_animatorcompleto deve ficar assim: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.Salve o código e compile-o.
Arraste seu dispositivo
prop_animatorpara dentro do nível.
Como vincular adereços a dispositivos
De volta ao editor, exclua alguns dos adereços próximos ao início para criar um espaço vazio. Adicione dois adereços FG01 Plataforma de flutuação M ao seu nível. Como estas são as plataformas que você animará, chame-as de TranslatingPlatform. Em seguida, adicione vários adereços FG01 Bulbo de botão, que serão os alvos para os quais cada plataforma se moverá. Chame esses PlatformTarget. Coloque as plataformas sobre o espaço vazio e certifique-se de colocar os alvos onde quer que as plataformas cheguem. Você pode especificar vários alvos para cada plataforma.
Configuração de adereços de translação. Cada plataforma se move para frente e para trás entre dois alvos, conforme indicado pelas setas.
Se quiser ocultar os adereços-alvo durante o jogo, certifique-se de definir Ator oculto no jogo em Renderização como Verdadeiro para cada alvo.
Arraste seu dispositivo prop_animator para dentro do nível e selecione-o. No Organizador, adicione um elemento de matriz em TranslatingProps para cada plataforma. Atribua cada adereço com os seguintes valores:
| Option | Valor | Explicação |
|---|---|---|
MoveTargets | Atribua aos alvos para os quais você quer que seu adereço se mova. | Estes são os adereços do Modo Criativo que são os alvos para os quais seu adereço se moverá, em ordem. |
RootProp | Atribua ao adereço que você está animando. | Este é o adereço que você está animando. |
Clique em Inicializar sessão e veja suas plataformas animadas! Experimente variar MoveDuration, MoveEaseType e os atrasos de início e fim para criar cenários distintos.
Com isso, finalizamos a translação. Na próxima seção, você criará adereços que giram em diferentes direções!
A seguir
Código completo
Aqui está o código completo feito nesta seção:
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.