このチュートリアルでは、動くプラットフォームに電力を与えるロジックを作成し、パズル:スイッチとキューブ でビルドしたゲームプレイ オブジェクトでそのロジックを有効にします。 また、ゲームのメカニック時間をパズルに組み込みます。
モジュール式のワークフローを使用することで、ビューポートからプラットフォームのスケール、移動、目的地、速度を変更できます。 また、ワンクリックでスイッチを有効にするプラットフォームを選択することもできます。
この柔軟性により、設計時にレベルに変更を加えて、その機能をテストすることができます。 効率的で柔軟な設計を選択することで、開発パイプラインの速度とレジリエンスが向上します。
開始する前に
このチュートリアルでは、パズル アドベンチャーの設計の以前のセクションで扱われている次のトピックについてすでに理解していると想定しています。
マテリアル
ブループリント
変数
ブループリント インターフェース
プレイ インエディタ モード
キーを作成 と パズル:スイッチとキューブで作成した以下のアセットが必要になります。
BP_SwitchBP_CubeBP_KeyBPIInteractionM_BasicColorM_EmissiveColorM_BasicColor_Blue
動くプラットフォームを作成する
動くプラットフォームを作成し、スイッチでアクティブ化する方法を学ぶことで、レベル間でのプレイヤーの移動などのシンプルな機能を設計できます。 スイッチ、キューブ、プラットフォームを組み合わせて、このチュートリアルの最後に提供するような全体的なプラットフォーム パズルなどの複雑な機能を作成することができます。
ワークフローをモジュール化するには、まずマテリアル インスタンスとプラットフォームのブループリント クラスを作成します。
マテリアル インスタンスを作成する
プラットフォームのマテリアル インスタンスを作成するには、次の手順を実行します。
コンテンツ ブラウザ で、「AdventureGame」>「Designer」>「Materials」を選択し、M_BasicColor を右クリックして、[Create Material Instance] を選択します。
インスタンスに
M_BasicColor_Orangeという名前を付けます。 インスタンスをダブルクリックしてマテリアル エディタで開きます。[Global Vector Parameter Values (グローバルベクターパラメータ値)]を展開して [Color (カラー)] を有効にするとオーバーライドできるようになります。
[Color (カラー)] パラメータを Hex sRGB 値
F76E00FFに設定します。インスタンスを保存して閉じます。
マテリアル フォルダは次のようになります。
ブループリント クラスを設定する
プラットフォームのブループリント クラスを作成するには、次の手順を実行します。
コンテンツ ブラウザ で、AdventureGame > Designer > Blueprints に移動し、
「Platforms」という名前の新しいフォルダを作成します。「プラットフォーム」フォルダで右クリックして、新しいブループリント クラスを作成します。
[Pick Parent Class (親クラスを選択)] ダイアログで、[Actor (アクタ)] を選択し、新しいブループリントを
BP_Platformという名前にします。それをダブルクリックしてブループリントエディタで
BP_Platformを開きます。[Components (コンポーネント)] タブで、[Add (追加)] をクリックしてスタティックメッシュを作成し、
「cube」を検索して選択します。メッシュの名前を
「プラットフォーム」にします。[Details (詳細)] パネルの [Materials (マテリアル)] セクションで [Element 0 (要素 0)] を [
M_BasicColor_Orange] に設定します。
プラットフォームのスケールをレベル エディタ内からすばやくカスタマイズできるようにしたり、異なるサイズのプラットフォームを作成したりするには、編集可能な変数を使用できます。
[My Blueprint (マイ ブループリント)] タブで、[Variables (変数)] 見出しに移動します。 + ボタンをクリックして変数を作成し、
PlatformScaleという名前を付けます。ピンの型を Vector に設定し、目のアイコンをクリックして目が開くようにします。
[Details (詳細)] パネルの [Category (カテゴリ)] で、
[Setup (設定)]カテゴリに追加します。ブループリントをコンパイルして、PlatformScale のデフォルト値を
2、2、0.1に設定します。コンストラクション スクリプトグラフで、Construction Scriptノードの Exec ピンをドラッグして、Set World Scale 3D (Platform) を作成します。
Set World Scale 3D ノードの New Scale ピンからドラッグし、Get PlatformScale ノードを作成します。これにより、新しいスケール値がプラットフォーム メッシュ コンポーネントに適用されます。
保存してコンパイルします。
コンストラクション スクリプト グラフは次のようになります。
このスニペットをグラフにコピーする場合は、Construction Script エントリ ノードを Set World Scale 3D に接続する必要があります。
ブループリントの ビューポート タブに戻ると、コンストラクション スクリプトがプラットフォームの新しいスケール値に適用されていることがわかります。
コンテンツ ブラウザから、プラットフォームのインスタンスをレベルにドラッグします。または、指定したレベルに沿って作業している場合はルーム 1 にドラッグします。 このチュートリアルでは、レベルに BP_Switch および BP_Cube のインスタンスも存在することを確認します。
ロジックによるビルド
オブジェクトがスイッチに重なると、プラットフォームは 2 つの場所の間を前後に移動する必要があります。 ビルドを開始する前に、質問に答えることで、このインタラクションを実現するロジックのドラフトを作成しましょう。どのような場合に、誰に、いつ、どのようなアクションを実行する必要があるのか?
以下は、このプラットフォームのロジックの詳細です。
BP_Platform がアクティブな場合、次のようになります。
BP_Platformが開始位置にある場合、前進して終了位置、2 秒間待機します。BP_Platformが終了位置にある場合は、開始位置まで後方に移動し、2 秒間待機します。
BP_Platform がアクティブでない場合、BP_Platform は停止します。
待機時間を指定する理由は、プレイヤーがプラットフォームに乗る (または何かをプラットフォームに押し出す) までの時間を確保するためです。 待機時間は、このゲームプレイ タスクの難易度に応じてスケールできます。 このチュートリアルの後の部分で、時間を使用してプラットフォームの速度を設定しますが、これは難易度にも影響します。
BP_Platformブーリアン はすでに作成しているため、これがアクティブか非アクティブかを判断するためのブーリアンが必要です。
ブーリアンを作成するには、次の手順を実行します。
BP_Platformの [My Blueprint] タブで、[+] ボタンをクリックして新しい変数を作成し、「Active」という名前を付けます。そのピンの種類を「Boolean (ブーリアン)」に設定し目のアイコンをクリックすると開きます。
[Details (詳細)] パネルで、[Category (カテゴリ)] を
「Setup」に変更します。ブループリントをコンパイルし、Active のデフォルト値にチェックマーク (true) が付いていることを確認します。
次に、プラットフォームが移動する位置を定義します。
場所を定義する
ドラフトされたロジックでは、プラットフォームには次の 2 つの場所が必要です。
開始場所
終了場所
作業をモジュール化するには、プラットフォームのインスタンスを参照することで開始位置を定義します。 ターゲット ポイント アクタを参照することで、終了位置を定義する。
ターゲット ポイントは、座標データを持つ非レンダリング アクタです。 ターゲット ポイントは、スポーン ポイントとして使用したり、アニメーション パスを設定したり、AI の動きをガイドしたり、IK リグでジョイントの向きを制御したりすることができます。
プラットフォーム インスタンスおよびターゲット ポイント アクタからの座標データを格納し、それを BP_Platform 内で実装するためにベクターも必要です。
変数名 | 型 | 説明 |
StartLocation | ベクター | BP_Platform の座標を格納します。 |
EndLocation | ベクター | ターゲット ポイント アクタの座標を格納します。 |
TargetPoint | ターゲットポイント | レベル内で EndLocation を指定するターゲット ポイント アクタ。 |
変数を設定するには、次の手順を実行します。
My Blueprint (マイ ブループリント) タブで、+ ボタンを 2 回クリックして、2 つの新しい変数を作成します。
変数の名前を
「StartLocation」と「EndLocation」にします。ピンタイプを Vector に設定します。
「
TargetPoint」という名前の変数を作成し、ピンの型を ターゲット ポイント (オブジェク参照) に設定します。 この変数型は、ブループリント内のターゲット ポインタ アクタを参照するために使用されます。TargetPoint変数を選択した状態で、Details (詳細) パネルに移動します。 カテゴリをを[Setup (設定)]に変更し [Instance Editable (インスタンス編集可能)] のチェックボックスをオンにします。
変数リストは次のようになります。
変数を作成したら、次のようにロジックを追加できます。
EventGraph に移動し、Event ActorBeginOverlap ノードと Event Tick ノードを削除します。 それらは不要です。 Event BeginPlay を維持します。
Event BeginPlay ノードの Exec ピンからドラッグして、「Set StartLocation」を作成します。
Start Location ピンからドラッグして Get Actor Location を作成します。 [Target (ターゲット)] フィールドが [Self] に設定されていることを確認します。
Set StartLocation の Exec ピンからドラッグして Set EndLocation を作成します。
End Location Vector ピンからドラッグして Get Actor Location を作成します。
Get Actor Location の Target ピンからドラッグして Get TargetPoint を作成します。
保存してコンパイルします。
EventGraph は次のようになります。
次に、ブループリントが参照するターゲット ポイント アクタをレベルに作成します。
エディタのメイン ツールバーにある [Add (追加)] ボタンをクリックします。
[Target point (ターゲット ポイント)] を検索して選択し、レベル内にターゲット ポイントを作成します。
プラットフォームを終了させたい場所にターゲット ポイントを移動します。 サンプル レベルに沿って進めるには、ターゲット ポイントの [Location] を
-6200、570、-5.5に設定します (ルーム 1 の下部)。ビューポートで
BP_Platformのインスタンスを選択し、プラットフォームの開始点にする場所にそれを移動します。BP_Platformを選択した状態で、[Details (詳細)] パネルの Setup (設定) セクションで、Target Point の横にあるターゲット ポイントのインスタンスを検索します (またはスポイトを使用してビューポートで選択します)。
次に、プラットフォームの移動のビルドを作成します。
移動のビルド
ドラフト ロジックでは、プラットフォームを次の 4 つの方法で移動させる必要があります。
前に移動
待機
後方に移動
停止
イベントに前進、後退、および停止の信号を送信するために、カスタム イベントを作成します。 後で変数を使って待機イベントを作成することもできます。
カスタム イベントを作成するには、次の手順を実行します。
BP_Platformのイベントグラフで右クリックして Add Custom Event を作成します。新しいノードに
evMoveForwardという名前を付けます。 [My Blueprint (マイ ブループリント)] タブの [EventGraph (イベント グラフ)] セクションに、このイベントが表示されます。カスタムイベントをさらに 2 つ作成します。 それらに
「evMoveBackward」と「evStop」という名前を付けます。Activeブーリアンが true の場合にのみプラットフォームを移動させたいので、 Set End Location ノードの実行ピンからドラッグして、Branch ノードを作成します。Branch ノードで、Condition ピンからドラッグして Get Active を作成します。
Branch ノードの True ピンからドラッグして EvMoveForward を作成し、このイベントをトリガーします。
保存してコンパイルします。
EventGraph は次のようになります。
PIE モードでプラットフォームをテストしても、プラットフォームでは何も実行されません。 というのも、カスタムイベントはイベントを通知するだけだからです。プラットフォームの動きを記述するための追加のロジックが必要になるためです。
前方移動を作成
カスタム イベントを駆動するには、Timeline ノードを使用します。 タイムライン内に、プラットフォームの開始位置と終了位置を表す 2 つのキーフレームを作成することができます。
タイムラインを作成するには、次の手順を実行します。
EventGraph 内を右クリックし、「Add Timeline」を検索して作成します。
[Add Timeline Component] を選択しないようにしてください。
タイムライン ノードの名前を
TM_MovePlatformとします。タイムライン ノードを作成すると、TM_MovePlatform への参照が [My Blueprint (マイ ブループリント)] パネルの [Components (コンポーネント)] リストに表示されます。 他のコンポーネントと同様に、グラフ内でこの参照を使用してプロパティを取得または設定できます。
evMoveForward の Exec ピンを TM_MovePlatform の Play ピンに接続します。
evStop の Exec ピンを TM_MovePlatform の Stop ピンに接続します。
evMoveBackward の Exec ピンを Reverse ピンに接続します。
TM_MovePlatform をダブルクリックして タイムライン エディタ を開きます。 現在タイムラインは空白であるため、[Track (トラック)] ボタンをクリックして、トラック型として [float Track (float トラック)] を選択します。
この新しいトラックに
「Alpha」という名前を付けます。トラックの長さを
1.00に設定します。 これは、タイムラインが開始から終了まで再生する秒数です。キーフレームを追加するには、タイムライン内を右クリックして Add key to CurveFloat_0 (CurveFloat_0 にキーを追加する) を選択します。
キーフレームの [Time] と [Value] を
0.0に設定します。キーを右クリックして [Key Interpolation (キー補間)] を [Auto (自動)] に変更します。 これによりグラフのカーブにイージングが加わります。プラットフォーム移動の最初と最後にゆっくりと移動するようにします。
2 つ目のキーフレームを追加しますが、[Time (時間)] と [Value (値)] を
1.0、キーの補間を[Auto (自動)] に設定します。保存してコンパイルします。
この時点で、タイムラインは次のようになります。
動きを作成するには、開始位置から終了位置までの直線パスに沿って、ゲーム フレームごとに新しい位置を段階的に設定するようにプラットフォームに指示します。 アニメーション ソフトウェアに慣れている場合は、これをトゥイーン処理と考えることができます。 そうするには、Lerp (線形補間) ノードを使用します。
線形補間ノードでは、TM_MovePlatform で作成したようなアルファを使用して、2 つの値を段階的にブレンドします。 線形補間を使用して、色、マテリアル、この場合は位置を補間できます。
線形補間を作成し、既存のロジックに接続するには、次の手順に従います。
[EventGraph] タブに戻ります。 TM_MovePlatform の Update ピンからドラッグして Set World Location (プラットフォーム) を作成します。
Set World Location の New Location ピンからドラッグして、線形補間 (Vector) を作成します。
Lerp ノードの A ピンからドラッグして Get StartLocation を作成します。
Lerp ノードの B ピンからドラッグして Get EndLocation を作成します。
TM_MovePlatform で作成したアルファを利用するには、 TM_MovePlatform の Alpha ピンを線形補間 Lerp の Alpha ピンに接続します。
保存してコンパイルし、ブループリント エディタを閉じます。
EventGraph は次のようになります。
これで、プラットフォームをテストするための十分なロジックができました。 エディタのメイン ツールバーで、Play (プレイ) ボタンをクリックして、PIE モードに入ります。 ランタイム時に、プラットフォームは終了場所に移動する必要があります。 プラットフォームの移動が速いため、観測が困難な場合があります。 次に、プラットフォームがアクティブなときに継続的に動くように、後方への移動を追加します。 後で、速度を低下させる変数を追加します。
レベル内でターゲット ポイントを移動させてみて、エフェクトを確認することができます。
作成したタイムラインの長さは 1 秒です。つまり、プラットフォームが開始位置からターゲット ポイントに移動するまでに常に 1 秒かかります。 プラットフォームをターゲット ポイントから離れた場所に配置するほど、その距離をカバーするためにプラットフォームをより速く移動させる必要があります。
現時点では、プラットフォームは一方向にのみ移動します。 次に、後方への移動をビルドします。
後方移動を作成
プラットフォームの動きを逆にするには、タイムラインの移動方向を確認するロジックが必要です。 前進している場合はロジックで evMoveBackwards を呼び出します。 前進していない場合、ロジックは evMoveForward を呼び出す必要があります。 Branch ノードを使用して、このチェックを処理することができます。
Branch ノードを作成し、既存のロジックに接続するには、以下の手順に従います。
TM_MovePlatform の Finished ピンからドラッグして Branch ノードを作成します。
Branch の Condition ピンからドラッグして Equal (Enum) を作成します。
TM_MovePlatform の Direction ピンを Equal の A ピンに接続します。
条件が Forward (前進) に設定されていることを確認します。
Branchの True ピンからドラッグして evMoveBackwards を作成します。
Branch の Falseピンからドラッグして evMoveForward を作成します。
Activeブーリアンが true の場合にのみ移動を発生させたいので、最初に別のブランチでこれを確認します。TM_MovePlatfor m と Branch ノードの間に新しいノードを追加するには、Finished ピンからドラッグして新しい Branch ノードを追加します。 そうすると、既存の接続が維持されて、間に 2 つ目の Branch ノードが追加されます。
新しい Branch ノードの Conditionピンからドラッグして、Get Active を作成します。
保存してコンパイルします。
EventGraph は次のようになります。
しかし、ドラフト ロジックには、方向を変更する前に、プラットフォームが一定時間待機する必要があると記載されています。 次にこのディレイをビルドします。
ディレイを作成する
ディレイ ノードを使用してプラットフォームに待機するように指示し、float 型の変数で待機する時間を定義できます。
ディレイ ノードと float ノードを作成するには、次の手順を実行します。
BP_Platformの [My Blueprint] タブで、 [+] ボタンをクリックして新しい変数を作成し、「WaitDuration」という名前を付けます。ピンの型を Float に設定します。
Details パネルで、Setup カテゴリを追加し、Instance Editable (インスタンス編集可能) を有効にします。
コンパイルして変数のデフォルト値にアクセスし、
2秒に設定します。 これはサンプルレベルで使用している時間です。プラットフォームが方向を変える前に遅延を追加するには、TM_MovePlatform の Finished ピンからドラッグし、Delay ノードを作成します。
Delay の Duration ピンからドラッグして Get Wait Duration を作成します。
保存してコンパイルします。
変数リストは次のようになります。
EventGraph は次のようになります。
PIE モードでプラットフォームをテストします。 前進して待機し、後ろに移動して待機するが、無限に繰り返されるはずです。
最後に、BP_Switch を使用してプラットフォームを有効にする必要があります。
スイッチをプラットフォームに接続する
プラットフォームは、プレイヤーまたは他のオブジェクトによって BP_Switch が起動された場合にのみ動く必要があります。 Puzzle: Switches and Cubes で作成したブループリント インターフェース機能と Active のブーリアン変数を使用して、プラットフォームが前進したり停止したりするタイミングを通知します。
スイッチの BPI_Interaction メッセージによるプラットフォームの移動の開始と停止を行うには、次の手順を実行します。
BP_Platformで、ブループリントエディタのメニューバーで Class Settings (クラス設定) をクリックします。[Details (詳細)] パネルの [Interfaces (インターフェース)] セクションで、[Implemented Interfaces (実装済みインターフェース)] の横にあるドロップダウン メニューをクリックします。 「BPIInteraction」を検索して追加します。
これにより [My Blueprint (マイ ブループリント)] タブに新しいインターフェースが作成されます。
[Interfaces (インターフェース)] 見出しで、fnBPISwitchOn を右クリックし、[Implement Event (イベントの実装)] を選択して、イベントとして EventGraph に入力します。
fnBPISwitchOff も同じようにします。
fnBPISwitchOn の Exec ピンからワイヤーを引き出して、「Set Active」を検索して作成します。 Active の横にあるチェックボックスを選択して値をオンにします。
Set ノードの Exec ピンからワイヤーを引き出して、「EvMoveForward」を検索して作成します。
fnBPISwitchOff の Exec ピンからワイヤーを引き出して、「Set Active」を検索して作成します。
Set ノードの Exec ピンからワイヤーを引き出して、「EvStop」を検索して作成します。
保存してコンパイルします。
BP_Platform を動作させるロジックがすべて完了しました。 手間がかかる作業が完了したので、スイッチをアクティブにする (複数) プラットフォーム、プラットフォームの移動元と移動先、プラットフォームのスケールを、すべてビューポートから変更することができます。 これらの設定をビューポートからすぐに使用できるため、ブループリントを何度も編集する必要なく、レベルの設計およびテストが可能になります。
次に、パズル:スイッチとキューブ で作成したスイッチの配列に値を取り込みます。
インタラクト オブジェクト リストにデータを取り込む
スイッチのインタラクト オブジェクト リスト配列には、レベル内のスイッチでアクティブ化したいオブジェクトを取り込むことができます (ただしスイッチを駆動するロジックが含まれている場合)。 この場合、レベルにある BP_Platform のインスタンスを選択します。
この配列を取り込むには、次の手順を実行します。
ビューポート内でプラットフォームを選択します。 [Details (詳細)] パネルで、Active (アクティブ) を false (オフ) に設定します。 これにより、ランタイム時のアクティブ化が停止され、スイッチの信号を待機します。
ビューポートでスイッチを選択します。 [Details (詳細)] パネルの Setup (設定) の Interact Object List の横にある Add Element (+) ボタンをクリックして、配列に新しいインデックスを作成します。
ドロップダウンで、
BP_Platformを検索するか、スポイト ツールを使用して、ビューポートでそれを選択します。
PIE モードに入って、最終的なゲームプレイ オブジェクトをテストします。 ユーザーか物理キューブがスイッチに重なると、プラットフォームは前後に動きます (ユーザーや物理キューブが離れると停止する)。
BP_Switch で ActivateOnce を有効にします。 スイッチはアクティブなままであるため、スイッチから離れてもプラットフォームは動き続けます。
レベル内にターゲット ポイントを配置した場所によっては、問題が発生する可能性があります。 プラットフォームに物理キューブを配置してスイッチを踏むと、プラットフォームが非常に素早く移動してキューブが落下します。 非実用的な物理演算を行うと、プレイヤーのストレスを感じ、パズルの完了が妨げられる可能性があります。
次のセクションでは、この問題をデバッグします。
デバッグ
このセクションでは、パズルを解くプレイヤーのストレスを軽減するために、物理キューブとプラットフォームの調整と追加の機能について説明します。
減衰を調整する
キューブを押すと、非常に軽く感じられることがわかります。 この力影響度は、プレイヤーがキューブを操作してパズルを解いたり、プラットフォーム上を移動したりする際に問題を引き起こす可能性があります。
キューブの減衰を大きくするには、次の手順に従います。
ブループリント エディタ で
BP_Cubeを開き、 Cube スタティック メッシュを選択します。[Details (詳細)] パネルの [Physics (物理)] で、[Linear Damping (線形減衰)]
0.7、[Angular Damping (傾斜減衰)] を0.8に設定します。 これは推奨値で、プロジェクトのニーズに応じて異なる場合があります。保存してコンパイルします。
キューブをもう一度テストします。 まだプラットフォームから落下する場合は、プラットフォームの速度の調整に進みます。
速度を調整する
プラットフォームの速度は物理キューブに影響するため、プラットフォームの速度を遅くすることで、キューブをボードに合わせて維持することができます。
プラットフォームの速度を調整するには、次の手順を実行します。
BP_Platformの EventGraph で「TimeToTarget」という名前の新しい変数を作成します。ピンの型を Float に設定します。
ブループリントをコンパイルします。
[Details (詳細)] パネルで、[Instance Editable (インスタンス編集可能)] を有効にして [Setup (設定)] カテゴリに追加し、 [Default Value (デフォルト値)] を
2.0に設定します。 これはレベルに応じて異なる値を設定することをお勧めします。グラフの上部にある、Event BeginPlay で始まるノードのグループに移動します。
Set End Location ノードの Exec ピンからドラッグします。 「Set Play Rate (Timeline)」を検索して作成します。
このノードを見つけるには、Context Sensitive (状況依存) をオフにする必要があります。
Set Play Rate ノードの Target ピンから、Get TM Move Platform ノードを検索して作成します。
Set Play Rate の New Rate ピンからドラッグして Divide 演算子ノードを作成します。 A の値を「
1.0」に設定します。Divide ノードの B ピンからドラッグして Get TimeToTarget を作成します。
保存してコンパイルします。
EventGraph は次のようになります。
PIE モードでレベルをテストし、プラットフォームとキューブのインタラクションがどのように変化するかを確認します。 これで、キューブが移動してもプラットフォーム上に留まるようになりました。
TimeToTarget 変数を [Setup (設定)] カテゴリに含めたため、プラットフォームの速度を簡単に調整でき、レベルの設計時にビューポートからテストできます。
パズルのサンプル
このチュートリアルで説明されているスイッチ、キューブ、プラットフォーム、およびキーのアセットを使用して、ルーム 1 のパズルを作成しました。 独自のパズルを作成するのではなく、パズルをコピーしたい場合、以下のセクションでは、アセットを配置した場所に正確に配置する方法について説明します。 各セクションには、デザインの選択に影響を与えた、プレイテスト中に見つかったインサイトが取り上げられています。
パズルをコピーするには、ブループリントに次の名前を付けます。
BP_Switch
BP_Cube
BP_Platform
BP_Key
このチュートリアルに沿ってアセットを作成していない場合は、スニペットが想定どおりにコピーされない場合があります。
障害物、キューブ、キー
プレイテスト中に、プレイヤーが物理キューブの動きを制御するのに苦労していることがわかりました。 プレイヤーがキューブを部屋の中で押し出すときにキューブをガイドする壁を追加し、減衰を追加してキューブの反応性を低減しました。 そうすることでフラストレーションを軽減し、異常な物理動作によってプレイヤーに対する不当な処罰を回避することができます。
また、プレイヤーが失敗した場合にパズルをリセットする方法が必要であることもわかっていました。 プレイ中にプレイヤーがプラットフォームからキューブを落としてしまう可能性があるため、キー ロケーションにより多くのキューブを配置することで、パズルのリセットや破壊されたキューブの置き換えに必要なバックトラッキングの量を減らすことができました。
ルーム 1 の開発シーケンス
障害物をレベルにコピーするには、次の手順に従います。
[Copy Full Snippet (完全なスニペットをコピー)] をクリックして、以下のスニペットをコピーします。
Command LineコマンドラインスニペットBegin Map Begin Level Begin Actor Class=/Script/Engine.StaticMeshActor Name=StaticMeshActor_32 Archetype="/Script/Engine.StaticMeshActor'/Script/Engine.Default__StaticMeshActor'" ExportPath="/Script/Engine.StaticMeshActor'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_32'" Begin Object Class=/Script/Engine.StaticMeshComponent Name="StaticMeshComponent0" Archetype="/Script/Engine.StaticMeshComponent'/Script/Engine.Default__StaticMeshActor:StaticMeshComponent0'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_32.StaticMeshComponent0'" End Object Begin Object Name="StaticMeshComponent0" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_32.StaticMeshComponent0'" StaticMesh="/Script/Engine.StaticMesh'/Game/LevelPrototyping/Meshes/SM_Cube.SM_Cube'" StaticMeshImportVersion=1 StaticMeshDerivedDataKey="STATICMESH_FD1BFC73B5510AD60DFC65F62C1E933E_228332BAE0224DD294E232B87D83948FQuadricMeshReduction_V2$2e1_6D3AF6A2$2d5FD0$2d469B$2dB0D8$2dB6D9979EE5D2_CONSTRAINED0_100100000000000000000000000100000000000080FFFFFFFFFFFFFFFFFFFFFFFF000000000000803F00000000000000803F0000803F00000000000000003D19FC1626C9B248DECA64C7201D34D790CF7B09D3C0873700000000010000000100000000000000010000000100000000000000000000000100000001000000400000000000000001000000000000000000F03F000000000000F03F000000000000F03F0000803F00000000050000004E6F6E65000C00000030000000803FFFFFFFFF0000803FFFFFFFFF0000000000000041000000000000A0420303030000000000000000_RT00_0" RelativeLocation=(X=-5940.000136,Y=1669.999995,Z=-400.499900)Unreal エディタで、ビューポートで [Edit (編集)] > [Paste (貼り付け) または Ctrl + V キーの順にクリックします。
プラットフォーム
パズルのリセットとして機能した物理キューブを追加したのと同じように、プレイヤーを部屋の開始位置まで持ち上げるプラットフォームを追加しました。 Active 変数を使用することで、このリセット プラットフォームはランタイム時にアクティブになります。
障害物をレベルにコピーするには、次の手順に従います。
[Copy Full Snippet (完全なスニペットをコピー)] をクリックして、以下のスニペットをコピーします。
Command LineコマンドラインスニペットBegin Map Begin Level Begin Actor Class=/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C Name=BP_MovingPlatform_C_16 Archetype="/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C'/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.Default__BP_Platform_C'" ExportPath="/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16'" Begin Object Class=/Script/Engine.SceneComponent Name="DefaultSceneRoot" Archetype="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C:DefaultSceneRoot_GEN_VARIABLE'" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.DefaultSceneRoot'" End Object Begin Object Class=/Script/Engine.StaticMeshComponent Name="Platform" Archetype="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Blueprints/Platforms/BP_Platform.BP_Platform_C:Platform_GEN_VARIABLE'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.Platform'" End Object Begin Object Class=/Script/Engine.TimelineComponent Name="TM_MovePlatform" ExportPath="/Script/Engine.TimelineComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.TM_MovePlatform'" End Object Begin Object Name="DefaultSceneRoot" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_MovingPlatform_C_16.DefaultSceneRoot'"Unreal エディタで、ビューポートで [Edit (編集)] > [Paste (貼り付け) または Ctrl + V キーの順にクリックします。
対応するターゲット ポイントにプラットフォームを接続します。
BP_Platform1は TargetPoint1 を参照BP_Platform2は TargetPoint2 を参照BP_Platform3は TargetPoint3 を参照BP_Platform4は TargetPoint4 を参照BP_Platform5は TargetPoint5 を参照
スイッチ
InteractObjectList 配列を使用して、いくつかのスイッチを複数のプラットフォームに接続しています。 そうすることで、パズルを簡潔にやりがいがあり、プレイヤーを退屈させたり、ストレスを感じさせるような追加のステップを避けることができました。
障害物をレベルにコピーするには、次の手順に従います。
[Copy Full Snippet (完全なスニペットをコピー)] をクリックして、以下のスニペットをコピーします。
Command LineコマンドラインスニペットBegin Map Begin Level Begin Actor Class=/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C Name=BP_ActivationPlate_C_9 Archetype="/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.Default__BP_Switch_C'" ExportPath="/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9'" Begin Object Class=/Script/Engine.SceneComponent Name="DefaultSceneRoot" Archetype="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C:DefaultSceneRoot_GEN_VARIABLE'" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.DefaultSceneRoot'" End Object Begin Object Class=/Script/Engine.StaticMeshComponent Name="Switch" Archetype="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C:Switch_GEN_VARIABLE'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.Switch'" End Object Begin Object Class=/Script/Engine.BoxComponent Name="Trigger" Archetype="/Script/Engine.BoxComponent'/Game/AdventureGame/Designer/Blueprints/Activation/BP_Switch.BP_Switch_C:Trigger_GEN_VARIABLE'" ExportPath="/Script/Engine.BoxComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.Trigger'" End Object Begin Object Name="DefaultSceneRoot" ExportPath="/Script/Engine.SceneComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.BP_ActivationPlate_C_9.DefaultSceneRoot'"Unreal エディタで、ビューポートで [Edit (編集)] > [Paste (貼り付け) または Ctrl + V キーの順にクリックします。
各スイッチを適切なプラットフォームに接続します。
BP_Switch1はBP_Platform1を参照しています。BP_Switch2はBP_Platform2とBP_Platform 3を参照しています。BP_Switch3はBP_Platform5を参照しています。
次に、レベルをテストして、適切に動作していることを確認し、パズルにクリアできるかどうかを確認します。 自分の作業内容を、このチュートリアル シリーズの最後に提供する完了レベルと照合できます。