Componentes são blocos de construção básicos que usam dados e lógica para construir seu jogo. O componente de movimento com keyframe é uma maneira de adicionar keyframes de animação a entidades e fazer com que elas se movam suavemente no seu nível dentro dos parâmetros especificados.
No UEFN, você pode mover objetos com código Verse usando funções como TeleportTo() ou MoveTo() para alterar suas posições no mundo. No entanto, pode ser difícil gerar um movimento suave e contínuo usando essas funções, pois o código Verse para essas funções precisa ser avaliado a cada atualização de simulação. Em vez de mover objetos manipulando sua posição, você pode usar animações. O keyframed_movement_component pode fornecer animações suaves, pois o objeto está se movendo entre keyframes definidos e faz isso sem se deparar com atrasos entre cliente e servidor. Pense em um minicarrinho movendo-se suavemente por um conjunto de trilhos; um componente de movimento com keyframe seria uma boa solução para alcançar isso.
Para adicionar um componente à sua entidade, consulte Como trabalhar com entidades e componentes. O componente está listado como keyframed_movement_component, que corresponde à classe Verse para o componente de movimento com keyframe. Para obter mais informações sobre a API Verse para o componente, confira o módulo de referência da API keyframed_movement_component.
Fazer referência ao módulo KeyframedMovement no seu código dá acesso às operações que podem ser realizadas na entidade selecionada. O exemplo a seguir demonstra o uso de @editable e keyframe_movement_delta para mover a entidade.
Exemplo
Para mover uma entidade entre um conjunto de keyframes:
Crie uma entidade no seu projeto. Se esta é a sua primeira vez, consulte Como trabalhar com entidades e componentes.
Clique em + Componente e adicione um mesh_component. Selecione a malha de cubo .
Adicione um componente KeyframedMovement.
Clique em + Componente novamente e escolha Novo componente Verse.
Chame-o de
move_cycle_componente clique em Criar.No Visual Studio Code, especifique o módulo
KeyframedMovementadicionandousing { /UnrealEngine.com/Temporary/SceneGraph/KeyframedMovement }.Para que o
transformfuncione, certifique-se de especificarusing { /Verse.org/SpatialMath }.Na parte superior da classe
move_cycle_component, adicione uma matrizeditabledekeyframed_movement_deltachamadaKeyframes. Expondo uma matriz dekeyframed_movement_deltaao editor, você pode criar keyframes diretamente no Painel Detalhes e definirTransform,Duratione aEasingpara cada keyframe na animação.
# A Verse-authored component that can be added to entities
move_cycle_component<public> := class<final_super>(component):
@editable
var Keyframes:[]keyframed_movement_delta = array{}Depois de compilar o código Verse, Keyframes aparecerá no editor em move_cycle_component. Adicione 2 elementos de matriz clicando no ícone +.
Agora, você pode modificar Transform, Duration e Easing para cada elemento da matriz. Cada elemento da matriz é equivalente a um keyframe.
No primeiro elemento, expanda Transform e defina Forward como 500. No segundo elemento, defina Left como -500. Para ambos os elementos, defina Duration como 2.0 (segundos) e Easing como cubic_bezier_easing_function.
É importante observar que o valor de cada novo keyframe definido é relativo ao keyframe anterior, assim como o primeiro keyframe é relativo à posição da malha no mundo.
Observe que os valores de Transform que costumavam ser chamados de X, Y e Z agora são Forward (Frente), Right (Direita) e Up (Cima). De agora em diante, ao especificar uma função de transformar, você precisará usar Forward, Right e Up no seu código para evitar erros do compilador. Para obter mais informações, consulte Sistema de coordenadas FRU no UEFN.
Ao salvar e iniciar uma sessão, você deverá ver seu cubo se movendo entre os keyframes que você definiu:
Como criar keyframes em Verse
Você também pode criar keyframes usando o código Verse:
Obtenha o
keyframed_movement_component.Crie seu primeiro keyframe
Key0chamando a funçãokeyframed_movement_deltae especificandoTransform,DurationeEasing. Repita o processo para o segundo keyframeKey1.Defina a animação. Aqui, você também pode determinar o modo de reprodução. Neste exemplo, a animação será
pingpong.Reproduza a animação. Consulte o código abaixo para obter a sintaxe correta.
# Runs when the component should start simulating in a running game.
# Can be suspended throughout the lifetime of the component. Suspensions
# will be automatically canceled when the component is disposed of or the game ends.
OnSimulate<override>()<suspends>:void =
# TODO: Place simple suspends logic to run for this component here
Print("OnSimulate")
if:
KFM:keyframed_movement_component = Entity.GetComponent[keyframed_movement_component]
Código completo
Abaixo está uma versão copiada e colada do código completo para este exemplo:
using { /Verse.org }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /Verse.org/SpatialMath }
using { /UnrealEngine.com/Temporary/SceneGraph }
using { /UnrealEngine.com/Temporary/SceneGraph/KeyframedMovement }
# A Verse-authored component that can be added to entities
move_cycle_component<public> := class<final_super>(component):