컴포넌트는 데이터와 로직을 사용해 게임을 제작하기 위한 기본 구성 요소입니다. 키프레이밍된 이동 컴포넌트는 애니메이션 키프레임을 엔티티에 추가하여 지정된 파라미터에 따라 엔티티가 레벨에서 부드럽게 이동할 수 있게 해 줍니다.
UEFN에서는 월드 내 위치를 변경하는 TeleportTo() 또는 MoveTo() 등의 함수를 사용하여 Verse 코드로 오브젝트를 이동할 수 있습니다. 하지만 이러한 함수를 위한 Verse 코드는 시뮬레이션 업데이트마다 평가되어야 하므로, 이 함수로 부드럽고 연속적인 이동을 구현하는 것이 어려울 수 있습니다. 위치를 조작하여 오브젝트를 이동하는 대신, 애니메이션을 사용할 수 있습니다. 오브젝트가 서버-클라이언트 지연 없이 설정된 키프레임 간에 이동하므로 keyframed_movement_component로 부드러운 애니메이션을 만들 수 있습니다. 이어진 레일 위에서 부드럽게 아래로 이동하는 광산 수레를 만든다고 생각해 보세요. 이러한 경우에 키프레이밍된 이동 컴포넌트를 사용하면 좋습니다.
엔티티에 컴포넌트를 추가하려면 엔티티 및 컴포넌트 작업하기를 참고하세요. 컴포넌트는 keyframed_movement_component로 표시되는데, 이는 키프레이밍된 이동 컴포넌트 Verse 클래스와 같습니다. 컴포넌트를 위한 Verse API에 대한 자세한 내용은 keyframed_movement_component API 레퍼런스 모듈을 확인해 보세요.
코드에서 KeyframedMovement 모듈을 참조하면 선택한 엔티티에서 수행할 수 있는 작업에 액세스할 수 있습니다. 다음 예시는 엔티티 이동을 위해 @editable 및 keyframe_movement_delta를 사용하는 방법을 보여줍니다.
예시
다음 단계를 따라 엔티티가 키프레임 세트 간에 이동하도록 할 수 있습니다.
프로젝트에서 엔티티를 생성합니다. 처음 이 작업을 수행하는 경우 엔티티 및 컴포넌트 작업하기를 참고하세요.
+ 컴포넌트(+ Component)를 클릭하고 mesh_component를 추가합니다. 큐브 메시를 선택합니다.
KeyframedMovement 컴포넌트를 추가합니다.
+ 컴포넌트를 다시 클릭하고 새 Verse 컴포넌트(New Verse Component)를 선택합니다.
move_cycle_component로 명명하고 생성(Create)을 클릭합니다.Visual Studio Code에서
using { /Verse.org/SceneGraph/KeyframedMovement }을 사용하여KeyframedMovement모듈을 지정합니다.transform이 작동하도록using { /Verse.org/SpatialMath }을 지정합니다.move_cycle_component클래스의 상단에Keyframes로 명명된keyframed_movement_delta의editable배열을 추가합니다. 에디터에keyframed_movement_delta배열을 노출시키면 디테일(Details) 패널에서 바로 키프레임을 생성하고 애니메이션의 각 키프레임에 대한트랜스폼(Transform),지속 시간(Duration),이징(Easing)을 설정할 수 있습니다.
# 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{}Verse 코드를 빌드하면 키프레임(Keyframes)이 에디터의 move_cycle_component 아래에 표시됩니다. + 아이콘을 클릭하여 배열 엘리먼트 2개를 추가합니다.
이제 각 배열 엘리먼트의 트랜스폼, 지속 시간, 이징을 수정할 수 있습니다. 각 배열 엘리먼트가 하나의 키프레임에 해당합니다.
첫 번째 엘리먼트에서 트랜스폼을 펼치고 앞쪽(Forward)을 500으로 설정합니다. 두 번째 엘리먼트에서 왼쪽(Left)을 -500으로 설정합니다. 두 엘리먼트 모두에서 지속 시간(Duration)을 2.0초로, 모든 축의 스케일(Scale)을 1.0으로, 이징(Easing)을 cubic_bezier_easing_function으로 설정합니다.
여기서 중요한 점은 첫 번째 키프레임이 월드에서 메시 위치를 기준으로 하는 것처럼, 설정하는 새로운 각 프레임의 값이 이전 키프레임을 기준으로 한다는 것입니다.
Verse와 UEFN을 3D 콘텐츠 제작과 다른 중요 툴세트의 최신 표준에 맞추기 위해, 에픽은 좌표계 표현에 근본적인 변화를 적용하려 합니다.
먼저, 좌표축을 X, Y, Z로 라벨링하는 대신, 다음과 같이 보다 방향을 설명하는 축 이름을 도입하려고 합니다.
왼쪽(Left)(이전 -Y)
위쪽(Up)(이전 Z)
앞쪽(Forward)(이전 X)
LUF 방식에 대한 자세한 내용은 왼쪽-위쪽-앞쪽 좌표계 문서를 참고하세요.
세션을 저장하고 시작하면 큐브가 설정된 키프레임 간에 이동하는 것을 볼 수 있습니다.
Verse로 키프레임 빌드하기
Verse 코드를 사용하여 키프레임을 빌드할 수도 있습니다.
keyframed_movement_component를 가져옵니다.keyframed_movement_delta함수를 호출하고트랜스폼,지속 시간,이징을 지정하여 첫 번째 키프레임Key0을 생성합니다. 두 번째 키프레임Key1에서 이 과정을 반복합니다.애니메이션을 설정합니다. 이때 재생 모드를 정할 수도 있습니다. 이 예시에서는 애니메이션이
핑퐁(pingpong)으로 설정됩니다.애니메이션을 재생합니다. 올바른 구문은 아래 코드를 참고하세요.
# 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]
완성된 코드
아래는 이 예시의 완성된 코드로, 복사 및 붙여넣기가 가능한 버전입니다.
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):