このチュートリアルでは、プレイヤーがスイッチの上に立つと、レベルに新しいキューブをスポーンするブループリントを作成する方法を学習します。 このゲームプレイ オブジェクトを使用することで、キューブが失われたり破壊されたりする可能性のあるパズル ルームで、プレイヤーが新しいキューブを取得できるようにします。
キューブ スポナーでは、スポーン機能のみを含むブループリントを作成することで、ジオメトリやアート アセットのピースを使用して、そのジオメトリから落ちるキューブのエフェクトを作成できる柔軟性が得られます。
サンプル レベルに沿って作業を進めている場合、このブループリントの作成は必須ではありませんが、パズル アドベンチャー ゲームの拡張を続ける場合は、このキューブ再生成メカニズムをプロジェクトに含めることをお勧めします。
開始する前に
「パズル アドベンチャーの設計」チュートリアル シリーズの前のセクションで取り上げられた、次のトピックはすでに理解できているはずです。
ブループリント インターフェース、カスタム イベント、変数を含むブループリントの基礎。
パズル:スイッチとキューブで作成した以下のアセットが必要になります。
BP_CubeブループリントBP_SwitchブループリントBPI Interactionブループリント インターフェース
新規ブループリントを作成
まず、キューブ スポナー用の新しいブループリント アセットを作成します。 このブループリントは、BPI_Interaction ブループリント インターフェースを実装し、そのインターフェースでイベントを使用する BP_Switch に応答できるようにします。
新しいブループリントを設定するには、次の手順を実行します。
コンテンツ ブラウザで、[Content (コンテンツ)] > [Adventure Game (アドベンチャー ゲーム)] > [Designer (デザイナー)] > [Blueprints (ブループリント)] > [Activation (アクティベーション)] フォルダーに移動します。
右クリックし、Blueprint Class を選択します。 クラス選択ウィンドウで [Actor (アクタ)] クラスを選択します。
このブループリントに
BP_CubeSpawnという名前を付けて開きます。ブループリント エディタで、EventGraph タブに移動します。
ブループリント エディタの上部で、[Class Settings (クラス設定)] ボタンをクリックします。
[Details (詳細)] パネルの [Interfaces (インターフェース)] セクションで、[Implemented Interfaces (実装済みインターフェース)] の横にある [Add (追加)] ドロップダウンをクリックし、[BPI Interaction (BPI インタラクション)] を選択します。
[Compile (コンパイル)]、[Save (保存)] の順にクリックします。
BPI_Interaction インターフェースを追加すると、[My Blueprint (マイ ブループリント)] パネルに「Interfaces」という名前の新しいセクションが作成されます。 このセクションには、BPI インタラクション インターフェースの一部である fnBPISwitchOff イベントと fnBPISwitchOn イベントが含まれています。
BP_CubeSpawn では、fnBPISwitchOn イベントを使用して、プレイヤーがスイッチをオンにして、このイベントをトリガーしたときにどうなるかを定義します。
キューブ スポーン ロジックをビルドする
キューブ スポーン ロジックを実装する前に、キューブ スポーン システムがどのように機能するかを検討します。
キューブをスポーンするには、プレイヤーが、前のセクションで追加したインターフェースを使用するスイッチを有効にする必要があります。
エリアがキューブで埋まらないように、プレイヤーがスポーンできるキューブの最大数が必要です。
プレイヤーが最大数を超えるキューブをスポーンしようとした場合は、最初にスポーンしたキューブを破壊します。 スポーンされたキューブを配列変数で追跡します。
キューブ スポナーは、プレイヤーが新しいキューブを速くスポーンしすぎないように、短いクールダウン タイマーを使用する必要があります。
キューブ スポーン 条件を確認する
キューブ スポナーのイベント グラフを開始するには、まず、新しいキューブをスポーンできるかどうか、およびプレイヤーが最大数のキューブを作成したかどうかを確認します。
新しいキューブがスポーンできるかどうかを確認するには、次の手順に従ってください。
[My Blueprint (マイ ブループリント)] パネルの [Interfaces (インターフェース)] カテゴリで、fnBPISwitchOn インターフェースをダブルクリックして、それをグラフに追加します。
fnBPISwitchOn ノードの Exec ピンからドラッグして、Branch ノードを追加します。
Branch ノードで、[Condition (条件)] ピンをドラッグして、[Promote to variable (変数へ昇格)] を選択し、この変数に
「CanSpawn」という名前を付けます。 この変数を使用して、クールダウンが経過したかどうかを確認します。[My Blueprint (マイ ブループリント)]パネルでタイプ Integerの
「CubesSpawned」という名前の新規変数を作成します。 これにより、レベル内にスポーンされたキューブが追跡されます。変数をもう 1 つ作成し、「
MaxNumCubes」という名前を付けます。 この変数は、プレイヤーがスポーンできるキューブの最大数を設定します。MaxNumCubes を設定します。
その型を [Integer (整数)] に設定します。
その目のアイコンをクリックして、公開し、編集可能にします。
[Details (詳細)] パネルで、[Category (カテゴリ)] フィールドをクリックし、「
Setup」と入力します。[Compile (コンパイル)] をクリックし、変数の [Default Value (デフォルト値)] を
3に設定しますこの時点で、変数リストは次のようになっているはずです。
Branch ノードの True ピンからドラッグし、2 つ目の Branch ノードを追加します。
2 つ目の Branch ノードから Condition ピンをドラッグし、Less Than (<) ノードを追加します。
Less Than ノードを設定し、スポーンされたキューブの数が許容されるキューブの最大数より少ないかどうかを確認します。
[Variables (変数)] リストから、CubesSpawned を Less Than ノードの上部の入力ピンにドラッグします。
MaxNumCubes 変数を下の入力ピンにドラッグします。
Count Spawned Cubes と Destroy Extra Cubes
プレイヤーがスポーンした現在のキューブ数が最大数未満の場合、2 番目の Branch ノードの True ピンに実行が移ります。 この場合、キューブをスポーンする前にキューブ数に 1 を加えるロジックまで直接スキップできます。
スポーンされるキューブの数を増やすには、次の手順に従ってください。
2 つ目の Branch ノードから True ピンをドラッグし、Increment Int ノードを追加します。 新しいノードを移動して、Branch ノードとの間に余分な空白を追加します。
[Variables (変数)] リストから、CubesSpawned を Increment Int ノードの入力ピンにドラッグします。
次に、逆のシナリオのロジックを追加します。逆のシナリオとは、Cubes Spawned の値が Max Num Cubes の値を超える場合、または実行が Branch の False ピンを通過するシナリオです。プレイヤーが最大キューブ数に達した場合、新しいキューブをスポーンする前に最も古いキューブを破棄します。
キューブを破棄して新しいキューブのための余地を確保するには、次の手順に従ってください。
2 つ目の Branch ノードから False ピンをドラッグし、Destroy Actor ノードを追加します。
Destroy Actor ノードから Target ピンをドラッグし、Get (a copy) ノードを追加します。
配列のリストは 0 から始まり、最初の要素を取得したいため、Get ノードの 2 つ目の入力ピンは 0 に設定したままにします。
Get ノードから Array 入力ノードをドラッグし、[Promote to variable (変数へ昇格)] を選択します。
新しい変数を
SpawnedCubesという名前にします。 この配列を使用して、プレイヤーがレベルにスポーンするすべてのキューブを保存します。Destroy Actor ノードから exec ピンをドラッグし、Remove Index ノードを追加します。
その Array 入力をドラッグして、Get Spawned Cubes 参照ノードを追加します。
2 つ目の Branch ノードと Increment Int ノードの間のワイヤーをダブルクリックして、移動可能な reroute ノードを作成します。 reroute ノードを Increment Int ノードの近くにドラッグします。
Remove Index ノードの出力 exec ピンを reroute ノードに接続します。
(Remove Index ノードを Increment Int ノードに直接接続することもできます。)
次に、キューブがスポーンする前に、ブループリントが CubesSpawned カウンターをインクリメントするか、キューブを削除して CubesSpawned カウンターをインクリメントします。 次に、新しいキューブをスポーンするロジックを追加します。
キューブをスポーンする
プレイヤーがキューブを作成できるかどうかを確認し、レベルにあるキューブが多すぎないことを確認できたので、新しい BP_Cube アクタをスポーンできます。
新しいキューブをスポーンするには、次の手順に従ってください。
Add ノードの Exec ピンからドラッグして、Spawn Actor from Class ノードを追加します。
SpawnActor ノードを設定します。
新しい Class ピンの横にあるドロップダウン メニューを使用して、
BP_Cubeを検索し、選択します。 ノードの名前が SpawnActor NONE から SpawnActor BP Cube に変更されます。オレンジの Spawn Transform ピンを右クリックし、[Split Struct Pin (構造体ピンを分割)] を選択します。 Spawn Transform ピンが、Spawn Transform Location、Spawn Transform Rotation、Spawn Transform Scale という 3 つの新しいピンに置き換わります。
ノード全体ではなく、円形の Spawn Transform (スポーン トランスフォーム) ピンを特定して右クリックする必要があります。
イベント グラフで右クリックし、Get Actor Transform ノードを検索して選択します。 Return Value ピンを右クリックし、[Split Struct (構造体を分割)] を選択します。 Location ピンと Rotation ピンを Spawn Actor ノード内の対応するピンに接続します。
SpawnActor ノードの exec ピンをドラッグし、[Array (配列)] カテゴリの下に Add ノードを追加します (「
[Add Array (配列を追加)]」を検索し、Add ノードを選択することもできます)。[Add Array (配列を追加)] ノードで、次の手順を実行します。
その Array 入力ピンをドラッグして、Get Spawned Cubes ノードを追加します。
ノードの下部入力ピンを SpawnActor ノードの Return Value ピンに接続します。
プレイヤーがキューブをスポーンした場合、クールダウン タイマーが終了するまで再びスポーンできないようにする必要があります。 Add Array ノードの exec ピンをドラッグし、Set Can Spawn ノードを追加します。 [Can Spawn (スポーン可)] は False に設定したままにします (チェックマークは付けない)。
クールダウン タイマーを実装する
CanSpawn 変数と Delay ノードを使用して、設定された時間が経過するまでプレイヤーが別のキューブをスポーンできないようにします。
キューブスポーン クールダウン タイマーをリセットするイベントを作成してトリガーするには、次の手順に従ってください。
EventGraph の空いている場所を右クリックし、[Add Custom Event (カスタム イベントを追加)] を検索して選択します。
新しいイベントに
EvResetSpawnという名前を付け、Event fnBPISwirchOn ノードの下に移動します。EvResetSpawn イベント ノードのexec ピンをドラッグし、Delay ノードを追加します。
Delay ノードで、Duration ピンをドラッグし、[Promote to Variable (変数へ昇格)] を選択します。 変数に
SpawnCooldownという名前を付けます。新しい SpawnCooldown 変数を設定します。
型が Float であることを確認します。
その目のアイコンをクリックして、公開し、編集可能にします。
そのカテゴリを [Setup (設定)] に変更します。
[Compile (コンパイル)] をクリックし、デフォルト値を
1に設定します。 完成した変数のリストは次のようになります。
Delay ノードから Completed ピンをドラッグし、Set Can Spawn ノードを追加します。 必ず、このノードの [Can Spawn (スポーン可能)] 値をオンに設定してください。
キューブをスポーンするロジックの最後にある Set Can Spawn ノードに戻ります。 Set Can Spawn ノードの exec ピンをドラッグし、EvResetSpawn ノードを追加して、イベントとスポーンのクールダウン遅延をトリガーします。
[Save (保存)] と [Compile (コンパイル)] をクリックします。
EventGraph は次のようになります。
以下のスニペットを使用する場合、ブループリントに上記の手順で言及されたカスタム変数、イベント、および BP インターフェースが含まれていることを確認してください。
これらのノードをブループリントにコピーするには、[Copy Snippet (スニペットをコピー)] をクリックし、イベント グラフに移動し、Ctrl + V キーを押します。 ブループリント エディタにロジックをコピーした後、青い Ev Reset Spawn ノードを削除し、Set Can Spawn ノードの後に手動で追加し直す必要がある場合があります。
これで、ブループリント エディタを終了して、レベル エディタに戻れる状態になりました。
Cube Spawn ブループリントをレベルに追加します。
次に、BP_CubeSpawn と BP_Switch をレベルに設定します。
キューブスポナー ブループリントにはビジュアル コンポーネントがないため、任意のジオメトリやアート アセット内に配置して、そのジオメトリからキューブが落下するエフェクトを作成できます。
レベル内の位置を選択し、[Content (コンテンツ)] > LevelPrototyping > [Meshes (メッシュ)] フォルダ内のメッシュを使用して、キューブ スポナーを表現するためにジオメトリをブロックアウトします。
サンプル レベルを使用している場合は、ルーム 1 の後ろの空間に配置します。 この例では、シリンダーを使用して、中でキューブがスポーンし、外に落下するパイプを表現します。
次に、レベル内に BP_CubeSpawn を設定するには、次の手順に従ってください。
コンテンツ ブラウザで、[Content (コンテンツ)] > [Adventure Game (アドベンチャー ゲーム)] > [Designer (デザイナー)] > [Blueprints (ブループリント)] > [Activation (アクティベーション)] フォルダに移動します。
BP_CubeSpawnブループリントをレベル内の適切な位置にドラッグします。コンテンツ ブラウザから、
BP_Switchブループリントをレベル内のキューブ スポナーの視界内にドラッグします。レベルで
BP_Switchアクタを選択します。[Details (詳細)] パネルの [Setup (設定)] セクションで、[Interact Object List (インタラクト オブジェクト リスト)] に新しい配列要素を追加します。
インデックス [0] の横にあるドロップダウンを使用して、
BP_CubeSpawnアクタを選択します。 これは、このスイッチからBP_CubeSpawnアクタに fnBPISwitchOn イベントを渡します。BP_CubeSpawnアクタを選択します。 オプションで、Max Cubes Allowed 変数を、レベル内で許可するキューブの数に変更します。
これで、ゲームをプレイ中、スイッチを踏むと新しいキューブがスポーンするようになりました。
次の内容
マテリアル、ライティング、ポストプロセス エフェクト、サウンド、ビジュアル エフェクトを追加してレベルの作業を続けるには、アーティスト トラック チュートリアル シリーズ」をお試しください。
プロジェクトをテストおよび共有用のスタンドアローン プログラムとしてパッケージ化することに関心がある場合は、次のドキュメントを参照してください。