플랫포머에서 치수가 바뀌는 장애물을 맞닥뜨리기도 합니다. 이는 크기가 커졌다가 작아지거나, 특정 축을 따라 길어지거나 짧아지는 플랫폼일 수 있습니다. 오브젝트의 치수가 이러한 식으로 바뀔 때 스케일이 바뀐다고 말합니다.
오브젝트의 스케일은 오브젝트를 기준으로 각 치수에 얼마를 곱할지 알려줍니다. 보통 오브젝트의 스케일은 {X := 1.0, Y := 1.0, Z := 1.0} 입니다. 오브젝트 스케일의 Z 값을 두 배로 늘리면 높이가 두 배로 늘어납니다. 반으로 줄이면 높이가 반으로 줄어듭니다.
스케일은 트랜스폼 퍼즐의 마지막 조각입니다. 이 섹션에서는 스케일을 조작하여 다양한 크기로 커졌다가 작아지는 오브젝트를 만드는 방법을 알아봅니다.
스케일 조절되는 사물 만들기
사물을 스케일 조절하는 코드를 빌드하려면 다음 단계를 따릅니다.
-
Verse 익스플로러 를 사용하여
movable_prop에서 상속되는 새 Verse 클래스scaling_prop을 생성합니다. 이 클래스에<concrete>지정자를 추가하여 UEFN에 프로퍼티를 노출합니다.# 주어진 스케일 또는 포크리 사물의 스케일로 스케일 조절되는 사물입니다. scaling_prop<public> := class<concrete>(movable_prop): -
using { /Fortnite.com/Devices/CreativeAnimation },using { /UnrealEngine.com/Temporary/SpatialMath }명령문을 파일 상단에 추가하여 이러한 모듈을 임포트합니다. 이는 사물에 애니메이션을 적용하는 데 필요합니다. 이 섹션에서 사용된 툴팁도 여기에 포함됩니다.using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "월드 스페이스로 이동할 선택적 위치입니다. MoveTarget을 설정하지 않으려는 경우 사용합니다." # 주어진 스케일 또는 포크리 사물의 스케일로 스케일 조절되는 사물입니다. scaling_prop<public> := class<concrete>(movable_prop): -
scaling_prop클래스 정의 상단에 다음 필드를 추가합니다.-
편집 가능한
vector3배열ScaleTargets로, 사물이 커졌다가 작아지는 스케일입니다.Move()가 완료된 후 사물의 스케일을 이 값에 곱합니다.# RootProp을 스케일 조절할 vector3 타깃의 배열입니다. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} -
MatchScaleTarget으로 명명된 편집 가능한 선택적creative_prop입니다. 사물을 다른 사물의 스케일에 맞춰 스케일 조절하려는 경우ScaleTargets을 사용하는 대신 이 값을 설정하면 됩니다. 예를 들면, 리셋되기 전에 모두 같은 크기로 커지는 일련의 플랫폼을 만들려는 경우 이를 사용할 수 있습니다.# 선택적 포크리 사물로, RootProp이 이 사물에 맞춰 스케일 조절됩니다. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false -
TargetScale로 명명된 변수rotation입니다. 사물이 현재 이 스케일에 맞춰 스케일 조절되는 중입니다.# 사물이 현재 타기팅하는 스케일입니다. var TargetScale:vector3 = vector3{}
-
-
최종 클래스 정의는 다음과 같습니다.
using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "월드 스페이스로 이동할 선택적 위치입니다. MoveTarget을 설정하지 않으려는 경우 사용합니다." # 주어진 스케일 또는 포크리 사물의 스케일로 스케일 조절되는 사물입니다. scaling_prop<public> := class<concrete>(movable_prop): # RootProp을 스케일 조절할 vector3 타깃의 배열입니다. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # 선택적 포크리 사물로, RootProp이 이 사물에 맞춰 스케일 조절됩니다. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # 사물이 현재 타기팅하는 스케일입니다. var TargetScale:vector3 = vector3{} -
이미
movable_prop에서 사물을 이동하는Move()함수를 구성했으므로 이 클래스에서 오버라이드할 수 있습니다.scaling_prop클래스에서Move()함수를 오버라이드합니다.Move()에서 먼저MatchScaleTarget이 설정되었는지 확인하고 변수ScaleToMatch에 저장합니다. 그러한 경우,TargetScale을ScaleToMatch로 설정한 다음MoveToEase()를 호출하여TargetScale,MoveDuration,MoveEaseType,animation_mode.OneShot을 전달합니다. 이는 앞서 오버로드한MoveToEase()함수로, 스케일만 수정합니다.# RootProp을 ScaleTarget을 향해 스케일 조절하거나, 설정된 경우 MatchScaleTarget으로 이동합니다. Move<override>()<suspends>:void= # 설정된 경우 TargetScale을 MatchScaleTarget으로 설정합니다. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # MoveToEase를 호출하여 사물 스케일 조절을 시작합니다. OneShot 애니메이션 모드는 애니메이션을 한 번 재생합니다. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
MatchScaleTarget을 설정하지 않은 경우ScaleTargets배열을 반복작업해야 합니다.for표현식에서ScaleTargets의 각ScaleTarget을 반복작업하고TargetScale을ScaleTarget으로 설정합니다. 그런 다음MoveToEase()를 호출하여 전과 동일한 값을 전달합니다. 완성된Move()함수는 다음과 같습니다.# RootProp을 ScaleTarget을 향해 스케일 조절하거나, 설정된 경우 MatchScaleTarget으로 이동합니다. Move<override>()<suspends>:void= # 설정된 경우 TargetScale을 MatchScaleTarget으로 설정합니다. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # MoveToEase를 호출하여 사물 스케일 조절을 시작합니다. OneShot 애니메이션 모드는 애니메이션을 한 번 재생합니다. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # 그렇지 않으면 ScaleTargets 배열에서 각 타깃으로 스케일 조절합니다. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget # MoveToEase를 호출하여 사물 스케일 조절을 시작합니다. OneShot 애니메이션 모드는 애니메이션을 한 번 재생합니다. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
prop_animator장치 클래스에ScalingProps로 명명한scaling_prop의 새 편집 가능 배열을 추가합니다. 스케일 조절되는 모든 사물을 루프하고 해당 사물에서Setup()을 호출하는OnBegin()에 또 하나의for표현식을 추가합니다. 업데이트된prop_animator클래스는 다음과 같습니다.using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "애니메이션을 사용하여 이동하는 사물입니다." RotatingPropsTip<localizes>:message = "애니메이션을 사용하여 회전하는 사물입니다." ScalingPropsTip<localizes>:message = "애니메이션을 사용하여 스케일 조절하는 사물입니다." # 각 사물의 Setup() 메서드를 호출하여 애니메이션을 통해 이동하는 사물을 조정합니다. prop_animator := class(creative_device): # 애니메이션을 사용하여 이동하는 movable_prop의 배열입니다. @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # 애니메이션을 사용하여 회전하는 movable_prop의 배열입니다. @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # 애니메이션을 사용하여 스케일 조절하는 movable_prop의 배열입니다. @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{} # 실행 중인 게임에서 장치가 시작되면 실행됩니다. OnBegin<override>()<suspends>:void= # 각 사물에서 Setup()을 호출하여 애니메이션 적용을 시작합니다. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() -
코드를 저장하고 컴파일합니다.
장치에 사물 연결하기
에디터로 돌아가 회전하는 사물 섹션 뒤와 올라간 블록 앞 사이의 일부 사물을 삭제하여 또 다른 틈새를 만듭니다. 레벨에 FG01 Punch Glove 를 추가합니다. 글러브를 ScalingGlove 로 명명합니다. 틈새 한가운데에 글러브를 배치하고 위를 향하도록 회전합니다.
펀치 글러브의 구성입니다. 이 글러브의 스케일을 늘려 플레이어를 올려주는 승강기로 만듭니다.
아웃라이너(Outliner) 에서 prop animator 를 선택하고, 글러브의 ScalingProps 에 배열 엘리먼트를 추가합니다. 사물에 다음 값을 할당합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | 이 사물의 Y축 치수를 2배로 스케일 조절한 다음, 시작 치수로 다시 스케일 조절합니다. 사물이 회전하므로 Y축은 이제 사물의 로컬 '위쪽'에 있습니다. |
| RootProp | 애니메이션을 적용할 사물에 할당합니다. | 애니메이션을 적용할 사물입니다. |
변경 사항을 푸시한 다음 사물을 확인합니다. 스케일을 다르게 설정하여 다양한 치수를 얻고, 다른 사물의 스케일을 조절하여 다양한 시나리오를 만들어 보세요.
다음 단계
다음 섹션에서는 이동, 회전, 스케일을 결합하여 세 가지가 모두 가능한 사물을 제작해 봅니다.
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
완성된 코드
이 섹션에서 빌드한 완성된 코드는 다음과 같습니다.
scaling_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip<localizes>:message = "월드 스페이스로 이동할 선택적 위치입니다. MoveTarget을 설정하지 않으려는 경우 사용합니다."
# 주어진 스케일 또는 포크리 사물의 스케일로 스케일 조절되는 사물입니다.
scaling_prop<public> := class<concrete>(movable_prop):
# RootProp을 스케일 조절할 vector3 타깃의 배열입니다.
@editable {ToolTip := MoveTargetsTip}
var ScaleTargets:[]vector3= array{}
# 선택적 포크리 사물로, RootProp이 이 사물에 맞춰 스케일 조절됩니다.
@editable {ToolTip := MatchScaleTargetTip}
var MatchScaleTarget:?creative_prop = false
# 사물이 현재 타기팅하는 스케일입니다.
var TargetScale:vector3 = vector3{}
# RootProp을 ScaleTarget을 향해 스케일 조절하거나, 설정된 경우 MatchScaleTarget으로 이동합니다.
Move<override>()<suspends>:void=
# 설정된 경우 TargetScale을 MatchScaleTarget으로 설정합니다.
if:
ScaleToMatch := MatchScaleTarget?.GetTransform().Scale
then:
set TargetScale = ScaleToMatch
# MoveToEase를 호출하여 사물 스케일 조절을 시작합니다. OneShot 애니메이션 모드는 애니메이션을 한 번 재생합니다.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
else:
# 그렇지 않으면 ScaleTargets 배열에서 각 타깃으로 스케일 조절합니다.
for:
ScaleTarget:ScaleTargets
do:
set TargetScale = ScaleTarget
# MoveToEase를 호출하여 사물 스케일 조절을 시작합니다. OneShot 애니메이션 모드는 애니메이션을 한 번 재생합니다.
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 = "애니메이션을 사용하여 이동하는 사물입니다."
RotatingPropsTip<localizes>:message = "애니메이션을 사용하여 회전하는 사물입니다."
ScalingPropsTip<localizes>:message = "애니메이션을 사용하여 스케일 조절하는 사물입니다."
# 각 사물의 Setup() 메서드를 호출하여 애니메이션을 통해 이동하는 사물을 조정합니다.
prop_animator := class(creative_device):
# 애니메이션을 사용하여 이동하는 movable_prop의 배열입니다.
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# 애니메이션을 사용하여 회전하는 movable_prop의 배열입니다.
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# 애니메이션을 사용하여 스케일 조절하는 movable_prop의 배열입니다.
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# 실행 중인 게임에서 장치가 시작되면 실행됩니다.
OnBegin<override>()<suspends>:void=
# 각 사물에서 Setup()을 호출하여 애니메이션 적용을 시작합니다.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()