プラットフォーマーでは、寸法が変化する障害物が出現することがあります。サイズが拡大および縮小するプラットフォームや、特定の軸に沿って長くなったり短くなったりするプラットフォームが考えられます。オブジェクトの寸法がそのように変更される場合は、その スケール の変更と呼ばれます。
オブジェクトのスケールによって、その寸法のそれぞれを、それ自体を基準としてどのくらい拡大するかが指示されます。通常、オブジェクトのスケールは {X := 1.0, Y := 1.0, Z := 1.0} です。オブジェクトのスケールの Z 値を 2 倍にすると、その高さが 2 倍になり、半分にすると、その高さが半分になります。
スケールは、トランスフォーム パズルの最後の部分です。このセクションでは、スケールを操作して、さまざまなサイズに拡大および縮小するオブジェクトを作成する方法について説明します。
スケールする小道具を作成する
以下の手順に従って、小道具をスケールするコードを作成します。
-
Verse Explorer を使用して、
movable_propを継承するscaling_propという新しい Verse クラスを作成します。このクラスのプロパティが UEFN に公開されるように、<concrete>指定子を付加します。# 指定されたスケールまたはクリエイティブの小道具のスケールに合うようにスケールする小道具。 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クラス定義の先頭で、以下のフィールドを追加します。-
ScaleTargetsという、編集可能なvector3の配列。これらの値は、小道具を拡大および縮小するスケールです。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{} -
小道具を動かす
Move()関数をmovable_prop内でセットアップ済みであるため、このクラス内でそれをオーバーライドできます。scaling_propクラス内でMove()関数をオーバーライドします。Move()内で、まず、MatchScaleTargetが設定されているかどうかをチェックし、その値をScaleToMatch変数に格納します。設定されていれば、TargetScaleをScaleToMatchに設定してから、TargetScale、MoveDuration、MoveEaseType、およびanimation_mode.OneShotを渡して、MoveToEase()を呼び出します。これは、以前にオーバーロードしたMoveToEase()関数であり、スケールのみを変更します。# ScaleTarget または MatchScaleTarget (設定されている場合) に合うように RootProp をスケールします。 Move<override>()<suspends>:void= # MatchScaleTarget が設定されていれば、TargetScale をそれに設定します。 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()関数は次のようになります。# ScaleTarget または MatchScaleTarget (設定されている場合) に合うように RootProp をスケールします。 Move<override>()<suspends>:void= # MatchScaleTarget が設定されていれば、TargetScale をそれに設定します。 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の新しい編集可能な配列を追加します。もう一つのfor式をOnBegin()に追加し、そのループ内で、スケールするすべての小道具に対してSetup()を呼び出します。更新後の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_props の配列。 @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # アニメーションを使用して回転する movable_props の配列。 @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # アニメーションを使用してスケールする movable_props の配列。 @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 という名前にします。そのグローブを割れ目の中間に配置し、グローブが上を向くように回転させます。
パンチング グローブのセットアップ。グローブがスケールアップして、プレイヤーを持ち上げるエレベーターが作り出されます。
アウトライナー で、prop animator を選択し、グローブに対する配列要素を ScalingProps に追加します。小道具に以下の値を代入します。
| オプション | 値 | 説明 |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}、{1.0, 1.0, 1.0} | この小道具は、Y 軸での寸法が 2 倍にスケールされてから、開始時の寸法に戻される。小道具は回転しているため、今は Y 軸が小道具のローカルの「上向き」になっている。 |
| RootProp | アニメートしている小道具に代入する | これは、アニメートしている小道具である |
変更内容をプッシュし、小道具を確認します。スケールを変えてさまざまな寸法を試し、他の小道具をスケールしてさまざまなシナリオを試してみます。
次の内容
次のセクションでは、移動、回転、スケールを組み合わせて、その 3 つすべてを行うことができる小道具を作成します。
%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{}
# ScaleTarget または MatchScaleTarget (設定されている場合) に合うように RootProp をスケールします。
Move<override>()<suspends>:void=
# MatchScaleTarget が設定されていれば、TargetScale をそれに設定します。
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_props の配列。
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# アニメーションを使用して回転する movable_props の配列。
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# アニメーションを使用してスケールする movable_props の配列。
@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()